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