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