#define pr_fmt(fmt) …
#include <linux/init.h>
#include <linux/module.h>
#include <linux/bitops.h>
#include <linux/ctype.h>
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/list.h>
#include <linux/lockdep.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <linux/spinlock.h>
#include <linux/string.h>
#include <linux/tty.h>
#include <linux/tty_ldisc.h>
#include <linux/workqueue.h>
#include <uapi/linux/tty.h>
#include <linux/can.h>
#include <linux/can/dev.h>
#include <linux/can/error.h>
#include <linux/can/rx-offload.h>
#define CAN327_NAPI_WEIGHT …
#define CAN327_SIZE_TXBUF …
#define CAN327_SIZE_RXBUF …
#define CAN327_CAN_CONFIG_SEND_SFF …
#define CAN327_CAN_CONFIG_VARIABLE_DLC …
#define CAN327_CAN_CONFIG_RECV_BOTH_SFF_EFF …
#define CAN327_CAN_CONFIG_BAUDRATE_MULT_8_7 …
#define CAN327_DUMMY_CHAR …
#define CAN327_DUMMY_STRING …
#define CAN327_READY_CHAR …
enum can327_tx_do { … };
struct can327 { … };
static inline void can327_uart_side_failure(struct can327 *elm);
static void can327_send(struct can327 *elm, const void *buf, size_t len)
{ … }
static void can327_kick_into_cmd_mode(struct can327 *elm)
{ … }
static void can327_send_frame(struct can327 *elm, struct can_frame *frame)
{ … }
static char *can327_init_script[] = …;
static void can327_init_device(struct can327 *elm)
{ … }
static void can327_feed_frame_to_netdev(struct can327 *elm, struct sk_buff *skb)
{ … }
static inline void can327_uart_side_failure(struct can327 *elm)
{ … }
static inline bool can327_rxbuf_cmp(const u8 *buf, size_t nbytes,
const char *reference)
{ … }
static void can327_parse_error(struct can327 *elm, size_t len)
{ … }
static int can327_parse_frame(struct can327 *elm, size_t len)
{ … }
static void can327_parse_line(struct can327 *elm, size_t len)
{ … }
static void can327_handle_prompt(struct can327 *elm)
{ … }
static bool can327_is_ready_char(char c)
{ … }
static void can327_drop_bytes(struct can327 *elm, size_t i)
{ … }
static void can327_parse_rxbuf(struct can327 *elm, size_t first_new_char_idx)
{ … }
static int can327_netdev_open(struct net_device *dev)
{ … }
static int can327_netdev_close(struct net_device *dev)
{ … }
static netdev_tx_t can327_netdev_start_xmit(struct sk_buff *skb,
struct net_device *dev)
{ … }
static const struct net_device_ops can327_netdev_ops = …;
static const struct ethtool_ops can327_ethtool_ops = …;
static bool can327_is_valid_rx_char(u8 c)
{ … }
static void can327_ldisc_rx(struct tty_struct *tty, const u8 *cp,
const u8 *fp, size_t count)
{ … }
static void can327_ldisc_tx_worker(struct work_struct *work)
{ … }
static void can327_ldisc_tx_wakeup(struct tty_struct *tty)
{ … }
static const u32 can327_bitrate_const[] = …;
static int can327_ldisc_open(struct tty_struct *tty)
{ … }
static void can327_ldisc_close(struct tty_struct *tty)
{ … }
static int can327_ldisc_ioctl(struct tty_struct *tty, unsigned int cmd,
unsigned long arg)
{ … }
static struct tty_ldisc_ops can327_ldisc = …;
static int __init can327_init(void)
{ … }
static void __exit can327_exit(void)
{ … }
module_init(…) …;
module_exit(can327_exit);
MODULE_ALIAS_LDISC(…);
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;