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