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