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