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