[go: nahoru, domu]

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