#include <linux/module.h>
#include <linux/uaccess.h>
#include <linux/bitops.h>
#include <linux/string.h>
#include <linux/mm.h>
#include <linux/interrupt.h>
#include <linux/in.h>
#include <linux/tty.h>
#include <linux/errno.h>
#include <linux/netdevice.h>
#include <linux/timer.h>
#include <linux/slab.h>
#include <net/ax25.h>
#include <linux/etherdevice.h>
#include <linux/skbuff.h>
#include <linux/rtnetlink.h>
#include <linux/spinlock.h>
#include <linux/if_arp.h>
#include <linux/init.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <linux/semaphore.h>
#include <linux/refcount.h>
#define SIXPACK_VERSION …
#define SIXP_SEOF …
#define SIXP_TX_URUN …
#define SIXP_RX_ORUN …
#define SIXP_RX_BUF_OVL …
#define SIXP_CHKSUM …
#define SIXP_CMD_MASK …
#define SIXP_CHN_MASK …
#define SIXP_PRIO_CMD_MASK …
#define SIXP_STD_CMD_MASK …
#define SIXP_PRIO_DATA_MASK …
#define SIXP_TX_MASK …
#define SIXP_RX_MASK …
#define SIXP_RX_DCD_MASK …
#define SIXP_LEDS_ON …
#define SIXP_LEDS_OFF …
#define SIXP_CON …
#define SIXP_STA …
#define SIXP_FOUND_TNC …
#define SIXP_CON_ON …
#define SIXP_DCD_MASK …
#define SIXP_DAMA_OFF …
#define SIXP_TXDELAY …
#define SIXP_PERSIST …
#define SIXP_SLOTTIME …
#define SIXP_INIT_RESYNC_TIMEOUT …
#define SIXP_RESYNC_TIMEOUT …
#define SIXP_NRUNIT …
#define SIXP_MTU …
enum sixpack_flags { … };
struct sixpack { … };
#define AX25_6PACK_HEADER_LEN …
static void sixpack_decode(struct sixpack *, const unsigned char[], int);
static int encode_sixpack(unsigned char *, unsigned char *, int, unsigned char);
static void sp_xmit_on_air(struct timer_list *t)
{ … }
static void sp_encaps(struct sixpack *sp, unsigned char *icp, int len)
{ … }
static netdev_tx_t sp_xmit(struct sk_buff *skb, struct net_device *dev)
{ … }
static int sp_open_dev(struct net_device *dev)
{ … }
static int sp_close(struct net_device *dev)
{ … }
static int sp_set_mac_address(struct net_device *dev, void *addr)
{ … }
static const struct net_device_ops sp_netdev_ops = …;
static void sp_setup(struct net_device *dev)
{ … }
static void sp_bump(struct sixpack *sp, char cmd)
{ … }
static DEFINE_RWLOCK(disc_data_lock);
static struct sixpack *sp_get(struct tty_struct *tty)
{ … }
static void sp_put(struct sixpack *sp)
{ … }
static void sixpack_write_wakeup(struct tty_struct *tty)
{ … }
static void sixpack_receive_buf(struct tty_struct *tty, const u8 *cp,
const u8 *fp, size_t count)
{ … }
#define TNC_UNINITIALIZED …
#define TNC_UNSYNC_STARTUP …
#define TNC_UNSYNCED …
#define TNC_IN_SYNC …
static void __tnc_set_sync_state(struct sixpack *sp, int new_tnc_state)
{ … }
static inline void tnc_set_sync_state(struct sixpack *sp, int new_tnc_state)
{ … }
static void resync_tnc(struct timer_list *t)
{ … }
static inline int tnc_init(struct sixpack *sp)
{ … }
static int sixpack_open(struct tty_struct *tty)
{ … }
static void sixpack_close(struct tty_struct *tty)
{ … }
static int sixpack_ioctl(struct tty_struct *tty, unsigned int cmd,
unsigned long arg)
{ … }
static struct tty_ldisc_ops sp_ldisc = …;
static const char msg_banner[] __initconst = …;
static const char msg_regfail[] __initconst = …;
static int __init sixpack_init_driver(void)
{ … }
static void __exit sixpack_exit_driver(void)
{ … }
static int encode_sixpack(unsigned char *tx_buf, unsigned char *tx_buf_raw,
int length, unsigned char tx_delay)
{ … }
static void decode_data(struct sixpack *sp, unsigned char inbyte)
{ … }
static void decode_prio_command(struct sixpack *sp, unsigned char cmd)
{ … }
static void decode_std_command(struct sixpack *sp, unsigned char cmd)
{ … }
static void
sixpack_decode(struct sixpack *sp, const unsigned char *pre_rbuff, int count)
{ … }
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
MODULE_ALIAS_LDISC(…);
module_init(…) …;
module_exit(sixpack_exit_driver);