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