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_vhangup(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
2174/**
2175 *      gsm_alloc_mux           -       allocate a mux
2176 *
2177 *      Creates a new mux ready for activation.
2178 */
2179
2180static struct gsm_mux *gsm_alloc_mux(void)
2181{
2182        struct gsm_mux *gsm = kzalloc(sizeof(struct gsm_mux), GFP_KERNEL);
2183        if (gsm == NULL)
2184                return NULL;
2185        gsm->buf = kmalloc(MAX_MRU + 1, GFP_KERNEL);
2186        if (gsm->buf == NULL) {
2187                kfree(gsm);
2188                return NULL;
2189        }
2190        gsm->txframe = kmalloc(2 * MAX_MRU + 2, GFP_KERNEL);
2191        if (gsm->txframe == NULL) {
2192                kfree(gsm->buf);
2193                kfree(gsm);
2194                return NULL;
2195        }
2196        spin_lock_init(&gsm->lock);
2197        mutex_init(&gsm->mutex);
2198        kref_init(&gsm->ref);
2199        INIT_LIST_HEAD(&gsm->tx_list);
2200
2201        gsm->t1 = T1;
2202        gsm->t2 = T2;
2203        gsm->n2 = N2;
2204        gsm->ftype = UIH;
2205        gsm->adaption = 1;
2206        gsm->encoding = 1;
2207        gsm->mru = 64;  /* Default to encoding 1 so these should be 64 */
2208        gsm->mtu = 64;
2209        gsm->dead = 1;  /* Avoid early tty opens */
2210
2211        return gsm;
2212}
2213
2214static void gsm_copy_config_values(struct gsm_mux *gsm,
2215                                   struct gsm_config *c)
2216{
2217        memset(c, 0, sizeof(*c));
2218        c->adaption = gsm->adaption;
2219        c->encapsulation = gsm->encoding;
2220        c->initiator = gsm->initiator;
2221        c->t1 = gsm->t1;
2222        c->t2 = gsm->t2;
2223        c->t3 = 0;      /* Not supported */
2224        c->n2 = gsm->n2;
2225        if (gsm->ftype == UIH)
2226                c->i = 1;
2227        else
2228                c->i = 2;
2229        pr_debug("Ftype %d i %d\n", gsm->ftype, c->i);
2230        c->mru = gsm->mru;
2231        c->mtu = gsm->mtu;
2232        c->k = 0;
2233}
2234
2235static int gsm_config(struct gsm_mux *gsm, struct gsm_config *c)
2236{
2237        int need_close = 0;
2238        int need_restart = 0;
2239
2240        /* Stuff we don't support yet - UI or I frame transport, windowing */
2241        if ((c->adaption != 1 && c->adaption != 2) || c->k)
2242                return -EOPNOTSUPP;
2243        /* Check the MRU/MTU range looks sane */
2244        if (c->mru > MAX_MRU || c->mtu > MAX_MTU || c->mru < 8 || c->mtu < 8)
2245                return -EINVAL;
2246        if (c->n2 < 3)
2247                return -EINVAL;
2248        if (c->encapsulation > 1)       /* Basic, advanced, no I */
2249                return -EINVAL;
2250        if (c->initiator > 1)
2251                return -EINVAL;
2252        if (c->i == 0 || c->i > 2)      /* UIH and UI only */
2253                return -EINVAL;
2254        /*
2255         * See what is needed for reconfiguration
2256         */
2257
2258        /* Timing fields */
2259        if (c->t1 != 0 && c->t1 != gsm->t1)
2260                need_restart = 1;
2261        if (c->t2 != 0 && c->t2 != gsm->t2)
2262                need_restart = 1;
2263        if (c->encapsulation != gsm->encoding)
2264                need_restart = 1;
2265        if (c->adaption != gsm->adaption)
2266                need_restart = 1;
2267        /* Requires care */
2268        if (c->initiator != gsm->initiator)
2269                need_close = 1;
2270        if (c->mru != gsm->mru)
2271                need_restart = 1;
2272        if (c->mtu != gsm->mtu)
2273                need_restart = 1;
2274
2275        /*
2276         * Close down what is needed, restart and initiate the new
2277         * configuration
2278         */
2279
2280        if (need_close || need_restart) {
2281                int ret;
2282
2283                ret = gsm_disconnect(gsm);
2284
2285                if (ret)
2286                        return ret;
2287        }
2288        if (need_restart)
2289                gsm_cleanup_mux(gsm);
2290
2291        gsm->initiator = c->initiator;
2292        gsm->mru = c->mru;
2293        gsm->mtu = c->mtu;
2294        gsm->encoding = c->encapsulation;
2295        gsm->adaption = c->adaption;
2296        gsm->n2 = c->n2;
2297
2298        if (c->i == 1)
2299                gsm->ftype = UIH;
2300        else if (c->i == 2)
2301                gsm->ftype = UI;
2302
2303        if (c->t1)
2304                gsm->t1 = c->t1;
2305        if (c->t2)
2306                gsm->t2 = c->t2;
2307
2308        /*
2309         * FIXME: We need to separate activation/deactivation from adding
2310         * and removing from the mux array
2311         */
2312        if (need_restart)
2313                gsm_activate_mux(gsm);
2314        if (gsm->initiator && need_close)
2315                gsm_dlci_begin_open(gsm->dlci[0]);
2316        return 0;
2317}
2318
2319/**
2320 *      gsmld_output            -       write to link
2321 *      @gsm: our mux
2322 *      @data: bytes to output
2323 *      @len: size
2324 *
2325 *      Write a block of data from the GSM mux to the data channel. This
2326 *      will eventually be serialized from above but at the moment isn't.
2327 */
2328
2329static int gsmld_output(struct gsm_mux *gsm, u8 *data, int len)
2330{
2331        if (tty_write_room(gsm->tty) < len) {
2332                set_bit(TTY_DO_WRITE_WAKEUP, &gsm->tty->flags);
2333                return -ENOSPC;
2334        }
2335        if (debug & 4)
2336                print_hex_dump_bytes("gsmld_output: ", DUMP_PREFIX_OFFSET,
2337                                     data, len);
2338        gsm->tty->ops->write(gsm->tty, data, len);
2339        return len;
2340}
2341
2342/**
2343 *      gsmld_attach_gsm        -       mode set up
2344 *      @tty: our tty structure
2345 *      @gsm: our mux
2346 *
2347 *      Set up the MUX for basic mode and commence connecting to the
2348 *      modem. Currently called from the line discipline set up but
2349 *      will need moving to an ioctl path.
2350 */
2351
2352static int gsmld_attach_gsm(struct tty_struct *tty, struct gsm_mux *gsm)
2353{
2354        int ret, i, base;
2355
2356        gsm->tty = tty_kref_get(tty);
2357        gsm->output = gsmld_output;
2358        ret =  gsm_activate_mux(gsm);
2359        if (ret != 0)
2360                tty_kref_put(gsm->tty);
2361        else {
2362                /* Don't register device 0 - this is the control channel and not
2363                   a usable tty interface */
2364                base = gsm->num << 6; /* Base for this MUX */
2365                for (i = 1; i < NUM_DLCI; i++)
2366                        tty_register_device(gsm_tty_driver, base + i, NULL);
2367        }
2368        return ret;
2369}
2370
2371
2372/**
2373 *      gsmld_detach_gsm        -       stop doing 0710 mux
2374 *      @tty: tty attached to the mux
2375 *      @gsm: mux
2376 *
2377 *      Shutdown and then clean up the resources used by the line discipline
2378 */
2379
2380static void gsmld_detach_gsm(struct tty_struct *tty, struct gsm_mux *gsm)
2381{
2382        int i;
2383        int base = gsm->num << 6; /* Base for this MUX */
2384
2385        WARN_ON(tty != gsm->tty);
2386        for (i = 1; i < NUM_DLCI; i++)
2387                tty_unregister_device(gsm_tty_driver, base + i);
2388        gsm_cleanup_mux(gsm);
2389        tty_kref_put(gsm->tty);
2390        gsm->tty = NULL;
2391}
2392
2393static void gsmld_receive_buf(struct tty_struct *tty, const unsigned char *cp,
2394                              char *fp, int count)
2395{
2396        struct gsm_mux *gsm = tty->disc_data;
2397        const unsigned char *dp;
2398        char *f;
2399        int i;
2400        char flags = TTY_NORMAL;
2401
2402        if (debug & 4)
2403                print_hex_dump_bytes("gsmld_receive: ", DUMP_PREFIX_OFFSET,
2404                                     cp, count);
2405
2406        for (i = count, dp = cp, f = fp; i; i--, dp++) {
2407                if (f)
2408                        flags = *f++;
2409                switch (flags) {
2410                case TTY_NORMAL:
2411                        gsm->receive(gsm, *dp);
2412                        break;
2413                case TTY_OVERRUN:
2414                case TTY_BREAK:
2415                case TTY_PARITY:
2416                case TTY_FRAME:
2417                        gsm->error(gsm, *dp, flags);
2418                        break;
2419                default:
2420                        WARN_ONCE(1, "%s: unknown flag %d\n",
2421                               tty_name(tty), flags);
2422                        break;
2423                }
2424        }
2425        /* FASYNC if needed ? */
2426        /* If clogged call tty_throttle(tty); */
2427}
2428
2429/**
2430 *      gsmld_flush_buffer      -       clean input queue
2431 *      @tty:   terminal device
2432 *
2433 *      Flush the input buffer. Called when the line discipline is
2434 *      being closed, when the tty layer wants the buffer flushed (eg
2435 *      at hangup).
2436 */
2437
2438static void gsmld_flush_buffer(struct tty_struct *tty)
2439{
2440}
2441
2442/**
2443 *      gsmld_close             -       close the ldisc for this tty
2444 *      @tty: device
2445 *
2446 *      Called from the terminal layer when this line discipline is
2447 *      being shut down, either because of a close or becsuse of a
2448 *      discipline change. The function will not be called while other
2449 *      ldisc methods are in progress.
2450 */
2451
2452static void gsmld_close(struct tty_struct *tty)
2453{
2454        struct gsm_mux *gsm = tty->disc_data;
2455
2456        gsmld_detach_gsm(tty, gsm);
2457
2458        gsmld_flush_buffer(tty);
2459        /* Do other clean up here */
2460        mux_put(gsm);
2461}
2462
2463/**
2464 *      gsmld_open              -       open an ldisc
2465 *      @tty: terminal to open
2466 *
2467 *      Called when this line discipline is being attached to the
2468 *      terminal device. Can sleep. Called serialized so that no
2469 *      other events will occur in parallel. No further open will occur
2470 *      until a close.
2471 */
2472
2473static int gsmld_open(struct tty_struct *tty)
2474{
2475        struct gsm_mux *gsm;
2476        int ret;
2477
2478        if (tty->ops->write == NULL)
2479                return -EINVAL;
2480
2481        /* Attach our ldisc data */
2482        gsm = gsm_alloc_mux();
2483        if (gsm == NULL)
2484                return -ENOMEM;
2485
2486        tty->disc_data = gsm;
2487        tty->receive_room = 65536;
2488
2489        /* Attach the initial passive connection */
2490        gsm->encoding = 1;
2491
2492        ret = gsmld_attach_gsm(tty, gsm);
2493        if (ret != 0) {
2494                gsm_cleanup_mux(gsm);
2495                mux_put(gsm);
2496        }
2497        return ret;
2498}
2499
2500/**
2501 *      gsmld_write_wakeup      -       asynchronous I/O notifier
2502 *      @tty: tty device
2503 *
2504 *      Required for the ptys, serial driver etc. since processes
2505 *      that attach themselves to the master and rely on ASYNC
2506 *      IO must be woken up
2507 */
2508
2509static void gsmld_write_wakeup(struct tty_struct *tty)
2510{
2511        struct gsm_mux *gsm = tty->disc_data;
2512        unsigned long flags;
2513
2514        /* Queue poll */
2515        clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
2516        spin_lock_irqsave(&gsm->tx_lock, flags);
2517        gsm_data_kick(gsm);
2518        if (gsm->tx_bytes < TX_THRESH_LO) {
2519                gsm_dlci_data_sweep(gsm);
2520        }
2521        spin_unlock_irqrestore(&gsm->tx_lock, flags);
2522}
2523
2524/**
2525 *      gsmld_read              -       read function for tty
2526 *      @tty: tty device
2527 *      @file: file object
2528 *      @buf: userspace buffer pointer
2529 *      @nr: size of I/O
2530 *
2531 *      Perform reads for the line discipline. We are guaranteed that the
2532 *      line discipline will not be closed under us but we may get multiple
2533 *      parallel readers and must handle this ourselves. We may also get
2534 *      a hangup. Always called in user context, may sleep.
2535 *
2536 *      This code must be sure never to sleep through a hangup.
2537 */
2538
2539static ssize_t gsmld_read(struct tty_struct *tty, struct file *file,
2540                         unsigned char __user *buf, size_t nr)
2541{
2542        return -EOPNOTSUPP;
2543}
2544
2545/**
2546 *      gsmld_write             -       write function for tty
2547 *      @tty: tty device
2548 *      @file: file object
2549 *      @buf: userspace buffer pointer
2550 *      @nr: size of I/O
2551 *
2552 *      Called when the owner of the device wants to send a frame
2553 *      itself (or some other control data). The data is transferred
2554 *      as-is and must be properly framed and checksummed as appropriate
2555 *      by userspace. Frames are either sent whole or not at all as this
2556 *      avoids pain user side.
2557 */
2558
2559static ssize_t gsmld_write(struct tty_struct *tty, struct file *file,
2560                           const unsigned char *buf, size_t nr)
2561{
2562        int space = tty_write_room(tty);
2563        if (space >= nr)
2564                return tty->ops->write(tty, buf, nr);
2565        set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
2566        return -ENOBUFS;
2567}
2568
2569/**
2570 *      gsmld_poll              -       poll method for N_GSM0710
2571 *      @tty: terminal device
2572 *      @file: file accessing it
2573 *      @wait: poll table
2574 *
2575 *      Called when the line discipline is asked to poll() for data or
2576 *      for special events. This code is not serialized with respect to
2577 *      other events save open/close.
2578 *
2579 *      This code must be sure never to sleep through a hangup.
2580 *      Called without the kernel lock held - fine
2581 */
2582
2583static __poll_t gsmld_poll(struct tty_struct *tty, struct file *file,
2584                                                        poll_table *wait)
2585{
2586        __poll_t mask = 0;
2587        struct gsm_mux *gsm = tty->disc_data;
2588
2589        poll_wait(file, &tty->read_wait, wait);
2590        poll_wait(file, &tty->write_wait, wait);
2591        if (tty_hung_up_p(file))
2592                mask |= EPOLLHUP;
2593        if (!tty_is_writelocked(tty) && tty_write_room(tty) > 0)
2594                mask |= EPOLLOUT | EPOLLWRNORM;
2595        if (gsm->dead)
2596                mask |= EPOLLHUP;
2597        return mask;
2598}
2599
2600static int gsmld_ioctl(struct tty_struct *tty, struct file *file,
2601                       unsigned int cmd, unsigned long arg)
2602{
2603        struct gsm_config c;
2604        struct gsm_mux *gsm = tty->disc_data;
2605
2606        switch (cmd) {
2607        case GSMIOC_GETCONF:
2608                gsm_copy_config_values(gsm, &c);
2609                if (copy_to_user((void *)arg, &c, sizeof(c)))
2610                        return -EFAULT;
2611                return 0;
2612        case GSMIOC_SETCONF:
2613                if (copy_from_user(&c, (void *)arg, sizeof(c)))
2614                        return -EFAULT;
2615                return gsm_config(gsm, &c);
2616        default:
2617                return n_tty_ioctl_helper(tty, file, cmd, arg);
2618        }
2619}
2620
2621/*
2622 *      Network interface
2623 *
2624 */
2625
2626static int gsm_mux_net_open(struct net_device *net)
2627{
2628        pr_debug("%s called\n", __func__);
2629        netif_start_queue(net);
2630        return 0;
2631}
2632
2633static int gsm_mux_net_close(struct net_device *net)
2634{
2635        netif_stop_queue(net);
2636        return 0;
2637}
2638
2639static void dlci_net_free(struct gsm_dlci *dlci)
2640{
2641        if (!dlci->net) {
2642                WARN_ON(1);
2643                return;
2644        }
2645        dlci->adaption = dlci->prev_adaption;
2646        dlci->data = dlci->prev_data;
2647        free_netdev(dlci->net);
2648        dlci->net = NULL;
2649}
2650static void net_free(struct kref *ref)
2651{
2652        struct gsm_mux_net *mux_net;
2653        struct gsm_dlci *dlci;
2654
2655        mux_net = container_of(ref, struct gsm_mux_net, ref);
2656        dlci = mux_net->dlci;
2657
2658        if (dlci->net) {
2659                unregister_netdev(dlci->net);
2660                dlci_net_free(dlci);
2661        }
2662}
2663
2664static inline void muxnet_get(struct gsm_mux_net *mux_net)
2665{
2666        kref_get(&mux_net->ref);
2667}
2668
2669static inline void muxnet_put(struct gsm_mux_net *mux_net)
2670{
2671        kref_put(&mux_net->ref, net_free);
2672}
2673
2674static netdev_tx_t gsm_mux_net_start_xmit(struct sk_buff *skb,
2675                                      struct net_device *net)
2676{
2677        struct gsm_mux_net *mux_net = netdev_priv(net);
2678        struct gsm_dlci *dlci = mux_net->dlci;
2679        muxnet_get(mux_net);
2680
2681        skb_queue_head(&dlci->skb_list, skb);
2682        net->stats.tx_packets++;
2683        net->stats.tx_bytes += skb->len;
2684        gsm_dlci_data_kick(dlci);
2685        /* And tell the kernel when the last transmit started. */
2686        netif_trans_update(net);
2687        muxnet_put(mux_net);
2688        return NETDEV_TX_OK;
2689}
2690
2691/* called when a packet did not ack after watchdogtimeout */
2692static void gsm_mux_net_tx_timeout(struct net_device *net)
2693{
2694        /* Tell syslog we are hosed. */
2695        dev_dbg(&net->dev, "Tx timed out.\n");
2696
2697        /* Update statistics */
2698        net->stats.tx_errors++;
2699}
2700
2701static void gsm_mux_rx_netchar(struct gsm_dlci *dlci,
2702                                const unsigned char *in_buf, int size)
2703{
2704        struct net_device *net = dlci->net;
2705        struct sk_buff *skb;
2706        struct gsm_mux_net *mux_net = netdev_priv(net);
2707        muxnet_get(mux_net);
2708
2709        /* Allocate an sk_buff */
2710        skb = dev_alloc_skb(size + NET_IP_ALIGN);
2711        if (!skb) {
2712                /* We got no receive buffer. */
2713                net->stats.rx_dropped++;
2714                muxnet_put(mux_net);
2715                return;
2716        }
2717        skb_reserve(skb, NET_IP_ALIGN);
2718        skb_put_data(skb, in_buf, size);
2719
2720        skb->dev = net;
2721        skb->protocol = htons(ETH_P_IP);
2722
2723        /* Ship it off to the kernel */
2724        netif_rx(skb);
2725
2726        /* update out statistics */
2727        net->stats.rx_packets++;
2728        net->stats.rx_bytes += size;
2729        muxnet_put(mux_net);
2730        return;
2731}
2732
2733static void gsm_mux_net_init(struct net_device *net)
2734{
2735        static const struct net_device_ops gsm_netdev_ops = {
2736                .ndo_open               = gsm_mux_net_open,
2737                .ndo_stop               = gsm_mux_net_close,
2738                .ndo_start_xmit         = gsm_mux_net_start_xmit,
2739                .ndo_tx_timeout         = gsm_mux_net_tx_timeout,
2740        };
2741
2742        net->netdev_ops = &gsm_netdev_ops;
2743
2744        /* fill in the other fields */
2745        net->watchdog_timeo = GSM_NET_TX_TIMEOUT;
2746        net->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
2747        net->type = ARPHRD_NONE;
2748        net->tx_queue_len = 10;
2749}
2750
2751
2752/* caller holds the dlci mutex */
2753static void gsm_destroy_network(struct gsm_dlci *dlci)
2754{
2755        struct gsm_mux_net *mux_net;
2756
2757        pr_debug("destroy network interface");
2758        if (!dlci->net)
2759                return;
2760        mux_net = netdev_priv(dlci->net);
2761        muxnet_put(mux_net);
2762}
2763
2764
2765/* caller holds the dlci mutex */
2766static int gsm_create_network(struct gsm_dlci *dlci, struct gsm_netconfig *nc)
2767{
2768        char *netname;
2769        int retval = 0;
2770        struct net_device *net;
2771        struct gsm_mux_net *mux_net;
2772
2773        if (!capable(CAP_NET_ADMIN))
2774                return -EPERM;
2775
2776        /* Already in a non tty mode */
2777        if (dlci->adaption > 2)
2778                return -EBUSY;
2779
2780        if (nc->protocol != htons(ETH_P_IP))
2781                return -EPROTONOSUPPORT;
2782
2783        if (nc->adaption != 3 && nc->adaption != 4)
2784                return -EPROTONOSUPPORT;
2785
2786        pr_debug("create network interface");
2787
2788        netname = "gsm%d";
2789        if (nc->if_name[0] != '\0')
2790                netname = nc->if_name;
2791        net = alloc_netdev(sizeof(struct gsm_mux_net), netname,
2792                           NET_NAME_UNKNOWN, gsm_mux_net_init);
2793        if (!net) {
2794                pr_err("alloc_netdev failed");
2795                return -ENOMEM;
2796        }
2797        net->mtu = dlci->gsm->mtu;
2798        net->min_mtu = 8;
2799        net->max_mtu = dlci->gsm->mtu;
2800        mux_net = netdev_priv(net);
2801        mux_net->dlci = dlci;
2802        kref_init(&mux_net->ref);
2803        strncpy(nc->if_name, net->name, IFNAMSIZ); /* return net name */
2804
2805        /* reconfigure dlci for network */
2806        dlci->prev_adaption = dlci->adaption;
2807        dlci->prev_data = dlci->data;
2808        dlci->adaption = nc->adaption;
2809        dlci->data = gsm_mux_rx_netchar;
2810        dlci->net = net;
2811
2812        pr_debug("register netdev");
2813        retval = register_netdev(net);
2814        if (retval) {
2815                pr_err("network register fail %d\n", retval);
2816                dlci_net_free(dlci);
2817                return retval;
2818        }
2819        return net->ifindex;    /* return network index */
2820}
2821
2822/* Line discipline for real tty */
2823static struct tty_ldisc_ops tty_ldisc_packet = {
2824        .owner           = THIS_MODULE,
2825        .magic           = TTY_LDISC_MAGIC,
2826        .name            = "n_gsm",
2827        .open            = gsmld_open,
2828        .close           = gsmld_close,
2829        .flush_buffer    = gsmld_flush_buffer,
2830        .read            = gsmld_read,
2831        .write           = gsmld_write,
2832        .ioctl           = gsmld_ioctl,
2833        .poll            = gsmld_poll,
2834        .receive_buf     = gsmld_receive_buf,
2835        .write_wakeup    = gsmld_write_wakeup
2836};
2837
2838/*
2839 *      Virtual tty side
2840 */
2841
2842#define TX_SIZE         512
2843
2844static int gsmtty_modem_update(struct gsm_dlci *dlci, u8 brk)
2845{
2846        u8 modembits[5];
2847        struct gsm_control *ctrl;
2848        int len = 2;
2849
2850        if (brk)
2851                len++;
2852
2853        modembits[0] = len << 1 | EA;           /* Data bytes */
2854        modembits[1] = dlci->addr << 2 | 3;     /* DLCI, EA, 1 */
2855        modembits[2] = gsm_encode_modem(dlci) << 1 | EA;
2856        if (brk)
2857                modembits[3] = brk << 4 | 2 | EA;       /* Valid, EA */
2858        ctrl = gsm_control_send(dlci->gsm, CMD_MSC, modembits, len + 1);
2859        if (ctrl == NULL)
2860                return -ENOMEM;
2861        return gsm_control_wait(dlci->gsm, ctrl);
2862}
2863
2864static int gsm_carrier_raised(struct tty_port *port)
2865{
2866        struct gsm_dlci *dlci = container_of(port, struct gsm_dlci, port);
2867        struct gsm_mux *gsm = dlci->gsm;
2868
2869        /* Not yet open so no carrier info */
2870        if (dlci->state != DLCI_OPEN)
2871                return 0;
2872        if (debug & 2)
2873                return 1;
2874
2875        /*
2876         * Basic mode with control channel in ADM mode may not respond
2877         * to CMD_MSC at all and modem_rx is empty.
2878         */
2879        if (gsm->encoding == 0 && gsm->dlci[0]->mode == DLCI_MODE_ADM &&
2880            !dlci->modem_rx)
2881                return 1;
2882
2883        return dlci->modem_rx & TIOCM_CD;
2884}
2885
2886static void gsm_dtr_rts(struct tty_port *port, int onoff)
2887{
2888        struct gsm_dlci *dlci = container_of(port, struct gsm_dlci, port);
2889        unsigned int modem_tx = dlci->modem_tx;
2890        if (onoff)
2891                modem_tx |= TIOCM_DTR | TIOCM_RTS;
2892        else
2893                modem_tx &= ~(TIOCM_DTR | TIOCM_RTS);
2894        if (modem_tx != dlci->modem_tx) {
2895                dlci->modem_tx = modem_tx;
2896                gsmtty_modem_update(dlci, 0);
2897        }
2898}
2899
2900static const struct tty_port_operations gsm_port_ops = {
2901        .carrier_raised = gsm_carrier_raised,
2902        .dtr_rts = gsm_dtr_rts,
2903        .destruct = gsm_dlci_free,
2904};
2905
2906static int gsmtty_install(struct tty_driver *driver, struct tty_struct *tty)
2907{
2908        struct gsm_mux *gsm;
2909        struct gsm_dlci *dlci;
2910        unsigned int line = tty->index;
2911        unsigned int mux = line >> 6;
2912        bool alloc = false;
2913        int ret;
2914
2915        line = line & 0x3F;
2916
2917        if (mux >= MAX_MUX)
2918                return -ENXIO;
2919        /* FIXME: we need to lock gsm_mux for lifetimes of ttys eventually */
2920        if (gsm_mux[mux] == NULL)
2921                return -EUNATCH;
2922        if (line == 0 || line > 61)     /* 62/63 reserved */
2923                return -ECHRNG;
2924        gsm = gsm_mux[mux];
2925        if (gsm->dead)
2926                return -EL2HLT;
2927        /* If DLCI 0 is not yet fully open return an error.
2928        This is ok from a locking
2929        perspective as we don't have to worry about this
2930        if DLCI0 is lost */
2931        mutex_lock(&gsm->mutex);
2932        if (gsm->dlci[0] && gsm->dlci[0]->state != DLCI_OPEN) {
2933                mutex_unlock(&gsm->mutex);
2934                return -EL2NSYNC;
2935        }
2936        dlci = gsm->dlci[line];
2937        if (dlci == NULL) {
2938                alloc = true;
2939                dlci = gsm_dlci_alloc(gsm, line);
2940        }
2941        if (dlci == NULL) {
2942                mutex_unlock(&gsm->mutex);
2943                return -ENOMEM;
2944        }
2945        ret = tty_port_install(&dlci->port, driver, tty);
2946        if (ret) {
2947                if (alloc)
2948                        dlci_put(dlci);
2949                mutex_unlock(&gsm->mutex);
2950                return ret;
2951        }
2952
2953        dlci_get(dlci);
2954        dlci_get(gsm->dlci[0]);
2955        mux_get(gsm);
2956        tty->driver_data = dlci;
2957        mutex_unlock(&gsm->mutex);
2958
2959        return 0;
2960}
2961
2962static int gsmtty_open(struct tty_struct *tty, struct file *filp)
2963{
2964        struct gsm_dlci *dlci = tty->driver_data;
2965        struct tty_port *port = &dlci->port;
2966
2967        port->count++;
2968        tty_port_tty_set(port, tty);
2969
2970        dlci->modem_rx = 0;
2971        /* We could in theory open and close before we wait - eg if we get
2972           a DM straight back. This is ok as that will have caused a hangup */
2973        tty_port_set_initialized(port, 1);
2974        /* Start sending off SABM messages */
2975        gsm_dlci_begin_open(dlci);
2976        /* And wait for virtual carrier */
2977        return tty_port_block_til_ready(port, tty, filp);
2978}
2979
2980static void gsmtty_close(struct tty_struct *tty, struct file *filp)
2981{
2982        struct gsm_dlci *dlci = tty->driver_data;
2983
2984        if (dlci == NULL)
2985                return;
2986        if (dlci->state == DLCI_CLOSED)
2987                return;
2988        mutex_lock(&dlci->mutex);
2989        gsm_destroy_network(dlci);
2990        mutex_unlock(&dlci->mutex);
2991        if (tty_port_close_start(&dlci->port, tty, filp) == 0)
2992                return;
2993        gsm_dlci_begin_close(dlci);
2994        if (tty_port_initialized(&dlci->port) && C_HUPCL(tty))
2995                tty_port_lower_dtr_rts(&dlci->port);
2996        tty_port_close_end(&dlci->port, tty);
2997        tty_port_tty_set(&dlci->port, NULL);
2998        return;
2999}
3000
3001static void gsmtty_hangup(struct tty_struct *tty)
3002{
3003        struct gsm_dlci *dlci = tty->driver_data;
3004        if (dlci->state == DLCI_CLOSED)
3005                return;
3006        tty_port_hangup(&dlci->port);
3007        gsm_dlci_begin_close(dlci);
3008}
3009
3010static int gsmtty_write(struct tty_struct *tty, const unsigned char *buf,
3011                                                                    int len)
3012{
3013        int sent;
3014        struct gsm_dlci *dlci = tty->driver_data;
3015        if (dlci->state == DLCI_CLOSED)
3016                return -EINVAL;
3017        /* Stuff the bytes into the fifo queue */
3018        sent = kfifo_in_locked(dlci->fifo, buf, len, &dlci->lock);
3019        /* Need to kick the channel */
3020        gsm_dlci_data_kick(dlci);
3021        return sent;
3022}
3023
3024static int gsmtty_write_room(struct tty_struct *tty)
3025{
3026        struct gsm_dlci *dlci = tty->driver_data;
3027        if (dlci->state == DLCI_CLOSED)
3028                return -EINVAL;
3029        return TX_SIZE - kfifo_len(dlci->fifo);
3030}
3031
3032static int gsmtty_chars_in_buffer(struct tty_struct *tty)
3033{
3034        struct gsm_dlci *dlci = tty->driver_data;
3035        if (dlci->state == DLCI_CLOSED)
3036                return -EINVAL;
3037        return kfifo_len(dlci->fifo);
3038}
3039
3040static void gsmtty_flush_buffer(struct tty_struct *tty)
3041{
3042        struct gsm_dlci *dlci = tty->driver_data;
3043        if (dlci->state == DLCI_CLOSED)
3044                return;
3045        /* Caution needed: If we implement reliable transport classes
3046           then the data being transmitted can't simply be junked once
3047           it has first hit the stack. Until then we can just blow it
3048           away */
3049        kfifo_reset(dlci->fifo);
3050        /* Need to unhook this DLCI from the transmit queue logic */
3051}
3052
3053static void gsmtty_wait_until_sent(struct tty_struct *tty, int timeout)
3054{
3055        /* The FIFO handles the queue so the kernel will do the right
3056           thing waiting on chars_in_buffer before calling us. No work
3057           to do here */
3058}
3059
3060static int gsmtty_tiocmget(struct tty_struct *tty)
3061{
3062        struct gsm_dlci *dlci = tty->driver_data;
3063        if (dlci->state == DLCI_CLOSED)
3064                return -EINVAL;
3065        return dlci->modem_rx;
3066}
3067
3068static int gsmtty_tiocmset(struct tty_struct *tty,
3069        unsigned int set, unsigned int clear)
3070{
3071        struct gsm_dlci *dlci = tty->driver_data;
3072        unsigned int modem_tx = dlci->modem_tx;
3073
3074        if (dlci->state == DLCI_CLOSED)
3075                return -EINVAL;
3076        modem_tx &= ~clear;
3077        modem_tx |= set;
3078
3079        if (modem_tx != dlci->modem_tx) {
3080                dlci->modem_tx = modem_tx;
3081                return gsmtty_modem_update(dlci, 0);
3082        }
3083        return 0;
3084}
3085
3086
3087static int gsmtty_ioctl(struct tty_struct *tty,
3088                        unsigned int cmd, unsigned long arg)
3089{
3090        struct gsm_dlci *dlci = tty->driver_data;
3091        struct gsm_netconfig nc;
3092        int index;
3093
3094        if (dlci->state == DLCI_CLOSED)
3095                return -EINVAL;
3096        switch (cmd) {
3097        case GSMIOC_ENABLE_NET:
3098                if (copy_from_user(&nc, (void __user *)arg, sizeof(nc)))
3099                        return -EFAULT;
3100                nc.if_name[IFNAMSIZ-1] = '\0';
3101                /* return net interface index or error code */
3102                mutex_lock(&dlci->mutex);
3103                index = gsm_create_network(dlci, &nc);
3104                mutex_unlock(&dlci->mutex);
3105                if (copy_to_user((void __user *)arg, &nc, sizeof(nc)))
3106                        return -EFAULT;
3107                return index;
3108        case GSMIOC_DISABLE_NET:
3109                if (!capable(CAP_NET_ADMIN))
3110                        return -EPERM;
3111                mutex_lock(&dlci->mutex);
3112                gsm_destroy_network(dlci);
3113                mutex_unlock(&dlci->mutex);
3114                return 0;
3115        default:
3116                return -ENOIOCTLCMD;
3117        }
3118}
3119
3120static void gsmtty_set_termios(struct tty_struct *tty, struct ktermios *old)
3121{
3122        struct gsm_dlci *dlci = tty->driver_data;
3123        if (dlci->state == DLCI_CLOSED)
3124                return;
3125        /* For the moment its fixed. In actual fact the speed information
3126           for the virtual channel can be propogated in both directions by
3127           the RPN control message. This however rapidly gets nasty as we
3128           then have to remap modem signals each way according to whether
3129           our virtual cable is null modem etc .. */
3130        tty_termios_copy_hw(&tty->termios, old);
3131}
3132
3133static void gsmtty_throttle(struct tty_struct *tty)
3134{
3135        struct gsm_dlci *dlci = tty->driver_data;
3136        if (dlci->state == DLCI_CLOSED)
3137                return;
3138        if (C_CRTSCTS(tty))
3139                dlci->modem_tx &= ~TIOCM_DTR;
3140        dlci->throttled = 1;
3141        /* Send an MSC with DTR cleared */
3142        gsmtty_modem_update(dlci, 0);
3143}
3144
3145static void gsmtty_unthrottle(struct tty_struct *tty)
3146{
3147        struct gsm_dlci *dlci = tty->driver_data;
3148        if (dlci->state == DLCI_CLOSED)
3149                return;
3150        if (C_CRTSCTS(tty))
3151                dlci->modem_tx |= TIOCM_DTR;
3152        dlci->throttled = 0;
3153        /* Send an MSC with DTR set */
3154        gsmtty_modem_update(dlci, 0);
3155}
3156
3157static int gsmtty_break_ctl(struct tty_struct *tty, int state)
3158{
3159        struct gsm_dlci *dlci = tty->driver_data;
3160        int encode = 0; /* Off */
3161        if (dlci->state == DLCI_CLOSED)
3162                return -EINVAL;
3163
3164        if (state == -1)        /* "On indefinitely" - we can't encode this
3165                                    properly */
3166                encode = 0x0F;
3167        else if (state > 0) {
3168                encode = state / 200;   /* mS to encoding */
3169                if (encode > 0x0F)
3170                        encode = 0x0F;  /* Best effort */
3171        }
3172        return gsmtty_modem_update(dlci, encode);
3173}
3174
3175static void gsmtty_cleanup(struct tty_struct *tty)
3176{
3177        struct gsm_dlci *dlci = tty->driver_data;
3178        struct gsm_mux *gsm = dlci->gsm;
3179
3180        dlci_put(dlci);
3181        dlci_put(gsm->dlci[0]);
3182        mux_put(gsm);
3183}
3184
3185/* Virtual ttys for the demux */
3186static const struct tty_operations gsmtty_ops = {
3187        .install                = gsmtty_install,
3188        .open                   = gsmtty_open,
3189        .close                  = gsmtty_close,
3190        .write                  = gsmtty_write,
3191        .write_room             = gsmtty_write_room,
3192        .chars_in_buffer        = gsmtty_chars_in_buffer,
3193        .flush_buffer           = gsmtty_flush_buffer,
3194        .ioctl                  = gsmtty_ioctl,
3195        .throttle               = gsmtty_throttle,
3196        .unthrottle             = gsmtty_unthrottle,
3197        .set_termios            = gsmtty_set_termios,
3198        .hangup                 = gsmtty_hangup,
3199        .wait_until_sent        = gsmtty_wait_until_sent,
3200        .tiocmget               = gsmtty_tiocmget,
3201        .tiocmset               = gsmtty_tiocmset,
3202        .break_ctl              = gsmtty_break_ctl,
3203        .cleanup                = gsmtty_cleanup,
3204};
3205
3206
3207
3208static int __init gsm_init(void)
3209{
3210        /* Fill in our line protocol discipline, and register it */
3211        int status = tty_register_ldisc(N_GSM0710, &tty_ldisc_packet);
3212        if (status != 0) {
3213                pr_err("n_gsm: can't register line discipline (err = %d)\n",
3214                                                                status);
3215                return status;
3216        }
3217
3218        gsm_tty_driver = alloc_tty_driver(256);
3219        if (!gsm_tty_driver) {
3220                tty_unregister_ldisc(N_GSM0710);
3221                pr_err("gsm_init: tty allocation failed.\n");
3222                return -EINVAL;
3223        }
3224        gsm_tty_driver->driver_name     = "gsmtty";
3225        gsm_tty_driver->name            = "gsmtty";
3226        gsm_tty_driver->major           = 0;    /* Dynamic */
3227        gsm_tty_driver->minor_start     = 0;
3228        gsm_tty_driver->type            = TTY_DRIVER_TYPE_SERIAL;
3229        gsm_tty_driver->subtype = SERIAL_TYPE_NORMAL;
3230        gsm_tty_driver->flags   = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV
3231                                                | TTY_DRIVER_HARDWARE_BREAK;
3232        gsm_tty_driver->init_termios    = tty_std_termios;
3233        /* Fixme */
3234        gsm_tty_driver->init_termios.c_lflag &= ~ECHO;
3235        tty_set_operations(gsm_tty_driver, &gsmtty_ops);
3236
3237        spin_lock_init(&gsm_mux_lock);
3238
3239        if (tty_register_driver(gsm_tty_driver)) {
3240                put_tty_driver(gsm_tty_driver);
3241                tty_unregister_ldisc(N_GSM0710);
3242                pr_err("gsm_init: tty registration failed.\n");
3243                return -EBUSY;
3244        }
3245        pr_debug("gsm_init: loaded as %d,%d.\n",
3246                        gsm_tty_driver->major, gsm_tty_driver->minor_start);
3247        return 0;
3248}
3249
3250static void __exit gsm_exit(void)
3251{
3252        int status = tty_unregister_ldisc(N_GSM0710);
3253        if (status != 0)
3254                pr_err("n_gsm: can't unregister line discipline (err = %d)\n",
3255                                                                status);
3256        tty_unregister_driver(gsm_tty_driver);
3257        put_tty_driver(gsm_tty_driver);
3258}
3259
3260module_init(gsm_init);
3261module_exit(gsm_exit);
3262
3263
3264MODULE_LICENSE("GPL");
3265MODULE_ALIAS_LDISC(N_GSM0710);
3266