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