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