linux/drivers/tty/n_gsm.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * n_gsm.c GSM 0710 tty multiplexor
   4 * Copyright (c) 2009/10 Intel Corporation
   5 *
   6 *      * THIS IS A DEVELOPMENT SNAPSHOT IT IS NOT A FINAL RELEASE *
   7 *
   8 * TO DO:
   9 *      Mostly done:    ioctls for setting modes/timing
  10 *      Partly done:    hooks so you can pull off frames to non tty devs
  11 *      Restart DLCI 0 when it closes ?
  12 *      Improve the tx engine
  13 *      Resolve tx side locking by adding a queue_head and routing
  14 *              all control traffic via it
  15 *      General tidy/document
  16 *      Review the locking/move to refcounts more (mux now moved to an
  17 *              alloc/free model ready)
  18 *      Use newest tty open/close port helpers and install hooks
  19 *      What to do about power functions ?
  20 *      Termios setting and negotiation
  21 *      Do we need a 'which mux are you' ioctl to correlate mux and tty sets
  22 *
  23 */
  24
  25#include <linux/types.h>
  26#include <linux/major.h>
  27#include <linux/errno.h>
  28#include <linux/signal.h>
  29#include <linux/fcntl.h>
  30#include <linux/sched/signal.h>
  31#include <linux/interrupt.h>
  32#include <linux/tty.h>
  33#include <linux/ctype.h>
  34#include <linux/mm.h>
  35#include <linux/string.h>
  36#include <linux/slab.h>
  37#include <linux/poll.h>
  38#include <linux/bitops.h>
  39#include <linux/file.h>
  40#include <linux/uaccess.h>
  41#include <linux/module.h>
  42#include <linux/timer.h>
  43#include <linux/tty_flip.h>
  44#include <linux/tty_driver.h>
  45#include <linux/serial.h>
  46#include <linux/kfifo.h>
  47#include <linux/skbuff.h>
  48#include <net/arp.h>
  49#include <linux/ip.h>
  50#include <linux/netdevice.h>
  51#include <linux/etherdevice.h>
  52#include <linux/gsmmux.h>
  53
  54static int debug;
  55module_param(debug, int, 0600);
  56
  57/* Defaults: these are from the specification */
  58
  59#define T1      10              /* 100mS */
  60#define T2      34              /* 333mS */
  61#define N2      3               /* Retry 3 times */
  62
  63/* Use long timers for testing at low speed with debug on */
  64#ifdef DEBUG_TIMING
  65#define T1      100
  66#define T2      200
  67#endif
  68
  69/*
  70 * Semi-arbitrary buffer size limits. 0710 is normally run with 32-64 byte
  71 * limits so this is plenty
  72 */
  73#define MAX_MRU 1500
  74#define MAX_MTU 1500
  75#define GSM_NET_TX_TIMEOUT (HZ*10)
  76
  77/**
  78 *      struct gsm_mux_net      -       network interface
  79 *      @struct gsm_dlci* dlci
  80 *
  81 *      Created when net interface is initialized.
  82 **/
  83struct gsm_mux_net {
  84        struct kref ref;
  85        struct gsm_dlci *dlci;
  86};
  87
  88/*
  89 *      Each block of data we have queued to go out is in the form of
  90 *      a gsm_msg which holds everything we need in a link layer independent
  91 *      format
  92 */
  93
  94struct gsm_msg {
  95        struct list_head list;
  96        u8 addr;                /* DLCI address + flags */
  97        u8 ctrl;                /* Control byte + flags */
  98        unsigned int len;       /* Length of data block (can be zero) */
  99        unsigned char *data;    /* Points into buffer but not at the start */
 100        unsigned char buffer[0];
 101};
 102
 103/*
 104 *      Each active data link has a gsm_dlci structure associated which ties
 105 *      the link layer to an optional tty (if the tty side is open). To avoid
 106 *      complexity right now these are only ever freed up when the mux is
 107 *      shut down.
 108 *
 109 *      At the moment we don't free DLCI objects until the mux is torn down
 110 *      this avoid object life time issues but might be worth review later.
 111 */
 112
 113struct gsm_dlci {
 114        struct gsm_mux *gsm;
 115        int addr;
 116        int state;
 117#define DLCI_CLOSED             0
 118#define DLCI_OPENING            1       /* Sending SABM not seen UA */
 119#define DLCI_OPEN               2       /* SABM/UA complete */
 120#define DLCI_CLOSING            3       /* Sending DISC not seen UA/DM */
 121        struct mutex mutex;
 122
 123        /* Link layer */
 124        int mode;
 125#define DLCI_MODE_ABM           0       /* Normal Asynchronous Balanced Mode */
 126#define DLCI_MODE_ADM           1       /* Asynchronous Disconnected Mode */
 127        spinlock_t lock;        /* Protects the internal state */
 128        struct timer_list t1;   /* Retransmit timer for SABM and UA */
 129        int retries;
 130        /* Uplink tty if active */
 131        struct tty_port port;   /* The tty bound to this DLCI if there is one */
 132        struct kfifo *fifo;     /* Queue fifo for the DLCI */
 133        struct kfifo _fifo;     /* For new fifo API porting only */
 134        int adaption;           /* Adaption layer in use */
 135        int prev_adaption;
 136        u32 modem_rx;           /* Our incoming virtual modem lines */
 137        u32 modem_tx;           /* Our outgoing modem lines */
 138        int dead;               /* Refuse re-open */
 139        /* Flow control */
 140        int throttled;          /* Private copy of throttle state */
 141        int constipated;        /* Throttle status for outgoing */
 142        /* Packetised I/O */
 143        struct sk_buff *skb;    /* Frame being sent */
 144        struct sk_buff_head skb_list;   /* Queued frames */
 145        /* Data handling callback */
 146        void (*data)(struct gsm_dlci *dlci, const u8 *data, int len);
 147        void (*prev_data)(struct gsm_dlci *dlci, const u8 *data, int len);
 148        struct net_device *net; /* network interface, if created */
 149};
 150
 151/* DLCI 0, 62/63 are special or reserved see gsmtty_open */
 152
 153#define NUM_DLCI                64
 154
 155/*
 156 *      DLCI 0 is used to pass control blocks out of band of the data
 157 *      flow (and with a higher link priority). One command can be outstanding
 158 *      at a time and we use this structure to manage them. They are created
 159 *      and destroyed by the user context, and updated by the receive paths
 160 *      and timers
 161 */
 162
 163struct gsm_control {
 164        u8 cmd;         /* Command we are issuing */
 165        u8 *data;       /* Data for the command in case we retransmit */
 166        int len;        /* Length of block for retransmission */
 167        int done;       /* Done flag */
 168        int error;      /* Error if any */
 169};
 170
 171/*
 172 *      Each GSM mux we have is represented by this structure. If we are
 173 *      operating as an ldisc then we use this structure as our ldisc
 174 *      state. We need to sort out lifetimes and locking with respect
 175 *      to the gsm mux array. For now we don't free DLCI objects that
 176 *      have been instantiated until the mux itself is terminated.
 177 *
 178 *      To consider further: tty open versus mux shutdown.
 179 */
 180
 181struct gsm_mux {
 182        struct tty_struct *tty;         /* The tty our ldisc is bound to */
 183        spinlock_t lock;
 184        struct mutex mutex;
 185        unsigned int num;
 186        struct kref ref;
 187
 188        /* Events on the GSM channel */
 189        wait_queue_head_t event;
 190
 191        /* Bits for GSM mode decoding */
 192
 193        /* Framing Layer */
 194        unsigned char *buf;
 195        int state;
 196#define GSM_SEARCH              0
 197#define GSM_START               1
 198#define GSM_ADDRESS             2
 199#define GSM_CONTROL             3
 200#define GSM_LEN                 4
 201#define GSM_DATA                5
 202#define GSM_FCS                 6
 203#define GSM_OVERRUN             7
 204#define GSM_LEN0                8
 205#define GSM_LEN1                9
 206#define GSM_SSOF                10
 207        unsigned int len;
 208        unsigned int address;
 209        unsigned int count;
 210        int escape;
 211        int encoding;
 212        u8 control;
 213        u8 fcs;
 214        u8 received_fcs;
 215        u8 *txframe;                    /* TX framing buffer */
 216
 217        /* Methods for the receiver side */
 218        void (*receive)(struct gsm_mux *gsm, u8 ch);
 219        void (*error)(struct gsm_mux *gsm, u8 ch, u8 flag);
 220        /* And transmit side */
 221        int (*output)(struct gsm_mux *mux, u8 *data, int len);
 222
 223        /* Link Layer */
 224        unsigned int mru;
 225        unsigned int mtu;
 226        int initiator;                  /* Did we initiate connection */
 227        int dead;                       /* Has the mux been shut down */
 228        struct gsm_dlci *dlci[NUM_DLCI];
 229        int constipated;                /* Asked by remote to shut up */
 230
 231        spinlock_t tx_lock;
 232        unsigned int tx_bytes;          /* TX data outstanding */
 233#define TX_THRESH_HI            8192
 234#define TX_THRESH_LO            2048
 235        struct list_head tx_list;       /* Pending data packets */
 236
 237        /* Control messages */
 238        struct timer_list t2_timer;     /* Retransmit timer for commands */
 239        int cretries;                   /* Command retry counter */
 240        struct gsm_control *pending_cmd;/* Our current pending command */
 241        spinlock_t control_lock;        /* Protects the pending command */
 242
 243        /* Configuration */
 244        int adaption;           /* 1 or 2 supported */
 245        u8 ftype;               /* UI or UIH */
 246        int t1, t2;             /* Timers in 1/100th of a sec */
 247        int n2;                 /* Retry count */
 248
 249        /* Statistics (not currently exposed) */
 250        unsigned long bad_fcs;
 251        unsigned long malformed;
 252        unsigned long io_error;
 253        unsigned long bad_size;
 254        unsigned long unsupported;
 255};
 256
 257
 258/*
 259 *      Mux objects - needed so that we can translate a tty index into the
 260 *      relevant mux and DLCI.
 261 */
 262
 263#define MAX_MUX         4                       /* 256 minors */
 264static struct gsm_mux *gsm_mux[MAX_MUX];        /* GSM muxes */
 265static spinlock_t gsm_mux_lock;
 266
 267static struct tty_driver *gsm_tty_driver;
 268
 269/*
 270 *      This section of the driver logic implements the GSM encodings
 271 *      both the basic and the 'advanced'. Reliable transport is not
 272 *      supported.
 273 */
 274
 275#define CR                      0x02
 276#define EA                      0x01
 277#define PF                      0x10
 278
 279/* I is special: the rest are ..*/
 280#define RR                      0x01
 281#define UI                      0x03
 282#define RNR                     0x05
 283#define REJ                     0x09
 284#define DM                      0x0F
 285#define SABM                    0x2F
 286#define DISC                    0x43
 287#define UA                      0x63
 288#define UIH                     0xEF
 289
 290/* Channel commands */
 291#define CMD_NSC                 0x09
 292#define CMD_TEST                0x11
 293#define CMD_PSC                 0x21
 294#define CMD_RLS                 0x29
 295#define CMD_FCOFF               0x31
 296#define CMD_PN                  0x41
 297#define CMD_RPN                 0x49
 298#define CMD_FCON                0x51
 299#define CMD_CLD                 0x61
 300#define CMD_SNC                 0x69
 301#define CMD_MSC                 0x71
 302
 303/* Virtual modem bits */
 304#define MDM_FC                  0x01
 305#define MDM_RTC                 0x02
 306#define MDM_RTR                 0x04
 307#define MDM_IC                  0x20
 308#define MDM_DV                  0x40
 309
 310#define GSM0_SOF                0xF9
 311#define GSM1_SOF                0x7E
 312#define GSM1_ESCAPE             0x7D
 313#define GSM1_ESCAPE_BITS        0x20
 314#define XON                     0x11
 315#define XOFF                    0x13
 316
 317static const struct tty_port_operations gsm_port_ops;
 318
 319/*
 320 *      CRC table for GSM 0710
 321 */
 322
 323static const u8 gsm_fcs8[256] = {
 324        0x00, 0x91, 0xE3, 0x72, 0x07, 0x96, 0xE4, 0x75,
 325        0x0E, 0x9F, 0xED, 0x7C, 0x09, 0x98, 0xEA, 0x7B,
 326        0x1C, 0x8D, 0xFF, 0x6E, 0x1B, 0x8A, 0xF8, 0x69,
 327        0x12, 0x83, 0xF1, 0x60, 0x15, 0x84, 0xF6, 0x67,
 328        0x38, 0xA9, 0xDB, 0x4A, 0x3F, 0xAE, 0xDC, 0x4D,
 329        0x36, 0xA7, 0xD5, 0x44, 0x31, 0xA0, 0xD2, 0x43,
 330        0x24, 0xB5, 0xC7, 0x56, 0x23, 0xB2, 0xC0, 0x51,
 331        0x2A, 0xBB, 0xC9, 0x58, 0x2D, 0xBC, 0xCE, 0x5F,
 332        0x70, 0xE1, 0x93, 0x02, 0x77, 0xE6, 0x94, 0x05,
 333        0x7E, 0xEF, 0x9D, 0x0C, 0x79, 0xE8, 0x9A, 0x0B,
 334        0x6C, 0xFD, 0x8F, 0x1E, 0x6B, 0xFA, 0x88, 0x19,
 335        0x62, 0xF3, 0x81, 0x10, 0x65, 0xF4, 0x86, 0x17,
 336        0x48, 0xD9, 0xAB, 0x3A, 0x4F, 0xDE, 0xAC, 0x3D,
 337        0x46, 0xD7, 0xA5, 0x34, 0x41, 0xD0, 0xA2, 0x33,
 338        0x54, 0xC5, 0xB7, 0x26, 0x53, 0xC2, 0xB0, 0x21,
 339        0x5A, 0xCB, 0xB9, 0x28, 0x5D, 0xCC, 0xBE, 0x2F,
 340        0xE0, 0x71, 0x03, 0x92, 0xE7, 0x76, 0x04, 0x95,
 341        0xEE, 0x7F, 0x0D, 0x9C, 0xE9, 0x78, 0x0A, 0x9B,
 342        0xFC, 0x6D, 0x1F, 0x8E, 0xFB, 0x6A, 0x18, 0x89,
 343        0xF2, 0x63, 0x11, 0x80, 0xF5, 0x64, 0x16, 0x87,
 344        0xD8, 0x49, 0x3B, 0xAA, 0xDF, 0x4E, 0x3C, 0xAD,
 345        0xD6, 0x47, 0x35, 0xA4, 0xD1, 0x40, 0x32, 0xA3,
 346        0xC4, 0x55, 0x27, 0xB6, 0xC3, 0x52, 0x20, 0xB1,
 347        0xCA, 0x5B, 0x29, 0xB8, 0xCD, 0x5C, 0x2E, 0xBF,
 348        0x90, 0x01, 0x73, 0xE2, 0x97, 0x06, 0x74, 0xE5,
 349        0x9E, 0x0F, 0x7D, 0xEC, 0x99, 0x08, 0x7A, 0xEB,
 350        0x8C, 0x1D, 0x6F, 0xFE, 0x8B, 0x1A, 0x68, 0xF9,
 351        0x82, 0x13, 0x61, 0xF0, 0x85, 0x14, 0x66, 0xF7,
 352        0xA8, 0x39, 0x4B, 0xDA, 0xAF, 0x3E, 0x4C, 0xDD,
 353        0xA6, 0x37, 0x45, 0xD4, 0xA1, 0x30, 0x42, 0xD3,
 354        0xB4, 0x25, 0x57, 0xC6, 0xB3, 0x22, 0x50, 0xC1,
 355        0xBA, 0x2B, 0x59, 0xC8, 0xBD, 0x2C, 0x5E, 0xCF
 356};
 357
 358#define INIT_FCS        0xFF
 359#define GOOD_FCS        0xCF
 360
 361/**
 362 *      gsm_fcs_add     -       update FCS
 363 *      @fcs: Current FCS
 364 *      @c: Next data
 365 *
 366 *      Update the FCS to include c. Uses the algorithm in the specification
 367 *      notes.
 368 */
 369
 370static inline u8 gsm_fcs_add(u8 fcs, u8 c)
 371{
 372        return gsm_fcs8[fcs ^ c];
 373}
 374
 375/**
 376 *      gsm_fcs_add_block       -       update FCS for a block
 377 *      @fcs: Current FCS
 378 *      @c: buffer of data
 379 *      @len: length of buffer
 380 *
 381 *      Update the FCS to include c. Uses the algorithm in the specification
 382 *      notes.
 383 */
 384
 385static inline u8 gsm_fcs_add_block(u8 fcs, u8 *c, int len)
 386{
 387        while (len--)
 388                fcs = gsm_fcs8[fcs ^ *c++];
 389        return fcs;
 390}
 391
 392/**
 393 *      gsm_read_ea             -       read a byte into an EA
 394 *      @val: variable holding value
 395 *      c: byte going into the EA
 396 *
 397 *      Processes one byte of an EA. Updates the passed variable
 398 *      and returns 1 if the EA is now completely read
 399 */
 400
 401static int gsm_read_ea(unsigned int *val, u8 c)
 402{
 403        /* Add the next 7 bits into the value */
 404        *val <<= 7;
 405        *val |= c >> 1;
 406        /* Was this the last byte of the EA 1 = yes*/
 407        return c & EA;
 408}
 409
 410/**
 411 *      gsm_encode_modem        -       encode modem data bits
 412 *      @dlci: DLCI to encode from
 413 *
 414 *      Returns the correct GSM encoded modem status bits (6 bit field) for
 415 *      the current status of the DLCI and attached tty object
 416 */
 417
 418static u8 gsm_encode_modem(const struct gsm_dlci *dlci)
 419{
 420        u8 modembits = 0;
 421        /* FC is true flow control not modem bits */
 422        if (dlci->throttled)
 423                modembits |= MDM_FC;
 424        if (dlci->modem_tx & TIOCM_DTR)
 425                modembits |= MDM_RTC;
 426        if (dlci->modem_tx & TIOCM_RTS)
 427                modembits |= MDM_RTR;
 428        if (dlci->modem_tx & TIOCM_RI)
 429                modembits |= MDM_IC;
 430        if (dlci->modem_tx & TIOCM_CD)
 431                modembits |= MDM_DV;
 432        return modembits;
 433}
 434
 435/**
 436 *      gsm_print_packet        -       display a frame for debug
 437 *      @hdr: header to print before decode
 438 *      @addr: address EA from the frame
 439 *      @cr: C/R bit from the frame
 440 *      @control: control including PF bit
 441 *      @data: following data bytes
 442 *      @dlen: length of data
 443 *
 444 *      Displays a packet in human readable format for debugging purposes. The
 445 *      style is based on amateur radio LAP-B dump display.
 446 */
 447
 448static void gsm_print_packet(const char *hdr, int addr, int cr,
 449                                        u8 control, const u8 *data, int dlen)
 450{
 451        if (!(debug & 1))
 452                return;
 453
 454        pr_info("%s %d) %c: ", hdr, addr, "RC"[cr]);
 455
 456        switch (control & ~PF) {
 457        case SABM:
 458                pr_cont("SABM");
 459                break;
 460        case UA:
 461                pr_cont("UA");
 462                break;
 463        case DISC:
 464                pr_cont("DISC");
 465                break;
 466        case DM:
 467                pr_cont("DM");
 468                break;
 469        case UI:
 470                pr_cont("UI");
 471                break;
 472        case UIH:
 473                pr_cont("UIH");
 474                break;
 475        default:
 476                if (!(control & 0x01)) {
 477                        pr_cont("I N(S)%d N(R)%d",
 478                                (control & 0x0E) >> 1, (control & 0xE0) >> 5);
 479                } else switch (control & 0x0F) {
 480                        case RR:
 481                                pr_cont("RR(%d)", (control & 0xE0) >> 5);
 482                                break;
 483                        case RNR:
 484                                pr_cont("RNR(%d)", (control & 0xE0) >> 5);
 485                                break;
 486                        case REJ:
 487                                pr_cont("REJ(%d)", (control & 0xE0) >> 5);
 488                                break;
 489                        default:
 490                                pr_cont("[%02X]", control);
 491                }
 492        }
 493
 494        if (control & PF)
 495                pr_cont("(P)");
 496        else
 497                pr_cont("(F)");
 498
 499        if (dlen) {
 500                int ct = 0;
 501                while (dlen--) {
 502                        if (ct % 8 == 0) {
 503                                pr_cont("\n");
 504                                pr_debug("    ");
 505                        }
 506                        pr_cont("%02X ", *data++);
 507                        ct++;
 508                }
 509        }
 510        pr_cont("\n");
 511}
 512
 513
 514/*
 515 *      Link level transmission side
 516 */
 517
 518/**
 519 *      gsm_stuff_packet        -       bytestuff a packet
 520 *      @ibuf: input
 521 *      @obuf: output
 522 *      @len: length of input
 523 *
 524 *      Expand a buffer by bytestuffing it. The worst case size change
 525 *      is doubling and the caller is responsible for handing out
 526 *      suitable sized buffers.
 527 */
 528
 529static int gsm_stuff_frame(const u8 *input, u8 *output, int len)
 530{
 531        int olen = 0;
 532        while (len--) {
 533                if (*input == GSM1_SOF || *input == GSM1_ESCAPE
 534                    || *input == XON || *input == XOFF) {
 535                        *output++ = GSM1_ESCAPE;
 536                        *output++ = *input++ ^ GSM1_ESCAPE_BITS;
 537                        olen++;
 538                } else
 539                        *output++ = *input++;
 540                olen++;
 541        }
 542        return olen;
 543}
 544
 545/**
 546 *      gsm_send        -       send a control frame
 547 *      @gsm: our GSM mux
 548 *      @addr: address for control frame
 549 *      @cr: command/response bit
 550 *      @control:  control byte including PF bit
 551 *
 552 *      Format up and transmit a control frame. These do not go via the
 553 *      queueing logic as they should be transmitted ahead of data when
 554 *      they are needed.
 555 *
 556 *      FIXME: Lock versus data TX path
 557 */
 558
 559static void gsm_send(struct gsm_mux *gsm, int addr, int cr, int control)
 560{
 561        int len;
 562        u8 cbuf[10];
 563        u8 ibuf[3];
 564
 565        switch (gsm->encoding) {
 566        case 0:
 567                cbuf[0] = GSM0_SOF;
 568                cbuf[1] = (addr << 2) | (cr << 1) | EA;
 569                cbuf[2] = control;
 570                cbuf[3] = EA;   /* Length of data = 0 */
 571                cbuf[4] = 0xFF - gsm_fcs_add_block(INIT_FCS, cbuf + 1, 3);
 572                cbuf[5] = GSM0_SOF;
 573                len = 6;
 574                break;
 575        case 1:
 576        case 2:
 577                /* Control frame + packing (but not frame stuffing) in mode 1 */
 578                ibuf[0] = (addr << 2) | (cr << 1) | EA;
 579                ibuf[1] = control;
 580                ibuf[2] = 0xFF - gsm_fcs_add_block(INIT_FCS, ibuf, 2);
 581                /* Stuffing may double the size worst case */
 582                len = gsm_stuff_frame(ibuf, cbuf + 1, 3);
 583                /* Now add the SOF markers */
 584                cbuf[0] = GSM1_SOF;
 585                cbuf[len + 1] = GSM1_SOF;
 586                /* FIXME: we can omit the lead one in many cases */
 587                len += 2;
 588                break;
 589        default:
 590                WARN_ON(1);
 591                return;
 592        }
 593        gsm->output(gsm, cbuf, len);
 594        gsm_print_packet("-->", addr, cr, control, NULL, 0);
 595}
 596
 597/**
 598 *      gsm_response    -       send a control response
 599 *      @gsm: our GSM mux
 600 *      @addr: address for control frame
 601 *      @control:  control byte including PF bit
 602 *
 603 *      Format up and transmit a link level response frame.
 604 */
 605
 606static inline void gsm_response(struct gsm_mux *gsm, int addr, int control)
 607{
 608        gsm_send(gsm, addr, 0, control);
 609}
 610
 611/**
 612 *      gsm_command     -       send a control command
 613 *      @gsm: our GSM mux
 614 *      @addr: address for control frame
 615 *      @control:  control byte including PF bit
 616 *
 617 *      Format up and transmit a link level command frame.
 618 */
 619
 620static inline void gsm_command(struct gsm_mux *gsm, int addr, int control)
 621{
 622        gsm_send(gsm, addr, 1, control);
 623}
 624
 625/* Data transmission */
 626
 627#define HDR_LEN         6       /* ADDR CTRL [LEN.2] DATA FCS */
 628
 629/**
 630 *      gsm_data_alloc          -       allocate data frame
 631 *      @gsm: GSM mux
 632 *      @addr: DLCI address
 633 *      @len: length excluding header and FCS
 634 *      @ctrl: control byte
 635 *
 636 *      Allocate a new data buffer for sending frames with data. Space is left
 637 *      at the front for header bytes but that is treated as an implementation
 638 *      detail and not for the high level code to use
 639 */
 640
 641static struct gsm_msg *gsm_data_alloc(struct gsm_mux *gsm, u8 addr, int len,
 642                                                                u8 ctrl)
 643{
 644        struct gsm_msg *m = kmalloc(sizeof(struct gsm_msg) + len + HDR_LEN,
 645                                                                GFP_ATOMIC);
 646        if (m == NULL)
 647                return NULL;
 648        m->data = m->buffer + HDR_LEN - 1;      /* Allow for FCS */
 649        m->len = len;
 650        m->addr = addr;
 651        m->ctrl = ctrl;
 652        INIT_LIST_HEAD(&m->list);
 653        return m;
 654}
 655
 656/**
 657 *      gsm_data_kick           -       poke the queue
 658 *      @gsm: GSM Mux
 659 *
 660 *      The tty device has called us to indicate that room has appeared in
 661 *      the transmit queue. Ram more data into the pipe if we have any
 662 *      If we have been flow-stopped by a CMD_FCOFF, then we can only
 663 *      send messages on DLCI0 until CMD_FCON
 664 *
 665 *      FIXME: lock against link layer control transmissions
 666 */
 667
 668static void gsm_data_kick(struct gsm_mux *gsm)
 669{
 670        struct gsm_msg *msg, *nmsg;
 671        int len;
 672        int skip_sof = 0;
 673
 674        list_for_each_entry_safe(msg, nmsg, &gsm->tx_list, list) {
 675                if (gsm->constipated && msg->addr)
 676                        continue;
 677                if (gsm->encoding != 0) {
 678                        gsm->txframe[0] = GSM1_SOF;
 679                        len = gsm_stuff_frame(msg->data,
 680                                                gsm->txframe + 1, msg->len);
 681                        gsm->txframe[len + 1] = GSM1_SOF;
 682                        len += 2;
 683                } else {
 684                        gsm->txframe[0] = GSM0_SOF;
 685                        memcpy(gsm->txframe + 1 , msg->data, msg->len);
 686                        gsm->txframe[msg->len + 1] = GSM0_SOF;
 687                        len = msg->len + 2;
 688                }
 689
 690                if (debug & 4)
 691                        print_hex_dump_bytes("gsm_data_kick: ",
 692                                             DUMP_PREFIX_OFFSET,
 693                                             gsm->txframe, len);
 694
 695                if (gsm->output(gsm, gsm->txframe + skip_sof,
 696                                                len - skip_sof) < 0)
 697                        break;
 698                /* FIXME: Can eliminate one SOF in many more cases */
 699                gsm->tx_bytes -= msg->len;
 700                /* For a burst of frames skip the extra SOF within the
 701                   burst */
 702                skip_sof = 1;
 703
 704                list_del(&msg->list);
 705                kfree(msg);
 706        }
 707}
 708
 709/**
 710 *      __gsm_data_queue                -       queue a UI or UIH frame
 711 *      @dlci: DLCI sending the data
 712 *      @msg: message queued
 713 *
 714 *      Add data to the transmit queue and try and get stuff moving
 715 *      out of the mux tty if not already doing so. The Caller must hold
 716 *      the gsm tx lock.
 717 */
 718
 719static void __gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg)
 720{
 721        struct gsm_mux *gsm = dlci->gsm;
 722        u8 *dp = msg->data;
 723        u8 *fcs = dp + msg->len;
 724
 725        /* Fill in the header */
 726        if (gsm->encoding == 0) {
 727                if (msg->len < 128)
 728                        *--dp = (msg->len << 1) | EA;
 729                else {
 730                        *--dp = (msg->len >> 7);        /* bits 7 - 15 */
 731                        *--dp = (msg->len & 127) << 1;  /* bits 0 - 6 */
 732                }
 733        }
 734
 735        *--dp = msg->ctrl;
 736        if (gsm->initiator)
 737                *--dp = (msg->addr << 2) | 2 | EA;
 738        else
 739                *--dp = (msg->addr << 2) | EA;
 740        *fcs = gsm_fcs_add_block(INIT_FCS, dp , msg->data - dp);
 741        /* Ugly protocol layering violation */
 742        if (msg->ctrl == UI || msg->ctrl == (UI|PF))
 743                *fcs = gsm_fcs_add_block(*fcs, msg->data, msg->len);
 744        *fcs = 0xFF - *fcs;
 745
 746        gsm_print_packet("Q> ", msg->addr, gsm->initiator, msg->ctrl,
 747                                                        msg->data, msg->len);
 748
 749        /* Move the header back and adjust the length, also allow for the FCS
 750           now tacked on the end */
 751        msg->len += (msg->data - dp) + 1;
 752        msg->data = dp;
 753
 754        /* Add to the actual output queue */
 755        list_add_tail(&msg->list, &gsm->tx_list);
 756        gsm->tx_bytes += msg->len;
 757        gsm_data_kick(gsm);
 758}
 759
 760/**
 761 *      gsm_data_queue          -       queue a UI or UIH frame
 762 *      @dlci: DLCI sending the data
 763 *      @msg: message queued
 764 *
 765 *      Add data to the transmit queue and try and get stuff moving
 766 *      out of the mux tty if not already doing so. Take the
 767 *      the gsm tx lock and dlci lock.
 768 */
 769
 770static void gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg)
 771{
 772        unsigned long flags;
 773        spin_lock_irqsave(&dlci->gsm->tx_lock, flags);
 774        __gsm_data_queue(dlci, msg);
 775        spin_unlock_irqrestore(&dlci->gsm->tx_lock, flags);
 776}
 777
 778/**
 779 *      gsm_dlci_data_output    -       try and push data out of a DLCI
 780 *      @gsm: mux
 781 *      @dlci: the DLCI to pull data from
 782 *
 783 *      Pull data from a DLCI and send it into the transmit queue if there
 784 *      is data. Keep to the MRU of the mux. This path handles the usual tty
 785 *      interface which is a byte stream with optional modem data.
 786 *
 787 *      Caller must hold the tx_lock of the mux.
 788 */
 789
 790static int gsm_dlci_data_output(struct gsm_mux *gsm, struct gsm_dlci *dlci)
 791{
 792        struct gsm_msg *msg;
 793        u8 *dp;
 794        int len, total_size, size;
 795        int h = dlci->adaption - 1;
 796
 797        total_size = 0;
 798        while (1) {
 799                len = kfifo_len(dlci->fifo);
 800                if (len == 0)
 801                        return total_size;
 802
 803                /* MTU/MRU count only the data bits */
 804                if (len > gsm->mtu)
 805                        len = gsm->mtu;
 806
 807                size = len + h;
 808
 809                msg = gsm_data_alloc(gsm, dlci->addr, size, gsm->ftype);
 810                /* FIXME: need a timer or something to kick this so it can't
 811                   get stuck with no work outstanding and no buffer free */
 812                if (msg == NULL)
 813                        return -ENOMEM;
 814                dp = msg->data;
 815                switch (dlci->adaption) {
 816                case 1: /* Unstructured */
 817                        break;
 818                case 2: /* Unstructed with modem bits.
 819                Always one byte as we never send inline break data */
 820                        *dp++ = gsm_encode_modem(dlci);
 821                        break;
 822                }
 823                WARN_ON(kfifo_out_locked(dlci->fifo, dp , len, &dlci->lock) != len);
 824                __gsm_data_queue(dlci, msg);
 825                total_size += size;
 826        }
 827        /* Bytes of data we used up */
 828        return total_size;
 829}
 830
 831/**
 832 *      gsm_dlci_data_output_framed  -  try and push data out of a DLCI
 833 *      @gsm: mux
 834 *      @dlci: the DLCI to pull data from
 835 *
 836 *      Pull data from a DLCI and send it into the transmit queue if there
 837 *      is data. Keep to the MRU of the mux. This path handles framed data
 838 *      queued as skbuffs to the DLCI.
 839 *
 840 *      Caller must hold the tx_lock of the mux.
 841 */
 842
 843static int gsm_dlci_data_output_framed(struct gsm_mux *gsm,
 844                                                struct gsm_dlci *dlci)
 845{
 846        struct gsm_msg *msg;
 847        u8 *dp;
 848        int len, size;
 849        int last = 0, first = 0;
 850        int overhead = 0;
 851
 852        /* One byte per frame is used for B/F flags */
 853        if (dlci->adaption == 4)
 854                overhead = 1;
 855
 856        /* dlci->skb is locked by tx_lock */
 857        if (dlci->skb == NULL) {
 858                dlci->skb = skb_dequeue_tail(&dlci->skb_list);
 859                if (dlci->skb == NULL)
 860                        return 0;
 861                first = 1;
 862        }
 863        len = dlci->skb->len + overhead;
 864
 865        /* MTU/MRU count only the data bits */
 866        if (len > gsm->mtu) {
 867                if (dlci->adaption == 3) {
 868                        /* Over long frame, bin it */
 869                        dev_kfree_skb_any(dlci->skb);
 870                        dlci->skb = NULL;
 871                        return 0;
 872                }
 873                len = gsm->mtu;
 874        } else
 875                last = 1;
 876
 877        size = len + overhead;
 878        msg = gsm_data_alloc(gsm, dlci->addr, size, gsm->ftype);
 879
 880        /* FIXME: need a timer or something to kick this so it can't
 881           get stuck with no work outstanding and no buffer free */
 882        if (msg == NULL) {
 883                skb_queue_tail(&dlci->skb_list, dlci->skb);
 884                dlci->skb = NULL;
 885                return -ENOMEM;
 886        }
 887        dp = msg->data;
 888
 889        if (dlci->adaption == 4) { /* Interruptible framed (Packetised Data) */
 890                /* Flag byte to carry the start/end info */
 891                *dp++ = last << 7 | first << 6 | 1;     /* EA */
 892                len--;
 893        }
 894        memcpy(dp, dlci->skb->data, len);
 895        skb_pull(dlci->skb, len);
 896        __gsm_data_queue(dlci, msg);
 897        if (last) {
 898                dev_kfree_skb_any(dlci->skb);
 899                dlci->skb = NULL;
 900        }
 901        return size;
 902}
 903
 904/**
 905 *      gsm_dlci_data_sweep             -       look for data to send
 906 *      @gsm: the GSM mux
 907 *
 908 *      Sweep the GSM mux channels in priority order looking for ones with
 909 *      data to send. We could do with optimising this scan a bit. We aim
 910 *      to fill the queue totally or up to TX_THRESH_HI bytes. Once we hit
 911 *      TX_THRESH_LO we get called again
 912 *
 913 *      FIXME: We should round robin between groups and in theory you can
 914 *      renegotiate DLCI priorities with optional stuff. Needs optimising.
 915 */
 916
 917static void gsm_dlci_data_sweep(struct gsm_mux *gsm)
 918{
 919        int len;
 920        /* Priority ordering: We should do priority with RR of the groups */
 921        int i = 1;
 922
 923        while (i < NUM_DLCI) {
 924                struct gsm_dlci *dlci;
 925
 926                if (gsm->tx_bytes > TX_THRESH_HI)
 927                        break;
 928                dlci = gsm->dlci[i];
 929                if (dlci == NULL || dlci->constipated) {
 930                        i++;
 931                        continue;
 932                }
 933                if (dlci->adaption < 3 && !dlci->net)
 934                        len = gsm_dlci_data_output(gsm, dlci);
 935                else
 936                        len = gsm_dlci_data_output_framed(gsm, dlci);
 937                if (len < 0)
 938                        break;
 939                /* DLCI empty - try the next */
 940                if (len == 0)
 941                        i++;
 942        }
 943}
 944
 945/**
 946 *      gsm_dlci_data_kick      -       transmit if possible
 947 *      @dlci: DLCI to kick
 948 *
 949 *      Transmit data from this DLCI if the queue is empty. We can't rely on
 950 *      a tty wakeup except when we filled the pipe so we need to fire off
 951 *      new data ourselves in other cases.
 952 */
 953
 954static void gsm_dlci_data_kick(struct gsm_dlci *dlci)
 955{
 956        unsigned long flags;
 957        int sweep;
 958
 959        if (dlci->constipated)
 960                return;
 961
 962        spin_lock_irqsave(&dlci->gsm->tx_lock, flags);
 963        /* If we have nothing running then we need to fire up */
 964        sweep = (dlci->gsm->tx_bytes < TX_THRESH_LO);
 965        if (dlci->gsm->tx_bytes == 0) {
 966                if (dlci->net)
 967                        gsm_dlci_data_output_framed(dlci->gsm, dlci);
 968                else
 969                        gsm_dlci_data_output(dlci->gsm, dlci);
 970        }
 971        if (sweep)
 972                gsm_dlci_data_sweep(dlci->gsm);
 973        spin_unlock_irqrestore(&dlci->gsm->tx_lock, flags);
 974}
 975
 976/*
 977 *      Control message processing
 978 */
 979
 980
 981/**
 982 *      gsm_control_reply       -       send a response frame to a control
 983 *      @gsm: gsm channel
 984 *      @cmd: the command to use
 985 *      @data: data to follow encoded info
 986 *      @dlen: length of data
 987 *
 988 *      Encode up and queue a UI/UIH frame containing our response.
 989 */
 990
 991static void gsm_control_reply(struct gsm_mux *gsm, int cmd, const u8 *data,
 992                                        int dlen)
 993{
 994        struct gsm_msg *msg;
 995        msg = gsm_data_alloc(gsm, 0, dlen + 2, gsm->ftype);
 996        if (msg == NULL)
 997                return;
 998        msg->data[0] = (cmd & 0xFE) << 1 | EA;  /* Clear C/R */
 999        msg->data[1] = (dlen << 1) | EA;
1000        memcpy(msg->data + 2, data, dlen);
1001        gsm_data_queue(gsm->dlci[0], msg);
1002}
1003
1004/**
1005 *      gsm_process_modem       -       process received modem status
1006 *      @tty: virtual tty bound to the DLCI
1007 *      @dlci: DLCI to affect
1008 *      @modem: modem bits (full EA)
1009 *
1010 *      Used when a modem control message or line state inline in adaption
1011 *      layer 2 is processed. Sort out the local modem state and throttles
1012 */
1013
1014static void gsm_process_modem(struct tty_struct *tty, struct gsm_dlci *dlci,
1015                                                        u32 modem, int clen)
1016{
1017        int  mlines = 0;
1018        u8 brk = 0;
1019        int fc;
1020
1021        /* The modem status command can either contain one octet (v.24 signals)
1022           or two octets (v.24 signals + break signals). The length field will
1023           either be 2 or 3 respectively. This is specified in section
1024           5.4.6.3.7 of the  27.010 mux spec. */
1025
1026        if (clen == 2)
1027                modem = modem & 0x7f;
1028        else {
1029                brk = modem & 0x7f;
1030                modem = (modem >> 7) & 0x7f;
1031        }
1032
1033        /* Flow control/ready to communicate */
1034        fc = (modem & MDM_FC) || !(modem & MDM_RTR);
1035        if (fc && !dlci->constipated) {
1036                /* Need to throttle our output on this device */
1037                dlci->constipated = 1;
1038        } else if (!fc && dlci->constipated) {
1039                dlci->constipated = 0;
1040                gsm_dlci_data_kick(dlci);
1041        }
1042
1043        /* Map modem bits */
1044        if (modem & MDM_RTC)
1045                mlines |= TIOCM_DSR | TIOCM_DTR;
1046        if (modem & MDM_RTR)
1047                mlines |= TIOCM_RTS | TIOCM_CTS;
1048        if (modem & MDM_IC)
1049                mlines |= TIOCM_RI;
1050        if (modem & MDM_DV)
1051                mlines |= TIOCM_CD;
1052
1053        /* Carrier drop -> hangup */
1054        if (tty) {
1055                if ((mlines & TIOCM_CD) == 0 && (dlci->modem_rx & TIOCM_CD))
1056                        if (!C_CLOCAL(tty))
1057                                tty_hangup(tty);
1058        }
1059        if (brk & 0x01)
1060                tty_insert_flip_char(&dlci->port, 0, TTY_BREAK);
1061        dlci->modem_rx = mlines;
1062}
1063
1064/**
1065 *      gsm_control_modem       -       modem status received
1066 *      @gsm: GSM channel
1067 *      @data: data following command
1068 *      @clen: command length
1069 *
1070 *      We have received a modem status control message. This is used by
1071 *      the GSM mux protocol to pass virtual modem line status and optionally
1072 *      to indicate break signals. Unpack it, convert to Linux representation
1073 *      and if need be stuff a break message down the tty.
1074 */
1075
1076static void gsm_control_modem(struct gsm_mux *gsm, const u8 *data, int clen)
1077{
1078        unsigned int addr = 0;
1079        unsigned int modem = 0;
1080        unsigned int brk = 0;
1081        struct gsm_dlci *dlci;
1082        int len = clen;
1083        const u8 *dp = data;
1084        struct tty_struct *tty;
1085
1086        while (gsm_read_ea(&addr, *dp++) == 0) {
1087                len--;
1088                if (len == 0)
1089                        return;
1090        }
1091        /* Must be at least one byte following the EA */
1092        len--;
1093        if (len <= 0)
1094                return;
1095
1096        addr >>= 1;
1097        /* Closed port, or invalid ? */
1098        if (addr == 0 || addr >= NUM_DLCI || gsm->dlci[addr] == NULL)
1099                return;
1100        dlci = gsm->dlci[addr];
1101
1102        while (gsm_read_ea(&modem, *dp++) == 0) {
1103                len--;
1104                if (len == 0)
1105                        return;
1106        }
1107        len--;
1108        if (len > 0) {
1109                while (gsm_read_ea(&brk, *dp++) == 0) {
1110                        len--;
1111                        if (len == 0)
1112                                return;
1113                }
1114                modem <<= 7;
1115                modem |= (brk & 0x7f);
1116        }
1117        tty = tty_port_tty_get(&dlci->port);
1118        gsm_process_modem(tty, dlci, modem, clen);
1119        if (tty) {
1120                tty_wakeup(tty);
1121                tty_kref_put(tty);
1122        }
1123        gsm_control_reply(gsm, CMD_MSC, data, clen);
1124}
1125
1126/**
1127 *      gsm_control_rls         -       remote line status
1128 *      @gsm: GSM channel
1129 *      @data: data bytes
1130 *      @clen: data length
1131 *
1132 *      The modem sends us a two byte message on the control channel whenever
1133 *      it wishes to send us an error state from the virtual link. Stuff
1134 *      this into the uplink tty if present
1135 */
1136
1137static void gsm_control_rls(struct gsm_mux *gsm, const u8 *data, int clen)
1138{
1139        struct tty_port *port;
1140        unsigned int addr = 0;
1141        u8 bits;
1142        int len = clen;
1143        const u8 *dp = data;
1144
1145        while (gsm_read_ea(&addr, *dp++) == 0) {
1146                len--;
1147                if (len == 0)
1148                        return;
1149        }
1150        /* Must be at least one byte following ea */
1151        len--;
1152        if (len <= 0)
1153                return;
1154        addr >>= 1;
1155        /* Closed port, or invalid ? */
1156        if (addr == 0 || addr >= NUM_DLCI || gsm->dlci[addr] == NULL)
1157                return;
1158        /* No error ? */
1159        bits = *dp;
1160        if ((bits & 1) == 0)
1161                return;
1162
1163        port = &gsm->dlci[addr]->port;
1164
1165        if (bits & 2)
1166                tty_insert_flip_char(port, 0, TTY_OVERRUN);
1167        if (bits & 4)
1168                tty_insert_flip_char(port, 0, TTY_PARITY);
1169        if (bits & 8)
1170                tty_insert_flip_char(port, 0, TTY_FRAME);
1171
1172        tty_flip_buffer_push(port);
1173
1174        gsm_control_reply(gsm, CMD_RLS, data, clen);
1175}
1176
1177static void gsm_dlci_begin_close(struct gsm_dlci *dlci);
1178
1179/**
1180 *      gsm_control_message     -       DLCI 0 control processing
1181 *      @gsm: our GSM mux
1182 *      @command:  the command EA
1183 *      @data: data beyond the command/length EAs
1184 *      @clen: length
1185 *
1186 *      Input processor for control messages from the other end of the link.
1187 *      Processes the incoming request and queues a response frame or an
1188 *      NSC response if not supported
1189 */
1190
1191static void gsm_control_message(struct gsm_mux *gsm, unsigned int command,
1192                                                const u8 *data, int clen)
1193{
1194        u8 buf[1];
1195        unsigned long flags;
1196
1197        switch (command) {
1198        case CMD_CLD: {
1199                struct gsm_dlci *dlci = gsm->dlci[0];
1200                /* Modem wishes to close down */
1201                if (dlci) {
1202                        dlci->dead = 1;
1203                        gsm->dead = 1;
1204                        gsm_dlci_begin_close(dlci);
1205                }
1206                }
1207                break;
1208        case CMD_TEST:
1209                /* Modem wishes to test, reply with the data */
1210                gsm_control_reply(gsm, CMD_TEST, data, clen);
1211                break;
1212        case CMD_FCON:
1213                /* Modem can accept data again */
1214                gsm->constipated = 0;
1215                gsm_control_reply(gsm, CMD_FCON, NULL, 0);
1216                /* Kick the link in case it is idling */
1217                spin_lock_irqsave(&gsm->tx_lock, flags);
1218                gsm_data_kick(gsm);
1219                spin_unlock_irqrestore(&gsm->tx_lock, flags);
1220                break;
1221        case CMD_FCOFF:
1222                /* Modem wants us to STFU */
1223                gsm->constipated = 1;
1224                gsm_control_reply(gsm, CMD_FCOFF, NULL, 0);
1225                break;
1226        case CMD_MSC:
1227                /* Out of band modem line change indicator for a DLCI */
1228                gsm_control_modem(gsm, data, clen);
1229                break;
1230        case CMD_RLS:
1231                /* Out of band error reception for a DLCI */
1232                gsm_control_rls(gsm, data, clen);
1233                break;
1234        case CMD_PSC:
1235                /* Modem wishes to enter power saving state */
1236                gsm_control_reply(gsm, CMD_PSC, NULL, 0);
1237                break;
1238                /* Optional unsupported commands */
1239        case CMD_PN:    /* Parameter negotiation */
1240        case CMD_RPN:   /* Remote port negotiation */
1241        case CMD_SNC:   /* Service negotiation command */
1242        default:
1243                /* Reply to bad commands with an NSC */
1244                buf[0] = command;
1245                gsm_control_reply(gsm, CMD_NSC, buf, 1);
1246                break;
1247        }
1248}
1249
1250/**
1251 *      gsm_control_response    -       process a response to our control
1252 *      @gsm: our GSM mux
1253 *      @command: the command (response) EA
1254 *      @data: data beyond the command/length EA
1255 *      @clen: length
1256 *
1257 *      Process a response to an outstanding command. We only allow a single
1258 *      control message in flight so this is fairly easy. All the clean up
1259 *      is done by the caller, we just update the fields, flag it as done
1260 *      and return
1261 */
1262
1263static void gsm_control_response(struct gsm_mux *gsm, unsigned int command,
1264                                                const u8 *data, int clen)
1265{
1266        struct gsm_control *ctrl;
1267        unsigned long flags;
1268
1269        spin_lock_irqsave(&gsm->control_lock, flags);
1270
1271        ctrl = gsm->pending_cmd;
1272        /* Does the reply match our command */
1273        command |= 1;
1274        if (ctrl != NULL && (command == ctrl->cmd || command == CMD_NSC)) {
1275                /* Our command was replied to, kill the retry timer */
1276                del_timer(&gsm->t2_timer);
1277                gsm->pending_cmd = NULL;
1278                /* Rejected by the other end */
1279                if (command == CMD_NSC)
1280                        ctrl->error = -EOPNOTSUPP;
1281                ctrl->done = 1;
1282                wake_up(&gsm->event);
1283        }
1284        spin_unlock_irqrestore(&gsm->control_lock, flags);
1285}
1286
1287/**
1288 *      gsm_control_transmit    -       send control packet
1289 *      @gsm: gsm mux
1290 *      @ctrl: frame to send
1291 *
1292 *      Send out a pending control command (called under control lock)
1293 */
1294
1295static void gsm_control_transmit(struct gsm_mux *gsm, struct gsm_control *ctrl)
1296{
1297        struct gsm_msg *msg = gsm_data_alloc(gsm, 0, ctrl->len + 1, gsm->ftype);
1298        if (msg == NULL)
1299                return;
1300        msg->data[0] = (ctrl->cmd << 1) | 2 | EA;       /* command */
1301        memcpy(msg->data + 1, ctrl->data, ctrl->len);
1302        gsm_data_queue(gsm->dlci[0], msg);
1303}
1304
1305/**
1306 *      gsm_control_retransmit  -       retransmit a control frame
1307 *      @data: pointer to our gsm object
1308 *
1309 *      Called off the T2 timer expiry in order to retransmit control frames
1310 *      that have been lost in the system somewhere. The control_lock protects
1311 *      us from colliding with another sender or a receive completion event.
1312 *      In that situation the timer may still occur in a small window but
1313 *      gsm->pending_cmd will be NULL and we just let the timer expire.
1314 */
1315
1316static void gsm_control_retransmit(struct timer_list *t)
1317{
1318        struct gsm_mux *gsm = from_timer(gsm, t, t2_timer);
1319        struct gsm_control *ctrl;
1320        unsigned long flags;
1321        spin_lock_irqsave(&gsm->control_lock, flags);
1322        ctrl = gsm->pending_cmd;
1323        if (ctrl) {
1324                gsm->cretries--;
1325                if (gsm->cretries == 0) {
1326                        gsm->pending_cmd = NULL;
1327                        ctrl->error = -ETIMEDOUT;
1328                        ctrl->done = 1;
1329                        spin_unlock_irqrestore(&gsm->control_lock, flags);
1330                        wake_up(&gsm->event);
1331                        return;
1332                }
1333                gsm_control_transmit(gsm, ctrl);
1334                mod_timer(&gsm->t2_timer, jiffies + gsm->t2 * HZ / 100);
1335        }
1336        spin_unlock_irqrestore(&gsm->control_lock, flags);
1337}
1338
1339/**
1340 *      gsm_control_send        -       send a control frame on DLCI 0
1341 *      @gsm: the GSM channel
1342 *      @command: command  to send including CR bit
1343 *      @data: bytes of data (must be kmalloced)
1344 *      @len: length of the block to send
1345 *
1346 *      Queue and dispatch a control command. Only one command can be
1347 *      active at a time. In theory more can be outstanding but the matching
1348 *      gets really complicated so for now stick to one outstanding.
1349 */
1350
1351static struct gsm_control *gsm_control_send(struct gsm_mux *gsm,
1352                unsigned int command, u8 *data, int clen)
1353{
1354        struct gsm_control *ctrl = kzalloc(sizeof(struct gsm_control),
1355                                                GFP_KERNEL);
1356        unsigned long flags;
1357        if (ctrl == NULL)
1358                return NULL;
1359retry:
1360        wait_event(gsm->event, gsm->pending_cmd == NULL);
1361        spin_lock_irqsave(&gsm->control_lock, flags);
1362        if (gsm->pending_cmd != NULL) {
1363                spin_unlock_irqrestore(&gsm->control_lock, flags);
1364                goto retry;
1365        }
1366        ctrl->cmd = command;
1367        ctrl->data = data;
1368        ctrl->len = clen;
1369        gsm->pending_cmd = ctrl;
1370
1371        /* If DLCI0 is in ADM mode skip retries, it won't respond */
1372        if (gsm->dlci[0]->mode == DLCI_MODE_ADM)
1373                gsm->cretries = 1;
1374        else
1375                gsm->cretries = gsm->n2;
1376
1377        mod_timer(&gsm->t2_timer, jiffies + gsm->t2 * HZ / 100);
1378        gsm_control_transmit(gsm, ctrl);
1379        spin_unlock_irqrestore(&gsm->control_lock, flags);
1380        return ctrl;
1381}
1382
1383/**
1384 *      gsm_control_wait        -       wait for a control to finish
1385 *      @gsm: GSM mux
1386 *      @control: control we are waiting on
1387 *
1388 *      Waits for the control to complete or time out. Frees any used
1389 *      resources and returns 0 for success, or an error if the remote
1390 *      rejected or ignored the request.
1391 */
1392
1393static int gsm_control_wait(struct gsm_mux *gsm, struct gsm_control *control)
1394{
1395        int err;
1396        wait_event(gsm->event, control->done == 1);
1397        err = control->error;
1398        kfree(control);
1399        return err;
1400}
1401
1402
1403/*
1404 *      DLCI level handling: Needs krefs
1405 */
1406
1407/*
1408 *      State transitions and timers
1409 */
1410
1411/**
1412 *      gsm_dlci_close          -       a DLCI has closed
1413 *      @dlci: DLCI that closed
1414 *
1415 *      Perform processing when moving a DLCI into closed state. If there
1416 *      is an attached tty this is hung up
1417 */
1418
1419static void gsm_dlci_close(struct gsm_dlci *dlci)
1420{
1421        del_timer(&dlci->t1);
1422        if (debug & 8)
1423                pr_debug("DLCI %d goes closed.\n", dlci->addr);
1424        dlci->state = DLCI_CLOSED;
1425        if (dlci->addr != 0) {
1426                tty_port_tty_hangup(&dlci->port, false);
1427                kfifo_reset(dlci->fifo);
1428        } else
1429                dlci->gsm->dead = 1;
1430        wake_up(&dlci->gsm->event);
1431        /* A DLCI 0 close is a MUX termination so we need to kick that
1432           back to userspace somehow */
1433}
1434
1435/**
1436 *      gsm_dlci_open           -       a DLCI has opened
1437 *      @dlci: DLCI that opened
1438 *
1439 *      Perform processing when moving a DLCI into open state.
1440 */
1441
1442static void gsm_dlci_open(struct gsm_dlci *dlci)
1443{
1444        /* Note that SABM UA .. SABM UA first UA lost can mean that we go
1445           open -> open */
1446        del_timer(&dlci->t1);
1447        /* This will let a tty open continue */
1448        dlci->state = DLCI_OPEN;
1449        if (debug & 8)
1450                pr_debug("DLCI %d goes open.\n", dlci->addr);
1451        wake_up(&dlci->gsm->event);
1452}
1453
1454/**
1455 *      gsm_dlci_t1             -       T1 timer expiry
1456 *      @dlci: DLCI that opened
1457 *
1458 *      The T1 timer handles retransmits of control frames (essentially of
1459 *      SABM and DISC). We resend the command until the retry count runs out
1460 *      in which case an opening port goes back to closed and a closing port
1461 *      is simply put into closed state (any further frames from the other
1462 *      end will get a DM response)
1463 *
1464 *      Some control dlci can stay in ADM mode with other dlci working just
1465 *      fine. In that case we can just keep the control dlci open after the
1466 *      DLCI_OPENING retries time out.
1467 */
1468
1469static void gsm_dlci_t1(struct timer_list *t)
1470{
1471        struct gsm_dlci *dlci = from_timer(dlci, t, t1);
1472        struct gsm_mux *gsm = dlci->gsm;
1473
1474        switch (dlci->state) {
1475        case DLCI_OPENING:
1476                dlci->retries--;
1477                if (dlci->retries) {
1478                        gsm_command(dlci->gsm, dlci->addr, SABM|PF);
1479                        mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100);
1480                } else if (!dlci->addr && gsm->control == (DM | PF)) {
1481                        if (debug & 8)
1482                                pr_info("DLCI %d opening in ADM mode.\n",
1483                                        dlci->addr);
1484                        dlci->mode = DLCI_MODE_ADM;
1485                        gsm_dlci_open(dlci);
1486                } else {
1487                        gsm_dlci_close(dlci);
1488                }
1489
1490                break;
1491        case DLCI_CLOSING:
1492                dlci->retries--;
1493                if (dlci->retries) {
1494                        gsm_command(dlci->gsm, dlci->addr, DISC|PF);
1495                        mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100);
1496                } else
1497                        gsm_dlci_close(dlci);
1498                break;
1499        }
1500}
1501
1502/**
1503 *      gsm_dlci_begin_open     -       start channel open procedure
1504 *      @dlci: DLCI to open
1505 *
1506 *      Commence opening a DLCI from the Linux side. We issue SABM messages
1507 *      to the modem which should then reply with a UA or ADM, at which point
1508 *      we will move into open state. Opening is done asynchronously with retry
1509 *      running off timers and the responses.
1510 */
1511
1512static void gsm_dlci_begin_open(struct gsm_dlci *dlci)
1513{
1514        struct gsm_mux *gsm = dlci->gsm;
1515        if (dlci->state == DLCI_OPEN || dlci->state == DLCI_OPENING)
1516                return;
1517        dlci->retries = gsm->n2;
1518        dlci->state = DLCI_OPENING;
1519        gsm_command(dlci->gsm, dlci->addr, SABM|PF);
1520        mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100);
1521}
1522
1523/**
1524 *      gsm_dlci_begin_close    -       start channel open procedure
1525 *      @dlci: DLCI to open
1526 *
1527 *      Commence closing a DLCI from the Linux side. We issue DISC messages
1528 *      to the modem which should then reply with a UA, at which point we
1529 *      will move into closed state. Closing is done asynchronously with retry
1530 *      off timers. We may also receive a DM reply from the other end which
1531 *      indicates the channel was already closed.
1532 */
1533
1534static void gsm_dlci_begin_close(struct gsm_dlci *dlci)
1535{
1536        struct gsm_mux *gsm = dlci->gsm;
1537        if (dlci->state == DLCI_CLOSED || dlci->state == DLCI_CLOSING)
1538                return;
1539        dlci->retries = gsm->n2;
1540        dlci->state = DLCI_CLOSING;
1541        gsm_command(dlci->gsm, dlci->addr, DISC|PF);
1542        mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100);
1543}
1544
1545/**
1546 *      gsm_dlci_data           -       data arrived
1547 *      @dlci: channel
1548 *      @data: block of bytes received
1549 *      @len: length of received block
1550 *
1551 *      A UI or UIH frame has arrived which contains data for a channel
1552 *      other than the control channel. If the relevant virtual tty is
1553 *      open we shovel the bits down it, if not we drop them.
1554 */
1555
1556static void gsm_dlci_data(struct gsm_dlci *dlci, const u8 *data, int clen)
1557{
1558        /* krefs .. */
1559        struct tty_port *port = &dlci->port;
1560        struct tty_struct *tty;
1561        unsigned int modem = 0;
1562        int len = clen;
1563
1564        if (debug & 16)
1565                pr_debug("%d bytes for tty\n", len);
1566        switch (dlci->adaption)  {
1567        /* Unsupported types */
1568        case 4:         /* Packetised interruptible data */
1569                break;
1570        case 3:         /* Packetised uininterruptible voice/data */
1571                break;
1572        case 2:         /* Asynchronous serial with line state in each frame */
1573                while (gsm_read_ea(&modem, *data++) == 0) {
1574                        len--;
1575                        if (len == 0)
1576                                return;
1577                }
1578                tty = tty_port_tty_get(port);
1579                if (tty) {
1580                        gsm_process_modem(tty, dlci, modem, clen);
1581                        tty_kref_put(tty);
1582                }
1583                /* Fall through */
1584        case 1:         /* Line state will go via DLCI 0 controls only */
1585        default:
1586                tty_insert_flip_string(port, data, len);
1587                tty_flip_buffer_push(port);
1588        }
1589}
1590
1591/**
1592 *      gsm_dlci_control        -       data arrived on control channel
1593 *      @dlci: channel
1594 *      @data: block of bytes received
1595 *      @len: length of received block
1596 *
1597 *      A UI or UIH frame has arrived which contains data for DLCI 0 the
1598 *      control channel. This should contain a command EA followed by
1599 *      control data bytes. The command EA contains a command/response bit
1600 *      and we divide up the work accordingly.
1601 */
1602
1603static void gsm_dlci_command(struct gsm_dlci *dlci, const u8 *data, int len)
1604{
1605        /* See what command is involved */
1606        unsigned int command = 0;
1607        while (len-- > 0) {
1608                if (gsm_read_ea(&command, *data++) == 1) {
1609                        int clen = *data++;
1610                        len--;
1611                        /* FIXME: this is properly an EA */
1612                        clen >>= 1;
1613                        /* Malformed command ? */
1614                        if (clen > len)
1615                                return;
1616                        if (command & 1)
1617                                gsm_control_message(dlci->gsm, command,
1618                                                                data, clen);
1619                        else
1620                                gsm_control_response(dlci->gsm, command,
1621                                                                data, clen);
1622                        return;
1623                }
1624        }
1625}
1626
1627/*
1628 *      Allocate/Free DLCI channels
1629 */
1630
1631/**
1632 *      gsm_dlci_alloc          -       allocate a DLCI
1633 *      @gsm: GSM mux
1634 *      @addr: address of the DLCI
1635 *
1636 *      Allocate and install a new DLCI object into the GSM mux.
1637 *
1638 *      FIXME: review locking races
1639 */
1640
1641static struct gsm_dlci *gsm_dlci_alloc(struct gsm_mux *gsm, int addr)
1642{
1643        struct gsm_dlci *dlci = kzalloc(sizeof(struct gsm_dlci), GFP_ATOMIC);
1644        if (dlci == NULL)
1645                return NULL;
1646        spin_lock_init(&dlci->lock);
1647        mutex_init(&dlci->mutex);
1648        dlci->fifo = &dlci->_fifo;
1649        if (kfifo_alloc(&dlci->_fifo, 4096, GFP_KERNEL) < 0) {
1650                kfree(dlci);
1651                return NULL;
1652        }
1653
1654        skb_queue_head_init(&dlci->skb_list);
1655        timer_setup(&dlci->t1, gsm_dlci_t1, 0);
1656        tty_port_init(&dlci->port);
1657        dlci->port.ops = &gsm_port_ops;
1658        dlci->gsm = gsm;
1659        dlci->addr = addr;
1660        dlci->adaption = gsm->adaption;
1661        dlci->state = DLCI_CLOSED;
1662        if (addr)
1663                dlci->data = gsm_dlci_data;
1664        else
1665                dlci->data = gsm_dlci_command;
1666        gsm->dlci[addr] = dlci;
1667        return dlci;
1668}
1669
1670/**
1671 *      gsm_dlci_free           -       free DLCI
1672 *      @dlci: DLCI to free
1673 *
1674 *      Free up a DLCI.
1675 *
1676 *      Can sleep.
1677 */
1678static void gsm_dlci_free(struct tty_port *port)
1679{
1680        struct gsm_dlci *dlci = container_of(port, struct gsm_dlci, port);
1681
1682        del_timer_sync(&dlci->t1);
1683        dlci->gsm->dlci[dlci->addr] = NULL;
1684        kfifo_free(dlci->fifo);
1685        while ((dlci->skb = skb_dequeue(&dlci->skb_list)))
1686                dev_kfree_skb(dlci->skb);
1687        kfree(dlci);
1688}
1689
1690static inline void dlci_get(struct gsm_dlci *dlci)
1691{
1692        tty_port_get(&dlci->port);
1693}
1694
1695static inline void dlci_put(struct gsm_dlci *dlci)
1696{
1697        tty_port_put(&dlci->port);
1698}
1699
1700static void gsm_destroy_network(struct gsm_dlci *dlci);
1701
1702/**
1703 *      gsm_dlci_release                -       release DLCI
1704 *      @dlci: DLCI to destroy
1705 *
1706 *      Release a DLCI. Actual free is deferred until either
1707 *      mux is closed or tty is closed - whichever is last.
1708 *
1709 *      Can sleep.
1710 */
1711static void gsm_dlci_release(struct gsm_dlci *dlci)
1712{
1713        struct tty_struct *tty = tty_port_tty_get(&dlci->port);
1714        if (tty) {
1715                mutex_lock(&dlci->mutex);
1716                gsm_destroy_network(dlci);
1717                mutex_unlock(&dlci->mutex);
1718
1719                tty_hangup(tty);
1720
1721                tty_port_tty_set(&dlci->port, NULL);
1722                tty_kref_put(tty);
1723        }
1724        dlci->state = DLCI_CLOSED;
1725        dlci_put(dlci);
1726}
1727
1728/*
1729 *      LAPBish link layer logic
1730 */
1731
1732/**
1733 *      gsm_queue               -       a GSM frame is ready to process
1734 *      @gsm: pointer to our gsm mux
1735 *
1736 *      At this point in time a frame has arrived and been demangled from
1737 *      the line encoding. All the differences between the encodings have
1738 *      been handled below us and the frame is unpacked into the structures.
1739 *      The fcs holds the header FCS but any data FCS must be added here.
1740 */
1741
1742static void gsm_queue(struct gsm_mux *gsm)
1743{
1744        struct gsm_dlci *dlci;
1745        u8 cr;
1746        int address;
1747        /* We have to sneak a look at the packet body to do the FCS.
1748           A somewhat layering violation in the spec */
1749
1750        if ((gsm->control & ~PF) == UI)
1751                gsm->fcs = gsm_fcs_add_block(gsm->fcs, gsm->buf, gsm->len);
1752        if (gsm->encoding == 0) {
1753                /* WARNING: gsm->received_fcs is used for
1754                gsm->encoding = 0 only.
1755                In this case it contain the last piece of data
1756                required to generate final CRC */
1757                gsm->fcs = gsm_fcs_add(gsm->fcs, gsm->received_fcs);
1758        }
1759        if (gsm->fcs != GOOD_FCS) {
1760                gsm->bad_fcs++;
1761                if (debug & 4)
1762                        pr_debug("BAD FCS %02x\n", gsm->fcs);
1763                return;
1764        }
1765        address = gsm->address >> 1;
1766        if (address >= NUM_DLCI)
1767                goto invalid;
1768
1769        cr = gsm->address & 1;          /* C/R bit */
1770
1771        gsm_print_packet("<--", address, cr, gsm->control, gsm->buf, gsm->len);
1772
1773        cr ^= 1 - gsm->initiator;       /* Flip so 1 always means command */
1774        dlci = gsm->dlci[address];
1775
1776        switch (gsm->control) {
1777        case SABM|PF:
1778                if (cr == 0)
1779                        goto invalid;
1780                if (dlci == NULL)
1781                        dlci = gsm_dlci_alloc(gsm, address);
1782                if (dlci == NULL)
1783                        return;
1784                if (dlci->dead)
1785                        gsm_response(gsm, address, DM);
1786                else {
1787                        gsm_response(gsm, address, UA);
1788                        gsm_dlci_open(dlci);
1789                }
1790                break;
1791        case DISC|PF:
1792                if (cr == 0)
1793                        goto invalid;
1794                if (dlci == NULL || dlci->state == DLCI_CLOSED) {
1795                        gsm_response(gsm, address, DM);
1796                        return;
1797                }
1798                /* Real close complete */
1799                gsm_response(gsm, address, UA);
1800                gsm_dlci_close(dlci);
1801                break;
1802        case UA:
1803        case UA|PF:
1804                if (cr == 0 || dlci == NULL)
1805                        break;
1806                switch (dlci->state) {
1807                case DLCI_CLOSING:
1808                        gsm_dlci_close(dlci);
1809                        break;
1810                case DLCI_OPENING:
1811                        gsm_dlci_open(dlci);
1812                        break;
1813                }
1814                break;
1815        case DM:        /* DM can be valid unsolicited */
1816        case DM|PF:
1817                if (cr)
1818                        goto invalid;
1819                if (dlci == NULL)
1820                        return;
1821                gsm_dlci_close(dlci);
1822                break;
1823        case UI:
1824        case UI|PF:
1825        case UIH:
1826        case UIH|PF:
1827#if 0
1828                if (cr)
1829                        goto invalid;
1830#endif
1831                if (dlci == NULL || dlci->state != DLCI_OPEN) {
1832                        gsm_command(gsm, address, DM|PF);
1833                        return;
1834                }
1835                dlci->data(dlci, gsm->buf, gsm->len);
1836                break;
1837        default:
1838                goto invalid;
1839        }
1840        return;
1841invalid:
1842        gsm->malformed++;
1843        return;
1844}
1845
1846
1847/**
1848 *      gsm0_receive    -       perform processing for non-transparency
1849 *      @gsm: gsm data for this ldisc instance
1850 *      @c: character
1851 *
1852 *      Receive bytes in gsm mode 0
1853 */
1854
1855static void gsm0_receive(struct gsm_mux *gsm, unsigned char c)
1856{
1857        unsigned int len;
1858
1859        switch (gsm->state) {
1860        case GSM_SEARCH:        /* SOF marker */
1861                if (c == GSM0_SOF) {
1862                        gsm->state = GSM_ADDRESS;
1863                        gsm->address = 0;
1864                        gsm->len = 0;
1865                        gsm->fcs = INIT_FCS;
1866                }
1867                break;
1868        case GSM_ADDRESS:       /* Address EA */
1869                gsm->fcs = gsm_fcs_add(gsm->fcs, c);
1870                if (gsm_read_ea(&gsm->address, c))
1871                        gsm->state = GSM_CONTROL;
1872                break;
1873        case GSM_CONTROL:       /* Control Byte */
1874                gsm->fcs = gsm_fcs_add(gsm->fcs, c);
1875                gsm->control = c;
1876                gsm->state = GSM_LEN0;
1877                break;
1878        case GSM_LEN0:          /* Length EA */
1879                gsm->fcs = gsm_fcs_add(gsm->fcs, c);
1880                if (gsm_read_ea(&gsm->len, c)) {
1881                        if (gsm->len > gsm->mru) {
1882                                gsm->bad_size++;
1883                                gsm->state = GSM_SEARCH;
1884                                break;
1885                        }
1886                        gsm->count = 0;
1887                        if (!gsm->len)
1888                                gsm->state = GSM_FCS;
1889                        else
1890                                gsm->state = GSM_DATA;
1891                        break;
1892                }
1893                gsm->state = GSM_LEN1;
1894                break;
1895        case GSM_LEN1:
1896                gsm->fcs = gsm_fcs_add(gsm->fcs, c);
1897                len = c;
1898                gsm->len |= len << 7;
1899                if (gsm->len > gsm->mru) {
1900                        gsm->bad_size++;
1901                        gsm->state = GSM_SEARCH;
1902                        break;
1903                }
1904                gsm->count = 0;
1905                if (!gsm->len)
1906                        gsm->state = GSM_FCS;
1907                else
1908                        gsm->state = GSM_DATA;
1909                break;
1910        case GSM_DATA:          /* Data */
1911                gsm->buf[gsm->count++] = c;
1912                if (gsm->count == gsm->len)
1913                        gsm->state = GSM_FCS;
1914                break;
1915        case GSM_FCS:           /* FCS follows the packet */
1916                gsm->received_fcs = c;
1917                gsm_queue(gsm);
1918                gsm->state = GSM_SSOF;
1919                break;
1920        case GSM_SSOF:
1921                if (c == GSM0_SOF) {
1922                        gsm->state = GSM_SEARCH;
1923                        break;
1924                }
1925                break;
1926        }
1927}
1928
1929/**
1930 *      gsm1_receive    -       perform processing for non-transparency
1931 *      @gsm: gsm data for this ldisc instance
1932 *      @c: character
1933 *
1934 *      Receive bytes in mode 1 (Advanced option)
1935 */
1936
1937static void gsm1_receive(struct gsm_mux *gsm, unsigned char c)
1938{
1939        if (c == GSM1_SOF) {
1940                /* EOF is only valid in frame if we have got to the data state
1941                   and received at least one byte (the FCS) */
1942                if (gsm->state == GSM_DATA && gsm->count) {
1943                        /* Extract the FCS */
1944                        gsm->count--;
1945                        gsm->fcs = gsm_fcs_add(gsm->fcs, gsm->buf[gsm->count]);
1946                        gsm->len = gsm->count;
1947                        gsm_queue(gsm);
1948                        gsm->state  = GSM_START;
1949                        return;
1950                }
1951                /* Any partial frame was a runt so go back to start */
1952                if (gsm->state != GSM_START) {
1953                        gsm->malformed++;
1954                        gsm->state = GSM_START;
1955                }
1956                /* A SOF in GSM_START means we are still reading idling or
1957                   framing bytes */
1958                return;
1959        }
1960
1961        if (c == GSM1_ESCAPE) {
1962                gsm->escape = 1;
1963                return;
1964        }
1965
1966        /* Only an unescaped SOF gets us out of GSM search */
1967        if (gsm->state == GSM_SEARCH)
1968                return;
1969
1970        if (gsm->escape) {
1971                c ^= GSM1_ESCAPE_BITS;
1972                gsm->escape = 0;
1973        }
1974        switch (gsm->state) {
1975        case GSM_START:         /* First byte after SOF */
1976                gsm->address = 0;
1977                gsm->state = GSM_ADDRESS;
1978                gsm->fcs = INIT_FCS;
1979                /* Fall through */
1980        case GSM_ADDRESS:       /* Address continuation */
1981                gsm->fcs = gsm_fcs_add(gsm->fcs, c);
1982                if (gsm_read_ea(&gsm->address, c))
1983                        gsm->state = GSM_CONTROL;
1984                break;
1985        case GSM_CONTROL:       /* Control Byte */
1986                gsm->fcs = gsm_fcs_add(gsm->fcs, c);
1987                gsm->control = c;
1988                gsm->count = 0;
1989                gsm->state = GSM_DATA;
1990                break;
1991        case GSM_DATA:          /* Data */
1992                if (gsm->count > gsm->mru) {    /* Allow one for the FCS */
1993                        gsm->state = GSM_OVERRUN;
1994                        gsm->bad_size++;
1995                } else
1996                        gsm->buf[gsm->count++] = c;
1997                break;
1998        case GSM_OVERRUN:       /* Over-long - eg a dropped SOF */
1999                break;
2000        }
2001}
2002
2003/**
2004 *      gsm_error               -       handle tty error
2005 *      @gsm: ldisc data
2006 *      @data: byte received (may be invalid)
2007 *      @flag: error received
2008 *
2009 *      Handle an error in the receipt of data for a frame. Currently we just
2010 *      go back to hunting for a SOF.
2011 *
2012 *      FIXME: better diagnostics ?
2013 */
2014
2015static void gsm_error(struct gsm_mux *gsm,
2016                                unsigned char data, unsigned char flag)
2017{
2018        gsm->state = GSM_SEARCH;
2019        gsm->io_error++;
2020}
2021
2022static int gsm_disconnect(struct gsm_mux *gsm)
2023{
2024        struct gsm_dlci *dlci = gsm->dlci[0];
2025        struct gsm_control *gc;
2026
2027        if (!dlci)
2028                return 0;
2029
2030        /* In theory disconnecting DLCI 0 is sufficient but for some
2031           modems this is apparently not the case. */
2032        gc = gsm_control_send(gsm, CMD_CLD, NULL, 0);
2033        if (gc)
2034                gsm_control_wait(gsm, gc);
2035
2036        del_timer_sync(&gsm->t2_timer);
2037        /* Now we are sure T2 has stopped */
2038
2039        gsm_dlci_begin_close(dlci);
2040        wait_event_interruptible(gsm->event,
2041                                dlci->state == DLCI_CLOSED);
2042
2043        if (signal_pending(current))
2044                return -EINTR;
2045
2046        return 0;
2047}
2048
2049/**
2050 *      gsm_cleanup_mux         -       generic GSM protocol cleanup
2051 *      @gsm: our mux
2052 *
2053 *      Clean up the bits of the mux which are the same for all framing
2054 *      protocols. Remove the mux from the mux table, stop all the timers
2055 *      and then shut down each device hanging up the channels as we go.
2056 */
2057
2058static void gsm_cleanup_mux(struct gsm_mux *gsm)
2059{
2060        int i;
2061        struct gsm_dlci *dlci = gsm->dlci[0];
2062        struct gsm_msg *txq, *ntxq;
2063
2064        gsm->dead = 1;
2065
2066        spin_lock(&gsm_mux_lock);
2067        for (i = 0; i < MAX_MUX; i++) {
2068                if (gsm_mux[i] == gsm) {
2069                        gsm_mux[i] = NULL;
2070                        break;
2071                }
2072        }
2073        spin_unlock(&gsm_mux_lock);
2074        /* open failed before registering => nothing to do */
2075        if (i == MAX_MUX)
2076                return;
2077
2078        del_timer_sync(&gsm->t2_timer);
2079        /* Now we are sure T2 has stopped */
2080        if (dlci)
2081                dlci->dead = 1;
2082
2083        /* Free up any link layer users */
2084        mutex_lock(&gsm->mutex);
2085        for (i = 0; i < NUM_DLCI; i++)
2086                if (gsm->dlci[i])
2087                        gsm_dlci_release(gsm->dlci[i]);
2088        mutex_unlock(&gsm->mutex);
2089        /* Now wipe the queues */
2090        list_for_each_entry_safe(txq, ntxq, &gsm->tx_list, list)
2091                kfree(txq);
2092        INIT_LIST_HEAD(&gsm->tx_list);
2093}
2094
2095/**
2096 *      gsm_activate_mux        -       generic GSM setup
2097 *      @gsm: our mux
2098 *
2099 *      Set up the bits of the mux which are the same for all framing
2100 *      protocols. Add the mux to the mux table so it can be opened and
2101 *      finally kick off connecting to DLCI 0 on the modem.
2102 */
2103
2104static int gsm_activate_mux(struct gsm_mux *gsm)
2105{
2106        struct gsm_dlci *dlci;
2107        int i = 0;
2108
2109        timer_setup(&gsm->t2_timer, gsm_control_retransmit, 0);
2110        init_waitqueue_head(&gsm->event);
2111        spin_lock_init(&gsm->control_lock);
2112        spin_lock_init(&gsm->tx_lock);
2113
2114        if (gsm->encoding == 0)
2115                gsm->receive = gsm0_receive;
2116        else
2117                gsm->receive = gsm1_receive;
2118        gsm->error = gsm_error;
2119
2120        spin_lock(&gsm_mux_lock);
2121        for (i = 0; i < MAX_MUX; i++) {
2122                if (gsm_mux[i] == NULL) {
2123                        gsm->num = i;
2124                        gsm_mux[i] = gsm;
2125                        break;
2126                }
2127        }
2128        spin_unlock(&gsm_mux_lock);
2129        if (i == MAX_MUX)
2130                return -EBUSY;
2131
2132        dlci = gsm_dlci_alloc(gsm, 0);
2133        if (dlci == NULL)
2134                return -ENOMEM;
2135        gsm->dead = 0;          /* Tty opens are now permissible */
2136        return 0;
2137}
2138
2139/**
2140 *      gsm_free_mux            -       free up a mux
2141 *      @mux: mux to free
2142 *
2143 *      Dispose of allocated resources for a dead mux
2144 */
2145static void gsm_free_mux(struct gsm_mux *gsm)
2146{
2147        kfree(gsm->txframe);
2148        kfree(gsm->buf);
2149        kfree(gsm);
2150}
2151
2152/**
2153 *      gsm_free_muxr           -       free up a mux
2154 *      @mux: mux to free
2155 *
2156 *      Dispose of allocated resources for a dead mux
2157 */
2158static void gsm_free_muxr(struct kref *ref)
2159{
2160        struct gsm_mux *gsm = container_of(ref, struct gsm_mux, ref);
2161        gsm_free_mux(gsm);
2162}
2163
2164static inline void mux_get(struct gsm_mux *gsm)
2165{
2166        kref_get(&gsm->ref);
2167}
2168
2169static inline void mux_put(struct gsm_mux *gsm)
2170{
2171        kref_put(&gsm->ref, gsm_free_muxr);
2172}
2173
2174static inline unsigned int mux_num_to_base(struct gsm_mux *gsm)
2175{
2176        return gsm->num * NUM_DLCI;
2177}
2178
2179static inline unsigned int mux_line_to_num(unsigned int line)
2180{
2181        return line / NUM_DLCI;
2182}
2183
2184/**
2185 *      gsm_alloc_mux           -       allocate a mux
2186 *
2187 *      Creates a new mux ready for activation.
2188 */
2189
2190static struct gsm_mux *gsm_alloc_mux(void)
2191{
2192        struct gsm_mux *gsm = kzalloc(sizeof(struct gsm_mux), GFP_KERNEL);
2193        if (gsm == NULL)
2194                return NULL;
2195        gsm->buf = kmalloc(MAX_MRU + 1, GFP_KERNEL);
2196        if (gsm->buf == NULL) {
2197                kfree(gsm);
2198                return NULL;
2199        }
2200        gsm->txframe = kmalloc(2 * MAX_MRU + 2, GFP_KERNEL);
2201        if (gsm->txframe == NULL) {
2202                kfree(gsm->buf);
2203                kfree(gsm);
2204                return NULL;
2205        }
2206        spin_lock_init(&gsm->lock);
2207        mutex_init(&gsm->mutex);
2208        kref_init(&gsm->ref);
2209        INIT_LIST_HEAD(&gsm->tx_list);
2210
2211        gsm->t1 = T1;
2212        gsm->t2 = T2;
2213        gsm->n2 = N2;
2214        gsm->ftype = UIH;
2215        gsm->adaption = 1;
2216        gsm->encoding = 1;
2217        gsm->mru = 64;  /* Default to encoding 1 so these should be 64 */
2218        gsm->mtu = 64;
2219        gsm->dead = 1;  /* Avoid early tty opens */
2220
2221        return gsm;
2222}
2223
2224static void gsm_copy_config_values(struct gsm_mux *gsm,
2225                                   struct gsm_config *c)
2226{
2227        memset(c, 0, sizeof(*c));
2228        c->adaption = gsm->adaption;
2229        c->encapsulation = gsm->encoding;
2230        c->initiator = gsm->initiator;
2231        c->t1 = gsm->t1;
2232        c->t2 = gsm->t2;
2233        c->t3 = 0;      /* Not supported */
2234        c->n2 = gsm->n2;
2235        if (gsm->ftype == UIH)
2236                c->i = 1;
2237        else
2238                c->i = 2;
2239        pr_debug("Ftype %d i %d\n", gsm->ftype, c->i);
2240        c->mru = gsm->mru;
2241        c->mtu = gsm->mtu;
2242        c->k = 0;
2243}
2244
2245static int gsm_config(struct gsm_mux *gsm, struct gsm_config *c)
2246{
2247        int need_close = 0;
2248        int need_restart = 0;
2249
2250        /* Stuff we don't support yet - UI or I frame transport, windowing */
2251        if ((c->adaption != 1 && c->adaption != 2) || c->k)
2252                return -EOPNOTSUPP;
2253        /* Check the MRU/MTU range looks sane */
2254        if (c->mru > MAX_MRU || c->mtu > MAX_MTU || c->mru < 8 || c->mtu < 8)
2255                return -EINVAL;
2256        if (c->n2 < 3)
2257                return -EINVAL;
2258        if (c->encapsulation > 1)       /* Basic, advanced, no I */
2259                return -EINVAL;
2260        if (c->initiator > 1)
2261                return -EINVAL;
2262        if (c->i == 0 || c->i > 2)      /* UIH and UI only */
2263                return -EINVAL;
2264        /*
2265         * See what is needed for reconfiguration
2266         */
2267
2268        /* Timing fields */
2269        if (c->t1 != 0 && c->t1 != gsm->t1)
2270                need_restart = 1;
2271        if (c->t2 != 0 && c->t2 != gsm->t2)
2272                need_restart = 1;
2273        if (c->encapsulation != gsm->encoding)
2274                need_restart = 1;
2275        if (c->adaption != gsm->adaption)
2276                need_restart = 1;
2277        /* Requires care */
2278        if (c->initiator != gsm->initiator)
2279                need_close = 1;
2280        if (c->mru != gsm->mru)
2281                need_restart = 1;
2282        if (c->mtu != gsm->mtu)
2283                need_restart = 1;
2284
2285        /*
2286         * Close down what is needed, restart and initiate the new
2287         * configuration
2288         */
2289
2290        if (need_close || need_restart) {
2291                int ret;
2292
2293                ret = gsm_disconnect(gsm);
2294
2295                if (ret)
2296                        return ret;
2297        }
2298        if (need_restart)
2299                gsm_cleanup_mux(gsm);
2300
2301        gsm->initiator = c->initiator;
2302        gsm->mru = c->mru;
2303        gsm->mtu = c->mtu;
2304        gsm->encoding = c->encapsulation;
2305        gsm->adaption = c->adaption;
2306        gsm->n2 = c->n2;
2307
2308        if (c->i == 1)
2309                gsm->ftype = UIH;
2310        else if (c->i == 2)
2311                gsm->ftype = UI;
2312
2313        if (c->t1)
2314                gsm->t1 = c->t1;
2315        if (c->t2)
2316                gsm->t2 = c->t2;
2317
2318        /*
2319         * FIXME: We need to separate activation/deactivation from adding
2320         * and removing from the mux array
2321         */
2322        if (need_restart)
2323                gsm_activate_mux(gsm);
2324        if (gsm->initiator && need_close)
2325                gsm_dlci_begin_open(gsm->dlci[0]);
2326        return 0;
2327}
2328
2329/**
2330 *      gsmld_output            -       write to link
2331 *      @gsm: our mux
2332 *      @data: bytes to output
2333 *      @len: size
2334 *
2335 *      Write a block of data from the GSM mux to the data channel. This
2336 *      will eventually be serialized from above but at the moment isn't.
2337 */
2338
2339static int gsmld_output(struct gsm_mux *gsm, u8 *data, int len)
2340{
2341        if (tty_write_room(gsm->tty) < len) {
2342                set_bit(TTY_DO_WRITE_WAKEUP, &gsm->tty->flags);
2343                return -ENOSPC;
2344        }
2345        if (debug & 4)
2346                print_hex_dump_bytes("gsmld_output: ", DUMP_PREFIX_OFFSET,
2347                                     data, len);
2348        gsm->tty->ops->write(gsm->tty, data, len);
2349        return len;
2350}
2351
2352/**
2353 *      gsmld_attach_gsm        -       mode set up
2354 *      @tty: our tty structure
2355 *      @gsm: our mux
2356 *
2357 *      Set up the MUX for basic mode and commence connecting to the
2358 *      modem. Currently called from the line discipline set up but
2359 *      will need moving to an ioctl path.
2360 */
2361
2362static int gsmld_attach_gsm(struct tty_struct *tty, struct gsm_mux *gsm)
2363{
2364        unsigned int base;
2365        int ret, i;
2366
2367        gsm->tty = tty_kref_get(tty);
2368        gsm->output = gsmld_output;
2369        ret =  gsm_activate_mux(gsm);
2370        if (ret != 0)
2371                tty_kref_put(gsm->tty);
2372        else {
2373                /* Don't register device 0 - this is the control channel and not
2374                   a usable tty interface */
2375                base = mux_num_to_base(gsm); /* Base for this MUX */
2376                for (i = 1; i < NUM_DLCI; i++)
2377                        tty_register_device(gsm_tty_driver, base + i, NULL);
2378        }
2379        return ret;
2380}
2381
2382
2383/**
2384 *      gsmld_detach_gsm        -       stop doing 0710 mux
2385 *      @tty: tty attached to the mux
2386 *      @gsm: mux
2387 *
2388 *      Shutdown and then clean up the resources used by the line discipline
2389 */
2390
2391static void gsmld_detach_gsm(struct tty_struct *tty, struct gsm_mux *gsm)
2392{
2393        unsigned int base = mux_num_to_base(gsm); /* Base for this MUX */
2394        int i;
2395
2396        WARN_ON(tty != gsm->tty);
2397        for (i = 1; i < NUM_DLCI; i++)
2398                tty_unregister_device(gsm_tty_driver, base + i);
2399        gsm_cleanup_mux(gsm);
2400        tty_kref_put(gsm->tty);
2401        gsm->tty = NULL;
2402}
2403
2404static void gsmld_receive_buf(struct tty_struct *tty, const unsigned char *cp,
2405                              char *fp, int count)
2406{
2407        struct gsm_mux *gsm = tty->disc_data;
2408        const unsigned char *dp;
2409        char *f;
2410        int i;
2411        char flags = TTY_NORMAL;
2412
2413        if (debug & 4)
2414                print_hex_dump_bytes("gsmld_receive: ", DUMP_PREFIX_OFFSET,
2415                                     cp, count);
2416
2417        for (i = count, dp = cp, f = fp; i; i--, dp++) {
2418                if (f)
2419                        flags = *f++;
2420                switch (flags) {
2421                case TTY_NORMAL:
2422                        gsm->receive(gsm, *dp);
2423                        break;
2424                case TTY_OVERRUN:
2425                case TTY_BREAK:
2426                case TTY_PARITY:
2427                case TTY_FRAME:
2428                        gsm->error(gsm, *dp, flags);
2429                        break;
2430                default:
2431                        WARN_ONCE(1, "%s: unknown flag %d\n",
2432                               tty_name(tty), flags);
2433                        break;
2434                }
2435        }
2436        /* FASYNC if needed ? */
2437        /* If clogged call tty_throttle(tty); */
2438}
2439
2440/**
2441 *      gsmld_flush_buffer      -       clean input queue
2442 *      @tty:   terminal device
2443 *
2444 *      Flush the input buffer. Called when the line discipline is
2445 *      being closed, when the tty layer wants the buffer flushed (eg
2446 *      at hangup).
2447 */
2448
2449static void gsmld_flush_buffer(struct tty_struct *tty)
2450{
2451}
2452
2453/**
2454 *      gsmld_close             -       close the ldisc for this tty
2455 *      @tty: device
2456 *
2457 *      Called from the terminal layer when this line discipline is
2458 *      being shut down, either because of a close or becsuse of a
2459 *      discipline change. The function will not be called while other
2460 *      ldisc methods are in progress.
2461 */
2462
2463static void gsmld_close(struct tty_struct *tty)
2464{
2465        struct gsm_mux *gsm = tty->disc_data;
2466
2467        gsmld_detach_gsm(tty, gsm);
2468
2469        gsmld_flush_buffer(tty);
2470        /* Do other clean up here */
2471        mux_put(gsm);
2472}
2473
2474/**
2475 *      gsmld_open              -       open an ldisc
2476 *      @tty: terminal to open
2477 *
2478 *      Called when this line discipline is being attached to the
2479 *      terminal device. Can sleep. Called serialized so that no
2480 *      other events will occur in parallel. No further open will occur
2481 *      until a close.
2482 */
2483
2484static int gsmld_open(struct tty_struct *tty)
2485{
2486        struct gsm_mux *gsm;
2487        int ret;
2488
2489        if (tty->ops->write == NULL)
2490                return -EINVAL;
2491
2492        /* Attach our ldisc data */
2493        gsm = gsm_alloc_mux();
2494        if (gsm == NULL)
2495                return -ENOMEM;
2496
2497        tty->disc_data = gsm;
2498        tty->receive_room = 65536;
2499
2500        /* Attach the initial passive connection */
2501        gsm->encoding = 1;
2502
2503        ret = gsmld_attach_gsm(tty, gsm);
2504        if (ret != 0) {
2505                gsm_cleanup_mux(gsm);
2506                mux_put(gsm);
2507        }
2508        return ret;
2509}
2510
2511/**
2512 *      gsmld_write_wakeup      -       asynchronous I/O notifier
2513 *      @tty: tty device
2514 *
2515 *      Required for the ptys, serial driver etc. since processes
2516 *      that attach themselves to the master and rely on ASYNC
2517 *      IO must be woken up
2518 */
2519
2520static void gsmld_write_wakeup(struct tty_struct *tty)
2521{
2522        struct gsm_mux *gsm = tty->disc_data;
2523        unsigned long flags;
2524
2525        /* Queue poll */
2526        clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
2527        spin_lock_irqsave(&gsm->tx_lock, flags);
2528        gsm_data_kick(gsm);
2529        if (gsm->tx_bytes < TX_THRESH_LO) {
2530                gsm_dlci_data_sweep(gsm);
2531        }
2532        spin_unlock_irqrestore(&gsm->tx_lock, flags);
2533}
2534
2535/**
2536 *      gsmld_read              -       read function for tty
2537 *      @tty: tty device
2538 *      @file: file object
2539 *      @buf: userspace buffer pointer
2540 *      @nr: size of I/O
2541 *
2542 *      Perform reads for the line discipline. We are guaranteed that the
2543 *      line discipline will not be closed under us but we may get multiple
2544 *      parallel readers and must handle this ourselves. We may also get
2545 *      a hangup. Always called in user context, may sleep.
2546 *
2547 *      This code must be sure never to sleep through a hangup.
2548 */
2549
2550static ssize_t gsmld_read(struct tty_struct *tty, struct file *file,
2551                         unsigned char __user *buf, size_t nr)
2552{
2553        return -EOPNOTSUPP;
2554}
2555
2556/**
2557 *      gsmld_write             -       write function for tty
2558 *      @tty: tty device
2559 *      @file: file object
2560 *      @buf: userspace buffer pointer
2561 *      @nr: size of I/O
2562 *
2563 *      Called when the owner of the device wants to send a frame
2564 *      itself (or some other control data). The data is transferred
2565 *      as-is and must be properly framed and checksummed as appropriate
2566 *      by userspace. Frames are either sent whole or not at all as this
2567 *      avoids pain user side.
2568 */
2569
2570static ssize_t gsmld_write(struct tty_struct *tty, struct file *file,
2571                           const unsigned char *buf, size_t nr)
2572{
2573        int space = tty_write_room(tty);
2574        if (space >= nr)
2575                return tty->ops->write(tty, buf, nr);
2576        set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
2577        return -ENOBUFS;
2578}
2579
2580/**
2581 *      gsmld_poll              -       poll method for N_GSM0710
2582 *      @tty: terminal device
2583 *      @file: file accessing it
2584 *      @wait: poll table
2585 *
2586 *      Called when the line discipline is asked to poll() for data or
2587 *      for special events. This code is not serialized with respect to
2588 *      other events save open/close.
2589 *
2590 *      This code must be sure never to sleep through a hangup.
2591 *      Called without the kernel lock held - fine
2592 */
2593
2594static __poll_t gsmld_poll(struct tty_struct *tty, struct file *file,
2595                                                        poll_table *wait)
2596{
2597        __poll_t mask = 0;
2598        struct gsm_mux *gsm = tty->disc_data;
2599
2600        poll_wait(file, &tty->read_wait, wait);
2601        poll_wait(file, &tty->write_wait, wait);
2602        if (tty_hung_up_p(file))
2603                mask |= EPOLLHUP;
2604        if (!tty_is_writelocked(tty) && tty_write_room(tty) > 0)
2605                mask |= EPOLLOUT | EPOLLWRNORM;
2606        if (gsm->dead)
2607                mask |= EPOLLHUP;
2608        return mask;
2609}
2610
2611static int gsmld_ioctl(struct tty_struct *tty, struct file *file,
2612                       unsigned int cmd, unsigned long arg)
2613{
2614        struct gsm_config c;
2615        struct gsm_mux *gsm = tty->disc_data;
2616        unsigned int base;
2617
2618        switch (cmd) {
2619        case GSMIOC_GETCONF:
2620                gsm_copy_config_values(gsm, &c);
2621                if (copy_to_user((void *)arg, &c, sizeof(c)))
2622                        return -EFAULT;
2623                return 0;
2624        case GSMIOC_SETCONF:
2625                if (copy_from_user(&c, (void *)arg, sizeof(c)))
2626                        return -EFAULT;
2627                return gsm_config(gsm, &c);
2628        case GSMIOC_GETFIRST:
2629                base = mux_num_to_base(gsm);
2630                return put_user(base + 1, (__u32 __user *)arg);
2631        default:
2632                return n_tty_ioctl_helper(tty, file, cmd, arg);
2633        }
2634}
2635
2636/*
2637 *      Network interface
2638 *
2639 */
2640
2641static int gsm_mux_net_open(struct net_device *net)
2642{
2643        pr_debug("%s called\n", __func__);
2644        netif_start_queue(net);
2645        return 0;
2646}
2647
2648static int gsm_mux_net_close(struct net_device *net)
2649{
2650        netif_stop_queue(net);
2651        return 0;
2652}
2653
2654static void dlci_net_free(struct gsm_dlci *dlci)
2655{
2656        if (!dlci->net) {
2657                WARN_ON(1);
2658                return;
2659        }
2660        dlci->adaption = dlci->prev_adaption;
2661        dlci->data = dlci->prev_data;
2662        free_netdev(dlci->net);
2663        dlci->net = NULL;
2664}
2665static void net_free(struct kref *ref)
2666{
2667        struct gsm_mux_net *mux_net;
2668        struct gsm_dlci *dlci;
2669
2670        mux_net = container_of(ref, struct gsm_mux_net, ref);
2671        dlci = mux_net->dlci;
2672
2673        if (dlci->net) {
2674                unregister_netdev(dlci->net);
2675                dlci_net_free(dlci);
2676        }
2677}
2678
2679static inline void muxnet_get(struct gsm_mux_net *mux_net)
2680{
2681        kref_get(&mux_net->ref);
2682}
2683
2684static inline void muxnet_put(struct gsm_mux_net *mux_net)
2685{
2686        kref_put(&mux_net->ref, net_free);
2687}
2688
2689static netdev_tx_t gsm_mux_net_start_xmit(struct sk_buff *skb,
2690                                      struct net_device *net)
2691{
2692        struct gsm_mux_net *mux_net = netdev_priv(net);
2693        struct gsm_dlci *dlci = mux_net->dlci;
2694        muxnet_get(mux_net);
2695
2696        skb_queue_head(&dlci->skb_list, skb);
2697        net->stats.tx_packets++;
2698        net->stats.tx_bytes += skb->len;
2699        gsm_dlci_data_kick(dlci);
2700        /* And tell the kernel when the last transmit started. */
2701        netif_trans_update(net);
2702        muxnet_put(mux_net);
2703        return NETDEV_TX_OK;
2704}
2705
2706/* called when a packet did not ack after watchdogtimeout */
2707static void gsm_mux_net_tx_timeout(struct net_device *net)
2708{
2709        /* Tell syslog we are hosed. */
2710        dev_dbg(&net->dev, "Tx timed out.\n");
2711
2712        /* Update statistics */
2713        net->stats.tx_errors++;
2714}
2715
2716static void gsm_mux_rx_netchar(struct gsm_dlci *dlci,
2717                                const unsigned char *in_buf, int size)
2718{
2719        struct net_device *net = dlci->net;
2720        struct sk_buff *skb;
2721        struct gsm_mux_net *mux_net = netdev_priv(net);
2722        muxnet_get(mux_net);
2723
2724        /* Allocate an sk_buff */
2725        skb = dev_alloc_skb(size + NET_IP_ALIGN);
2726        if (!skb) {
2727                /* We got no receive buffer. */
2728                net->stats.rx_dropped++;
2729                muxnet_put(mux_net);
2730                return;
2731        }
2732        skb_reserve(skb, NET_IP_ALIGN);
2733        skb_put_data(skb, in_buf, size);
2734
2735        skb->dev = net;
2736        skb->protocol = htons(ETH_P_IP);
2737
2738        /* Ship it off to the kernel */
2739        netif_rx(skb);
2740
2741        /* update out statistics */
2742        net->stats.rx_packets++;
2743        net->stats.rx_bytes += size;
2744        muxnet_put(mux_net);
2745        return;
2746}
2747
2748static void gsm_mux_net_init(struct net_device *net)
2749{
2750        static const struct net_device_ops gsm_netdev_ops = {
2751                .ndo_open               = gsm_mux_net_open,
2752                .ndo_stop               = gsm_mux_net_close,
2753                .ndo_start_xmit         = gsm_mux_net_start_xmit,
2754                .ndo_tx_timeout         = gsm_mux_net_tx_timeout,
2755        };
2756
2757        net->netdev_ops = &gsm_netdev_ops;
2758
2759        /* fill in the other fields */
2760        net->watchdog_timeo = GSM_NET_TX_TIMEOUT;
2761        net->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
2762        net->type = ARPHRD_NONE;
2763        net->tx_queue_len = 10;
2764}
2765
2766
2767/* caller holds the dlci mutex */
2768static void gsm_destroy_network(struct gsm_dlci *dlci)
2769{
2770        struct gsm_mux_net *mux_net;
2771
2772        pr_debug("destroy network interface");
2773        if (!dlci->net)
2774                return;
2775        mux_net = netdev_priv(dlci->net);
2776        muxnet_put(mux_net);
2777}
2778
2779
2780/* caller holds the dlci mutex */
2781static int gsm_create_network(struct gsm_dlci *dlci, struct gsm_netconfig *nc)
2782{
2783        char *netname;
2784        int retval = 0;
2785        struct net_device *net;
2786        struct gsm_mux_net *mux_net;
2787
2788        if (!capable(CAP_NET_ADMIN))
2789                return -EPERM;
2790
2791        /* Already in a non tty mode */
2792        if (dlci->adaption > 2)
2793                return -EBUSY;
2794
2795        if (nc->protocol != htons(ETH_P_IP))
2796                return -EPROTONOSUPPORT;
2797
2798        if (nc->adaption != 3 && nc->adaption != 4)
2799                return -EPROTONOSUPPORT;
2800
2801        pr_debug("create network interface");
2802
2803        netname = "gsm%d";
2804        if (nc->if_name[0] != '\0')
2805                netname = nc->if_name;
2806        net = alloc_netdev(sizeof(struct gsm_mux_net), netname,
2807                           NET_NAME_UNKNOWN, gsm_mux_net_init);
2808        if (!net) {
2809                pr_err("alloc_netdev failed");
2810                return -ENOMEM;
2811        }
2812        net->mtu = dlci->gsm->mtu;
2813        net->min_mtu = 8;
2814        net->max_mtu = dlci->gsm->mtu;
2815        mux_net = netdev_priv(net);
2816        mux_net->dlci = dlci;
2817        kref_init(&mux_net->ref);
2818        strncpy(nc->if_name, net->name, IFNAMSIZ); /* return net name */
2819
2820        /* reconfigure dlci for network */
2821        dlci->prev_adaption = dlci->adaption;
2822        dlci->prev_data = dlci->data;
2823        dlci->adaption = nc->adaption;
2824        dlci->data = gsm_mux_rx_netchar;
2825        dlci->net = net;
2826
2827        pr_debug("register netdev");
2828        retval = register_netdev(net);
2829        if (retval) {
2830                pr_err("network register fail %d\n", retval);
2831                dlci_net_free(dlci);
2832                return retval;
2833        }
2834        return net->ifindex;    /* return network index */
2835}
2836
2837/* Line discipline for real tty */
2838static struct tty_ldisc_ops tty_ldisc_packet = {
2839        .owner           = THIS_MODULE,
2840        .magic           = TTY_LDISC_MAGIC,
2841        .name            = "n_gsm",
2842        .open            = gsmld_open,
2843        .close           = gsmld_close,
2844        .flush_buffer    = gsmld_flush_buffer,
2845        .read            = gsmld_read,
2846        .write           = gsmld_write,
2847        .ioctl           = gsmld_ioctl,
2848        .poll            = gsmld_poll,
2849        .receive_buf     = gsmld_receive_buf,
2850        .write_wakeup    = gsmld_write_wakeup
2851};
2852
2853/*
2854 *      Virtual tty side
2855 */
2856
2857#define TX_SIZE         512
2858
2859static int gsmtty_modem_update(struct gsm_dlci *dlci, u8 brk)
2860{
2861        u8 modembits[5];
2862        struct gsm_control *ctrl;
2863        int len = 2;
2864
2865        if (brk)
2866                len++;
2867
2868        modembits[0] = len << 1 | EA;           /* Data bytes */
2869        modembits[1] = dlci->addr << 2 | 3;     /* DLCI, EA, 1 */
2870        modembits[2] = gsm_encode_modem(dlci) << 1 | EA;
2871        if (brk)
2872                modembits[3] = brk << 4 | 2 | EA;       /* Valid, EA */
2873        ctrl = gsm_control_send(dlci->gsm, CMD_MSC, modembits, len + 1);
2874        if (ctrl == NULL)
2875                return -ENOMEM;
2876        return gsm_control_wait(dlci->gsm, ctrl);
2877}
2878
2879static int gsm_carrier_raised(struct tty_port *port)
2880{
2881        struct gsm_dlci *dlci = container_of(port, struct gsm_dlci, port);
2882        struct gsm_mux *gsm = dlci->gsm;
2883
2884        /* Not yet open so no carrier info */
2885        if (dlci->state != DLCI_OPEN)
2886                return 0;
2887        if (debug & 2)
2888                return 1;
2889
2890        /*
2891         * Basic mode with control channel in ADM mode may not respond
2892         * to CMD_MSC at all and modem_rx is empty.
2893         */
2894        if (gsm->encoding == 0 && gsm->dlci[0]->mode == DLCI_MODE_ADM &&
2895            !dlci->modem_rx)
2896                return 1;
2897
2898        return dlci->modem_rx & TIOCM_CD;
2899}
2900
2901static void gsm_dtr_rts(struct tty_port *port, int onoff)
2902{
2903        struct gsm_dlci *dlci = container_of(port, struct gsm_dlci, port);
2904        unsigned int modem_tx = dlci->modem_tx;
2905        if (onoff)
2906                modem_tx |= TIOCM_DTR | TIOCM_RTS;
2907        else
2908                modem_tx &= ~(TIOCM_DTR | TIOCM_RTS);
2909        if (modem_tx != dlci->modem_tx) {
2910                dlci->modem_tx = modem_tx;
2911                gsmtty_modem_update(dlci, 0);
2912        }
2913}
2914
2915static const struct tty_port_operations gsm_port_ops = {
2916        .carrier_raised = gsm_carrier_raised,
2917        .dtr_rts = gsm_dtr_rts,
2918        .destruct = gsm_dlci_free,
2919};
2920
2921static int gsmtty_install(struct tty_driver *driver, struct tty_struct *tty)
2922{
2923        struct gsm_mux *gsm;
2924        struct gsm_dlci *dlci;
2925        unsigned int line = tty->index;
2926        unsigned int mux = mux_line_to_num(line);
2927        bool alloc = false;
2928        int ret;
2929
2930        line = line & 0x3F;
2931
2932        if (mux >= MAX_MUX)
2933                return -ENXIO;
2934        /* FIXME: we need to lock gsm_mux for lifetimes of ttys eventually */
2935        if (gsm_mux[mux] == NULL)
2936                return -EUNATCH;
2937        if (line == 0 || line > 61)     /* 62/63 reserved */
2938                return -ECHRNG;
2939        gsm = gsm_mux[mux];
2940        if (gsm->dead)
2941                return -EL2HLT;
2942        /* If DLCI 0 is not yet fully open return an error.
2943        This is ok from a locking
2944        perspective as we don't have to worry about this
2945        if DLCI0 is lost */
2946        mutex_lock(&gsm->mutex);
2947        if (gsm->dlci[0] && gsm->dlci[0]->state != DLCI_OPEN) {
2948                mutex_unlock(&gsm->mutex);
2949                return -EL2NSYNC;
2950        }
2951        dlci = gsm->dlci[line];
2952        if (dlci == NULL) {
2953                alloc = true;
2954                dlci = gsm_dlci_alloc(gsm, line);
2955        }
2956        if (dlci == NULL) {
2957                mutex_unlock(&gsm->mutex);
2958                return -ENOMEM;
2959        }
2960        ret = tty_port_install(&dlci->port, driver, tty);
2961        if (ret) {
2962                if (alloc)
2963                        dlci_put(dlci);
2964                mutex_unlock(&gsm->mutex);
2965                return ret;
2966        }
2967
2968        dlci_get(dlci);
2969        dlci_get(gsm->dlci[0]);
2970        mux_get(gsm);
2971        tty->driver_data = dlci;
2972        mutex_unlock(&gsm->mutex);
2973
2974        return 0;
2975}
2976
2977static int gsmtty_open(struct tty_struct *tty, struct file *filp)
2978{
2979        struct gsm_dlci *dlci = tty->driver_data;
2980        struct tty_port *port = &dlci->port;
2981
2982        port->count++;
2983        tty_port_tty_set(port, tty);
2984
2985        dlci->modem_rx = 0;
2986        /* We could in theory open and close before we wait - eg if we get
2987           a DM straight back. This is ok as that will have caused a hangup */
2988        tty_port_set_initialized(port, 1);
2989        /* Start sending off SABM messages */
2990        gsm_dlci_begin_open(dlci);
2991        /* And wait for virtual carrier */
2992        return tty_port_block_til_ready(port, tty, filp);
2993}
2994
2995static void gsmtty_close(struct tty_struct *tty, struct file *filp)
2996{
2997        struct gsm_dlci *dlci = tty->driver_data;
2998
2999        if (dlci == NULL)
3000                return;
3001        if (dlci->state == DLCI_CLOSED)
3002                return;
3003        mutex_lock(&dlci->mutex);
3004        gsm_destroy_network(dlci);
3005        mutex_unlock(&dlci->mutex);
3006        if (tty_port_close_start(&dlci->port, tty, filp) == 0)
3007                return;
3008        gsm_dlci_begin_close(dlci);
3009        if (tty_port_initialized(&dlci->port) && C_HUPCL(tty))
3010                tty_port_lower_dtr_rts(&dlci->port);
3011        tty_port_close_end(&dlci->port, tty);
3012        tty_port_tty_set(&dlci->port, NULL);
3013        return;
3014}
3015
3016static void gsmtty_hangup(struct tty_struct *tty)
3017{
3018        struct gsm_dlci *dlci = tty->driver_data;
3019        if (dlci->state == DLCI_CLOSED)
3020                return;
3021        tty_port_hangup(&dlci->port);
3022        gsm_dlci_begin_close(dlci);
3023}
3024
3025static int gsmtty_write(struct tty_struct *tty, const unsigned char *buf,
3026                                                                    int len)
3027{
3028        int sent;
3029        struct gsm_dlci *dlci = tty->driver_data;
3030        if (dlci->state == DLCI_CLOSED)
3031                return -EINVAL;
3032        /* Stuff the bytes into the fifo queue */
3033        sent = kfifo_in_locked(dlci->fifo, buf, len, &dlci->lock);
3034        /* Need to kick the channel */
3035        gsm_dlci_data_kick(dlci);
3036        return sent;
3037}
3038
3039static int gsmtty_write_room(struct tty_struct *tty)
3040{
3041        struct gsm_dlci *dlci = tty->driver_data;
3042        if (dlci->state == DLCI_CLOSED)
3043                return -EINVAL;
3044        return TX_SIZE - kfifo_len(dlci->fifo);
3045}
3046
3047static int gsmtty_chars_in_buffer(struct tty_struct *tty)
3048{
3049        struct gsm_dlci *dlci = tty->driver_data;
3050        if (dlci->state == DLCI_CLOSED)
3051                return -EINVAL;
3052        return kfifo_len(dlci->fifo);
3053}
3054
3055static void gsmtty_flush_buffer(struct tty_struct *tty)
3056{
3057        struct gsm_dlci *dlci = tty->driver_data;
3058        if (dlci->state == DLCI_CLOSED)
3059                return;
3060        /* Caution needed: If we implement reliable transport classes
3061           then the data being transmitted can't simply be junked once
3062           it has first hit the stack. Until then we can just blow it
3063           away */
3064        kfifo_reset(dlci->fifo);
3065        /* Need to unhook this DLCI from the transmit queue logic */
3066}
3067
3068static void gsmtty_wait_until_sent(struct tty_struct *tty, int timeout)
3069{
3070        /* The FIFO handles the queue so the kernel will do the right
3071           thing waiting on chars_in_buffer before calling us. No work
3072           to do here */
3073}
3074
3075static int gsmtty_tiocmget(struct tty_struct *tty)
3076{
3077        struct gsm_dlci *dlci = tty->driver_data;
3078        if (dlci->state == DLCI_CLOSED)
3079                return -EINVAL;
3080        return dlci->modem_rx;
3081}
3082
3083static int gsmtty_tiocmset(struct tty_struct *tty,
3084        unsigned int set, unsigned int clear)
3085{
3086        struct gsm_dlci *dlci = tty->driver_data;
3087        unsigned int modem_tx = dlci->modem_tx;
3088
3089        if (dlci->state == DLCI_CLOSED)
3090                return -EINVAL;
3091        modem_tx &= ~clear;
3092        modem_tx |= set;
3093
3094        if (modem_tx != dlci->modem_tx) {
3095                dlci->modem_tx = modem_tx;
3096                return gsmtty_modem_update(dlci, 0);
3097        }
3098        return 0;
3099}
3100
3101
3102static int gsmtty_ioctl(struct tty_struct *tty,
3103                        unsigned int cmd, unsigned long arg)
3104{
3105        struct gsm_dlci *dlci = tty->driver_data;
3106        struct gsm_netconfig nc;
3107        int index;
3108
3109        if (dlci->state == DLCI_CLOSED)
3110                return -EINVAL;
3111        switch (cmd) {
3112        case GSMIOC_ENABLE_NET:
3113                if (copy_from_user(&nc, (void __user *)arg, sizeof(nc)))
3114                        return -EFAULT;
3115                nc.if_name[IFNAMSIZ-1] = '\0';
3116                /* return net interface index or error code */
3117                mutex_lock(&dlci->mutex);
3118                index = gsm_create_network(dlci, &nc);
3119                mutex_unlock(&dlci->mutex);
3120                if (copy_to_user((void __user *)arg, &nc, sizeof(nc)))
3121                        return -EFAULT;
3122                return index;
3123        case GSMIOC_DISABLE_NET:
3124                if (!capable(CAP_NET_ADMIN))
3125                        return -EPERM;
3126                mutex_lock(&dlci->mutex);
3127                gsm_destroy_network(dlci);
3128                mutex_unlock(&dlci->mutex);
3129                return 0;
3130        default:
3131                return -ENOIOCTLCMD;
3132        }
3133}
3134
3135static void gsmtty_set_termios(struct tty_struct *tty, struct ktermios *old)
3136{
3137        struct gsm_dlci *dlci = tty->driver_data;
3138        if (dlci->state == DLCI_CLOSED)
3139                return;
3140        /* For the moment its fixed. In actual fact the speed information
3141           for the virtual channel can be propogated in both directions by
3142           the RPN control message. This however rapidly gets nasty as we
3143           then have to remap modem signals each way according to whether
3144           our virtual cable is null modem etc .. */
3145        tty_termios_copy_hw(&tty->termios, old);
3146}
3147
3148static void gsmtty_throttle(struct tty_struct *tty)
3149{
3150        struct gsm_dlci *dlci = tty->driver_data;
3151        if (dlci->state == DLCI_CLOSED)
3152                return;
3153        if (C_CRTSCTS(tty))
3154                dlci->modem_tx &= ~TIOCM_DTR;
3155        dlci->throttled = 1;
3156        /* Send an MSC with DTR cleared */
3157        gsmtty_modem_update(dlci, 0);
3158}
3159
3160static void gsmtty_unthrottle(struct tty_struct *tty)
3161{
3162        struct gsm_dlci *dlci = tty->driver_data;
3163        if (dlci->state == DLCI_CLOSED)
3164                return;
3165        if (C_CRTSCTS(tty))
3166                dlci->modem_tx |= TIOCM_DTR;
3167        dlci->throttled = 0;
3168        /* Send an MSC with DTR set */
3169        gsmtty_modem_update(dlci, 0);
3170}
3171
3172static int gsmtty_break_ctl(struct tty_struct *tty, int state)
3173{
3174        struct gsm_dlci *dlci = tty->driver_data;
3175        int encode = 0; /* Off */
3176        if (dlci->state == DLCI_CLOSED)
3177                return -EINVAL;
3178
3179        if (state == -1)        /* "On indefinitely" - we can't encode this
3180                                    properly */
3181                encode = 0x0F;
3182        else if (state > 0) {
3183                encode = state / 200;   /* mS to encoding */
3184                if (encode > 0x0F)
3185                        encode = 0x0F;  /* Best effort */
3186        }
3187        return gsmtty_modem_update(dlci, encode);
3188}
3189
3190static void gsmtty_cleanup(struct tty_struct *tty)
3191{
3192        struct gsm_dlci *dlci = tty->driver_data;
3193        struct gsm_mux *gsm = dlci->gsm;
3194
3195        dlci_put(dlci);
3196        dlci_put(gsm->dlci[0]);
3197        mux_put(gsm);
3198}
3199
3200/* Virtual ttys for the demux */
3201static const struct tty_operations gsmtty_ops = {
3202        .install                = gsmtty_install,
3203        .open                   = gsmtty_open,
3204        .close                  = gsmtty_close,
3205        .write                  = gsmtty_write,
3206        .write_room             = gsmtty_write_room,
3207        .chars_in_buffer        = gsmtty_chars_in_buffer,
3208        .flush_buffer           = gsmtty_flush_buffer,
3209        .ioctl                  = gsmtty_ioctl,
3210        .throttle               = gsmtty_throttle,
3211        .unthrottle             = gsmtty_unthrottle,
3212        .set_termios            = gsmtty_set_termios,
3213        .hangup                 = gsmtty_hangup,
3214        .wait_until_sent        = gsmtty_wait_until_sent,
3215        .tiocmget               = gsmtty_tiocmget,
3216        .tiocmset               = gsmtty_tiocmset,
3217        .break_ctl              = gsmtty_break_ctl,
3218        .cleanup                = gsmtty_cleanup,
3219};
3220
3221
3222
3223static int __init gsm_init(void)
3224{
3225        /* Fill in our line protocol discipline, and register it */
3226        int status = tty_register_ldisc(N_GSM0710, &tty_ldisc_packet);
3227        if (status != 0) {
3228                pr_err("n_gsm: can't register line discipline (err = %d)\n",
3229                                                                status);
3230                return status;
3231        }
3232
3233        gsm_tty_driver = alloc_tty_driver(256);
3234        if (!gsm_tty_driver) {
3235                tty_unregister_ldisc(N_GSM0710);
3236                pr_err("gsm_init: tty allocation failed.\n");
3237                return -EINVAL;
3238        }
3239        gsm_tty_driver->driver_name     = "gsmtty";
3240        gsm_tty_driver->name            = "gsmtty";
3241        gsm_tty_driver->major           = 0;    /* Dynamic */
3242        gsm_tty_driver->minor_start     = 0;
3243        gsm_tty_driver->type            = TTY_DRIVER_TYPE_SERIAL;
3244        gsm_tty_driver->subtype = SERIAL_TYPE_NORMAL;
3245        gsm_tty_driver->flags   = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV
3246                                                | TTY_DRIVER_HARDWARE_BREAK;
3247        gsm_tty_driver->init_termios    = tty_std_termios;
3248        /* Fixme */
3249        gsm_tty_driver->init_termios.c_lflag &= ~ECHO;
3250        tty_set_operations(gsm_tty_driver, &gsmtty_ops);
3251
3252        spin_lock_init(&gsm_mux_lock);
3253
3254        if (tty_register_driver(gsm_tty_driver)) {
3255                put_tty_driver(gsm_tty_driver);
3256                tty_unregister_ldisc(N_GSM0710);
3257                pr_err("gsm_init: tty registration failed.\n");
3258                return -EBUSY;
3259        }
3260        pr_debug("gsm_init: loaded as %d,%d.\n",
3261                        gsm_tty_driver->major, gsm_tty_driver->minor_start);
3262        return 0;
3263}
3264
3265static void __exit gsm_exit(void)
3266{
3267        int status = tty_unregister_ldisc(N_GSM0710);
3268        if (status != 0)
3269                pr_err("n_gsm: can't unregister line discipline (err = %d)\n",
3270                                                                status);
3271        tty_unregister_driver(gsm_tty_driver);
3272        put_tty_driver(gsm_tty_driver);
3273}
3274
3275module_init(gsm_init);
3276module_exit(gsm_exit);
3277
3278
3279MODULE_LICENSE("GPL");
3280MODULE_ALIAS_LDISC(N_GSM0710);
3281