Replace ->can_dlc with ->len
[elmcan.git] / module / elmcan.c
1 // SPDX-License-Identifier: GPL-2.0
2 /* ELM327 based CAN interface driver (tty line discipline)
3  *
4  * This driver started as a derivative of linux/drivers/net/can/slcan.c
5  * and my thanks go to the original authors for their inspiration, even
6  * after almost none of their code is left.
7  */
8
9 #define pr_fmt(fmt) "[elmcan] " fmt
10
11 #include <linux/init.h>
12 #include <linux/module.h>
13 #include <linux/moduleparam.h>
14
15 #include <linux/atomic.h>
16 #include <linux/bitops.h>
17 #include <linux/ctype.h>
18 #include <linux/delay.h>
19 #include <linux/errno.h>
20 #include <linux/if_ether.h>
21 #include <linux/kernel.h>
22 #include <linux/list.h>
23 #include <linux/netdevice.h>
24 #include <linux/skbuff.h>
25 #include <linux/spinlock.h>
26 #include <linux/string.h>
27 #include <linux/tty.h>
28 #include <linux/tty_ldisc.h>
29 #include <linux/version.h>
30 #include <linux/workqueue.h>
31
32 #include <uapi/linux/tty.h>
33
34 #include <linux/can.h>
35 #include <linux/can/dev.h>
36 #include <linux/can/error.h>
37 #include <linux/can/led.h>
38 #include <linux/can/rx-offload.h>
39
40 MODULE_ALIAS_LDISC(N_DEVELOPMENT);
41 MODULE_DESCRIPTION("ELM327 based CAN interface");
42 MODULE_LICENSE("GPL");
43 MODULE_AUTHOR("Max Staudt <max-linux@enpas.org>");
44
45 /* Line discipline ID number.
46  * N_DEVELOPMENT will likely be defined from Linux 5.18 onwards:
47  * https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git/commit/?h=tty-next&id=c2faf737abfb10f88f2d2612d573e9edc3c42c37
48  */
49 #ifndef N_DEVELOPMENT
50 #define N_DEVELOPMENT 29
51 #endif
52
53 /* Compatibility for Linux < 5.11 */
54 #if LINUX_VERSION_CODE < KERNEL_VERSION(5,11,0)
55 #define len can_dlc
56 #endif
57
58 #define ELM327_NAPI_WEIGHT 4
59
60 #define ELM327_SIZE_RXBUF 256
61 #define ELM327_SIZE_TXBUF 32
62
63 #define ELM327_CAN_CONFIG_SEND_SFF           0x8000
64 #define ELM327_CAN_CONFIG_VARIABLE_DLC       0x4000
65 #define ELM327_CAN_CONFIG_RECV_BOTH_SFF_EFF  0x2000
66 #define ELM327_CAN_CONFIG_BAUDRATE_MULT_8_7  0x1000
67
68 #define ELM327_DUMMY_CHAR 'y'
69 #define ELM327_DUMMY_STRING "y"
70 #define ELM327_READY_CHAR '>'
71
72 /* Bits in elm->cmds_todo */
73 enum ELM327_TX_DO_BITS {
74         ELM327_TX_DO_CAN_DATA = 0,
75         ELM327_TX_DO_CANID_11BIT,
76         ELM327_TX_DO_CANID_29BIT_LOW,
77         ELM327_TX_DO_CANID_29BIT_HIGH,
78         ELM327_TX_DO_CAN_CONFIG_PART2,
79         ELM327_TX_DO_CAN_CONFIG,
80         ELM327_TX_DO_RESPONSES,
81         ELM327_TX_DO_SILENT_MONITOR,
82         ELM327_TX_DO_INIT
83 };
84
85 struct elmcan {
86         /* This must be the first member when using alloc_candev() */
87         struct can_priv can;
88
89         struct can_rx_offload offload;
90
91         /* TTY and netdev devices that we're bridging */
92         struct tty_struct       *tty;
93         struct net_device       *dev;
94
95         /* Per-channel lock */
96         spinlock_t              lock;
97
98         /* Keep track of how many things are using this struct.
99          * Once it reaches 0, we are in the process of cleaning up,
100          * and new operations will be cancelled immediately.
101          * Use atomic_t rather than refcount_t because we deliberately
102          * decrement to 0, and refcount_dec() spills a WARN_ONCE in
103          * that case.
104          */
105         atomic_t                refcount;
106
107         /* Stop the channel on hardware failure.
108          * Once this is true, nothing will be sent to the TTY.
109          */
110         bool                    hw_failure;
111
112         /* TTY TX helpers */
113         struct work_struct      tx_work;        /* Flushes TTY TX buffer   */
114         unsigned char           *txbuf;
115         unsigned char           *txhead;        /* Pointer to next TX byte */
116         int                     txleft;         /* Bytes left to TX */
117
118         /* TTY RX helpers */
119         unsigned char rxbuf[ELM327_SIZE_RXBUF];
120         int rxfill;
121
122         /* State machine */
123         enum {
124                 ELM_NOTINIT = 0,
125                 ELM_GETDUMMYCHAR,
126                 ELM_GETPROMPT,
127                 ELM_RECEIVING,
128         } state;
129
130         int drop_next_line;
131
132         /* The CAN frame and config the ELM327 is sending/using,
133          * or will send/use after finishing all cmds_todo
134          */
135         struct can_frame can_frame_to_send;
136         unsigned short can_config;
137         unsigned long can_bitrate;
138         unsigned char can_bitrate_divisor;
139         int silent_monitoring;
140
141         /* Things we have yet to send */
142         char **next_init_cmd;
143         unsigned long cmds_todo;
144 };
145
146 /* A lock for all tty->disc_data handled by this ldisc.
147  * This is to prevent a case where tty->disc_data is set to NULL,
148  * yet someone is still trying to dereference it.
149  * Without this, we cannot do a clean shutdown.
150  */
151 static DEFINE_SPINLOCK(elmcan_discdata_lock);
152
153 static inline void elm327_hw_failure(struct elmcan *elm);
154
155 /* Assumes elm->lock taken. */
156 static void elm327_send(struct elmcan *elm, const void *buf, size_t len)
157 {
158         int actual;
159
160         if (elm->hw_failure)
161                 return;
162
163         memcpy(elm->txbuf, buf, len);
164
165         /* Order of next two lines is *very* important.
166          * When we are sending a little amount of data,
167          * the transfer may be completed inside the ops->write()
168          * routine, because it's running with interrupts enabled.
169          * In this case we *never* got WRITE_WAKEUP event,
170          * if we did not request it before write operation.
171          *       14 Oct 1994  Dmitry Gorodchanin.
172          */
173         set_bit(TTY_DO_WRITE_WAKEUP, &elm->tty->flags);
174         actual = elm->tty->ops->write(elm->tty, elm->txbuf, len);
175         if (actual < 0) {
176                 netdev_err(elm->dev,
177                            "Failed to write to tty %s.\n",
178                            elm->tty->name);
179                 elm327_hw_failure(elm);
180                 return;
181         }
182
183         elm->txleft = len - actual;
184         elm->txhead = elm->txbuf + actual;
185 }
186
187 /* Take the ELM327 out of almost any state and back into command mode.
188  * We send ELM327_DUMMY_CHAR which will either abort any running
189  * operation, or be echoed back to us in case we're already in command
190  * mode.
191  *
192  * Assumes elm->lock taken.
193  */
194 static void elm327_kick_into_cmd_mode(struct elmcan *elm)
195 {
196         if (elm->state != ELM_GETDUMMYCHAR && elm->state != ELM_GETPROMPT) {
197                 elm327_send(elm, ELM327_DUMMY_STRING, 1);
198
199                 elm->state = ELM_GETDUMMYCHAR;
200         }
201 }
202
203 /* Schedule a CAN frame and necessary config changes to be sent to the TTY.
204  *
205  * Assumes elm->lock taken.
206  */
207 static void elm327_send_frame(struct elmcan *elm, struct can_frame *frame)
208 {
209         /* Schedule any necessary changes in ELM327's CAN configuration */
210         if (elm->can_frame_to_send.can_id != frame->can_id) {
211                 /* Set the new CAN ID for transmission. */
212                 if ((frame->can_id & CAN_EFF_FLAG)
213                     ^ (elm->can_frame_to_send.can_id & CAN_EFF_FLAG)) {
214                         elm->can_config = (frame->can_id & CAN_EFF_FLAG
215                                                 ? 0
216                                                 : ELM327_CAN_CONFIG_SEND_SFF)
217                                         | ELM327_CAN_CONFIG_VARIABLE_DLC
218                                         | ELM327_CAN_CONFIG_RECV_BOTH_SFF_EFF
219                                         | elm->can_bitrate_divisor;
220
221                         set_bit(ELM327_TX_DO_CAN_CONFIG, &elm->cmds_todo);
222                 }
223
224                 if (frame->can_id & CAN_EFF_FLAG) {
225                         clear_bit(ELM327_TX_DO_CANID_11BIT, &elm->cmds_todo);
226                         set_bit(ELM327_TX_DO_CANID_29BIT_LOW, &elm->cmds_todo);
227                         set_bit(ELM327_TX_DO_CANID_29BIT_HIGH, &elm->cmds_todo);
228                 } else {
229                         set_bit(ELM327_TX_DO_CANID_11BIT, &elm->cmds_todo);
230                         clear_bit(ELM327_TX_DO_CANID_29BIT_LOW, &elm->cmds_todo);
231                         clear_bit(ELM327_TX_DO_CANID_29BIT_HIGH, &elm->cmds_todo);
232                 }
233         }
234
235         /* Schedule the CAN frame itself. */
236         elm->can_frame_to_send = *frame;
237         set_bit(ELM327_TX_DO_CAN_DATA, &elm->cmds_todo);
238
239         elm327_kick_into_cmd_mode(elm);
240 }
241
242 /* ELM327 initialization sequence.
243  *
244  * Assumes elm->lock taken.
245  */
246 static char *elm327_init_script[] = {
247         "AT WS\r",        /* v1.0: Warm Start */
248         "AT PP FF OFF\r", /* v1.0: All Programmable Parameters Off */
249         "AT M0\r",        /* v1.0: Memory Off */
250         "AT AL\r",        /* v1.0: Allow Long messages */
251         "AT BI\r",        /* v1.0: Bypass Initialization */
252         "AT CAF0\r",      /* v1.0: CAN Auto Formatting Off */
253         "AT CFC0\r",      /* v1.0: CAN Flow Control Off */
254         "AT CF 000\r",    /* v1.0: Reset CAN ID Filter */
255         "AT CM 000\r",    /* v1.0: Reset CAN ID Mask */
256         "AT E1\r",        /* v1.0: Echo On */
257         "AT H1\r",        /* v1.0: Headers On */
258         "AT L0\r",        /* v1.0: Linefeeds Off */
259         "AT SH 7DF\r",    /* v1.0: Set CAN sending ID to 0x7df */
260         "AT ST FF\r",     /* v1.0: Set maximum Timeout for response after TX */
261         "AT AT0\r",       /* v1.2: Adaptive Timing Off */
262         "AT D1\r",        /* v1.3: Print DLC On */
263         "AT S1\r",        /* v1.3: Spaces On */
264         "AT TP B\r",      /* v1.0: Try Protocol B */
265         NULL
266 };
267
268 static void elm327_init(struct elmcan *elm)
269 {
270         elm->state = ELM_NOTINIT;
271         elm->can_frame_to_send.can_id = 0x7df; /* ELM327 HW default */
272         elm->rxfill = 0;
273         elm->drop_next_line = 0;
274
275         /* We can only set the bitrate as a fraction of 500000.
276          * The bit timing constants in elmcan_bittiming_const will
277          * limit the user to the right values.
278          */
279         elm->can_bitrate_divisor = 500000 / elm->can.bittiming.bitrate;
280         elm->can_config = ELM327_CAN_CONFIG_SEND_SFF
281                         | ELM327_CAN_CONFIG_VARIABLE_DLC
282                         | ELM327_CAN_CONFIG_RECV_BOTH_SFF_EFF
283                         | elm->can_bitrate_divisor;
284
285         /* Configure ELM327 and then start monitoring */
286         elm->next_init_cmd = &elm327_init_script[0];
287         set_bit(ELM327_TX_DO_INIT, &elm->cmds_todo);
288         set_bit(ELM327_TX_DO_SILENT_MONITOR, &elm->cmds_todo);
289         set_bit(ELM327_TX_DO_RESPONSES, &elm->cmds_todo);
290         set_bit(ELM327_TX_DO_CAN_CONFIG, &elm->cmds_todo);
291
292         elm327_kick_into_cmd_mode(elm);
293 }
294
295 /* Assumes elm->lock taken. */
296 static void elm327_feed_frame_to_netdev(struct elmcan *elm,
297                                         struct sk_buff *skb)
298 {
299         if (!netif_running(elm->dev))
300                 return;
301
302         /* Queue for NAPI pickup.
303          * rx-offload will update stats and LEDs for us.
304          */
305         if (can_rx_offload_queue_tail(&elm->offload, skb))
306                 elm->dev->stats.rx_fifo_errors++;
307
308 #if LINUX_VERSION_CODE >= KERNEL_VERSION(5,15,0)
309         /* Wake NAPI */
310         can_rx_offload_irq_finish(&elm->offload);
311 #endif
312 }
313
314 /* Called when we're out of ideas and just want it all to end.
315  * Assumes elm->lock taken.
316  */
317 static inline void elm327_hw_failure(struct elmcan *elm)
318 {
319         struct can_frame *frame;
320         struct sk_buff *skb;
321
322         skb = alloc_can_err_skb(elm->dev, &frame);
323         if (!skb)
324                 return;
325
326         frame->data[5] = 'R';
327         frame->data[6] = 'I';
328         frame->data[7] = 'P';
329
330         elm327_feed_frame_to_netdev(elm, skb);
331
332         netdev_err(elm->dev, "ELM327 misbehaved. Blocking further communication.\n");
333
334         elm->hw_failure = true;
335         can_bus_off(elm->dev);
336 }
337
338 /* Compare a buffer to a fixed string */
339 static inline int _memstrcmp(const u8 *mem, const char *str)
340 {
341         return memcmp(mem, str, strlen(str));
342 }
343
344 /* Compare buffer to string length, then compare buffer to fixed string.
345  * This ensures two things:
346  *  - It flags cases where the fixed string is only the start of the
347  *    buffer, rather than exactly all of it.
348  *  - It avoids byte comparisons in case the length doesn't match.
349  */
350 static inline int _len_memstrcmp(const u8 *mem, size_t mem_len, const char *str)
351 {
352         size_t str_len = strlen(str);
353
354         return (mem_len != str_len) || memcmp(mem, str, str_len);
355 }
356
357 /* Assumes elm->lock taken. */
358 static void elm327_parse_error(struct elmcan *elm, size_t len)
359 {
360         struct can_frame *frame;
361         struct sk_buff *skb;
362
363         skb = alloc_can_err_skb(elm->dev, &frame);
364         if (!skb)
365                 /* It's okay to return here:
366                  * The outer parsing loop will drop this UART buffer.
367                  */
368                 return;
369
370         /* Filter possible error messages based on length of RX'd line */
371         if (!_len_memstrcmp(elm->rxbuf, len, "UNABLE TO CONNECT")) {
372                 netdev_err(elm->dev,
373                            "ELM327 reported UNABLE TO CONNECT. Please check your setup.\n");
374         } else if (!_len_memstrcmp(elm->rxbuf, len, "BUFFER FULL")) {
375                 /* This will only happen if the last data line was complete.
376                  * Otherwise, elm327_parse_frame() will heuristically
377                  * emit this kind of error frame instead.
378                  */
379                 frame->can_id |= CAN_ERR_CRTL;
380                 frame->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
381         } else if (!_len_memstrcmp(elm->rxbuf, len, "BUS ERROR")) {
382                 frame->can_id |= CAN_ERR_BUSERROR;
383         } else if (!_len_memstrcmp(elm->rxbuf, len, "CAN ERROR")) {
384                 frame->can_id |= CAN_ERR_PROT;
385         } else if (!_len_memstrcmp(elm->rxbuf, len, "<RX ERROR")) {
386                 frame->can_id |= CAN_ERR_PROT;
387         } else if (!_len_memstrcmp(elm->rxbuf, len, "BUS BUSY")) {
388                 frame->can_id |= CAN_ERR_PROT;
389                 frame->data[2] = CAN_ERR_PROT_OVERLOAD;
390         } else if (!_len_memstrcmp(elm->rxbuf, len, "FB ERROR")) {
391                 frame->can_id |= CAN_ERR_PROT;
392                 frame->data[2] = CAN_ERR_PROT_TX;
393         } else if (len == 5 && !_memstrcmp(elm->rxbuf, "ERR")) {
394                 /* ERR is followed by two digits, hence line length 5 */
395                 netdev_err(elm->dev, "ELM327 reported an ERR%c%c. Please power it off and on again.\n",
396                            elm->rxbuf[3], elm->rxbuf[4]);
397                 frame->can_id |= CAN_ERR_CRTL;
398         } else {
399                 /* Something else has happened.
400                  * Maybe garbage on the UART line.
401                  * Emit a generic error frame.
402                  */
403         }
404
405         elm327_feed_frame_to_netdev(elm, skb);
406 }
407
408 /* Parse CAN frames coming as ASCII from ELM327.
409  * They can be of various formats:
410  *
411  * 29-bit ID (EFF):  12 34 56 78 D PL PL PL PL PL PL PL PL
412  * 11-bit ID (!EFF): 123 D PL PL PL PL PL PL PL PL
413  *
414  * where D = DLC, PL = payload byte
415  *
416  * Instead of a payload, RTR indicates a remote request.
417  *
418  * We will use the spaces and line length to guess the format.
419  *
420  * Assumes elm->lock taken.
421  */
422 static int elm327_parse_frame(struct elmcan *elm, size_t len)
423 {
424         struct can_frame *frame;
425         struct sk_buff *skb;
426         int hexlen;
427         int datastart;
428         int i;
429
430         skb = alloc_can_skb(elm->dev, &frame);
431         if (!skb)
432                 return -ENOMEM;
433
434         /* Find first non-hex and non-space character:
435          *  - In the simplest case, there is none.
436          *  - For RTR frames, 'R' is the first non-hex character.
437          *  - An error message may replace the end of the data line.
438          */
439         for (hexlen = 0; hexlen <= len; hexlen++) {
440                 if (hex_to_bin(elm->rxbuf[hexlen]) < 0 &&
441                     elm->rxbuf[hexlen] != ' ') {
442                         break;
443                 }
444         }
445
446         /* Sanity check whether the line is really a clean hexdump,
447          * or terminated by an error message, or contains garbage.
448          */
449         if (hexlen < len &&
450             !isdigit(elm->rxbuf[hexlen]) &&
451             !isupper(elm->rxbuf[hexlen]) &&
452             '<' != elm->rxbuf[hexlen] &&
453             ' ' != elm->rxbuf[hexlen]) {
454                 /* The line is likely garbled anyway, so bail.
455                  * The main code will restart listening.
456                  */
457                 return -ENODATA;
458         }
459
460         /* Use spaces in CAN ID to distinguish 29 or 11 bit address length.
461          * No out-of-bounds access:
462          * We use the fact that we can always read from elm->rxbuf.
463          */
464         if (elm->rxbuf[2] == ' ' && elm->rxbuf[5] == ' ' &&
465             elm->rxbuf[8] == ' ' && elm->rxbuf[11] == ' ' &&
466             elm->rxbuf[13] == ' ') {
467                 frame->can_id = CAN_EFF_FLAG;
468                 datastart = 14;
469         } else if (elm->rxbuf[3] == ' ' && elm->rxbuf[5] == ' ') {
470                 frame->can_id = 0;
471                 datastart = 6;
472         } else {
473                 /* This is not a well-formatted data line.
474                  * Assume it's an error message.
475                  */
476                 return -ENODATA;
477         }
478
479         if (hexlen < datastart) {
480                 /* The line is too short to be a valid frame hex dump.
481                  * Something interrupted the hex dump or it is invalid.
482                  */
483                 return -ENODATA;
484         }
485
486         /* From here on all chars up to buf[hexlen] are hex or spaces,
487          * at well-defined offsets.
488          */
489
490         /* Read CAN data length */
491         frame->len = (hex_to_bin(elm->rxbuf[datastart - 2]) << 0);
492
493         /* Read CAN ID */
494         if (frame->can_id & CAN_EFF_FLAG) {
495                 frame->can_id |= (hex_to_bin(elm->rxbuf[0]) << 28)
496                                | (hex_to_bin(elm->rxbuf[1]) << 24)
497                                | (hex_to_bin(elm->rxbuf[3]) << 20)
498                                | (hex_to_bin(elm->rxbuf[4]) << 16)
499                                | (hex_to_bin(elm->rxbuf[6]) << 12)
500                                | (hex_to_bin(elm->rxbuf[7]) << 8)
501                                | (hex_to_bin(elm->rxbuf[9]) << 4)
502                                | (hex_to_bin(elm->rxbuf[10]) << 0);
503         } else {
504                 frame->can_id |= (hex_to_bin(elm->rxbuf[0]) << 8)
505                                | (hex_to_bin(elm->rxbuf[1]) << 4)
506                                | (hex_to_bin(elm->rxbuf[2]) << 0);
507         }
508
509         /* Check for RTR frame */
510         if (elm->rxfill >= hexlen + 3 &&
511             !_memstrcmp(&elm->rxbuf[hexlen], "RTR")) {
512                 frame->can_id |= CAN_RTR_FLAG;
513         }
514
515         /* Is the line long enough to hold the advertised payload?
516          * Note: RTR frames have a DLC, but no actual payload.
517          */
518         if (!(frame->can_id & CAN_RTR_FLAG) &&
519             (hexlen < frame->len * 3 + datastart)) {
520                 /* Incomplete frame.
521                  * Probably the ELM327's RS232 TX buffer was full.
522                  * Emit an error frame and exit.
523                  */
524                 frame->can_id = CAN_ERR_FLAG | CAN_ERR_CRTL;
525                 frame->len = CAN_ERR_DLC;
526                 frame->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
527                 elm327_feed_frame_to_netdev(elm, skb);
528
529                 /* Signal failure to parse.
530                  * The line will be re-parsed as an error line, which will fail.
531                  * However, this will correctly drop the state machine back into
532                  * command mode.
533                  */
534                 return -ENODATA;
535         }
536
537         /* Parse the data nibbles. */
538         for (i = 0; i < frame->len; i++) {
539                 frame->data[i] = (hex_to_bin(elm->rxbuf[datastart + 3*i]) << 4)
540                                | (hex_to_bin(elm->rxbuf[datastart + 3*i + 1]));
541         }
542
543         /* Feed the frame to the network layer. */
544         elm327_feed_frame_to_netdev(elm, skb);
545
546         return 0;
547 }
548
549 /* Assumes elm->lock taken. */
550 static void elm327_parse_line(struct elmcan *elm, size_t len)
551 {
552         /* Skip empty lines */
553         if (!len)
554                 return;
555
556         /* Skip echo lines */
557         if (elm->drop_next_line) {
558                 elm->drop_next_line = 0;
559                 return;
560         } else if (!_memstrcmp(elm->rxbuf, "AT")) {
561                 return;
562         }
563
564         /* Regular parsing */
565         switch (elm->state) {
566         case ELM_RECEIVING:
567                 if (elm327_parse_frame(elm, len)) {
568                         /* Parse an error line. */
569                         elm327_parse_error(elm, len);
570
571                         /* Start afresh. */
572                         elm327_kick_into_cmd_mode(elm);
573                 }
574                 break;
575         default:
576                 break;
577         }
578 }
579
580 /* Assumes elm->lock taken. */
581 static void elm327_handle_prompt(struct elmcan *elm)
582 {
583         struct can_frame *frame = &elm->can_frame_to_send;
584         char local_txbuf[20];
585
586         if (!elm->cmds_todo) {
587                 /* Enter CAN monitor mode */
588                 elm327_send(elm, "ATMA\r", 5);
589                 elm->state = ELM_RECEIVING;
590
591                 return;
592         }
593
594         /* Reconfigure ELM327 step by step as indicated by elm->cmds_todo */
595         if (test_bit(ELM327_TX_DO_INIT, &elm->cmds_todo)) {
596                 strcpy(local_txbuf, *elm->next_init_cmd);
597
598                 elm->next_init_cmd++;
599                 if (!(*elm->next_init_cmd)) {
600                         clear_bit(ELM327_TX_DO_INIT, &elm->cmds_todo);
601                         /* Init finished. */
602                 }
603
604         } else if (test_and_clear_bit(ELM327_TX_DO_SILENT_MONITOR, &elm->cmds_todo)) {
605                 sprintf(local_txbuf, "ATCSM%i\r",
606                         !(!(elm->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)));
607
608         } else if (test_and_clear_bit(ELM327_TX_DO_RESPONSES, &elm->cmds_todo)) {
609                 sprintf(local_txbuf, "ATR%i\r",
610                         !(elm->can.ctrlmode & CAN_CTRLMODE_LISTENONLY));
611
612         } else if (test_and_clear_bit(ELM327_TX_DO_CAN_CONFIG, &elm->cmds_todo)) {
613                 sprintf(local_txbuf, "ATPC\r");
614                 set_bit(ELM327_TX_DO_CAN_CONFIG_PART2, &elm->cmds_todo);
615
616         } else if (test_and_clear_bit(ELM327_TX_DO_CAN_CONFIG_PART2, &elm->cmds_todo)) {
617                 sprintf(local_txbuf, "ATPB%04X\r",
618                         elm->can_config);
619
620         } else if (test_and_clear_bit(ELM327_TX_DO_CANID_29BIT_HIGH, &elm->cmds_todo)) {
621                 sprintf(local_txbuf, "ATCP%02X\r",
622                         (frame->can_id & CAN_EFF_MASK) >> 24);
623
624         } else if (test_and_clear_bit(ELM327_TX_DO_CANID_29BIT_LOW, &elm->cmds_todo)) {
625                 sprintf(local_txbuf, "ATSH%06X\r",
626                         frame->can_id & CAN_EFF_MASK & ((1 << 24) - 1));
627
628         } else if (test_and_clear_bit(ELM327_TX_DO_CANID_11BIT, &elm->cmds_todo)) {
629                 sprintf(local_txbuf, "ATSH%03X\r",
630                         frame->can_id & CAN_SFF_MASK);
631
632         } else if (test_and_clear_bit(ELM327_TX_DO_CAN_DATA, &elm->cmds_todo)) {
633                 if (frame->can_id & CAN_RTR_FLAG) {
634                         /* Send an RTR frame. Their DLC is fixed.
635                          * Some chips don't send them at all.
636                          */
637                         sprintf(local_txbuf, "ATRTR\r");
638                 } else {
639                         /* Send a regular CAN data frame */
640                         int i;
641
642                         for (i = 0; i < frame->len; i++) {
643                                 sprintf(&local_txbuf[2 * i], "%02X",
644                                         frame->data[i]);
645                         }
646
647                         sprintf(&local_txbuf[2 * i], "\r");
648                 }
649
650                 elm->drop_next_line = 1;
651                 elm->state = ELM_RECEIVING;
652         }
653
654         elm327_send(elm, local_txbuf, strlen(local_txbuf));
655 }
656
657 static bool elm327_is_ready_char(char c)
658 {
659         /* Bits 0xc0 are sometimes set (randomly), hence the mask.
660          * Probably bad hardware.
661          */
662         return (c & 0x3f) == ELM327_READY_CHAR;
663 }
664
665 /* Assumes elm->lock taken. */
666 static void elm327_drop_bytes(struct elmcan *elm, size_t i)
667 {
668         memmove(&elm->rxbuf[0], &elm->rxbuf[i], ELM327_SIZE_RXBUF - i);
669         elm->rxfill -= i;
670 }
671
672 /* Assumes elm->lock taken. */
673 static void elm327_parse_rxbuf(struct elmcan *elm)
674 {
675         size_t len;
676
677         switch (elm->state) {
678         case ELM_NOTINIT:
679                 elm->rxfill = 0;
680                 break;
681
682         case ELM_GETDUMMYCHAR:
683         {
684                 /* Wait for 'y' or '>' */
685                 int i;
686
687                 for (i = 0; i < elm->rxfill; i++) {
688                         if (elm->rxbuf[i] == ELM327_DUMMY_CHAR) {
689                                 elm327_send(elm, "\r", 1);
690                                 elm->state = ELM_GETPROMPT;
691                                 i++;
692                                 break;
693                         } else if (elm327_is_ready_char(elm->rxbuf[i])) {
694                                 elm327_send(elm, ELM327_DUMMY_STRING, 1);
695                                 i++;
696                                 break;
697                         }
698                 }
699
700                 elm327_drop_bytes(elm, i);
701
702                 break;
703         }
704
705         case ELM_GETPROMPT:
706                 /* Wait for '>' */
707                 if (elm327_is_ready_char(elm->rxbuf[elm->rxfill - 1]))
708                         elm327_handle_prompt(elm);
709
710                 elm->rxfill = 0;
711                 break;
712
713         case ELM_RECEIVING:
714                 /* Find <CR> delimiting feedback lines. */
715                 for (len = 0;
716                      (len < elm->rxfill) && (elm->rxbuf[len] != '\r');
717                      len++) {
718                         /* empty loop */
719                 }
720
721                 if (len == ELM327_SIZE_RXBUF) {
722                         /* Line exceeds buffer. It's probably all garbage.
723                          * Did we even connect at the right baud rate?
724                          */
725                         netdev_err(elm->dev,
726                                    "RX buffer overflow. Faulty ELM327 or UART?\n");
727                         elm327_hw_failure(elm);
728                         break;
729                 } else if (len == elm->rxfill) {
730                         if (elm327_is_ready_char(elm->rxbuf[elm->rxfill - 1])) {
731                                 /* The ELM327's AT ST response timeout ran out,
732                                  * so we got a prompt.
733                                  * Clear RX buffer and restart listening.
734                                  */
735                                 elm->rxfill = 0;
736
737                                 elm327_handle_prompt(elm);
738                                 break;
739                         }
740
741                         /* No <CR> found - we haven't received a full line yet.
742                          * Wait for more data.
743                          */
744                         break;
745                 }
746
747                 /* We have a full line to parse. */
748                 elm327_parse_line(elm, len);
749
750                 /* Remove parsed data from RX buffer. */
751                 elm327_drop_bytes(elm, len + 1);
752
753                 /* More data to parse? */
754                 if (elm->rxfill)
755                         elm327_parse_rxbuf(elm);
756         }
757 }
758
759 /* Dummy needed to use can_rx_offload */
760 static struct sk_buff *elmcan_mailbox_read(struct can_rx_offload *offload,
761                                            unsigned int n, u32 *timestamp,
762                                            bool drop)
763 {
764         WARN_ON_ONCE(1); /* This function is a dummy, so don't call it! */
765
766         return ERR_PTR(-ENOBUFS);
767 }
768
769 static int elmcan_netdev_open(struct net_device *dev)
770 {
771         struct elmcan *elm = netdev_priv(dev);
772         int err;
773
774         spin_lock_bh(&elm->lock);
775         if (elm->hw_failure) {
776                 netdev_err(elm->dev, "Refusing to open interface after a hardware fault has been detected.\n");
777                 spin_unlock_bh(&elm->lock);
778                 return -EIO;
779         }
780
781         if (!elm->tty) {
782                 spin_unlock_bh(&elm->lock);
783                 return -ENODEV;
784         }
785
786         /* open_candev() checks for elm->can.bittiming.bitrate != 0 */
787         err = open_candev(dev);
788         if (err) {
789                 spin_unlock_bh(&elm->lock);
790                 return err;
791         }
792
793         elm327_init(elm);
794         spin_unlock_bh(&elm->lock);
795
796         elm->offload.mailbox_read = elmcan_mailbox_read;
797         err = can_rx_offload_add_fifo(dev, &elm->offload, ELM327_NAPI_WEIGHT);
798         if (err) {
799                 close_candev(dev);
800                 return err;
801         }
802
803         can_rx_offload_enable(&elm->offload);
804
805         can_led_event(dev, CAN_LED_EVENT_OPEN);
806         elm->can.state = CAN_STATE_ERROR_ACTIVE;
807         netif_start_queue(dev);
808
809         return 0;
810 }
811
812 static int elmcan_netdev_close(struct net_device *dev)
813 {
814         struct elmcan *elm = netdev_priv(dev);
815
816         netif_stop_queue(dev);
817
818         spin_lock_bh(&elm->lock);
819         if (elm->tty) {
820                 /* Interrupt whatever we're doing right now */
821                 elm327_send(elm, ELM327_DUMMY_STRING, 1);
822
823                 /* Clear the wakeup bit, as the netdev will be down and thus
824                  * the wakeup handler won't clear it
825                  */
826                 clear_bit(TTY_DO_WRITE_WAKEUP, &elm->tty->flags);
827
828                 spin_unlock_bh(&elm->lock);
829
830                 flush_work(&elm->tx_work);
831         } else {
832                 spin_unlock_bh(&elm->lock);
833         }
834
835         can_rx_offload_disable(&elm->offload);
836         elm->can.state = CAN_STATE_STOPPED;
837         can_rx_offload_del(&elm->offload);
838         close_candev(dev);
839         can_led_event(dev, CAN_LED_EVENT_STOP);
840
841         return 0;
842 }
843
844 /* Send a can_frame to a TTY. */
845 static netdev_tx_t elmcan_netdev_start_xmit(struct sk_buff *skb,
846                                             struct net_device *dev)
847 {
848         struct elmcan *elm = netdev_priv(dev);
849         struct can_frame *frame = (struct can_frame *)skb->data;
850
851         if (!netif_running(dev))  {
852                 netdev_warn(elm->dev, "xmit: iface is down.\n");
853                 goto out;
854         }
855
856         /* BHs are already disabled, so no spin_lock_bh().
857          * See Documentation/networking/netdevices.txt
858          */
859         spin_lock(&elm->lock);
860
861         /* We shouldn't get here after a hardware fault:
862          * can_bus_off() calls netif_carrier_off()
863          */
864         WARN_ON_ONCE(elm->hw_failure);
865
866         if (!elm->tty ||
867             elm->hw_failure ||
868             elm->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) {
869                 spin_unlock(&elm->lock);
870                 goto out;
871         }
872
873         netif_stop_queue(dev);
874
875         elm327_send_frame(elm, frame);
876         spin_unlock(&elm->lock);
877
878         dev->stats.tx_packets++;
879         dev->stats.tx_bytes += frame->len;
880
881         can_led_event(dev, CAN_LED_EVENT_TX);
882
883 out:
884         kfree_skb(skb);
885         return NETDEV_TX_OK;
886 }
887
888 static const struct net_device_ops elmcan_netdev_ops = {
889         .ndo_open       = elmcan_netdev_open,
890         .ndo_stop       = elmcan_netdev_close,
891         .ndo_start_xmit = elmcan_netdev_start_xmit,
892         .ndo_change_mtu = can_change_mtu,
893 };
894
895 /* Get a reference to our struct, taking into account locks/refcounts.
896  * This is to ensure ordering in case we are shutting down, and to ensure
897  * there is a refcount at all (otherwise tty->disc_data may be freed and
898  * before we increment the refcount).
899  * Use this for anything that can race against elmcan_ldisc_close().
900  */
901 static struct elmcan *get_elm(struct tty_struct *tty)
902 {
903         struct elmcan *elm;
904         bool got_ref;
905
906         spin_lock_bh(&elmcan_discdata_lock);
907         elm = (struct elmcan *)tty->disc_data;
908
909         if (!elm) {
910                 spin_unlock_bh(&elmcan_discdata_lock);
911                 return NULL;
912         }
913
914         got_ref = atomic_inc_not_zero(&elm->refcount);
915         spin_unlock_bh(&elmcan_discdata_lock);
916
917         if (!got_ref)
918                 return NULL;
919
920         return elm;
921 }
922
923 static void put_elm(struct elmcan *elm)
924 {
925         atomic_dec(&elm->refcount);
926 }
927
928 static bool elmcan_is_valid_rx_char(char c)
929 {
930         return (isdigit(c) ||
931                 isupper(c) ||
932                 c == ELM327_DUMMY_CHAR ||
933                 c == ELM327_READY_CHAR ||
934                 c == '<' ||
935                 c == 'a' ||
936                 c == 'b' ||
937                 c == 'v' ||
938                 c == '.' ||
939                 c == '?' ||
940                 c == '\r' ||
941                 c == ' ');
942 }
943
944 /* Handle incoming ELM327 ASCII data.
945  * This will not be re-entered while running, but other ldisc
946  * functions may be called in parallel.
947  */
948 #if LINUX_VERSION_CODE < KERNEL_VERSION(5,14,0)
949 static void elmcan_ldisc_rx(struct tty_struct *tty,
950                             const unsigned char *cp, char *fp, int count)
951 #else
952 static void elmcan_ldisc_rx(struct tty_struct *tty,
953                             const unsigned char *cp, const char *fp, int count)
954 #endif
955 {
956         struct elmcan *elm = get_elm(tty);
957
958         if (!elm)
959                 return;
960
961         spin_lock_bh(&elm->lock);
962
963         if (elm->hw_failure)
964                 goto out;
965
966         while (count-- && elm->rxfill < ELM327_SIZE_RXBUF) {
967                 if (fp && *fp++) {
968                         netdev_err(elm->dev, "Error in received character stream. Check your wiring.");
969
970                         elm327_hw_failure(elm);
971
972                         goto out;
973                 }
974
975                 /* Ignore NUL characters, which the PIC microcontroller may
976                  * inadvertently insert due to a known hardware bug.
977                  * See ELM327 documentation, which refers to a Microchip PIC
978                  * bug description.
979                  */
980                 if (*cp != 0) {
981                         /* Check for stray characters on the UART line.
982                          * Likely caused by bad hardware.
983                          */
984                         if (!elmcan_is_valid_rx_char(*cp)) {
985                                 netdev_err(elm->dev,
986                                            "Received illegal character %02x.\n",
987                                            *cp);
988                                 elm327_hw_failure(elm);
989
990                                 goto out;
991                         }
992
993                         elm->rxbuf[elm->rxfill++] = *cp;
994                 }
995
996                 cp++;
997         }
998
999         if (count >= 0) {
1000                 netdev_err(elm->dev, "Receive buffer overflowed. Bad chip or wiring?");
1001
1002                 elm327_hw_failure(elm);
1003
1004                 goto out;
1005         }
1006
1007         elm327_parse_rxbuf(elm);
1008
1009 out:
1010         spin_unlock_bh(&elm->lock);
1011         put_elm(elm);
1012 }
1013
1014 /* Write out remaining transmit buffer.
1015  * Scheduled when TTY is writable.
1016  */
1017 static void elmcan_ldisc_tx_worker(struct work_struct *work)
1018 {
1019         /* No need to use get_elm() here, as we'll always flush workers
1020          * before destroying the elmcan object.
1021          */
1022         struct elmcan *elm = container_of(work, struct elmcan, tx_work);
1023         ssize_t actual;
1024
1025         spin_lock_bh(&elm->lock);
1026         if (elm->hw_failure) {
1027                 spin_unlock_bh(&elm->lock);
1028                 return;
1029         }
1030
1031         if (!elm->tty || !netif_running(elm->dev)) {
1032                 spin_unlock_bh(&elm->lock);
1033                 return;
1034         }
1035
1036         if (elm->txleft <= 0)  {
1037                 /* Our TTY write buffer is empty:
1038                  * Allow netdev to hand us another packet
1039                  */
1040                 clear_bit(TTY_DO_WRITE_WAKEUP, &elm->tty->flags);
1041                 spin_unlock_bh(&elm->lock);
1042                 netif_wake_queue(elm->dev);
1043                 return;
1044         }
1045
1046         actual = elm->tty->ops->write(elm->tty, elm->txhead, elm->txleft);
1047         if (actual < 0) {
1048                 netdev_err(elm->dev,
1049                            "Failed to write to tty %s.\n",
1050                            elm->tty->name);
1051                 elm327_hw_failure(elm);
1052                 spin_unlock_bh(&elm->lock);
1053                 return;
1054         }
1055
1056         elm->txleft -= actual;
1057         elm->txhead += actual;
1058         spin_unlock_bh(&elm->lock);
1059 }
1060
1061 /* Called by the driver when there's room for more data. */
1062 static void elmcan_ldisc_tx_wakeup(struct tty_struct *tty)
1063 {
1064         struct elmcan *elm = get_elm(tty);
1065
1066         if (!elm)
1067                 return;
1068
1069         schedule_work(&elm->tx_work);
1070
1071         put_elm(elm);
1072 }
1073
1074 /* ELM327 can only handle bitrates that are integer divisors of 500 kHz,
1075  * or 7/8 of that. Divisors are 1 to 64.
1076  * Currently we don't implement support for 7/8 rates.
1077  */
1078 static const u32 elmcan_bitrate_const[64] = {
1079          7812,  7936,  8064,  8196,  8333,  8474,  8620,  8771,
1080          8928,  9090,  9259,  9433,  9615,  9803, 10000, 10204,
1081         10416, 10638, 10869, 11111, 11363, 11627, 11904, 12195,
1082         12500, 12820, 13157, 13513, 13888, 14285, 14705, 15151,
1083         15625, 16129, 16666, 17241, 17857, 18518, 19230, 20000,
1084         20833, 21739, 22727, 23809, 25000, 26315, 27777, 29411,
1085         31250, 33333, 35714, 38461, 41666, 45454, 50000, 55555,
1086         62500, 71428, 83333, 100000, 125000, 166666, 250000, 500000
1087 };
1088
1089 /* Dummy needed to use bitrate_const */
1090 static int elmcan_do_set_bittiming(struct net_device *netdev)
1091 {
1092         return 0;
1093 }
1094
1095 static int elmcan_ldisc_open(struct tty_struct *tty)
1096 {
1097         struct net_device *dev;
1098         struct elmcan *elm;
1099         int err;
1100
1101         if (!capable(CAP_NET_ADMIN))
1102                 return -EPERM;
1103
1104         if (!tty->ops->write)
1105                 return -EOPNOTSUPP;
1106
1107         dev = alloc_candev(sizeof(struct elmcan), 0);
1108         if (!dev)
1109                 return -ENFILE;
1110         elm = netdev_priv(dev);
1111
1112         elm->txbuf = kmalloc(ELM327_SIZE_TXBUF, GFP_KERNEL);
1113         if (!elm->txbuf) {
1114                 err = -ENOMEM;
1115                 goto out_err;
1116         }
1117
1118         /* Configure TTY interface */
1119         tty->receive_room = 65536; /* We don't flow control */
1120         elm->txleft = 0; /* Clear TTY TX buffer */
1121         spin_lock_init(&elm->lock);
1122         atomic_set(&elm->refcount, 1);
1123         INIT_WORK(&elm->tx_work, elmcan_ldisc_tx_worker);
1124
1125         /* Configure CAN metadata */
1126         elm->can.state = CAN_STATE_STOPPED;
1127         elm->can.bitrate_const = elmcan_bitrate_const;
1128         elm->can.bitrate_const_cnt = ARRAY_SIZE(elmcan_bitrate_const);
1129         elm->can.do_set_bittiming = elmcan_do_set_bittiming;
1130         elm->can.ctrlmode_supported = CAN_CTRLMODE_LISTENONLY;
1131
1132         /* Configure netdev interface */
1133         elm->dev = dev;
1134         dev->netdev_ops = &elmcan_netdev_ops;
1135
1136         /* Mark ldisc channel as alive */
1137         elm->tty = tty;
1138         tty->disc_data = elm;
1139
1140         devm_can_led_init(elm->dev);
1141
1142         /* Let 'er rip */
1143         err = register_candev(elm->dev);
1144         if (err)
1145                 goto out_err;
1146
1147         netdev_info(elm->dev, "elmcan on %s.\n", tty->name);
1148
1149         return 0;
1150
1151 out_err:
1152         kfree(elm->txbuf);
1153         free_candev(elm->dev);
1154         return err;
1155 }
1156
1157 /* Close down an elmcan channel.
1158  * This means flushing out any pending queues, and then returning.
1159  * This call is serialized against other ldisc functions:
1160  * Once this is called, no other ldisc function of ours is entered.
1161  *
1162  * We also use this function for a hangup event.
1163  */
1164 static void elmcan_ldisc_close(struct tty_struct *tty)
1165 {
1166         struct elmcan *elm = get_elm(tty);
1167
1168         if (!elm)
1169                 return;
1170
1171         /* unregister_netdev() calls .ndo_stop() so we don't have to. */
1172         unregister_candev(elm->dev);
1173
1174         /* Decrease the refcount twice, once for our own get_elm(),
1175          * and once to remove the count of 1 that we set in _open().
1176          * Once it reaches 0, we can safely destroy it.
1177          */
1178         put_elm(elm);
1179         put_elm(elm);
1180
1181         while (atomic_read(&elm->refcount) > 0)
1182                 msleep_interruptible(10);
1183
1184         /* At this point, all ldisc calls to us have become no-ops. */
1185
1186         flush_work(&elm->tx_work);
1187
1188         /* Mark channel as dead */
1189         spin_lock_bh(&elm->lock);
1190         tty->disc_data = NULL;
1191         elm->tty = NULL;
1192         spin_unlock_bh(&elm->lock);
1193
1194         netdev_info(elm->dev, "elmcan off %s.\n", tty->name);
1195
1196         kfree(elm->txbuf);
1197         free_candev(elm->dev);
1198 }
1199
1200 #if LINUX_VERSION_CODE < KERNEL_VERSION(5,16,0)
1201 static int elmcan_ldisc_hangup(struct tty_struct *tty)
1202 #else
1203 static void elmcan_ldisc_hangup(struct tty_struct *tty)
1204 #endif
1205 {
1206         elmcan_ldisc_close(tty);
1207 #if LINUX_VERSION_CODE < KERNEL_VERSION(5,16,0)
1208         return 0;
1209 #endif
1210 }
1211
1212 static int elmcan_ldisc_ioctl(struct tty_struct *tty,
1213 #if LINUX_VERSION_CODE < KERNEL_VERSION(5,17,0)
1214                               struct file *file,
1215 #endif
1216                               unsigned int cmd, unsigned long arg)
1217 {
1218         struct elmcan *elm = get_elm(tty);
1219         unsigned int tmp;
1220
1221         if (!elm)
1222                 return -EINVAL;
1223
1224         switch (cmd) {
1225         case SIOCGIFNAME:
1226                 tmp = strnlen(elm->dev->name, IFNAMSIZ - 1) + 1;
1227                 if (copy_to_user((void __user *)arg, elm->dev->name, tmp)) {
1228                         put_elm(elm);
1229                         return -EFAULT;
1230                 }
1231
1232                 put_elm(elm);
1233                 return 0;
1234
1235         case SIOCSIFHWADDR:
1236                 put_elm(elm);
1237                 return -EINVAL;
1238
1239         default:
1240                 put_elm(elm);
1241 #if LINUX_VERSION_CODE < KERNEL_VERSION(5,16,0)
1242                 return tty_mode_ioctl(tty, file, cmd, arg);
1243 #else
1244                 return tty_mode_ioctl(tty, cmd, arg);
1245 #endif
1246         }
1247 }
1248
1249 static struct tty_ldisc_ops elmcan_ldisc = {
1250         .owner          = THIS_MODULE,
1251         .name           = "elmcan",
1252         .num            = N_DEVELOPMENT,
1253         .receive_buf    = elmcan_ldisc_rx,
1254         .write_wakeup   = elmcan_ldisc_tx_wakeup,
1255         .open           = elmcan_ldisc_open,
1256         .close          = elmcan_ldisc_close,
1257         .hangup         = elmcan_ldisc_hangup,
1258         .ioctl          = elmcan_ldisc_ioctl,
1259 };
1260
1261 static int __init elmcan_init(void)
1262 {
1263         int status;
1264
1265 #if LINUX_VERSION_CODE < KERNEL_VERSION(5,14,0)
1266         status = tty_register_ldisc(N_DEVELOPMENT, &elmcan_ldisc);
1267 #else
1268         status = tty_register_ldisc(&elmcan_ldisc);
1269 #endif
1270         if (status)
1271                 pr_err("Can't register line discipline\n");
1272
1273         return status;
1274 }
1275
1276 static void __exit elmcan_exit(void)
1277 {
1278         /* This will only be called when all channels have been closed by
1279          * userspace - tty_ldisc.c takes care of the module's refcount.
1280          */
1281 #if LINUX_VERSION_CODE < KERNEL_VERSION(5,14,0)
1282         int status;
1283
1284         status = tty_unregister_ldisc(N_DEVELOPMENT);
1285         if (status)
1286                 pr_err("Can't unregister line discipline (error: %d)\n",
1287                        status);
1288 #else
1289         tty_unregister_ldisc(&elmcan_ldisc);
1290 #endif
1291 }
1292
1293 module_init(elmcan_init);
1294 module_exit(elmcan_exit);