2  *  This program is free software; you can distribute it and/or modify it
 
   3  *  under the terms of the GNU General Public License (Version 2) as
 
   4  *  published by the Free Software Foundation.
 
   6  *  This program is distributed in the hope it will be useful, but WITHOUT
 
   7  *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 
   8  *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 
  11  *  You should have received a copy of the GNU General Public License along
 
  12  *  with this program; if not, write to the Free Software Foundation, Inc.,
 
  13  *  59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
 
  15  * Copyright (C) Hans Alblas PE1AYX <hans@esrac.ele.tue.nl>
 
  16  * Copyright (C) 2004, 05 Ralf Baechle DL5RB <ralf@linux-mips.org>
 
  17  * Copyright (C) 2004, 05 Thomas Osterried DL9SAU <thomas@x-berg.in-berlin.de>
 
  19 #include <linux/config.h>
 
  20 #include <linux/module.h>
 
  21 #include <asm/system.h>
 
  22 #include <linux/bitops.h>
 
  23 #include <asm/uaccess.h>
 
  24 #include <linux/crc16.h>
 
  25 #include <linux/string.h>
 
  27 #include <linux/interrupt.h>
 
  29 #include <linux/inet.h>
 
  30 #include <linux/tty.h>
 
  31 #include <linux/errno.h>
 
  32 #include <linux/netdevice.h>
 
  33 #include <linux/major.h>
 
  34 #include <linux/init.h>
 
  35 #include <linux/rtnetlink.h>
 
  36 #include <linux/etherdevice.h>
 
  37 #include <linux/skbuff.h>
 
  38 #include <linux/if_arp.h>
 
  39 #include <linux/jiffies.h>
 
  45 /* SLIP/KISS protocol characters. */
 
  46 #define END             0300            /* indicates end of frame       */
 
  47 #define ESC             0333            /* indicates byte stuffing      */
 
  48 #define ESC_END         0334            /* ESC ESC_END means END 'data' */
 
  49 #define ESC_ESC         0335            /* ESC ESC_ESC means ESC 'data' */
 
  52         struct tty_struct       *tty;   /* ptr to TTY structure         */
 
  53         struct net_device       *dev;   /* easy for intr handling       */
 
  55         /* These are pointers to the malloc()ed frame buffers. */
 
  56         spinlock_t              buflock;/* lock for rbuf and xbuf */
 
  57         unsigned char           *rbuff; /* receiver buffer              */
 
  58         int                     rcount; /* received chars counter       */
 
  59         unsigned char           *xbuff; /* transmitter buffer           */
 
  60         unsigned char           *xhead; /* pointer to next byte to XMIT */
 
  61         int                     xleft;  /* bytes left in XMIT queue     */
 
  63         struct net_device_stats stats;
 
  65         /* Detailed SLIP statistics. */
 
  66         int             mtu;            /* Our mtu (to spot changes!)   */
 
  67         int             buffsize;       /* Max buffers sizes            */
 
  69         unsigned long   flags;          /* Flag values/ mode etc        */
 
  70                                         /* long req'd: used by set_bit --RR */
 
  71 #define AXF_INUSE       0               /* Channel in use               */
 
  72 #define AXF_ESCAPE      1               /* ESC received                 */
 
  73 #define AXF_ERROR       2               /* Parity, etc. error           */
 
  74 #define AXF_KEEPTEST    3               /* Keepalive test flag          */
 
  75 #define AXF_OUTWAIT     4               /* is outpacket was flag        */
 
  78         int             crcmode;        /* MW: for FlexNet, SMACK etc.  */
 
  79         int             crcauto;        /* CRC auto mode */
 
  81 #define CRC_MODE_NONE           0
 
  82 #define CRC_MODE_FLEX           1
 
  83 #define CRC_MODE_SMACK          2
 
  84 #define CRC_MODE_FLEX_TEST      3
 
  85 #define CRC_MODE_SMACK_TEST     4
 
  88         struct semaphore        dead_sem;
 
  91 /*---------------------------------------------------------------------------*/
 
  93 static const unsigned short crc_flex_table[] = {
 
  94         0x0f87, 0x1e0e, 0x2c95, 0x3d1c, 0x49a3, 0x582a, 0x6ab1, 0x7b38,
 
  95         0x83cf, 0x9246, 0xa0dd, 0xb154, 0xc5eb, 0xd462, 0xe6f9, 0xf770,
 
  96         0x1f06, 0x0e8f, 0x3c14, 0x2d9d, 0x5922, 0x48ab, 0x7a30, 0x6bb9,
 
  97         0x934e, 0x82c7, 0xb05c, 0xa1d5, 0xd56a, 0xc4e3, 0xf678, 0xe7f1,
 
  98         0x2e85, 0x3f0c, 0x0d97, 0x1c1e, 0x68a1, 0x7928, 0x4bb3, 0x5a3a,
 
  99         0xa2cd, 0xb344, 0x81df, 0x9056, 0xe4e9, 0xf560, 0xc7fb, 0xd672,
 
 100         0x3e04, 0x2f8d, 0x1d16, 0x0c9f, 0x7820, 0x69a9, 0x5b32, 0x4abb,
 
 101         0xb24c, 0xa3c5, 0x915e, 0x80d7, 0xf468, 0xe5e1, 0xd77a, 0xc6f3,
 
 102         0x4d83, 0x5c0a, 0x6e91, 0x7f18, 0x0ba7, 0x1a2e, 0x28b5, 0x393c,
 
 103         0xc1cb, 0xd042, 0xe2d9, 0xf350, 0x87ef, 0x9666, 0xa4fd, 0xb574,
 
 104         0x5d02, 0x4c8b, 0x7e10, 0x6f99, 0x1b26, 0x0aaf, 0x3834, 0x29bd,
 
 105         0xd14a, 0xc0c3, 0xf258, 0xe3d1, 0x976e, 0x86e7, 0xb47c, 0xa5f5,
 
 106         0x6c81, 0x7d08, 0x4f93, 0x5e1a, 0x2aa5, 0x3b2c, 0x09b7, 0x183e,
 
 107         0xe0c9, 0xf140, 0xc3db, 0xd252, 0xa6ed, 0xb764, 0x85ff, 0x9476,
 
 108         0x7c00, 0x6d89, 0x5f12, 0x4e9b, 0x3a24, 0x2bad, 0x1936, 0x08bf,
 
 109         0xf048, 0xe1c1, 0xd35a, 0xc2d3, 0xb66c, 0xa7e5, 0x957e, 0x84f7,
 
 110         0x8b8f, 0x9a06, 0xa89d, 0xb914, 0xcdab, 0xdc22, 0xeeb9, 0xff30,
 
 111         0x07c7, 0x164e, 0x24d5, 0x355c, 0x41e3, 0x506a, 0x62f1, 0x7378,
 
 112         0x9b0e, 0x8a87, 0xb81c, 0xa995, 0xdd2a, 0xcca3, 0xfe38, 0xefb1,
 
 113         0x1746, 0x06cf, 0x3454, 0x25dd, 0x5162, 0x40eb, 0x7270, 0x63f9,
 
 114         0xaa8d, 0xbb04, 0x899f, 0x9816, 0xeca9, 0xfd20, 0xcfbb, 0xde32,
 
 115         0x26c5, 0x374c, 0x05d7, 0x145e, 0x60e1, 0x7168, 0x43f3, 0x527a,
 
 116         0xba0c, 0xab85, 0x991e, 0x8897, 0xfc28, 0xeda1, 0xdf3a, 0xceb3,
 
 117         0x3644, 0x27cd, 0x1556, 0x04df, 0x7060, 0x61e9, 0x5372, 0x42fb,
 
 118         0xc98b, 0xd802, 0xea99, 0xfb10, 0x8faf, 0x9e26, 0xacbd, 0xbd34,
 
 119         0x45c3, 0x544a, 0x66d1, 0x7758, 0x03e7, 0x126e, 0x20f5, 0x317c,
 
 120         0xd90a, 0xc883, 0xfa18, 0xeb91, 0x9f2e, 0x8ea7, 0xbc3c, 0xadb5,
 
 121         0x5542, 0x44cb, 0x7650, 0x67d9, 0x1366, 0x02ef, 0x3074, 0x21fd,
 
 122         0xe889, 0xf900, 0xcb9b, 0xda12, 0xaead, 0xbf24, 0x8dbf, 0x9c36,
 
 123         0x64c1, 0x7548, 0x47d3, 0x565a, 0x22e5, 0x336c, 0x01f7, 0x107e,
 
 124         0xf808, 0xe981, 0xdb1a, 0xca93, 0xbe2c, 0xafa5, 0x9d3e, 0x8cb7,
 
 125         0x7440, 0x65c9, 0x5752, 0x46db, 0x3264, 0x23ed, 0x1176, 0x00ff
 
 128 static unsigned short calc_crc_flex(unsigned char *cp, int size)
 
 130         unsigned short crc = 0xffff;
 
 133                 crc = (crc << 8) ^ crc_flex_table[((crc >> 8) ^ *cp++) & 0xff];
 
 138 static int check_crc_flex(unsigned char *cp, int size)
 
 140         unsigned short crc = 0xffff;
 
 146                 crc = (crc << 8) ^ crc_flex_table[((crc >> 8) ^ *cp++) & 0xff];
 
 148         if ((crc & 0xffff) != 0x7070)
 
 154 static int check_crc_16(unsigned char *cp, int size)
 
 156         unsigned short crc = 0x0000;
 
 161         crc = crc16(0, cp, size);
 
 170  * Standard encapsulation
 
 173 static int kiss_esc(unsigned char *s, unsigned char *d, int len)
 
 175         unsigned char *ptr = d;
 
 179          * Send an initial END character to flush out any data that may have
 
 180          * accumulated in the receiver due to line noise.
 
 208  * OK its ugly, but tell me a better solution without copying the
 
 209  * packet to a temporary buffer :-)
 
 211 static int kiss_esc_crc(unsigned char *s, unsigned char *d, unsigned short crc,
 
 214         unsigned char *ptr = d;
 
 247 /* Send one completely decapsulated AX.25 packet to the AX.25 layer. */
 
 248 static void ax_bump(struct mkiss *ax)
 
 253         spin_lock_bh(&ax->buflock);
 
 254         if (ax->rbuff[0] > 0x0f) {
 
 255                 if (ax->rbuff[0] & 0x80) {
 
 256                         if (check_crc_16(ax->rbuff, ax->rcount) < 0) {
 
 257                                 ax->stats.rx_errors++;
 
 258                                 spin_unlock_bh(&ax->buflock);
 
 262                         if (ax->crcmode != CRC_MODE_SMACK && ax->crcauto) {
 
 264                                        "mkiss: %s: Switchting to crc-smack\n",
 
 266                                 ax->crcmode = CRC_MODE_SMACK;
 
 270                 } else if (ax->rbuff[0] & 0x20)  {
 
 271                         if (check_crc_flex(ax->rbuff, ax->rcount) < 0) {
 
 272                                 ax->stats.rx_errors++;
 
 273                                 spin_unlock_bh(&ax->buflock);
 
 276                         if (ax->crcmode != CRC_MODE_FLEX && ax->crcauto) {
 
 278                                        "mkiss: %s: Switchting to crc-flexnet\n",
 
 280                                 ax->crcmode = CRC_MODE_FLEX;
 
 285                          * dl9sau bugfix: the trailling two bytes flexnet crc
 
 286                          * will not be passed to the kernel. thus we have to
 
 287                          * correct the kissparm signature, because it indicates
 
 288                          * a crc but there's none
 
 293         spin_unlock_bh(&ax->buflock);
 
 297         if ((skb = dev_alloc_skb(count)) == NULL) {
 
 298                 printk(KERN_ERR "mkiss: %s: memory squeeze, dropping packet.\n",
 
 300                 ax->stats.rx_dropped++;
 
 304         spin_lock_bh(&ax->buflock);
 
 305         memcpy(skb_put(skb,count), ax->rbuff, count);
 
 306         spin_unlock_bh(&ax->buflock);
 
 307         skb->protocol = ax25_type_trans(skb, ax->dev);
 
 309         ax->dev->last_rx = jiffies;
 
 310         ax->stats.rx_packets++;
 
 311         ax->stats.rx_bytes += count;
 
 314 static void kiss_unesc(struct mkiss *ax, unsigned char s)
 
 318                 /* drop keeptest bit = VSV */
 
 319                 if (test_bit(AXF_KEEPTEST, &ax->flags))
 
 320                         clear_bit(AXF_KEEPTEST, &ax->flags);
 
 322                 if (!test_and_clear_bit(AXF_ERROR, &ax->flags) && (ax->rcount > 2))
 
 325                 clear_bit(AXF_ESCAPE, &ax->flags);
 
 330                 set_bit(AXF_ESCAPE, &ax->flags);
 
 333                 if (test_and_clear_bit(AXF_ESCAPE, &ax->flags))
 
 337                 if (test_and_clear_bit(AXF_ESCAPE, &ax->flags))
 
 342         spin_lock_bh(&ax->buflock);
 
 343         if (!test_bit(AXF_ERROR, &ax->flags)) {
 
 344                 if (ax->rcount < ax->buffsize) {
 
 345                         ax->rbuff[ax->rcount++] = s;
 
 346                         spin_unlock_bh(&ax->buflock);
 
 350                 ax->stats.rx_over_errors++;
 
 351                 set_bit(AXF_ERROR, &ax->flags);
 
 353         spin_unlock_bh(&ax->buflock);
 
 356 static int ax_set_mac_address(struct net_device *dev, void *addr)
 
 358         struct sockaddr_ax25 *sa = addr;
 
 360         spin_lock_irq(&dev->xmit_lock);
 
 361         memcpy(dev->dev_addr, &sa->sax25_call, AX25_ADDR_LEN);
 
 362         spin_unlock_irq(&dev->xmit_lock);
 
 367 /*---------------------------------------------------------------------------*/
 
 369 static void ax_changedmtu(struct mkiss *ax)
 
 371         struct net_device *dev = ax->dev;
 
 372         unsigned char *xbuff, *rbuff, *oxbuff, *orbuff;
 
 378          * allow for arrival of larger UDP packets, even if we say not to
 
 379          * also fixes a bug in which SunOS sends 512-byte packets even with
 
 385         xbuff = kmalloc(len + 4, GFP_ATOMIC);
 
 386         rbuff = kmalloc(len + 4, GFP_ATOMIC);
 
 388         if (xbuff == NULL || rbuff == NULL)  {
 
 389                 printk(KERN_ERR "mkiss: %s: unable to grow ax25 buffers, "
 
 390                        "MTU change cancelled.\n",
 
 398         spin_lock_bh(&ax->buflock);
 
 406                 if (ax->xleft <= len) {
 
 407                         memcpy(ax->xbuff, ax->xhead, ax->xleft);
 
 410                         ax->stats.tx_dropped++;
 
 414         ax->xhead = ax->xbuff;
 
 417                 if (ax->rcount <= len) {
 
 418                         memcpy(ax->rbuff, orbuff, ax->rcount);
 
 421                         ax->stats.rx_over_errors++;
 
 422                         set_bit(AXF_ERROR, &ax->flags);
 
 426         ax->mtu      = dev->mtu + 73;
 
 429         spin_unlock_bh(&ax->buflock);
 
 435 /* Encapsulate one AX.25 packet and stuff into a TTY queue. */
 
 436 static void ax_encaps(struct net_device *dev, unsigned char *icp, int len)
 
 438         struct mkiss *ax = netdev_priv(dev);
 
 442         if (ax->mtu != ax->dev->mtu + 73)       /* Someone has been ifconfigging */
 
 445         if (len > ax->mtu) {            /* Sigh, shouldn't occur BUT ... */
 
 447                 printk(KERN_ERR "mkiss: %s: truncating oversized transmit packet!\n", ax->dev->name);
 
 448                 ax->stats.tx_dropped++;
 
 449                 netif_start_queue(dev);
 
 455         spin_lock_bh(&ax->buflock);
 
 456         if ((*p & 0x0f) != 0) {
 
 457                 /* Configuration Command (kissparms(1).
 
 458                  * Protocol spec says: never append CRC.
 
 459                  * This fixes a very old bug in the linux
 
 460                  * kiss driver. -- dl9sau */
 
 463                         /* command from userspace especially for us,
 
 464                          * not for delivery to the tnc */
 
 466                                 int cmd = (p[1] & 0xff);
 
 469                                   ax->crcmode = CRC_MODE_SMACK;
 
 472                                   ax->crcmode = CRC_MODE_FLEX;
 
 475                                   ax->crcmode = CRC_MODE_NONE;
 
 479                                   ax->crcmode = CRC_MODE_SMACK_TEST;
 
 482                                 ax->crcauto = (cmd ? 0 : 1);
 
 483                                 printk(KERN_INFO "mkiss: %s: crc mode %s %d\n", ax->dev->name, (len) ? "set to" : "is", cmd);
 
 485                         spin_unlock_bh(&ax->buflock);
 
 486                         netif_start_queue(dev);
 
 490                         count = kiss_esc(p, (unsigned char *)ax->xbuff, len);
 
 494                 switch (ax->crcmode) {
 
 495                 case CRC_MODE_SMACK_TEST:
 
 496                         ax->crcmode  = CRC_MODE_FLEX_TEST;
 
 497                         printk(KERN_INFO "mkiss: %s: Trying crc-smack\n", ax->dev->name);
 
 501                         crc = swab16(crc16(0, p, len));
 
 502                         count = kiss_esc_crc(p, (unsigned char *)ax->xbuff, crc, len+2);
 
 504                 case CRC_MODE_FLEX_TEST:
 
 505                         ax->crcmode = CRC_MODE_NONE;
 
 506                         printk(KERN_INFO "mkiss: %s: Trying crc-flexnet\n", ax->dev->name);
 
 510                         crc = calc_crc_flex(p, len);
 
 511                         count = kiss_esc_crc(p, (unsigned char *)ax->xbuff, crc, len+2);
 
 515                         count = kiss_esc(p, (unsigned char *)ax->xbuff, len);
 
 518         spin_unlock_bh(&ax->buflock);
 
 520         set_bit(TTY_DO_WRITE_WAKEUP, &ax->tty->flags);
 
 521         actual = ax->tty->driver->write(ax->tty, ax->xbuff, count);
 
 522         ax->stats.tx_packets++;
 
 523         ax->stats.tx_bytes += actual;
 
 525         ax->dev->trans_start = jiffies;
 
 526         ax->xleft = count - actual;
 
 527         ax->xhead = ax->xbuff + actual;
 
 530 /* Encapsulate an AX.25 packet and kick it into a TTY queue. */
 
 531 static int ax_xmit(struct sk_buff *skb, struct net_device *dev)
 
 533         struct mkiss *ax = netdev_priv(dev);
 
 535         if (!netif_running(dev))  {
 
 536                 printk(KERN_ERR "mkiss: %s: xmit call when iface is down\n", dev->name);
 
 540         if (netif_queue_stopped(dev)) {
 
 542                  * May be we must check transmitter timeout here ?
 
 543                  *      14 Oct 1994 Dmitry Gorodchanin.
 
 545                 if (time_before(jiffies, dev->trans_start + 20 * HZ)) {
 
 546                         /* 20 sec timeout not reached */
 
 550                 printk(KERN_ERR "mkiss: %s: transmit timed out, %s?\n", dev->name,
 
 551                        (ax->tty->driver->chars_in_buffer(ax->tty) || ax->xleft) ?
 
 552                        "bad line quality" : "driver error");
 
 555                 clear_bit(TTY_DO_WRITE_WAKEUP, &ax->tty->flags);
 
 556                 netif_start_queue(dev);
 
 559         /* We were not busy, so we are now... :-) */
 
 561                 netif_stop_queue(dev);
 
 562                 ax_encaps(dev, skb->data, skb->len);
 
 569 static int ax_open_dev(struct net_device *dev)
 
 571         struct mkiss *ax = netdev_priv(dev);
 
 579 #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
 
 581 /* Return the frame type ID */
 
 582 static int ax_header(struct sk_buff *skb, struct net_device *dev, unsigned short type,
 
 583           void *daddr, void *saddr, unsigned len)
 
 586         if (type != htons(ETH_P_AX25))
 
 587                 return ax25_hard_header(skb, dev, type, daddr, saddr, len);
 
 593 static int ax_rebuild_header(struct sk_buff *skb)
 
 596         return ax25_rebuild_header(skb);
 
 602 #endif  /* CONFIG_{AX25,AX25_MODULE} */
 
 604 /* Open the low-level part of the AX25 channel. Easy! */
 
 605 static int ax_open(struct net_device *dev)
 
 607         struct mkiss *ax = netdev_priv(dev);
 
 614          * Allocate the frame buffers:
 
 616          * rbuff        Receive buffer.
 
 617          * xbuff        Transmit buffer.
 
 622          * allow for arrival of larger UDP packets, even if we say not to
 
 623          * also fixes a bug in which SunOS sends 512-byte packets even with
 
 629         if ((ax->rbuff = kmalloc(len + 4, GFP_KERNEL)) == NULL)
 
 632         if ((ax->xbuff = kmalloc(len + 4, GFP_KERNEL)) == NULL)
 
 635         ax->mtu      = dev->mtu + 73;
 
 640         ax->flags   &= (1 << AXF_INUSE);      /* Clear ESCAPE & ERROR flags */
 
 642         spin_lock_init(&ax->buflock);
 
 654 /* Close the low-level part of the AX25 channel. Easy! */
 
 655 static int ax_close(struct net_device *dev)
 
 657         struct mkiss *ax = netdev_priv(dev);
 
 660                 clear_bit(TTY_DO_WRITE_WAKEUP, &ax->tty->flags);
 
 662         netif_stop_queue(dev);
 
 667 static struct net_device_stats *ax_get_stats(struct net_device *dev)
 
 669         struct mkiss *ax = netdev_priv(dev);
 
 674 static void ax_setup(struct net_device *dev)
 
 676         static char ax25_bcast[AX25_ADDR_LEN] =
 
 677                 {'Q'<<1,'S'<<1,'T'<<1,' '<<1,' '<<1,' '<<1,'0'<<1};
 
 678         static char ax25_test[AX25_ADDR_LEN] =
 
 679                 {'L'<<1,'I'<<1,'N'<<1,'U'<<1,'X'<<1,' '<<1,'1'<<1};
 
 681         /* Finish setting up the DEVICE info. */
 
 683         dev->hard_start_xmit = ax_xmit;
 
 684         dev->open            = ax_open_dev;
 
 685         dev->stop            = ax_close;
 
 686         dev->get_stats       = ax_get_stats;
 
 687         dev->set_mac_address = ax_set_mac_address;
 
 688         dev->hard_header_len = 0;
 
 690         dev->type            = ARPHRD_AX25;
 
 691         dev->tx_queue_len    = 10;
 
 692         dev->hard_header     = ax_header;
 
 693         dev->rebuild_header  = ax_rebuild_header;
 
 695         memcpy(dev->broadcast, ax25_bcast, AX25_ADDR_LEN);
 
 696         memcpy(dev->dev_addr,  ax25_test,  AX25_ADDR_LEN);
 
 698         dev->flags      = IFF_BROADCAST | IFF_MULTICAST;
 
 702  * We have a potential race on dereferencing tty->disc_data, because the tty
 
 703  * layer provides no locking at all - thus one cpu could be running
 
 704  * sixpack_receive_buf while another calls sixpack_close, which zeroes
 
 705  * tty->disc_data and frees the memory that sixpack_receive_buf is using.  The
 
 706  * best way to fix this is to use a rwlock in the tty struct, but for now we
 
 707  * use a single global rwlock for all ttys in ppp line discipline.
 
 709 static DEFINE_RWLOCK(disc_data_lock);
 
 711 static struct mkiss *mkiss_get(struct tty_struct *tty)
 
 715         read_lock(&disc_data_lock);
 
 718                 atomic_inc(&ax->refcnt);
 
 719         read_unlock(&disc_data_lock);
 
 724 static void mkiss_put(struct mkiss *ax)
 
 726         if (atomic_dec_and_test(&ax->refcnt))
 
 730 static int crc_force = 0;       /* Can be overridden with insmod */
 
 732 static int mkiss_open(struct tty_struct *tty)
 
 734         struct net_device *dev;
 
 738         if (!capable(CAP_NET_ADMIN))
 
 741         dev = alloc_netdev(sizeof(struct mkiss), "ax%d", ax_setup);
 
 747         ax = netdev_priv(dev);
 
 750         spin_lock_init(&ax->buflock);
 
 751         atomic_set(&ax->refcnt, 1);
 
 752         init_MUTEX_LOCKED(&ax->dead_sem);
 
 756         tty->receive_room = 65535;
 
 758         if (tty->driver->flush_buffer)
 
 759                 tty->driver->flush_buffer(tty);
 
 761         /* Restore default settings */
 
 762         dev->type = ARPHRD_AX25;
 
 764         /* Perform the low-level AX25 initialization. */
 
 765         if ((err = ax_open(ax->dev))) {
 
 766                 goto out_free_netdev;
 
 769         if (register_netdev(dev))
 
 770                 goto out_free_buffers;
 
 772         /* after register_netdev() - because else printk smashes the kernel */
 
 775                 ax->crcmode  = CRC_MODE_SMACK;
 
 776                 printk(KERN_INFO "mkiss: %s: crc mode smack forced.\n",
 
 780                 ax->crcmode  = CRC_MODE_FLEX;
 
 781                 printk(KERN_INFO "mkiss: %s: crc mode flexnet forced.\n",
 
 785                 ax->crcmode  = CRC_MODE_NONE;
 
 786                 printk(KERN_INFO "mkiss: %s: crc mode disabled.\n",
 
 793                 printk(KERN_INFO "mkiss: %s: crc mode is auto.\n",
 
 795                 ax->crcmode  = CRC_MODE_SMACK_TEST;
 
 797         ax->crcauto = (crc_force ? 0 : 1);
 
 799         netif_start_queue(dev);
 
 801         /* Done.  We have linked the TTY line to a channel. */
 
 815 static void mkiss_close(struct tty_struct *tty)
 
 819         write_lock(&disc_data_lock);
 
 821         tty->disc_data = NULL;
 
 822         write_unlock(&disc_data_lock);
 
 828          * We have now ensured that nobody can start using ap from now on, but
 
 829          * we have to wait for all existing users to finish.
 
 831         if (!atomic_dec_and_test(&ax->refcnt))
 
 834         unregister_netdev(ax->dev);
 
 836         /* Free all AX25 frame buffers. */
 
 843 /* Perform I/O control on an active ax25 channel. */
 
 844 static int mkiss_ioctl(struct tty_struct *tty, struct file *file,
 
 845         unsigned int cmd, unsigned long arg)
 
 847         struct mkiss *ax = mkiss_get(tty);
 
 848         struct net_device *dev = ax->dev;
 
 849         unsigned int tmp, err;
 
 851         /* First make sure we're connected. */
 
 857                 err = copy_to_user((void __user *) arg, ax->dev->name,
 
 858                                    strlen(ax->dev->name) + 1) ? -EFAULT : 0;
 
 862                 err = put_user(4, (int __user *) arg);
 
 866                 if (get_user(tmp, (int __user *) arg)) {
 
 872                 dev->addr_len        = AX25_ADDR_LEN;
 
 873                 dev->hard_header_len = AX25_KISS_HEADER_LEN +
 
 874                                        AX25_MAX_HEADER_LEN + 3;
 
 875                 dev->type            = ARPHRD_AX25;
 
 880         case SIOCSIFHWADDR: {
 
 881                 char addr[AX25_ADDR_LEN];
 
 883                 if (copy_from_user(&addr,
 
 884                                    (void __user *) arg, AX25_ADDR_LEN)) {
 
 889                 spin_lock_irq(&dev->xmit_lock);
 
 890                 memcpy(dev->dev_addr, addr, AX25_ADDR_LEN);
 
 891                 spin_unlock_irq(&dev->xmit_lock);
 
 906  * Handle the 'receiver data ready' interrupt.
 
 907  * This function is called by the 'tty_io' module in the kernel when
 
 908  * a block of data has been received, which can now be decapsulated
 
 909  * and sent on to the AX.25 layer for further processing.
 
 911 static void mkiss_receive_buf(struct tty_struct *tty, const unsigned char *cp,
 
 914         struct mkiss *ax = mkiss_get(tty);
 
 920          * Argh! mtu change time! - costs us the packet part received
 
 923         if (ax->mtu != ax->dev->mtu + 73)
 
 926         /* Read the characters out of the buffer */
 
 928                 if (fp != NULL && *fp++) {
 
 929                         if (!test_and_set_bit(AXF_ERROR, &ax->flags))
 
 930                                 ax->stats.rx_errors++;
 
 935                 kiss_unesc(ax, *cp++);
 
 939         if (test_and_clear_bit(TTY_THROTTLED, &tty->flags)
 
 940             && tty->driver->unthrottle)
 
 941                 tty->driver->unthrottle(tty);
 
 945  * Called by the driver when there's room for more data.  If we have
 
 946  * more packets to send, we send them here.
 
 948 static void mkiss_write_wakeup(struct tty_struct *tty)
 
 950         struct mkiss *ax = mkiss_get(tty);
 
 956         if (ax->xleft <= 0)  {
 
 957                 /* Now serial buffer is almost free & we can start
 
 958                  * transmission of another packet
 
 960                 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
 
 962                 netif_wake_queue(ax->dev);
 
 966         actual = tty->driver->write(tty, ax->xhead, ax->xleft);
 
 974 static struct tty_ldisc ax_ldisc = {
 
 975         .owner          = THIS_MODULE,
 
 976         .magic          = TTY_LDISC_MAGIC,
 
 979         .close          = mkiss_close,
 
 980         .ioctl          = mkiss_ioctl,
 
 981         .receive_buf    = mkiss_receive_buf,
 
 982         .write_wakeup   = mkiss_write_wakeup
 
 985 static char banner[] __initdata = KERN_INFO \
 
 986         "mkiss: AX.25 Multikiss, Hans Albas PE1AYX\n";
 
 987 static char msg_regfail[] __initdata = KERN_ERR \
 
 988         "mkiss: can't register line discipline (err = %d)\n";
 
 990 static int __init mkiss_init_driver(void)
 
 996         if ((status = tty_register_ldisc(N_AX25, &ax_ldisc)) != 0)
 
1002 static const char msg_unregfail[] __exitdata = KERN_ERR \
 
1003         "mkiss: can't unregister line discipline (err = %d)\n";
 
1005 static void __exit mkiss_exit_driver(void)
 
1009         if ((ret = tty_unregister_ldisc(N_AX25)))
 
1010                 printk(msg_unregfail, ret);
 
1013 MODULE_AUTHOR("Ralf Baechle DL5RB <ralf@linux-mips.org>");
 
1014 MODULE_DESCRIPTION("KISS driver for AX.25 over TTYs");
 
1015 module_param(crc_force, int, 0);
 
1016 MODULE_PARM_DESC(crc_force, "crc [0 = auto | 1 = none | 2 = flexnet | 3 = smack]");
 
1017 MODULE_LICENSE("GPL");
 
1018 MODULE_ALIAS_LDISC(N_AX25);
 
1020 module_init(mkiss_init_driver);
 
1021 module_exit(mkiss_exit_driver);