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