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