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