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