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