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