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