GNU Linux-libre 4.19.314-gnu1
[releases.git] / drivers / tty / n_gsm.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * n_gsm.c GSM 0710 tty multiplexor
4  * Copyright (c) 2009/10 Intel Corporation
5  *
6  *      * THIS IS A DEVELOPMENT SNAPSHOT IT IS NOT A FINAL RELEASE *
7  *
8  * TO DO:
9  *      Mostly done:    ioctls for setting modes/timing
10  *      Partly done:    hooks so you can pull off frames to non tty devs
11  *      Restart DLCI 0 when it closes ?
12  *      Improve the tx engine
13  *      Resolve tx side locking by adding a queue_head and routing
14  *              all control traffic via it
15  *      General tidy/document
16  *      Review the locking/move to refcounts more (mux now moved to an
17  *              alloc/free model ready)
18  *      Use newest tty open/close port helpers and install hooks
19  *      What to do about power functions ?
20  *      Termios setting and negotiation
21  *      Do we need a 'which mux are you' ioctl to correlate mux and tty sets
22  *
23  */
24
25 #include <linux/types.h>
26 #include <linux/major.h>
27 #include <linux/errno.h>
28 #include <linux/signal.h>
29 #include <linux/fcntl.h>
30 #include <linux/sched/signal.h>
31 #include <linux/interrupt.h>
32 #include <linux/tty.h>
33 #include <linux/ctype.h>
34 #include <linux/mm.h>
35 #include <linux/string.h>
36 #include <linux/slab.h>
37 #include <linux/poll.h>
38 #include <linux/bitops.h>
39 #include <linux/file.h>
40 #include <linux/uaccess.h>
41 #include <linux/module.h>
42 #include <linux/timer.h>
43 #include <linux/tty_flip.h>
44 #include <linux/tty_driver.h>
45 #include <linux/serial.h>
46 #include <linux/kfifo.h>
47 #include <linux/skbuff.h>
48 #include <net/arp.h>
49 #include <linux/ip.h>
50 #include <linux/netdevice.h>
51 #include <linux/etherdevice.h>
52 #include <linux/gsmmux.h>
53
54 static int debug;
55 module_param(debug, int, 0600);
56
57 /* Defaults: these are from the specification */
58
59 #define T1      10              /* 100mS */
60 #define T2      34              /* 333mS */
61 #define N2      3               /* Retry 3 times */
62
63 /* Use long timers for testing at low speed with debug on */
64 #ifdef DEBUG_TIMING
65 #define T1      100
66 #define T2      200
67 #endif
68
69 /*
70  * Semi-arbitrary buffer size limits. 0710 is normally run with 32-64 byte
71  * limits so this is plenty
72  */
73 #define MAX_MRU 1500
74 #define MAX_MTU 1500
75 /* SOF, ADDR, CTRL, LEN1, LEN2, ..., FCS, EOF */
76 #define PROT_OVERHEAD 7
77 #define GSM_NET_TX_TIMEOUT (HZ*10)
78
79 /**
80  *      struct gsm_mux_net      -       network interface
81  *      @struct gsm_dlci* dlci
82  *
83  *      Created when net interface is initialized.
84  **/
85 struct gsm_mux_net {
86         struct kref ref;
87         struct gsm_dlci *dlci;
88 };
89
90 /*
91  *      Each block of data we have queued to go out is in the form of
92  *      a gsm_msg which holds everything we need in a link layer independent
93  *      format
94  */
95
96 struct gsm_msg {
97         struct list_head list;
98         u8 addr;                /* DLCI address + flags */
99         u8 ctrl;                /* Control byte + flags */
100         unsigned int len;       /* Length of data block (can be zero) */
101         unsigned char *data;    /* Points into buffer but not at the start */
102         unsigned char buffer[0];
103 };
104
105 /*
106  *      Each active data link has a gsm_dlci structure associated which ties
107  *      the link layer to an optional tty (if the tty side is open). To avoid
108  *      complexity right now these are only ever freed up when the mux is
109  *      shut down.
110  *
111  *      At the moment we don't free DLCI objects until the mux is torn down
112  *      this avoid object life time issues but might be worth review later.
113  */
114
115 struct gsm_dlci {
116         struct gsm_mux *gsm;
117         int addr;
118         int state;
119 #define DLCI_CLOSED             0
120 #define DLCI_OPENING            1       /* Sending SABM not seen UA */
121 #define DLCI_OPEN               2       /* SABM/UA complete */
122 #define DLCI_CLOSING            3       /* Sending DISC not seen UA/DM */
123         struct mutex mutex;
124
125         /* Link layer */
126         int mode;
127 #define DLCI_MODE_ABM           0       /* Normal Asynchronous Balanced Mode */
128 #define DLCI_MODE_ADM           1       /* Asynchronous Disconnected Mode */
129         spinlock_t lock;        /* Protects the internal state */
130         struct timer_list t1;   /* Retransmit timer for SABM and UA */
131         int retries;
132         /* Uplink tty if active */
133         struct tty_port port;   /* The tty bound to this DLCI if there is one */
134         struct kfifo *fifo;     /* Queue fifo for the DLCI */
135         struct kfifo _fifo;     /* For new fifo API porting only */
136         int adaption;           /* Adaption layer in use */
137         int prev_adaption;
138         u32 modem_rx;           /* Our incoming virtual modem lines */
139         u32 modem_tx;           /* Our outgoing modem lines */
140         int dead;               /* Refuse re-open */
141         /* Flow control */
142         int throttled;          /* Private copy of throttle state */
143         int constipated;        /* Throttle status for outgoing */
144         /* Packetised I/O */
145         struct sk_buff *skb;    /* Frame being sent */
146         struct sk_buff_head skb_list;   /* Queued frames */
147         /* Data handling callback */
148         void (*data)(struct gsm_dlci *dlci, u8 *data, int len);
149         void (*prev_data)(struct gsm_dlci *dlci, u8 *data, int len);
150         struct net_device *net; /* network interface, if created */
151 };
152
153 /* DLCI 0, 62/63 are special or reserved see gsmtty_open */
154
155 #define NUM_DLCI                64
156
157 /*
158  *      DLCI 0 is used to pass control blocks out of band of the data
159  *      flow (and with a higher link priority). One command can be outstanding
160  *      at a time and we use this structure to manage them. They are created
161  *      and destroyed by the user context, and updated by the receive paths
162  *      and timers
163  */
164
165 struct gsm_control {
166         u8 cmd;         /* Command we are issuing */
167         u8 *data;       /* Data for the command in case we retransmit */
168         int len;        /* Length of block for retransmission */
169         int done;       /* Done flag */
170         int error;      /* Error if any */
171 };
172
173 /*
174  *      Each GSM mux we have is represented by this structure. If we are
175  *      operating as an ldisc then we use this structure as our ldisc
176  *      state. We need to sort out lifetimes and locking with respect
177  *      to the gsm mux array. For now we don't free DLCI objects that
178  *      have been instantiated until the mux itself is terminated.
179  *
180  *      To consider further: tty open versus mux shutdown.
181  */
182
183 struct gsm_mux {
184         struct tty_struct *tty;         /* The tty our ldisc is bound to */
185         spinlock_t lock;
186         struct mutex mutex;
187         unsigned int num;
188         struct kref ref;
189
190         /* Events on the GSM channel */
191         wait_queue_head_t event;
192
193         /* Bits for GSM mode decoding */
194
195         /* Framing Layer */
196         unsigned char *buf;
197         int state;
198 #define GSM_SEARCH              0
199 #define GSM_START               1
200 #define GSM_ADDRESS             2
201 #define GSM_CONTROL             3
202 #define GSM_LEN                 4
203 #define GSM_DATA                5
204 #define GSM_FCS                 6
205 #define GSM_OVERRUN             7
206 #define GSM_LEN0                8
207 #define GSM_LEN1                9
208 #define GSM_SSOF                10
209         unsigned int len;
210         unsigned int address;
211         unsigned int count;
212         int escape;
213         int encoding;
214         u8 control;
215         u8 fcs;
216         u8 received_fcs;
217         u8 *txframe;                    /* TX framing buffer */
218
219         /* Methods for the receiver side */
220         void (*receive)(struct gsm_mux *gsm, u8 ch);
221         void (*error)(struct gsm_mux *gsm, u8 ch, u8 flag);
222         /* And transmit side */
223         int (*output)(struct gsm_mux *mux, u8 *data, int len);
224
225         /* Link Layer */
226         unsigned int mru;
227         unsigned int mtu;
228         int initiator;                  /* Did we initiate connection */
229         int dead;                       /* Has the mux been shut down */
230         struct gsm_dlci *dlci[NUM_DLCI];
231         int constipated;                /* Asked by remote to shut up */
232
233         spinlock_t tx_lock;
234         unsigned int tx_bytes;          /* TX data outstanding */
235 #define TX_THRESH_HI            8192
236 #define TX_THRESH_LO            2048
237         struct list_head tx_list;       /* Pending data packets */
238
239         /* Control messages */
240         struct timer_list t2_timer;     /* Retransmit timer for commands */
241         int cretries;                   /* Command retry counter */
242         struct gsm_control *pending_cmd;/* Our current pending command */
243         spinlock_t control_lock;        /* Protects the pending command */
244
245         /* Configuration */
246         int adaption;           /* 1 or 2 supported */
247         u8 ftype;               /* UI or UIH */
248         int t1, t2;             /* Timers in 1/100th of a sec */
249         int n2;                 /* Retry count */
250
251         /* Statistics (not currently exposed) */
252         unsigned long bad_fcs;
253         unsigned long malformed;
254         unsigned long io_error;
255         unsigned long bad_size;
256         unsigned long unsupported;
257 };
258
259
260 /*
261  *      Mux objects - needed so that we can translate a tty index into the
262  *      relevant mux and DLCI.
263  */
264
265 #define MAX_MUX         4                       /* 256 minors */
266 static struct gsm_mux *gsm_mux[MAX_MUX];        /* GSM muxes */
267 static spinlock_t gsm_mux_lock;
268
269 static struct tty_driver *gsm_tty_driver;
270
271 /*
272  *      This section of the driver logic implements the GSM encodings
273  *      both the basic and the 'advanced'. Reliable transport is not
274  *      supported.
275  */
276
277 #define CR                      0x02
278 #define EA                      0x01
279 #define PF                      0x10
280
281 /* I is special: the rest are ..*/
282 #define RR                      0x01
283 #define UI                      0x03
284 #define RNR                     0x05
285 #define REJ                     0x09
286 #define DM                      0x0F
287 #define SABM                    0x2F
288 #define DISC                    0x43
289 #define UA                      0x63
290 #define UIH                     0xEF
291
292 /* Channel commands */
293 #define CMD_NSC                 0x09
294 #define CMD_TEST                0x11
295 #define CMD_PSC                 0x21
296 #define CMD_RLS                 0x29
297 #define CMD_FCOFF               0x31
298 #define CMD_PN                  0x41
299 #define CMD_RPN                 0x49
300 #define CMD_FCON                0x51
301 #define CMD_CLD                 0x61
302 #define CMD_SNC                 0x69
303 #define CMD_MSC                 0x71
304
305 /* Virtual modem bits */
306 #define MDM_FC                  0x01
307 #define MDM_RTC                 0x02
308 #define MDM_RTR                 0x04
309 #define MDM_IC                  0x20
310 #define MDM_DV                  0x40
311
312 #define GSM0_SOF                0xF9
313 #define GSM1_SOF                0x7E
314 #define GSM1_ESCAPE             0x7D
315 #define GSM1_ESCAPE_BITS        0x20
316 #define XON                     0x11
317 #define XOFF                    0x13
318 #define ISO_IEC_646_MASK        0x7F
319
320 static const struct tty_port_operations gsm_port_ops;
321
322 /*
323  *      CRC table for GSM 0710
324  */
325
326 static const u8 gsm_fcs8[256] = {
327         0x00, 0x91, 0xE3, 0x72, 0x07, 0x96, 0xE4, 0x75,
328         0x0E, 0x9F, 0xED, 0x7C, 0x09, 0x98, 0xEA, 0x7B,
329         0x1C, 0x8D, 0xFF, 0x6E, 0x1B, 0x8A, 0xF8, 0x69,
330         0x12, 0x83, 0xF1, 0x60, 0x15, 0x84, 0xF6, 0x67,
331         0x38, 0xA9, 0xDB, 0x4A, 0x3F, 0xAE, 0xDC, 0x4D,
332         0x36, 0xA7, 0xD5, 0x44, 0x31, 0xA0, 0xD2, 0x43,
333         0x24, 0xB5, 0xC7, 0x56, 0x23, 0xB2, 0xC0, 0x51,
334         0x2A, 0xBB, 0xC9, 0x58, 0x2D, 0xBC, 0xCE, 0x5F,
335         0x70, 0xE1, 0x93, 0x02, 0x77, 0xE6, 0x94, 0x05,
336         0x7E, 0xEF, 0x9D, 0x0C, 0x79, 0xE8, 0x9A, 0x0B,
337         0x6C, 0xFD, 0x8F, 0x1E, 0x6B, 0xFA, 0x88, 0x19,
338         0x62, 0xF3, 0x81, 0x10, 0x65, 0xF4, 0x86, 0x17,
339         0x48, 0xD9, 0xAB, 0x3A, 0x4F, 0xDE, 0xAC, 0x3D,
340         0x46, 0xD7, 0xA5, 0x34, 0x41, 0xD0, 0xA2, 0x33,
341         0x54, 0xC5, 0xB7, 0x26, 0x53, 0xC2, 0xB0, 0x21,
342         0x5A, 0xCB, 0xB9, 0x28, 0x5D, 0xCC, 0xBE, 0x2F,
343         0xE0, 0x71, 0x03, 0x92, 0xE7, 0x76, 0x04, 0x95,
344         0xEE, 0x7F, 0x0D, 0x9C, 0xE9, 0x78, 0x0A, 0x9B,
345         0xFC, 0x6D, 0x1F, 0x8E, 0xFB, 0x6A, 0x18, 0x89,
346         0xF2, 0x63, 0x11, 0x80, 0xF5, 0x64, 0x16, 0x87,
347         0xD8, 0x49, 0x3B, 0xAA, 0xDF, 0x4E, 0x3C, 0xAD,
348         0xD6, 0x47, 0x35, 0xA4, 0xD1, 0x40, 0x32, 0xA3,
349         0xC4, 0x55, 0x27, 0xB6, 0xC3, 0x52, 0x20, 0xB1,
350         0xCA, 0x5B, 0x29, 0xB8, 0xCD, 0x5C, 0x2E, 0xBF,
351         0x90, 0x01, 0x73, 0xE2, 0x97, 0x06, 0x74, 0xE5,
352         0x9E, 0x0F, 0x7D, 0xEC, 0x99, 0x08, 0x7A, 0xEB,
353         0x8C, 0x1D, 0x6F, 0xFE, 0x8B, 0x1A, 0x68, 0xF9,
354         0x82, 0x13, 0x61, 0xF0, 0x85, 0x14, 0x66, 0xF7,
355         0xA8, 0x39, 0x4B, 0xDA, 0xAF, 0x3E, 0x4C, 0xDD,
356         0xA6, 0x37, 0x45, 0xD4, 0xA1, 0x30, 0x42, 0xD3,
357         0xB4, 0x25, 0x57, 0xC6, 0xB3, 0x22, 0x50, 0xC1,
358         0xBA, 0x2B, 0x59, 0xC8, 0xBD, 0x2C, 0x5E, 0xCF
359 };
360
361 #define INIT_FCS        0xFF
362 #define GOOD_FCS        0xCF
363
364 /**
365  *      gsm_fcs_add     -       update FCS
366  *      @fcs: Current FCS
367  *      @c: Next data
368  *
369  *      Update the FCS to include c. Uses the algorithm in the specification
370  *      notes.
371  */
372
373 static inline u8 gsm_fcs_add(u8 fcs, u8 c)
374 {
375         return gsm_fcs8[fcs ^ c];
376 }
377
378 /**
379  *      gsm_fcs_add_block       -       update FCS for a block
380  *      @fcs: Current FCS
381  *      @c: buffer of data
382  *      @len: length of buffer
383  *
384  *      Update the FCS to include c. Uses the algorithm in the specification
385  *      notes.
386  */
387
388 static inline u8 gsm_fcs_add_block(u8 fcs, u8 *c, int len)
389 {
390         while (len--)
391                 fcs = gsm_fcs8[fcs ^ *c++];
392         return fcs;
393 }
394
395 /**
396  *      gsm_read_ea             -       read a byte into an EA
397  *      @val: variable holding value
398  *      c: byte going into the EA
399  *
400  *      Processes one byte of an EA. Updates the passed variable
401  *      and returns 1 if the EA is now completely read
402  */
403
404 static int gsm_read_ea(unsigned int *val, u8 c)
405 {
406         /* Add the next 7 bits into the value */
407         *val <<= 7;
408         *val |= c >> 1;
409         /* Was this the last byte of the EA 1 = yes*/
410         return c & EA;
411 }
412
413 /**
414  *      gsm_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, 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, 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         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, u8 *data, int clen)
1198 {
1199         struct tty_port *port;
1200         unsigned int addr = 0;
1201         u8 bits;
1202         int len = clen;
1203         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                                                         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                                                         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, 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         /* Packetised interruptible data */
1630         case 4:
1631                 break;
1632         /* Packetised uininterruptible voice/data */
1633         case 3:
1634                 break;
1635         /* Asynchronous serial with line state in each frame */
1636         case 2:
1637                 while (gsm_read_ea(&modem, *data++) == 0) {
1638                         len--;
1639                         if (len == 0)
1640                                 return;
1641                 }
1642                 tty = tty_port_tty_get(port);
1643                 if (tty) {
1644                         gsm_process_modem(tty, dlci, modem, clen);
1645                         tty_kref_put(tty);
1646                 }
1647         /* Line state will go via DLCI 0 controls only */
1648         case 1:
1649         default:
1650                 tty_insert_flip_string(port, data, len);
1651                 tty_flip_buffer_push(port);
1652         }
1653 }
1654
1655 /**
1656  *      gsm_dlci_control        -       data arrived on control channel
1657  *      @dlci: channel
1658  *      @data: block of bytes received
1659  *      @len: length of received block
1660  *
1661  *      A UI or UIH frame has arrived which contains data for DLCI 0 the
1662  *      control channel. This should contain a command EA followed by
1663  *      control data bytes. The command EA contains a command/response bit
1664  *      and we divide up the work accordingly.
1665  */
1666
1667 static void gsm_dlci_command(struct gsm_dlci *dlci, u8 *data, int len)
1668 {
1669         /* See what command is involved */
1670         unsigned int command = 0;
1671         while (len-- > 0) {
1672                 if (gsm_read_ea(&command, *data++) == 1) {
1673                         int clen = *data++;
1674                         len--;
1675                         /* FIXME: this is properly an EA */
1676                         clen >>= 1;
1677                         /* Malformed command ? */
1678                         if (clen > len)
1679                                 return;
1680                         if (command & 1)
1681                                 gsm_control_message(dlci->gsm, command,
1682                                                                 data, clen);
1683                         else
1684                                 gsm_control_response(dlci->gsm, command,
1685                                                                 data, clen);
1686                         return;
1687                 }
1688         }
1689 }
1690
1691 /*
1692  *      Allocate/Free DLCI channels
1693  */
1694
1695 /**
1696  *      gsm_dlci_alloc          -       allocate a DLCI
1697  *      @gsm: GSM mux
1698  *      @addr: address of the DLCI
1699  *
1700  *      Allocate and install a new DLCI object into the GSM mux.
1701  *
1702  *      FIXME: review locking races
1703  */
1704
1705 static struct gsm_dlci *gsm_dlci_alloc(struct gsm_mux *gsm, int addr)
1706 {
1707         struct gsm_dlci *dlci = kzalloc(sizeof(struct gsm_dlci), GFP_ATOMIC);
1708         if (dlci == NULL)
1709                 return NULL;
1710         spin_lock_init(&dlci->lock);
1711         mutex_init(&dlci->mutex);
1712         dlci->fifo = &dlci->_fifo;
1713         if (kfifo_alloc(&dlci->_fifo, 4096, GFP_KERNEL) < 0) {
1714                 kfree(dlci);
1715                 return NULL;
1716         }
1717
1718         skb_queue_head_init(&dlci->skb_list);
1719         timer_setup(&dlci->t1, gsm_dlci_t1, 0);
1720         tty_port_init(&dlci->port);
1721         dlci->port.ops = &gsm_port_ops;
1722         dlci->gsm = gsm;
1723         dlci->addr = addr;
1724         dlci->adaption = gsm->adaption;
1725         dlci->state = DLCI_CLOSED;
1726         if (addr)
1727                 dlci->data = gsm_dlci_data;
1728         else
1729                 dlci->data = gsm_dlci_command;
1730         gsm->dlci[addr] = dlci;
1731         return dlci;
1732 }
1733
1734 /**
1735  *      gsm_dlci_free           -       free DLCI
1736  *      @dlci: DLCI to free
1737  *
1738  *      Free up a DLCI.
1739  *
1740  *      Can sleep.
1741  */
1742 static void gsm_dlci_free(struct tty_port *port)
1743 {
1744         struct gsm_dlci *dlci = container_of(port, struct gsm_dlci, port);
1745
1746         del_timer_sync(&dlci->t1);
1747         dlci->gsm->dlci[dlci->addr] = NULL;
1748         kfifo_free(dlci->fifo);
1749         while ((dlci->skb = skb_dequeue(&dlci->skb_list)))
1750                 dev_kfree_skb(dlci->skb);
1751         kfree(dlci);
1752 }
1753
1754 static inline void dlci_get(struct gsm_dlci *dlci)
1755 {
1756         tty_port_get(&dlci->port);
1757 }
1758
1759 static inline void dlci_put(struct gsm_dlci *dlci)
1760 {
1761         tty_port_put(&dlci->port);
1762 }
1763
1764 static void gsm_destroy_network(struct gsm_dlci *dlci);
1765
1766 /**
1767  *      gsm_dlci_release                -       release DLCI
1768  *      @dlci: DLCI to destroy
1769  *
1770  *      Release a DLCI. Actual free is deferred until either
1771  *      mux is closed or tty is closed - whichever is last.
1772  *
1773  *      Can sleep.
1774  */
1775 static void gsm_dlci_release(struct gsm_dlci *dlci)
1776 {
1777         struct tty_struct *tty = tty_port_tty_get(&dlci->port);
1778         if (tty) {
1779                 mutex_lock(&dlci->mutex);
1780                 gsm_destroy_network(dlci);
1781                 mutex_unlock(&dlci->mutex);
1782
1783                 tty_vhangup(tty);
1784
1785                 tty_port_tty_set(&dlci->port, NULL);
1786                 tty_kref_put(tty);
1787         }
1788         dlci->state = DLCI_CLOSED;
1789         dlci_put(dlci);
1790 }
1791
1792 /*
1793  *      LAPBish link layer logic
1794  */
1795
1796 /**
1797  *      gsm_queue               -       a GSM frame is ready to process
1798  *      @gsm: pointer to our gsm mux
1799  *
1800  *      At this point in time a frame has arrived and been demangled from
1801  *      the line encoding. All the differences between the encodings have
1802  *      been handled below us and the frame is unpacked into the structures.
1803  *      The fcs holds the header FCS but any data FCS must be added here.
1804  */
1805
1806 static void gsm_queue(struct gsm_mux *gsm)
1807 {
1808         struct gsm_dlci *dlci;
1809         u8 cr;
1810         int address;
1811         /* We have to sneak a look at the packet body to do the FCS.
1812            A somewhat layering violation in the spec */
1813
1814         if ((gsm->control & ~PF) == UI)
1815                 gsm->fcs = gsm_fcs_add_block(gsm->fcs, gsm->buf, gsm->len);
1816         if (gsm->encoding == 0) {
1817                 /* WARNING: gsm->received_fcs is used for
1818                 gsm->encoding = 0 only.
1819                 In this case it contain the last piece of data
1820                 required to generate final CRC */
1821                 gsm->fcs = gsm_fcs_add(gsm->fcs, gsm->received_fcs);
1822         }
1823         if (gsm->fcs != GOOD_FCS) {
1824                 gsm->bad_fcs++;
1825                 if (debug & 4)
1826                         pr_debug("BAD FCS %02x\n", gsm->fcs);
1827                 return;
1828         }
1829         address = gsm->address >> 1;
1830         if (address >= NUM_DLCI)
1831                 goto invalid;
1832
1833         cr = gsm->address & 1;          /* C/R bit */
1834
1835         gsm_print_packet("<--", address, cr, gsm->control, gsm->buf, gsm->len);
1836
1837         cr ^= 1 - gsm->initiator;       /* Flip so 1 always means command */
1838         dlci = gsm->dlci[address];
1839
1840         switch (gsm->control) {
1841         case SABM|PF:
1842                 if (cr == 0)
1843                         goto invalid;
1844                 if (dlci == NULL)
1845                         dlci = gsm_dlci_alloc(gsm, address);
1846                 if (dlci == NULL)
1847                         return;
1848                 if (dlci->dead)
1849                         gsm_response(gsm, address, DM);
1850                 else {
1851                         gsm_response(gsm, address, UA);
1852                         gsm_dlci_open(dlci);
1853                 }
1854                 break;
1855         case DISC|PF:
1856                 if (cr == 0)
1857                         goto invalid;
1858                 if (dlci == NULL || dlci->state == DLCI_CLOSED) {
1859                         gsm_response(gsm, address, DM);
1860                         return;
1861                 }
1862                 /* Real close complete */
1863                 gsm_response(gsm, address, UA);
1864                 gsm_dlci_close(dlci);
1865                 break;
1866         case UA|PF:
1867                 if (cr == 0 || dlci == NULL)
1868                         break;
1869                 switch (dlci->state) {
1870                 case DLCI_CLOSING:
1871                         gsm_dlci_close(dlci);
1872                         break;
1873                 case DLCI_OPENING:
1874                         gsm_dlci_open(dlci);
1875                         break;
1876                 }
1877                 break;
1878         case DM:        /* DM can be valid unsolicited */
1879         case DM|PF:
1880                 if (cr)
1881                         goto invalid;
1882                 if (dlci == NULL)
1883                         return;
1884                 gsm_dlci_close(dlci);
1885                 break;
1886         case UI:
1887         case UI|PF:
1888         case UIH:
1889         case UIH|PF:
1890 #if 0
1891                 if (cr)
1892                         goto invalid;
1893 #endif
1894                 if (dlci == NULL || dlci->state != DLCI_OPEN) {
1895                         gsm_response(gsm, address, DM|PF);
1896                         return;
1897                 }
1898                 dlci->data(dlci, gsm->buf, gsm->len);
1899                 break;
1900         default:
1901                 goto invalid;
1902         }
1903         return;
1904 invalid:
1905         gsm->malformed++;
1906         return;
1907 }
1908
1909
1910 /**
1911  *      gsm0_receive    -       perform processing for non-transparency
1912  *      @gsm: gsm data for this ldisc instance
1913  *      @c: character
1914  *
1915  *      Receive bytes in gsm mode 0
1916  */
1917
1918 static void gsm0_receive(struct gsm_mux *gsm, unsigned char c)
1919 {
1920         unsigned int len;
1921
1922         switch (gsm->state) {
1923         case GSM_SEARCH:        /* SOF marker */
1924                 if (c == GSM0_SOF) {
1925                         gsm->state = GSM_ADDRESS;
1926                         gsm->address = 0;
1927                         gsm->len = 0;
1928                         gsm->fcs = INIT_FCS;
1929                 }
1930                 break;
1931         case GSM_ADDRESS:       /* Address EA */
1932                 gsm->fcs = gsm_fcs_add(gsm->fcs, c);
1933                 if (gsm_read_ea(&gsm->address, c))
1934                         gsm->state = GSM_CONTROL;
1935                 break;
1936         case GSM_CONTROL:       /* Control Byte */
1937                 gsm->fcs = gsm_fcs_add(gsm->fcs, c);
1938                 gsm->control = c;
1939                 gsm->state = GSM_LEN0;
1940                 break;
1941         case GSM_LEN0:          /* Length EA */
1942                 gsm->fcs = gsm_fcs_add(gsm->fcs, c);
1943                 if (gsm_read_ea(&gsm->len, c)) {
1944                         if (gsm->len > gsm->mru) {
1945                                 gsm->bad_size++;
1946                                 gsm->state = GSM_SEARCH;
1947                                 break;
1948                         }
1949                         gsm->count = 0;
1950                         if (!gsm->len)
1951                                 gsm->state = GSM_FCS;
1952                         else
1953                                 gsm->state = GSM_DATA;
1954                         break;
1955                 }
1956                 gsm->state = GSM_LEN1;
1957                 break;
1958         case GSM_LEN1:
1959                 gsm->fcs = gsm_fcs_add(gsm->fcs, c);
1960                 len = c;
1961                 gsm->len |= len << 7;
1962                 if (gsm->len > gsm->mru) {
1963                         gsm->bad_size++;
1964                         gsm->state = GSM_SEARCH;
1965                         break;
1966                 }
1967                 gsm->count = 0;
1968                 if (!gsm->len)
1969                         gsm->state = GSM_FCS;
1970                 else
1971                         gsm->state = GSM_DATA;
1972                 break;
1973         case GSM_DATA:          /* Data */
1974                 gsm->buf[gsm->count++] = c;
1975                 if (gsm->count == gsm->len)
1976                         gsm->state = GSM_FCS;
1977                 break;
1978         case GSM_FCS:           /* FCS follows the packet */
1979                 gsm->received_fcs = c;
1980                 gsm_queue(gsm);
1981                 gsm->state = GSM_SSOF;
1982                 break;
1983         case GSM_SSOF:
1984                 if (c == GSM0_SOF) {
1985                         gsm->state = GSM_SEARCH;
1986                         break;
1987                 }
1988                 break;
1989         }
1990 }
1991
1992 /**
1993  *      gsm1_receive    -       perform processing for non-transparency
1994  *      @gsm: gsm data for this ldisc instance
1995  *      @c: character
1996  *
1997  *      Receive bytes in mode 1 (Advanced option)
1998  */
1999
2000 static void gsm1_receive(struct gsm_mux *gsm, unsigned char c)
2001 {
2002         if (c == GSM1_SOF) {
2003                 /* EOF is only valid in frame if we have got to the data state
2004                    and received at least one byte (the FCS) */
2005                 if (gsm->state == GSM_DATA && gsm->count) {
2006                         /* Extract the FCS */
2007                         gsm->count--;
2008                         gsm->fcs = gsm_fcs_add(gsm->fcs, gsm->buf[gsm->count]);
2009                         gsm->len = gsm->count;
2010                         gsm_queue(gsm);
2011                         gsm->state  = GSM_START;
2012                         return;
2013                 }
2014                 /* Any partial frame was a runt so go back to start */
2015                 if (gsm->state != GSM_START) {
2016                         if (gsm->state != GSM_SEARCH)
2017                                 gsm->malformed++;
2018                         gsm->state = GSM_START;
2019                 }
2020                 /* A SOF in GSM_START means we are still reading idling or
2021                    framing bytes */
2022                 return;
2023         }
2024
2025         if (c == GSM1_ESCAPE) {
2026                 gsm->escape = 1;
2027                 return;
2028         }
2029
2030         /* Only an unescaped SOF gets us out of GSM search */
2031         if (gsm->state == GSM_SEARCH)
2032                 return;
2033
2034         if (gsm->escape) {
2035                 c ^= GSM1_ESCAPE_BITS;
2036                 gsm->escape = 0;
2037         }
2038         switch (gsm->state) {
2039         case GSM_START:         /* First byte after SOF */
2040                 gsm->address = 0;
2041                 gsm->state = GSM_ADDRESS;
2042                 gsm->fcs = INIT_FCS;
2043                 /* Drop through */
2044         case GSM_ADDRESS:       /* Address continuation */
2045                 gsm->fcs = gsm_fcs_add(gsm->fcs, c);
2046                 if (gsm_read_ea(&gsm->address, c))
2047                         gsm->state = GSM_CONTROL;
2048                 break;
2049         case GSM_CONTROL:       /* Control Byte */
2050                 gsm->fcs = gsm_fcs_add(gsm->fcs, c);
2051                 gsm->control = c;
2052                 gsm->count = 0;
2053                 gsm->state = GSM_DATA;
2054                 break;
2055         case GSM_DATA:          /* Data */
2056                 if (gsm->count > gsm->mru) {    /* Allow one for the FCS */
2057                         gsm->state = GSM_OVERRUN;
2058                         gsm->bad_size++;
2059                 } else
2060                         gsm->buf[gsm->count++] = c;
2061                 break;
2062         case GSM_OVERRUN:       /* Over-long - eg a dropped SOF */
2063                 break;
2064         }
2065 }
2066
2067 /**
2068  *      gsm_error               -       handle tty error
2069  *      @gsm: ldisc data
2070  *      @data: byte received (may be invalid)
2071  *      @flag: error received
2072  *
2073  *      Handle an error in the receipt of data for a frame. Currently we just
2074  *      go back to hunting for a SOF.
2075  *
2076  *      FIXME: better diagnostics ?
2077  */
2078
2079 static void gsm_error(struct gsm_mux *gsm,
2080                                 unsigned char data, unsigned char flag)
2081 {
2082         gsm->state = GSM_SEARCH;
2083         gsm->io_error++;
2084 }
2085
2086 static int gsm_disconnect(struct gsm_mux *gsm)
2087 {
2088         struct gsm_dlci *dlci = gsm->dlci[0];
2089         struct gsm_control *gc;
2090
2091         if (!dlci)
2092                 return 0;
2093
2094         /* In theory disconnecting DLCI 0 is sufficient but for some
2095            modems this is apparently not the case. */
2096         gc = gsm_control_send(gsm, CMD_CLD, NULL, 0);
2097         if (gc)
2098                 gsm_control_wait(gsm, gc);
2099
2100         del_timer_sync(&gsm->t2_timer);
2101         /* Now we are sure T2 has stopped */
2102
2103         gsm_dlci_begin_close(dlci);
2104         wait_event_interruptible(gsm->event,
2105                                 dlci->state == DLCI_CLOSED);
2106
2107         if (signal_pending(current))
2108                 return -EINTR;
2109
2110         return 0;
2111 }
2112
2113 /**
2114  *      gsm_cleanup_mux         -       generic GSM protocol cleanup
2115  *      @gsm: our mux
2116  *
2117  *      Clean up the bits of the mux which are the same for all framing
2118  *      protocols. Remove the mux from the mux table, stop all the timers
2119  *      and then shut down each device hanging up the channels as we go.
2120  */
2121
2122 static void gsm_cleanup_mux(struct gsm_mux *gsm)
2123 {
2124         int i;
2125         struct gsm_dlci *dlci = gsm->dlci[0];
2126         struct gsm_msg *txq, *ntxq;
2127
2128         gsm->dead = 1;
2129
2130         spin_lock(&gsm_mux_lock);
2131         for (i = 0; i < MAX_MUX; i++) {
2132                 if (gsm_mux[i] == gsm) {
2133                         gsm_mux[i] = NULL;
2134                         break;
2135                 }
2136         }
2137         spin_unlock(&gsm_mux_lock);
2138         /* open failed before registering => nothing to do */
2139         if (i == MAX_MUX)
2140                 return;
2141
2142         del_timer_sync(&gsm->t2_timer);
2143         /* Now we are sure T2 has stopped */
2144         if (dlci)
2145                 dlci->dead = 1;
2146
2147         /* Free up any link layer users */
2148         mutex_lock(&gsm->mutex);
2149         for (i = 0; i < NUM_DLCI; i++)
2150                 if (gsm->dlci[i])
2151                         gsm_dlci_release(gsm->dlci[i]);
2152         mutex_unlock(&gsm->mutex);
2153         /* Now wipe the queues */
2154         tty_ldisc_flush(gsm->tty);
2155         list_for_each_entry_safe(txq, ntxq, &gsm->tx_list, list)
2156                 kfree(txq);
2157         INIT_LIST_HEAD(&gsm->tx_list);
2158 }
2159
2160 /**
2161  *      gsm_activate_mux        -       generic GSM setup
2162  *      @gsm: our mux
2163  *
2164  *      Set up the bits of the mux which are the same for all framing
2165  *      protocols. Add the mux to the mux table so it can be opened and
2166  *      finally kick off connecting to DLCI 0 on the modem.
2167  */
2168
2169 static int gsm_activate_mux(struct gsm_mux *gsm)
2170 {
2171         struct gsm_dlci *dlci;
2172         int i = 0;
2173
2174         timer_setup(&gsm->t2_timer, gsm_control_retransmit, 0);
2175         init_waitqueue_head(&gsm->event);
2176         spin_lock_init(&gsm->control_lock);
2177         spin_lock_init(&gsm->tx_lock);
2178
2179         if (gsm->encoding == 0)
2180                 gsm->receive = gsm0_receive;
2181         else
2182                 gsm->receive = gsm1_receive;
2183         gsm->error = gsm_error;
2184
2185         spin_lock(&gsm_mux_lock);
2186         for (i = 0; i < MAX_MUX; i++) {
2187                 if (gsm_mux[i] == NULL) {
2188                         gsm->num = i;
2189                         gsm_mux[i] = gsm;
2190                         break;
2191                 }
2192         }
2193         spin_unlock(&gsm_mux_lock);
2194         if (i == MAX_MUX)
2195                 return -EBUSY;
2196
2197         dlci = gsm_dlci_alloc(gsm, 0);
2198         if (dlci == NULL)
2199                 return -ENOMEM;
2200         gsm->dead = 0;          /* Tty opens are now permissible */
2201         return 0;
2202 }
2203
2204 /**
2205  *      gsm_free_mux            -       free up a mux
2206  *      @mux: mux to free
2207  *
2208  *      Dispose of allocated resources for a dead mux
2209  */
2210 static void gsm_free_mux(struct gsm_mux *gsm)
2211 {
2212         kfree(gsm->txframe);
2213         kfree(gsm->buf);
2214         kfree(gsm);
2215 }
2216
2217 /**
2218  *      gsm_free_muxr           -       free up a mux
2219  *      @mux: mux to free
2220  *
2221  *      Dispose of allocated resources for a dead mux
2222  */
2223 static void gsm_free_muxr(struct kref *ref)
2224 {
2225         struct gsm_mux *gsm = container_of(ref, struct gsm_mux, ref);
2226         gsm_free_mux(gsm);
2227 }
2228
2229 static inline void mux_get(struct gsm_mux *gsm)
2230 {
2231         kref_get(&gsm->ref);
2232 }
2233
2234 static inline void mux_put(struct gsm_mux *gsm)
2235 {
2236         kref_put(&gsm->ref, gsm_free_muxr);
2237 }
2238
2239 /**
2240  *      gsm_alloc_mux           -       allocate a mux
2241  *
2242  *      Creates a new mux ready for activation.
2243  */
2244
2245 static struct gsm_mux *gsm_alloc_mux(void)
2246 {
2247         struct gsm_mux *gsm = kzalloc(sizeof(struct gsm_mux), GFP_KERNEL);
2248         if (gsm == NULL)
2249                 return NULL;
2250         gsm->buf = kmalloc(MAX_MRU + 1, GFP_KERNEL);
2251         if (gsm->buf == NULL) {
2252                 kfree(gsm);
2253                 return NULL;
2254         }
2255         gsm->txframe = kmalloc(2 * (MAX_MTU + PROT_OVERHEAD - 1), GFP_KERNEL);
2256         if (gsm->txframe == NULL) {
2257                 kfree(gsm->buf);
2258                 kfree(gsm);
2259                 return NULL;
2260         }
2261         spin_lock_init(&gsm->lock);
2262         mutex_init(&gsm->mutex);
2263         kref_init(&gsm->ref);
2264         INIT_LIST_HEAD(&gsm->tx_list);
2265
2266         gsm->t1 = T1;
2267         gsm->t2 = T2;
2268         gsm->n2 = N2;
2269         gsm->ftype = UIH;
2270         gsm->adaption = 1;
2271         gsm->encoding = 1;
2272         gsm->mru = 64;  /* Default to encoding 1 so these should be 64 */
2273         gsm->mtu = 64;
2274         gsm->dead = 1;  /* Avoid early tty opens */
2275
2276         return gsm;
2277 }
2278
2279 /**
2280  *      gsmld_output            -       write to link
2281  *      @gsm: our mux
2282  *      @data: bytes to output
2283  *      @len: size
2284  *
2285  *      Write a block of data from the GSM mux to the data channel. This
2286  *      will eventually be serialized from above but at the moment isn't.
2287  */
2288
2289 static int gsmld_output(struct gsm_mux *gsm, u8 *data, int len)
2290 {
2291         if (tty_write_room(gsm->tty) < len) {
2292                 set_bit(TTY_DO_WRITE_WAKEUP, &gsm->tty->flags);
2293                 return -ENOSPC;
2294         }
2295         if (debug & 4)
2296                 print_hex_dump_bytes("gsmld_output: ", DUMP_PREFIX_OFFSET,
2297                                      data, len);
2298         gsm->tty->ops->write(gsm->tty, data, len);
2299         return len;
2300 }
2301
2302 /**
2303  *      gsmld_attach_gsm        -       mode set up
2304  *      @tty: our tty structure
2305  *      @gsm: our mux
2306  *
2307  *      Set up the MUX for basic mode and commence connecting to the
2308  *      modem. Currently called from the line discipline set up but
2309  *      will need moving to an ioctl path.
2310  */
2311
2312 static int gsmld_attach_gsm(struct tty_struct *tty, struct gsm_mux *gsm)
2313 {
2314         int ret, i, base;
2315
2316         gsm->tty = tty_kref_get(tty);
2317         gsm->output = gsmld_output;
2318         ret =  gsm_activate_mux(gsm);
2319         if (ret != 0)
2320                 tty_kref_put(gsm->tty);
2321         else {
2322                 /* Don't register device 0 - this is the control channel and not
2323                    a usable tty interface */
2324                 base = gsm->num << 6; /* Base for this MUX */
2325                 for (i = 1; i < NUM_DLCI; i++)
2326                         tty_register_device(gsm_tty_driver, base + i, NULL);
2327         }
2328         return ret;
2329 }
2330
2331
2332 /**
2333  *      gsmld_detach_gsm        -       stop doing 0710 mux
2334  *      @tty: tty attached to the mux
2335  *      @gsm: mux
2336  *
2337  *      Shutdown and then clean up the resources used by the line discipline
2338  */
2339
2340 static void gsmld_detach_gsm(struct tty_struct *tty, struct gsm_mux *gsm)
2341 {
2342         int i;
2343         int base = gsm->num << 6; /* Base for this MUX */
2344
2345         WARN_ON(tty != gsm->tty);
2346         for (i = 1; i < NUM_DLCI; i++)
2347                 tty_unregister_device(gsm_tty_driver, base + i);
2348         gsm_cleanup_mux(gsm);
2349         tty_kref_put(gsm->tty);
2350         gsm->tty = NULL;
2351 }
2352
2353 static void gsmld_receive_buf(struct tty_struct *tty, const unsigned char *cp,
2354                               char *fp, int count)
2355 {
2356         struct gsm_mux *gsm = tty->disc_data;
2357         const unsigned char *dp;
2358         char *f;
2359         int i;
2360         char flags = TTY_NORMAL;
2361
2362         if (debug & 4)
2363                 print_hex_dump_bytes("gsmld_receive: ", DUMP_PREFIX_OFFSET,
2364                                      cp, count);
2365
2366         for (i = count, dp = cp, f = fp; i; i--, dp++) {
2367                 if (f)
2368                         flags = *f++;
2369                 switch (flags) {
2370                 case TTY_NORMAL:
2371                         gsm->receive(gsm, *dp);
2372                         break;
2373                 case TTY_OVERRUN:
2374                 case TTY_BREAK:
2375                 case TTY_PARITY:
2376                 case TTY_FRAME:
2377                         gsm->error(gsm, *dp, flags);
2378                         break;
2379                 default:
2380                         WARN_ONCE(1, "%s: unknown flag %d\n",
2381                                tty_name(tty), flags);
2382                         break;
2383                 }
2384         }
2385         /* FASYNC if needed ? */
2386         /* If clogged call tty_throttle(tty); */
2387 }
2388
2389 /**
2390  *      gsmld_flush_buffer      -       clean input queue
2391  *      @tty:   terminal device
2392  *
2393  *      Flush the input buffer. Called when the line discipline is
2394  *      being closed, when the tty layer wants the buffer flushed (eg
2395  *      at hangup).
2396  */
2397
2398 static void gsmld_flush_buffer(struct tty_struct *tty)
2399 {
2400 }
2401
2402 /**
2403  *      gsmld_close             -       close the ldisc for this tty
2404  *      @tty: device
2405  *
2406  *      Called from the terminal layer when this line discipline is
2407  *      being shut down, either because of a close or becsuse of a
2408  *      discipline change. The function will not be called while other
2409  *      ldisc methods are in progress.
2410  */
2411
2412 static void gsmld_close(struct tty_struct *tty)
2413 {
2414         struct gsm_mux *gsm = tty->disc_data;
2415
2416         gsmld_detach_gsm(tty, gsm);
2417
2418         gsmld_flush_buffer(tty);
2419         /* Do other clean up here */
2420         mux_put(gsm);
2421 }
2422
2423 /**
2424  *      gsmld_open              -       open an ldisc
2425  *      @tty: terminal to open
2426  *
2427  *      Called when this line discipline is being attached to the
2428  *      terminal device. Can sleep. Called serialized so that no
2429  *      other events will occur in parallel. No further open will occur
2430  *      until a close.
2431  */
2432
2433 static int gsmld_open(struct tty_struct *tty)
2434 {
2435         struct gsm_mux *gsm;
2436         int ret;
2437
2438         if (!capable(CAP_NET_ADMIN))
2439                 return -EPERM;
2440
2441         if (tty->ops->write == NULL)
2442                 return -EINVAL;
2443
2444         /* Attach our ldisc data */
2445         gsm = gsm_alloc_mux();
2446         if (gsm == NULL)
2447                 return -ENOMEM;
2448
2449         tty->disc_data = gsm;
2450         tty->receive_room = 65536;
2451
2452         /* Attach the initial passive connection */
2453         gsm->encoding = 1;
2454
2455         ret = gsmld_attach_gsm(tty, gsm);
2456         if (ret != 0) {
2457                 gsm_cleanup_mux(gsm);
2458                 mux_put(gsm);
2459         }
2460         return ret;
2461 }
2462
2463 /**
2464  *      gsmld_write_wakeup      -       asynchronous I/O notifier
2465  *      @tty: tty device
2466  *
2467  *      Required for the ptys, serial driver etc. since processes
2468  *      that attach themselves to the master and rely on ASYNC
2469  *      IO must be woken up
2470  */
2471
2472 static void gsmld_write_wakeup(struct tty_struct *tty)
2473 {
2474         struct gsm_mux *gsm = tty->disc_data;
2475         unsigned long flags;
2476
2477         /* Queue poll */
2478         clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
2479         spin_lock_irqsave(&gsm->tx_lock, flags);
2480         gsm_data_kick(gsm, NULL);
2481         if (gsm->tx_bytes < TX_THRESH_LO) {
2482                 gsm_dlci_data_sweep(gsm);
2483         }
2484         spin_unlock_irqrestore(&gsm->tx_lock, flags);
2485 }
2486
2487 /**
2488  *      gsmld_read              -       read function for tty
2489  *      @tty: tty device
2490  *      @file: file object
2491  *      @buf: userspace buffer pointer
2492  *      @nr: size of I/O
2493  *
2494  *      Perform reads for the line discipline. We are guaranteed that the
2495  *      line discipline will not be closed under us but we may get multiple
2496  *      parallel readers and must handle this ourselves. We may also get
2497  *      a hangup. Always called in user context, may sleep.
2498  *
2499  *      This code must be sure never to sleep through a hangup.
2500  */
2501
2502 static ssize_t gsmld_read(struct tty_struct *tty, struct file *file,
2503                          unsigned char __user *buf, size_t nr)
2504 {
2505         return -EOPNOTSUPP;
2506 }
2507
2508 /**
2509  *      gsmld_write             -       write function for tty
2510  *      @tty: tty device
2511  *      @file: file object
2512  *      @buf: userspace buffer pointer
2513  *      @nr: size of I/O
2514  *
2515  *      Called when the owner of the device wants to send a frame
2516  *      itself (or some other control data). The data is transferred
2517  *      as-is and must be properly framed and checksummed as appropriate
2518  *      by userspace. Frames are either sent whole or not at all as this
2519  *      avoids pain user side.
2520  */
2521
2522 static ssize_t gsmld_write(struct tty_struct *tty, struct file *file,
2523                            const unsigned char *buf, size_t nr)
2524 {
2525         struct gsm_mux *gsm = tty->disc_data;
2526         unsigned long flags;
2527         int space;
2528         int ret;
2529
2530         if (!gsm)
2531                 return -ENODEV;
2532
2533         ret = -ENOBUFS;
2534         spin_lock_irqsave(&gsm->tx_lock, flags);
2535         space = tty_write_room(tty);
2536         if (space >= nr)
2537                 ret = tty->ops->write(tty, buf, nr);
2538         else
2539                 set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
2540         spin_unlock_irqrestore(&gsm->tx_lock, flags);
2541
2542         return ret;
2543 }
2544
2545 /**
2546  *      gsmld_poll              -       poll method for N_GSM0710
2547  *      @tty: terminal device
2548  *      @file: file accessing it
2549  *      @wait: poll table
2550  *
2551  *      Called when the line discipline is asked to poll() for data or
2552  *      for special events. This code is not serialized with respect to
2553  *      other events save open/close.
2554  *
2555  *      This code must be sure never to sleep through a hangup.
2556  *      Called without the kernel lock held - fine
2557  */
2558
2559 static __poll_t gsmld_poll(struct tty_struct *tty, struct file *file,
2560                                                         poll_table *wait)
2561 {
2562         __poll_t mask = 0;
2563         struct gsm_mux *gsm = tty->disc_data;
2564
2565         poll_wait(file, &tty->read_wait, wait);
2566         poll_wait(file, &tty->write_wait, wait);
2567
2568         if (gsm->dead)
2569                 mask |= EPOLLHUP;
2570         if (tty_hung_up_p(file))
2571                 mask |= EPOLLHUP;
2572         if (test_bit(TTY_OTHER_CLOSED, &tty->flags))
2573                 mask |= EPOLLHUP;
2574         if (!tty_is_writelocked(tty) && tty_write_room(tty) > 0)
2575                 mask |= EPOLLOUT | EPOLLWRNORM;
2576         return mask;
2577 }
2578
2579 static int gsmld_config(struct tty_struct *tty, struct gsm_mux *gsm,
2580                                                         struct gsm_config *c)
2581 {
2582         int need_close = 0;
2583         int need_restart = 0;
2584
2585         /* Stuff we don't support yet - UI or I frame transport, windowing */
2586         if ((c->adaption != 1 && c->adaption != 2) || c->k)
2587                 return -EOPNOTSUPP;
2588         /* Check the MRU/MTU range looks sane */
2589         if (c->mru > MAX_MRU || c->mtu > MAX_MTU || c->mru < 8 || c->mtu < 8)
2590                 return -EINVAL;
2591         if (c->n2 > 255)
2592                 return -EINVAL;
2593         if (c->encapsulation > 1)       /* Basic, advanced, no I */
2594                 return -EINVAL;
2595         if (c->initiator > 1)
2596                 return -EINVAL;
2597         if (c->i == 0 || c->i > 2)      /* UIH and UI only */
2598                 return -EINVAL;
2599         /*
2600          *      See what is needed for reconfiguration
2601          */
2602
2603         /* Timing fields */
2604         if (c->t1 != 0 && c->t1 != gsm->t1)
2605                 need_restart = 1;
2606         if (c->t2 != 0 && c->t2 != gsm->t2)
2607                 need_restart = 1;
2608         if (c->encapsulation != gsm->encoding)
2609                 need_restart = 1;
2610         if (c->adaption != gsm->adaption)
2611                 need_restart = 1;
2612         /* Requires care */
2613         if (c->initiator != gsm->initiator)
2614                 need_close = 1;
2615         if (c->mru != gsm->mru)
2616                 need_restart = 1;
2617         if (c->mtu != gsm->mtu)
2618                 need_restart = 1;
2619
2620         /*
2621          *      Close down what is needed, restart and initiate the new
2622          *      configuration
2623          */
2624
2625         if (need_close || need_restart) {
2626                 int ret;
2627
2628                 ret = gsm_disconnect(gsm);
2629
2630                 if (ret)
2631                         return ret;
2632         }
2633         if (need_restart)
2634                 gsm_cleanup_mux(gsm);
2635
2636         gsm->initiator = c->initiator;
2637         gsm->mru = c->mru;
2638         gsm->mtu = c->mtu;
2639         gsm->encoding = c->encapsulation;
2640         gsm->adaption = c->adaption;
2641         gsm->n2 = c->n2;
2642
2643         if (c->i == 1)
2644                 gsm->ftype = UIH;
2645         else if (c->i == 2)
2646                 gsm->ftype = UI;
2647
2648         if (c->t1)
2649                 gsm->t1 = c->t1;
2650         if (c->t2)
2651                 gsm->t2 = c->t2;
2652
2653         /* FIXME: We need to separate activation/deactivation from adding
2654            and removing from the mux array */
2655         if (need_restart)
2656                 gsm_activate_mux(gsm);
2657         if (gsm->initiator && need_close)
2658                 gsm_dlci_begin_open(gsm->dlci[0]);
2659         return 0;
2660 }
2661
2662 static int gsmld_ioctl(struct tty_struct *tty, struct file *file,
2663                        unsigned int cmd, unsigned long arg)
2664 {
2665         struct gsm_config c;
2666         struct gsm_mux *gsm = tty->disc_data;
2667
2668         switch (cmd) {
2669         case GSMIOC_GETCONF:
2670                 memset(&c, 0, sizeof(c));
2671                 c.adaption = gsm->adaption;
2672                 c.encapsulation = gsm->encoding;
2673                 c.initiator = gsm->initiator;
2674                 c.t1 = gsm->t1;
2675                 c.t2 = gsm->t2;
2676                 c.t3 = 0;       /* Not supported */
2677                 c.n2 = gsm->n2;
2678                 if (gsm->ftype == UIH)
2679                         c.i = 1;
2680                 else
2681                         c.i = 2;
2682                 pr_debug("Ftype %d i %d\n", gsm->ftype, c.i);
2683                 c.mru = gsm->mru;
2684                 c.mtu = gsm->mtu;
2685                 c.k = 0;
2686                 if (copy_to_user((void *)arg, &c, sizeof(c)))
2687                         return -EFAULT;
2688                 return 0;
2689         case GSMIOC_SETCONF:
2690                 if (copy_from_user(&c, (void *)arg, sizeof(c)))
2691                         return -EFAULT;
2692                 return gsmld_config(tty, gsm, &c);
2693         default:
2694                 return n_tty_ioctl_helper(tty, file, cmd, arg);
2695         }
2696 }
2697
2698 #ifdef CONFIG_COMPAT
2699 static long gsmld_compat_ioctl(struct tty_struct *tty, struct file *file,
2700                        unsigned int cmd, unsigned long arg)
2701 {
2702         return gsmld_ioctl(tty, file, cmd, arg);
2703 }
2704 #endif
2705
2706 /*
2707  *      Network interface
2708  *
2709  */
2710
2711 static int gsm_mux_net_open(struct net_device *net)
2712 {
2713         pr_debug("%s called\n", __func__);
2714         netif_start_queue(net);
2715         return 0;
2716 }
2717
2718 static int gsm_mux_net_close(struct net_device *net)
2719 {
2720         netif_stop_queue(net);
2721         return 0;
2722 }
2723
2724 static void dlci_net_free(struct gsm_dlci *dlci)
2725 {
2726         if (!dlci->net) {
2727                 WARN_ON(1);
2728                 return;
2729         }
2730         dlci->adaption = dlci->prev_adaption;
2731         dlci->data = dlci->prev_data;
2732         free_netdev(dlci->net);
2733         dlci->net = NULL;
2734 }
2735 static void net_free(struct kref *ref)
2736 {
2737         struct gsm_mux_net *mux_net;
2738         struct gsm_dlci *dlci;
2739
2740         mux_net = container_of(ref, struct gsm_mux_net, ref);
2741         dlci = mux_net->dlci;
2742
2743         if (dlci->net) {
2744                 unregister_netdev(dlci->net);
2745                 dlci_net_free(dlci);
2746         }
2747 }
2748
2749 static inline void muxnet_get(struct gsm_mux_net *mux_net)
2750 {
2751         kref_get(&mux_net->ref);
2752 }
2753
2754 static inline void muxnet_put(struct gsm_mux_net *mux_net)
2755 {
2756         kref_put(&mux_net->ref, net_free);
2757 }
2758
2759 static netdev_tx_t gsm_mux_net_start_xmit(struct sk_buff *skb,
2760                                       struct net_device *net)
2761 {
2762         struct gsm_mux_net *mux_net = netdev_priv(net);
2763         struct gsm_dlci *dlci = mux_net->dlci;
2764         muxnet_get(mux_net);
2765
2766         skb_queue_head(&dlci->skb_list, skb);
2767         net->stats.tx_packets++;
2768         net->stats.tx_bytes += skb->len;
2769         gsm_dlci_data_kick(dlci);
2770         /* And tell the kernel when the last transmit started. */
2771         netif_trans_update(net);
2772         muxnet_put(mux_net);
2773         return NETDEV_TX_OK;
2774 }
2775
2776 /* called when a packet did not ack after watchdogtimeout */
2777 static void gsm_mux_net_tx_timeout(struct net_device *net)
2778 {
2779         /* Tell syslog we are hosed. */
2780         dev_dbg(&net->dev, "Tx timed out.\n");
2781
2782         /* Update statistics */
2783         net->stats.tx_errors++;
2784 }
2785
2786 static void gsm_mux_rx_netchar(struct gsm_dlci *dlci,
2787                                    unsigned char *in_buf, int size)
2788 {
2789         struct net_device *net = dlci->net;
2790         struct sk_buff *skb;
2791         struct gsm_mux_net *mux_net = netdev_priv(net);
2792         muxnet_get(mux_net);
2793
2794         /* Allocate an sk_buff */
2795         skb = dev_alloc_skb(size + NET_IP_ALIGN);
2796         if (!skb) {
2797                 /* We got no receive buffer. */
2798                 net->stats.rx_dropped++;
2799                 muxnet_put(mux_net);
2800                 return;
2801         }
2802         skb_reserve(skb, NET_IP_ALIGN);
2803         skb_put_data(skb, in_buf, size);
2804
2805         skb->dev = net;
2806         skb->protocol = htons(ETH_P_IP);
2807
2808         /* Ship it off to the kernel */
2809         netif_rx(skb);
2810
2811         /* update out statistics */
2812         net->stats.rx_packets++;
2813         net->stats.rx_bytes += size;
2814         muxnet_put(mux_net);
2815         return;
2816 }
2817
2818 static void gsm_mux_net_init(struct net_device *net)
2819 {
2820         static const struct net_device_ops gsm_netdev_ops = {
2821                 .ndo_open               = gsm_mux_net_open,
2822                 .ndo_stop               = gsm_mux_net_close,
2823                 .ndo_start_xmit         = gsm_mux_net_start_xmit,
2824                 .ndo_tx_timeout         = gsm_mux_net_tx_timeout,
2825         };
2826
2827         net->netdev_ops = &gsm_netdev_ops;
2828
2829         /* fill in the other fields */
2830         net->watchdog_timeo = GSM_NET_TX_TIMEOUT;
2831         net->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
2832         net->type = ARPHRD_NONE;
2833         net->tx_queue_len = 10;
2834 }
2835
2836
2837 /* caller holds the dlci mutex */
2838 static void gsm_destroy_network(struct gsm_dlci *dlci)
2839 {
2840         struct gsm_mux_net *mux_net;
2841
2842         pr_debug("destroy network interface");
2843         if (!dlci->net)
2844                 return;
2845         mux_net = netdev_priv(dlci->net);
2846         muxnet_put(mux_net);
2847 }
2848
2849
2850 /* caller holds the dlci mutex */
2851 static int gsm_create_network(struct gsm_dlci *dlci, struct gsm_netconfig *nc)
2852 {
2853         char *netname;
2854         int retval = 0;
2855         struct net_device *net;
2856         struct gsm_mux_net *mux_net;
2857
2858         if (!capable(CAP_NET_ADMIN))
2859                 return -EPERM;
2860
2861         /* Already in a non tty mode */
2862         if (dlci->adaption > 2)
2863                 return -EBUSY;
2864
2865         if (nc->protocol != htons(ETH_P_IP))
2866                 return -EPROTONOSUPPORT;
2867
2868         if (nc->adaption != 3 && nc->adaption != 4)
2869                 return -EPROTONOSUPPORT;
2870
2871         pr_debug("create network interface");
2872
2873         netname = "gsm%d";
2874         if (nc->if_name[0] != '\0')
2875                 netname = nc->if_name;
2876         net = alloc_netdev(sizeof(struct gsm_mux_net), netname,
2877                            NET_NAME_UNKNOWN, gsm_mux_net_init);
2878         if (!net) {
2879                 pr_err("alloc_netdev failed");
2880                 return -ENOMEM;
2881         }
2882         net->mtu = dlci->gsm->mtu;
2883         net->min_mtu = 8;
2884         net->max_mtu = dlci->gsm->mtu;
2885         mux_net = netdev_priv(net);
2886         mux_net->dlci = dlci;
2887         kref_init(&mux_net->ref);
2888         strncpy(nc->if_name, net->name, IFNAMSIZ); /* return net name */
2889
2890         /* reconfigure dlci for network */
2891         dlci->prev_adaption = dlci->adaption;
2892         dlci->prev_data = dlci->data;
2893         dlci->adaption = nc->adaption;
2894         dlci->data = gsm_mux_rx_netchar;
2895         dlci->net = net;
2896
2897         pr_debug("register netdev");
2898         retval = register_netdev(net);
2899         if (retval) {
2900                 pr_err("network register fail %d\n", retval);
2901                 dlci_net_free(dlci);
2902                 return retval;
2903         }
2904         return net->ifindex;    /* return network index */
2905 }
2906
2907 /* Line discipline for real tty */
2908 static struct tty_ldisc_ops tty_ldisc_packet = {
2909         .owner           = THIS_MODULE,
2910         .magic           = TTY_LDISC_MAGIC,
2911         .name            = "n_gsm",
2912         .open            = gsmld_open,
2913         .close           = gsmld_close,
2914         .flush_buffer    = gsmld_flush_buffer,
2915         .read            = gsmld_read,
2916         .write           = gsmld_write,
2917 #ifdef CONFIG_COMPAT
2918         .compat_ioctl    = gsmld_compat_ioctl,
2919 #endif
2920         .ioctl           = gsmld_ioctl,
2921         .poll            = gsmld_poll,
2922         .receive_buf     = gsmld_receive_buf,
2923         .write_wakeup    = gsmld_write_wakeup
2924 };
2925
2926 /*
2927  *      Virtual tty side
2928  */
2929
2930 #define TX_SIZE         512
2931
2932 static int gsmtty_modem_update(struct gsm_dlci *dlci, u8 brk)
2933 {
2934         u8 modembits[3];
2935         struct gsm_control *ctrl;
2936         int len = 2;
2937
2938         modembits[0] = (dlci->addr << 2) | 2 | EA;  /* DLCI, Valid, EA */
2939         modembits[1] = (gsm_encode_modem(dlci) << 1) | EA;
2940         if (brk) {
2941                 modembits[2] = (brk << 4) | 2 | EA; /* Length, Break, EA */
2942                 len++;
2943         }
2944         ctrl = gsm_control_send(dlci->gsm, CMD_MSC, modembits, len);
2945         if (ctrl == NULL)
2946                 return -ENOMEM;
2947         return gsm_control_wait(dlci->gsm, ctrl);
2948 }
2949
2950 static int gsm_carrier_raised(struct tty_port *port)
2951 {
2952         struct gsm_dlci *dlci = container_of(port, struct gsm_dlci, port);
2953         struct gsm_mux *gsm = dlci->gsm;
2954
2955         /* Not yet open so no carrier info */
2956         if (dlci->state != DLCI_OPEN)
2957                 return 0;
2958         if (debug & 2)
2959                 return 1;
2960
2961         /*
2962          * Basic mode with control channel in ADM mode may not respond
2963          * to CMD_MSC at all and modem_rx is empty.
2964          */
2965         if (gsm->encoding == 0 && gsm->dlci[0]->mode == DLCI_MODE_ADM &&
2966             !dlci->modem_rx)
2967                 return 1;
2968
2969         return dlci->modem_rx & TIOCM_CD;
2970 }
2971
2972 static void gsm_dtr_rts(struct tty_port *port, int onoff)
2973 {
2974         struct gsm_dlci *dlci = container_of(port, struct gsm_dlci, port);
2975         unsigned int modem_tx = dlci->modem_tx;
2976         if (onoff)
2977                 modem_tx |= TIOCM_DTR | TIOCM_RTS;
2978         else
2979                 modem_tx &= ~(TIOCM_DTR | TIOCM_RTS);
2980         if (modem_tx != dlci->modem_tx) {
2981                 dlci->modem_tx = modem_tx;
2982                 gsmtty_modem_update(dlci, 0);
2983         }
2984 }
2985
2986 static const struct tty_port_operations gsm_port_ops = {
2987         .carrier_raised = gsm_carrier_raised,
2988         .dtr_rts = gsm_dtr_rts,
2989         .destruct = gsm_dlci_free,
2990 };
2991
2992 static int gsmtty_install(struct tty_driver *driver, struct tty_struct *tty)
2993 {
2994         struct gsm_mux *gsm;
2995         struct gsm_dlci *dlci;
2996         unsigned int line = tty->index;
2997         unsigned int mux = line >> 6;
2998         bool alloc = false;
2999         int ret;
3000
3001         line = line & 0x3F;
3002
3003         if (mux >= MAX_MUX)
3004                 return -ENXIO;
3005         /* FIXME: we need to lock gsm_mux for lifetimes of ttys eventually */
3006         if (gsm_mux[mux] == NULL)
3007                 return -EUNATCH;
3008         if (line == 0 || line > 61)     /* 62/63 reserved */
3009                 return -ECHRNG;
3010         gsm = gsm_mux[mux];
3011         if (gsm->dead)
3012                 return -EL2HLT;
3013         /* If DLCI 0 is not yet fully open return an error.
3014         This is ok from a locking
3015         perspective as we don't have to worry about this
3016         if DLCI0 is lost */
3017         mutex_lock(&gsm->mutex);
3018         if (gsm->dlci[0] && gsm->dlci[0]->state != DLCI_OPEN) {
3019                 mutex_unlock(&gsm->mutex);
3020                 return -EL2NSYNC;
3021         }
3022         dlci = gsm->dlci[line];
3023         if (dlci == NULL) {
3024                 alloc = true;
3025                 dlci = gsm_dlci_alloc(gsm, line);
3026         }
3027         if (dlci == NULL) {
3028                 mutex_unlock(&gsm->mutex);
3029                 return -ENOMEM;
3030         }
3031         ret = tty_port_install(&dlci->port, driver, tty);
3032         if (ret) {
3033                 if (alloc)
3034                         dlci_put(dlci);
3035                 mutex_unlock(&gsm->mutex);
3036                 return ret;
3037         }
3038
3039         dlci_get(dlci);
3040         dlci_get(gsm->dlci[0]);
3041         mux_get(gsm);
3042         tty->driver_data = dlci;
3043         mutex_unlock(&gsm->mutex);
3044
3045         return 0;
3046 }
3047
3048 static int gsmtty_open(struct tty_struct *tty, struct file *filp)
3049 {
3050         struct gsm_dlci *dlci = tty->driver_data;
3051         struct tty_port *port = &dlci->port;
3052
3053         port->count++;
3054         tty_port_tty_set(port, tty);
3055
3056         dlci->modem_rx = 0;
3057         /* We could in theory open and close before we wait - eg if we get
3058            a DM straight back. This is ok as that will have caused a hangup */
3059         tty_port_set_initialized(port, 1);
3060         /* Start sending off SABM messages */
3061         gsm_dlci_begin_open(dlci);
3062         /* And wait for virtual carrier */
3063         return tty_port_block_til_ready(port, tty, filp);
3064 }
3065
3066 static void gsmtty_close(struct tty_struct *tty, struct file *filp)
3067 {
3068         struct gsm_dlci *dlci = tty->driver_data;
3069
3070         if (dlci == NULL)
3071                 return;
3072         if (dlci->state == DLCI_CLOSED)
3073                 return;
3074         mutex_lock(&dlci->mutex);
3075         gsm_destroy_network(dlci);
3076         mutex_unlock(&dlci->mutex);
3077         if (tty_port_close_start(&dlci->port, tty, filp) == 0)
3078                 return;
3079         gsm_dlci_begin_close(dlci);
3080         if (tty_port_initialized(&dlci->port) && C_HUPCL(tty))
3081                 tty_port_lower_dtr_rts(&dlci->port);
3082         tty_port_close_end(&dlci->port, tty);
3083         tty_port_tty_set(&dlci->port, NULL);
3084         return;
3085 }
3086
3087 static void gsmtty_hangup(struct tty_struct *tty)
3088 {
3089         struct gsm_dlci *dlci = tty->driver_data;
3090         if (dlci->state == DLCI_CLOSED)
3091                 return;
3092         tty_port_hangup(&dlci->port);
3093         gsm_dlci_begin_close(dlci);
3094 }
3095
3096 static int gsmtty_write(struct tty_struct *tty, const unsigned char *buf,
3097                                                                     int len)
3098 {
3099         int sent;
3100         struct gsm_dlci *dlci = tty->driver_data;
3101         if (dlci->state == DLCI_CLOSED)
3102                 return -EINVAL;
3103         /* Stuff the bytes into the fifo queue */
3104         sent = kfifo_in_locked(dlci->fifo, buf, len, &dlci->lock);
3105         /* Need to kick the channel */
3106         gsm_dlci_data_kick(dlci);
3107         return sent;
3108 }
3109
3110 static int gsmtty_write_room(struct tty_struct *tty)
3111 {
3112         struct gsm_dlci *dlci = tty->driver_data;
3113         if (dlci->state == DLCI_CLOSED)
3114                 return -EINVAL;
3115         return TX_SIZE - kfifo_len(dlci->fifo);
3116 }
3117
3118 static int gsmtty_chars_in_buffer(struct tty_struct *tty)
3119 {
3120         struct gsm_dlci *dlci = tty->driver_data;
3121         if (dlci->state == DLCI_CLOSED)
3122                 return -EINVAL;
3123         return kfifo_len(dlci->fifo);
3124 }
3125
3126 static void gsmtty_flush_buffer(struct tty_struct *tty)
3127 {
3128         struct gsm_dlci *dlci = tty->driver_data;
3129         if (dlci->state == DLCI_CLOSED)
3130                 return;
3131         /* Caution needed: If we implement reliable transport classes
3132            then the data being transmitted can't simply be junked once
3133            it has first hit the stack. Until then we can just blow it
3134            away */
3135         kfifo_reset(dlci->fifo);
3136         /* Need to unhook this DLCI from the transmit queue logic */
3137 }
3138
3139 static void gsmtty_wait_until_sent(struct tty_struct *tty, int timeout)
3140 {
3141         /* The FIFO handles the queue so the kernel will do the right
3142            thing waiting on chars_in_buffer before calling us. No work
3143            to do here */
3144 }
3145
3146 static int gsmtty_tiocmget(struct tty_struct *tty)
3147 {
3148         struct gsm_dlci *dlci = tty->driver_data;
3149         if (dlci->state == DLCI_CLOSED)
3150                 return -EINVAL;
3151         return dlci->modem_rx;
3152 }
3153
3154 static int gsmtty_tiocmset(struct tty_struct *tty,
3155         unsigned int set, unsigned int clear)
3156 {
3157         struct gsm_dlci *dlci = tty->driver_data;
3158         unsigned int modem_tx = dlci->modem_tx;
3159
3160         if (dlci->state == DLCI_CLOSED)
3161                 return -EINVAL;
3162         modem_tx &= ~clear;
3163         modem_tx |= set;
3164
3165         if (modem_tx != dlci->modem_tx) {
3166                 dlci->modem_tx = modem_tx;
3167                 return gsmtty_modem_update(dlci, 0);
3168         }
3169         return 0;
3170 }
3171
3172
3173 static int gsmtty_ioctl(struct tty_struct *tty,
3174                         unsigned int cmd, unsigned long arg)
3175 {
3176         struct gsm_dlci *dlci = tty->driver_data;
3177         struct gsm_netconfig nc;
3178         int index;
3179
3180         if (dlci->state == DLCI_CLOSED)
3181                 return -EINVAL;
3182         switch (cmd) {
3183         case GSMIOC_ENABLE_NET:
3184                 if (copy_from_user(&nc, (void __user *)arg, sizeof(nc)))
3185                         return -EFAULT;
3186                 nc.if_name[IFNAMSIZ-1] = '\0';
3187                 /* return net interface index or error code */
3188                 mutex_lock(&dlci->mutex);
3189                 index = gsm_create_network(dlci, &nc);
3190                 mutex_unlock(&dlci->mutex);
3191                 if (copy_to_user((void __user *)arg, &nc, sizeof(nc)))
3192                         return -EFAULT;
3193                 return index;
3194         case GSMIOC_DISABLE_NET:
3195                 if (!capable(CAP_NET_ADMIN))
3196                         return -EPERM;
3197                 mutex_lock(&dlci->mutex);
3198                 gsm_destroy_network(dlci);
3199                 mutex_unlock(&dlci->mutex);
3200                 return 0;
3201         default:
3202                 return -ENOIOCTLCMD;
3203         }
3204 }
3205
3206 static void gsmtty_set_termios(struct tty_struct *tty, struct ktermios *old)
3207 {
3208         struct gsm_dlci *dlci = tty->driver_data;
3209         if (dlci->state == DLCI_CLOSED)
3210                 return;
3211         /* For the moment its fixed. In actual fact the speed information
3212            for the virtual channel can be propogated in both directions by
3213            the RPN control message. This however rapidly gets nasty as we
3214            then have to remap modem signals each way according to whether
3215            our virtual cable is null modem etc .. */
3216         tty_termios_copy_hw(&tty->termios, old);
3217 }
3218
3219 static void gsmtty_throttle(struct tty_struct *tty)
3220 {
3221         struct gsm_dlci *dlci = tty->driver_data;
3222         if (dlci->state == DLCI_CLOSED)
3223                 return;
3224         if (C_CRTSCTS(tty))
3225                 dlci->modem_tx &= ~TIOCM_DTR;
3226         dlci->throttled = 1;
3227         /* Send an MSC with DTR cleared */
3228         gsmtty_modem_update(dlci, 0);
3229 }
3230
3231 static void gsmtty_unthrottle(struct tty_struct *tty)
3232 {
3233         struct gsm_dlci *dlci = tty->driver_data;
3234         if (dlci->state == DLCI_CLOSED)
3235                 return;
3236         if (C_CRTSCTS(tty))
3237                 dlci->modem_tx |= TIOCM_DTR;
3238         dlci->throttled = 0;
3239         /* Send an MSC with DTR set */
3240         gsmtty_modem_update(dlci, 0);
3241 }
3242
3243 static int gsmtty_break_ctl(struct tty_struct *tty, int state)
3244 {
3245         struct gsm_dlci *dlci = tty->driver_data;
3246         int encode = 0; /* Off */
3247         if (dlci->state == DLCI_CLOSED)
3248                 return -EINVAL;
3249
3250         if (state == -1)        /* "On indefinitely" - we can't encode this
3251                                     properly */
3252                 encode = 0x0F;
3253         else if (state > 0) {
3254                 encode = state / 200;   /* mS to encoding */
3255                 if (encode > 0x0F)
3256                         encode = 0x0F;  /* Best effort */
3257         }
3258         return gsmtty_modem_update(dlci, encode);
3259 }
3260
3261 static void gsmtty_cleanup(struct tty_struct *tty)
3262 {
3263         struct gsm_dlci *dlci = tty->driver_data;
3264         struct gsm_mux *gsm = dlci->gsm;
3265
3266         dlci_put(dlci);
3267         dlci_put(gsm->dlci[0]);
3268         mux_put(gsm);
3269 }
3270
3271 /* Virtual ttys for the demux */
3272 static const struct tty_operations gsmtty_ops = {
3273         .install                = gsmtty_install,
3274         .open                   = gsmtty_open,
3275         .close                  = gsmtty_close,
3276         .write                  = gsmtty_write,
3277         .write_room             = gsmtty_write_room,
3278         .chars_in_buffer        = gsmtty_chars_in_buffer,
3279         .flush_buffer           = gsmtty_flush_buffer,
3280         .ioctl                  = gsmtty_ioctl,
3281         .throttle               = gsmtty_throttle,
3282         .unthrottle             = gsmtty_unthrottle,
3283         .set_termios            = gsmtty_set_termios,
3284         .hangup                 = gsmtty_hangup,
3285         .wait_until_sent        = gsmtty_wait_until_sent,
3286         .tiocmget               = gsmtty_tiocmget,
3287         .tiocmset               = gsmtty_tiocmset,
3288         .break_ctl              = gsmtty_break_ctl,
3289         .cleanup                = gsmtty_cleanup,
3290 };
3291
3292
3293
3294 static int __init gsm_init(void)
3295 {
3296         /* Fill in our line protocol discipline, and register it */
3297         int status = tty_register_ldisc(N_GSM0710, &tty_ldisc_packet);
3298         if (status != 0) {
3299                 pr_err("n_gsm: can't register line discipline (err = %d)\n",
3300                                                                 status);
3301                 return status;
3302         }
3303
3304         gsm_tty_driver = alloc_tty_driver(256);
3305         if (!gsm_tty_driver) {
3306                 tty_unregister_ldisc(N_GSM0710);
3307                 pr_err("gsm_init: tty allocation failed.\n");
3308                 return -EINVAL;
3309         }
3310         gsm_tty_driver->driver_name     = "gsmtty";
3311         gsm_tty_driver->name            = "gsmtty";
3312         gsm_tty_driver->major           = 0;    /* Dynamic */
3313         gsm_tty_driver->minor_start     = 0;
3314         gsm_tty_driver->type            = TTY_DRIVER_TYPE_SERIAL;
3315         gsm_tty_driver->subtype = SERIAL_TYPE_NORMAL;
3316         gsm_tty_driver->flags   = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV
3317                                                 | TTY_DRIVER_HARDWARE_BREAK;
3318         gsm_tty_driver->init_termios    = tty_std_termios;
3319         /* Fixme */
3320         gsm_tty_driver->init_termios.c_lflag &= ~ECHO;
3321         tty_set_operations(gsm_tty_driver, &gsmtty_ops);
3322
3323         spin_lock_init(&gsm_mux_lock);
3324
3325         if (tty_register_driver(gsm_tty_driver)) {
3326                 put_tty_driver(gsm_tty_driver);
3327                 tty_unregister_ldisc(N_GSM0710);
3328                 pr_err("gsm_init: tty registration failed.\n");
3329                 return -EBUSY;
3330         }
3331         pr_debug("gsm_init: loaded as %d,%d.\n",
3332                         gsm_tty_driver->major, gsm_tty_driver->minor_start);
3333         return 0;
3334 }
3335
3336 static void __exit gsm_exit(void)
3337 {
3338         int status = tty_unregister_ldisc(N_GSM0710);
3339         if (status != 0)
3340                 pr_err("n_gsm: can't unregister line discipline (err = %d)\n",
3341                                                                 status);
3342         tty_unregister_driver(gsm_tty_driver);
3343         put_tty_driver(gsm_tty_driver);
3344 }
3345
3346 module_init(gsm_init);
3347 module_exit(gsm_exit);
3348
3349
3350 MODULE_LICENSE("GPL");
3351 MODULE_ALIAS_LDISC(N_GSM0710);