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