1/*
2 * u_serial.c - utilities for USB gadget "serial port"/TTY support
3 *
4 * Copyright (C) 2003 Al Borchers (alborchers@steinerpoint.com)
5 * Copyright (C) 2008 David Brownell
6 * Copyright (C) 2008 by Nokia Corporation
7 *
8 * This code also borrows from usbserial.c, which is
9 * Copyright (C) 1999 - 2002 Greg Kroah-Hartman (greg@kroah.com)
10 * Copyright (C) 2000 Peter Berger (pberger@brimson.com)
11 * Copyright (C) 2000 Al Borchers (alborchers@steinerpoint.com)
12 *
13 * This software is distributed under the terms of the GNU General
14 * Public License ("GPL") as published by the Free Software Foundation,
15 * either version 2 of that License or (at your option) any later version.
16 */
17
18/* #define VERBOSE_DEBUG */
19
20#include <linux/kernel.h>
21#include <linux/sched.h>
22#include <linux/interrupt.h>
23#include <linux/device.h>
24#include <linux/delay.h>
25#include <linux/tty.h>
26#include <linux/tty_flip.h>
27#include <linux/slab.h>
28#include <linux/export.h>
29#include <linux/module.h>
30
31#include "u_serial.h"
32
33
34/*
35 * This component encapsulates the TTY layer glue needed to provide basic
36 * "serial port" functionality through the USB gadget stack.  Each such
37 * port is exposed through a /dev/ttyGS* node.
38 *
39 * After this module has been loaded, the individual TTY port can be requested
40 * (gserial_alloc_line()) and it will stay available until they are removed
41 * (gserial_free_line()). Each one may be connected to a USB function
42 * (gserial_connect), or disconnected (with gserial_disconnect) when the USB
43 * host issues a config change event. Data can only flow when the port is
44 * connected to the host.
45 *
46 * A given TTY port can be made available in multiple configurations.
47 * For example, each one might expose a ttyGS0 node which provides a
48 * login application.  In one case that might use CDC ACM interface 0,
49 * while another configuration might use interface 3 for that.  The
50 * work to handle that (including descriptor management) is not part
51 * of this component.
52 *
53 * Configurations may expose more than one TTY port.  For example, if
54 * ttyGS0 provides login service, then ttyGS1 might provide dialer access
55 * for a telephone or fax link.  And ttyGS2 might be something that just
56 * needs a simple byte stream interface for some messaging protocol that
57 * is managed in userspace ... OBEX, PTP, and MTP have been mentioned.
58 *
59 *
60 * gserial is the lifecycle interface, used by USB functions
61 * gs_port is the I/O nexus, used by the tty driver
62 * tty_struct links to the tty/filesystem framework
63 *
64 * gserial <---> gs_port ... links will be null when the USB link is
65 * inactive; managed by gserial_{connect,disconnect}().  each gserial
66 * instance can wrap its own USB control protocol.
67 *	gserial->ioport == usb_ep->driver_data ... gs_port
68 *	gs_port->port_usb ... gserial
69 *
70 * gs_port <---> tty_struct ... links will be null when the TTY file
71 * isn't opened; managed by gs_open()/gs_close()
72 *	gserial->port_tty ... tty_struct
73 *	tty_struct->driver_data ... gserial
74 */
75
76/* RX and TX queues can buffer QUEUE_SIZE packets before they hit the
77 * next layer of buffering.  For TX that's a circular buffer; for RX
78 * consider it a NOP.  A third layer is provided by the TTY code.
79 */
80#define QUEUE_SIZE		16
81#define WRITE_BUF_SIZE		8192		/* TX only */
82
83/* circular buffer */
84struct gs_buf {
85	unsigned		buf_size;
86	char			*buf_buf;
87	char			*buf_get;
88	char			*buf_put;
89};
90
91/*
92 * The port structure holds info for each port, one for each minor number
93 * (and thus for each /dev/ node).
94 */
95struct gs_port {
96	struct tty_port		port;
97	spinlock_t		port_lock;	/* guard port_* access */
98
99	struct gserial		*port_usb;
100
101	bool			openclose;	/* open/close in progress */
102	u8			port_num;
103
104	struct list_head	read_pool;
105	int read_started;
106	int read_allocated;
107	struct list_head	read_queue;
108	unsigned		n_read;
109	struct tasklet_struct	push;
110
111	struct list_head	write_pool;
112	int write_started;
113	int write_allocated;
114	struct gs_buf		port_write_buf;
115	wait_queue_head_t	drain_wait;	/* wait while writes drain */
116	bool                    write_busy;
117
118	/* REVISIT this state ... */
119	struct usb_cdc_line_coding port_line_coding;	/* 8-N-1 etc */
120};
121
122static struct portmaster {
123	struct mutex	lock;			/* protect open/close */
124	struct gs_port	*port;
125} ports[MAX_U_SERIAL_PORTS];
126
127#define GS_CLOSE_TIMEOUT		15		/* seconds */
128
129
130
131#ifdef VERBOSE_DEBUG
132#ifndef pr_vdebug
133#define pr_vdebug(fmt, arg...) \
134	pr_debug(fmt, ##arg)
135#endif /* pr_vdebug */
136#else
137#ifndef pr_vdebug
138#define pr_vdebug(fmt, arg...) \
139	({ if (0) pr_debug(fmt, ##arg); })
140#endif /* pr_vdebug */
141#endif
142
143/*-------------------------------------------------------------------------*/
144
145/* Circular Buffer */
146
147/*
148 * gs_buf_alloc
149 *
150 * Allocate a circular buffer and all associated memory.
151 */
152static int gs_buf_alloc(struct gs_buf *gb, unsigned size)
153{
154	gb->buf_buf = kmalloc(size, GFP_KERNEL);
155	if (gb->buf_buf == NULL)
156		return -ENOMEM;
157
158	gb->buf_size = size;
159	gb->buf_put = gb->buf_buf;
160	gb->buf_get = gb->buf_buf;
161
162	return 0;
163}
164
165/*
166 * gs_buf_free
167 *
168 * Free the buffer and all associated memory.
169 */
170static void gs_buf_free(struct gs_buf *gb)
171{
172	kfree(gb->buf_buf);
173	gb->buf_buf = NULL;
174}
175
176/*
177 * gs_buf_clear
178 *
179 * Clear out all data in the circular buffer.
180 */
181static void gs_buf_clear(struct gs_buf *gb)
182{
183	gb->buf_get = gb->buf_put;
184	/* equivalent to a get of all data available */
185}
186
187/*
188 * gs_buf_data_avail
189 *
190 * Return the number of bytes of data written into the circular
191 * buffer.
192 */
193static unsigned gs_buf_data_avail(struct gs_buf *gb)
194{
195	return (gb->buf_size + gb->buf_put - gb->buf_get) % gb->buf_size;
196}
197
198/*
199 * gs_buf_space_avail
200 *
201 * Return the number of bytes of space available in the circular
202 * buffer.
203 */
204static unsigned gs_buf_space_avail(struct gs_buf *gb)
205{
206	return (gb->buf_size + gb->buf_get - gb->buf_put - 1) % gb->buf_size;
207}
208
209/*
210 * gs_buf_put
211 *
212 * Copy data data from a user buffer and put it into the circular buffer.
213 * Restrict to the amount of space available.
214 *
215 * Return the number of bytes copied.
216 */
217static unsigned
218gs_buf_put(struct gs_buf *gb, const char *buf, unsigned count)
219{
220	unsigned len;
221
222	len  = gs_buf_space_avail(gb);
223	if (count > len)
224		count = len;
225
226	if (count == 0)
227		return 0;
228
229	len = gb->buf_buf + gb->buf_size - gb->buf_put;
230	if (count > len) {
231		memcpy(gb->buf_put, buf, len);
232		memcpy(gb->buf_buf, buf+len, count - len);
233		gb->buf_put = gb->buf_buf + count - len;
234	} else {
235		memcpy(gb->buf_put, buf, count);
236		if (count < len)
237			gb->buf_put += count;
238		else /* count == len */
239			gb->buf_put = gb->buf_buf;
240	}
241
242	return count;
243}
244
245/*
246 * gs_buf_get
247 *
248 * Get data from the circular buffer and copy to the given buffer.
249 * Restrict to the amount of data available.
250 *
251 * Return the number of bytes copied.
252 */
253static unsigned
254gs_buf_get(struct gs_buf *gb, char *buf, unsigned count)
255{
256	unsigned len;
257
258	len = gs_buf_data_avail(gb);
259	if (count > len)
260		count = len;
261
262	if (count == 0)
263		return 0;
264
265	len = gb->buf_buf + gb->buf_size - gb->buf_get;
266	if (count > len) {
267		memcpy(buf, gb->buf_get, len);
268		memcpy(buf+len, gb->buf_buf, count - len);
269		gb->buf_get = gb->buf_buf + count - len;
270	} else {
271		memcpy(buf, gb->buf_get, count);
272		if (count < len)
273			gb->buf_get += count;
274		else /* count == len */
275			gb->buf_get = gb->buf_buf;
276	}
277
278	return count;
279}
280
281/*-------------------------------------------------------------------------*/
282
283/* I/O glue between TTY (upper) and USB function (lower) driver layers */
284
285/*
286 * gs_alloc_req
287 *
288 * Allocate a usb_request and its buffer.  Returns a pointer to the
289 * usb_request or NULL if there is an error.
290 */
291struct usb_request *
292gs_alloc_req(struct usb_ep *ep, unsigned len, gfp_t kmalloc_flags)
293{
294	struct usb_request *req;
295
296	req = usb_ep_alloc_request(ep, kmalloc_flags);
297
298	if (req != NULL) {
299		req->length = len;
300		req->buf = kmalloc(len, kmalloc_flags);
301		if (req->buf == NULL) {
302			usb_ep_free_request(ep, req);
303			return NULL;
304		}
305	}
306
307	return req;
308}
309EXPORT_SYMBOL_GPL(gs_alloc_req);
310
311/*
312 * gs_free_req
313 *
314 * Free a usb_request and its buffer.
315 */
316void gs_free_req(struct usb_ep *ep, struct usb_request *req)
317{
318	kfree(req->buf);
319	usb_ep_free_request(ep, req);
320}
321EXPORT_SYMBOL_GPL(gs_free_req);
322
323/*
324 * gs_send_packet
325 *
326 * If there is data to send, a packet is built in the given
327 * buffer and the size is returned.  If there is no data to
328 * send, 0 is returned.
329 *
330 * Called with port_lock held.
331 */
332static unsigned
333gs_send_packet(struct gs_port *port, char *packet, unsigned size)
334{
335	unsigned len;
336
337	len = gs_buf_data_avail(&port->port_write_buf);
338	if (len < size)
339		size = len;
340	if (size != 0)
341		size = gs_buf_get(&port->port_write_buf, packet, size);
342	return size;
343}
344
345/*
346 * gs_start_tx
347 *
348 * This function finds available write requests, calls
349 * gs_send_packet to fill these packets with data, and
350 * continues until either there are no more write requests
351 * available or no more data to send.  This function is
352 * run whenever data arrives or write requests are available.
353 *
354 * Context: caller owns port_lock; port_usb is non-null.
355 */
356static int gs_start_tx(struct gs_port *port)
357/*
358__releases(&port->port_lock)
359__acquires(&port->port_lock)
360*/
361{
362	struct list_head	*pool = &port->write_pool;
363	struct usb_ep		*in = port->port_usb->in;
364	int			status = 0;
365	bool			do_tty_wake = false;
366
367	while (!port->write_busy && !list_empty(pool)) {
368		struct usb_request	*req;
369		int			len;
370
371		if (port->write_started >= QUEUE_SIZE)
372			break;
373
374		req = list_entry(pool->next, struct usb_request, list);
375		len = gs_send_packet(port, req->buf, in->maxpacket);
376		if (len == 0) {
377			wake_up_interruptible(&port->drain_wait);
378			break;
379		}
380		do_tty_wake = true;
381
382		req->length = len;
383		list_del(&req->list);
384		req->zero = (gs_buf_data_avail(&port->port_write_buf) == 0);
385
386		pr_vdebug("ttyGS%d: tx len=%d, 0x%02x 0x%02x 0x%02x ...\n",
387			  port->port_num, len, *((u8 *)req->buf),
388			  *((u8 *)req->buf+1), *((u8 *)req->buf+2));
389
390		/* Drop lock while we call out of driver; completions
391		 * could be issued while we do so.  Disconnection may
392		 * happen too; maybe immediately before we queue this!
393		 *
394		 * NOTE that we may keep sending data for a while after
395		 * the TTY closed (dev->ioport->port_tty is NULL).
396		 */
397		port->write_busy = true;
398		spin_unlock(&port->port_lock);
399		status = usb_ep_queue(in, req, GFP_ATOMIC);
400		spin_lock(&port->port_lock);
401		port->write_busy = false;
402
403		if (status) {
404			pr_debug("%s: %s %s err %d\n",
405					__func__, "queue", in->name, status);
406			list_add(&req->list, pool);
407			break;
408		}
409
410		port->write_started++;
411
412		/* abort immediately after disconnect */
413		if (!port->port_usb)
414			break;
415	}
416
417	if (do_tty_wake && port->port.tty)
418		tty_wakeup(port->port.tty);
419	return status;
420}
421
422/*
423 * Context: caller owns port_lock, and port_usb is set
424 */
425static unsigned gs_start_rx(struct gs_port *port)
426/*
427__releases(&port->port_lock)
428__acquires(&port->port_lock)
429*/
430{
431	struct list_head	*pool = &port->read_pool;
432	struct usb_ep		*out = port->port_usb->out;
433
434	while (!list_empty(pool)) {
435		struct usb_request	*req;
436		int			status;
437		struct tty_struct	*tty;
438
439		/* no more rx if closed */
440		tty = port->port.tty;
441		if (!tty)
442			break;
443
444		if (port->read_started >= QUEUE_SIZE)
445			break;
446
447		req = list_entry(pool->next, struct usb_request, list);
448		list_del(&req->list);
449		req->length = out->maxpacket;
450
451		/* drop lock while we call out; the controller driver
452		 * may need to call us back (e.g. for disconnect)
453		 */
454		spin_unlock(&port->port_lock);
455		status = usb_ep_queue(out, req, GFP_ATOMIC);
456		spin_lock(&port->port_lock);
457
458		if (status) {
459			pr_debug("%s: %s %s err %d\n",
460					__func__, "queue", out->name, status);
461			list_add(&req->list, pool);
462			break;
463		}
464		port->read_started++;
465
466		/* abort immediately after disconnect */
467		if (!port->port_usb)
468			break;
469	}
470	return port->read_started;
471}
472
473/*
474 * RX tasklet takes data out of the RX queue and hands it up to the TTY
475 * layer until it refuses to take any more data (or is throttled back).
476 * Then it issues reads for any further data.
477 *
478 * If the RX queue becomes full enough that no usb_request is queued,
479 * the OUT endpoint may begin NAKing as soon as its FIFO fills up.
480 * So QUEUE_SIZE packets plus however many the FIFO holds (usually two)
481 * can be buffered before the TTY layer's buffers (currently 64 KB).
482 */
483static void gs_rx_push(unsigned long _port)
484{
485	struct gs_port		*port = (void *)_port;
486	struct tty_struct	*tty;
487	struct list_head	*queue = &port->read_queue;
488	bool			disconnect = false;
489	bool			do_push = false;
490
491	/* hand any queued data to the tty */
492	spin_lock_irq(&port->port_lock);
493	tty = port->port.tty;
494	while (!list_empty(queue)) {
495		struct usb_request	*req;
496
497		req = list_first_entry(queue, struct usb_request, list);
498
499		/* leave data queued if tty was rx throttled */
500		if (tty && test_bit(TTY_THROTTLED, &tty->flags))
501			break;
502
503		switch (req->status) {
504		case -ESHUTDOWN:
505			disconnect = true;
506			pr_vdebug("ttyGS%d: shutdown\n", port->port_num);
507			break;
508
509		default:
510			/* presumably a transient fault */
511			pr_warn("ttyGS%d: unexpected RX status %d\n",
512				port->port_num, req->status);
513			/* FALLTHROUGH */
514		case 0:
515			/* normal completion */
516			break;
517		}
518
519		/* push data to (open) tty */
520		if (req->actual) {
521			char		*packet = req->buf;
522			unsigned	size = req->actual;
523			unsigned	n;
524			int		count;
525
526			/* we may have pushed part of this packet already... */
527			n = port->n_read;
528			if (n) {
529				packet += n;
530				size -= n;
531			}
532
533			count = tty_insert_flip_string(&port->port, packet,
534					size);
535			if (count)
536				do_push = true;
537			if (count != size) {
538				/* stop pushing; TTY layer can't handle more */
539				port->n_read += count;
540				pr_vdebug("ttyGS%d: rx block %d/%d\n",
541					  port->port_num, count, req->actual);
542				break;
543			}
544			port->n_read = 0;
545		}
546
547		list_move(&req->list, &port->read_pool);
548		port->read_started--;
549	}
550
551	/* Push from tty to ldisc; this is handled by a workqueue,
552	 * so we won't get callbacks and can hold port_lock
553	 */
554	if (do_push)
555		tty_flip_buffer_push(&port->port);
556
557
558	/* We want our data queue to become empty ASAP, keeping data
559	 * in the tty and ldisc (not here).  If we couldn't push any
560	 * this time around, there may be trouble unless there's an
561	 * implicit tty_unthrottle() call on its way...
562	 *
563	 * REVISIT we should probably add a timer to keep the tasklet
564	 * from starving ... but it's not clear that case ever happens.
565	 */
566	if (!list_empty(queue) && tty) {
567		if (!test_bit(TTY_THROTTLED, &tty->flags)) {
568			if (do_push)
569				tasklet_schedule(&port->push);
570			else
571				pr_warn("ttyGS%d: RX not scheduled?\n",
572					port->port_num);
573		}
574	}
575
576	/* If we're still connected, refill the USB RX queue. */
577	if (!disconnect && port->port_usb)
578		gs_start_rx(port);
579
580	spin_unlock_irq(&port->port_lock);
581}
582
583static void gs_read_complete(struct usb_ep *ep, struct usb_request *req)
584{
585	struct gs_port	*port = ep->driver_data;
586
587	/* Queue all received data until the tty layer is ready for it. */
588	spin_lock(&port->port_lock);
589	list_add_tail(&req->list, &port->read_queue);
590	tasklet_schedule(&port->push);
591	spin_unlock(&port->port_lock);
592}
593
594static void gs_write_complete(struct usb_ep *ep, struct usb_request *req)
595{
596	struct gs_port	*port = ep->driver_data;
597
598	spin_lock(&port->port_lock);
599	list_add(&req->list, &port->write_pool);
600	port->write_started--;
601
602	switch (req->status) {
603	default:
604		/* presumably a transient fault */
605		pr_warning("%s: unexpected %s status %d\n",
606				__func__, ep->name, req->status);
607		/* FALL THROUGH */
608	case 0:
609		/* normal completion */
610		gs_start_tx(port);
611		break;
612
613	case -ESHUTDOWN:
614		/* disconnect */
615		pr_vdebug("%s: %s shutdown\n", __func__, ep->name);
616		break;
617	}
618
619	spin_unlock(&port->port_lock);
620}
621
622static void gs_free_requests(struct usb_ep *ep, struct list_head *head,
623							 int *allocated)
624{
625	struct usb_request	*req;
626
627	while (!list_empty(head)) {
628		req = list_entry(head->next, struct usb_request, list);
629		list_del(&req->list);
630		gs_free_req(ep, req);
631		if (allocated)
632			(*allocated)--;
633	}
634}
635
636static int gs_alloc_requests(struct usb_ep *ep, struct list_head *head,
637		void (*fn)(struct usb_ep *, struct usb_request *),
638		int *allocated)
639{
640	int			i;
641	struct usb_request	*req;
642	int n = allocated ? QUEUE_SIZE - *allocated : QUEUE_SIZE;
643
644	/* Pre-allocate up to QUEUE_SIZE transfers, but if we can't
645	 * do quite that many this time, don't fail ... we just won't
646	 * be as speedy as we might otherwise be.
647	 */
648	for (i = 0; i < n; i++) {
649		req = gs_alloc_req(ep, ep->maxpacket, GFP_ATOMIC);
650		if (!req)
651			return list_empty(head) ? -ENOMEM : 0;
652		req->complete = fn;
653		list_add_tail(&req->list, head);
654		if (allocated)
655			(*allocated)++;
656	}
657	return 0;
658}
659
660/**
661 * gs_start_io - start USB I/O streams
662 * @dev: encapsulates endpoints to use
663 * Context: holding port_lock; port_tty and port_usb are non-null
664 *
665 * We only start I/O when something is connected to both sides of
666 * this port.  If nothing is listening on the host side, we may
667 * be pointlessly filling up our TX buffers and FIFO.
668 */
669static int gs_start_io(struct gs_port *port)
670{
671	struct list_head	*head = &port->read_pool;
672	struct usb_ep		*ep = port->port_usb->out;
673	int			status;
674	unsigned		started;
675
676	/* Allocate RX and TX I/O buffers.  We can't easily do this much
677	 * earlier (with GFP_KERNEL) because the requests are coupled to
678	 * endpoints, as are the packet sizes we'll be using.  Different
679	 * configurations may use different endpoints with a given port;
680	 * and high speed vs full speed changes packet sizes too.
681	 */
682	status = gs_alloc_requests(ep, head, gs_read_complete,
683		&port->read_allocated);
684	if (status)
685		return status;
686
687	status = gs_alloc_requests(port->port_usb->in, &port->write_pool,
688			gs_write_complete, &port->write_allocated);
689	if (status) {
690		gs_free_requests(ep, head, &port->read_allocated);
691		return status;
692	}
693
694	/* queue read requests */
695	port->n_read = 0;
696	started = gs_start_rx(port);
697
698	/* unblock any pending writes into our circular buffer */
699	if (started) {
700		tty_wakeup(port->port.tty);
701	} else {
702		gs_free_requests(ep, head, &port->read_allocated);
703		gs_free_requests(port->port_usb->in, &port->write_pool,
704			&port->write_allocated);
705		status = -EIO;
706	}
707
708	return status;
709}
710
711/*-------------------------------------------------------------------------*/
712
713/* TTY Driver */
714
715/*
716 * gs_open sets up the link between a gs_port and its associated TTY.
717 * That link is broken *only* by TTY close(), and all driver methods
718 * know that.
719 */
720static int gs_open(struct tty_struct *tty, struct file *file)
721{
722	int		port_num = tty->index;
723	struct gs_port	*port;
724	int		status;
725
726	do {
727		mutex_lock(&ports[port_num].lock);
728		port = ports[port_num].port;
729		if (!port)
730			status = -ENODEV;
731		else {
732			spin_lock_irq(&port->port_lock);
733
734			/* already open?  Great. */
735			if (port->port.count) {
736				status = 0;
737				port->port.count++;
738
739			/* currently opening/closing? wait ... */
740			} else if (port->openclose) {
741				status = -EBUSY;
742
743			/* ... else we do the work */
744			} else {
745				status = -EAGAIN;
746				port->openclose = true;
747			}
748			spin_unlock_irq(&port->port_lock);
749		}
750		mutex_unlock(&ports[port_num].lock);
751
752		switch (status) {
753		default:
754			/* fully handled */
755			return status;
756		case -EAGAIN:
757			/* must do the work */
758			break;
759		case -EBUSY:
760			/* wait for EAGAIN task to finish */
761			msleep(1);
762			/* REVISIT could have a waitchannel here, if
763			 * concurrent open performance is important
764			 */
765			break;
766		}
767	} while (status != -EAGAIN);
768
769	/* Do the "real open" */
770	spin_lock_irq(&port->port_lock);
771
772	/* allocate circular buffer on first open */
773	if (port->port_write_buf.buf_buf == NULL) {
774
775		spin_unlock_irq(&port->port_lock);
776		status = gs_buf_alloc(&port->port_write_buf, WRITE_BUF_SIZE);
777		spin_lock_irq(&port->port_lock);
778
779		if (status) {
780			pr_debug("gs_open: ttyGS%d (%p,%p) no buffer\n",
781				port->port_num, tty, file);
782			port->openclose = false;
783			goto exit_unlock_port;
784		}
785	}
786
787	/* REVISIT if REMOVED (ports[].port NULL), abort the open
788	 * to let rmmod work faster (but this way isn't wrong).
789	 */
790
791	/* REVISIT maybe wait for "carrier detect" */
792
793	tty->driver_data = port;
794	port->port.tty = tty;
795
796	port->port.count = 1;
797	port->openclose = false;
798
799	/* if connected, start the I/O stream */
800	if (port->port_usb) {
801		struct gserial	*gser = port->port_usb;
802
803		pr_debug("gs_open: start ttyGS%d\n", port->port_num);
804		gs_start_io(port);
805
806		if (gser->connect)
807			gser->connect(gser);
808	}
809
810	pr_debug("gs_open: ttyGS%d (%p,%p)\n", port->port_num, tty, file);
811
812	status = 0;
813
814exit_unlock_port:
815	spin_unlock_irq(&port->port_lock);
816	return status;
817}
818
819static int gs_writes_finished(struct gs_port *p)
820{
821	int cond;
822
823	/* return true on disconnect or empty buffer */
824	spin_lock_irq(&p->port_lock);
825	cond = (p->port_usb == NULL) || !gs_buf_data_avail(&p->port_write_buf);
826	spin_unlock_irq(&p->port_lock);
827
828	return cond;
829}
830
831static void gs_close(struct tty_struct *tty, struct file *file)
832{
833	struct gs_port *port = tty->driver_data;
834	struct gserial	*gser;
835
836	spin_lock_irq(&port->port_lock);
837
838	if (port->port.count != 1) {
839		if (port->port.count == 0)
840			WARN_ON(1);
841		else
842			--port->port.count;
843		goto exit;
844	}
845
846	pr_debug("gs_close: ttyGS%d (%p,%p) ...\n", port->port_num, tty, file);
847
848	/* mark port as closing but in use; we can drop port lock
849	 * and sleep if necessary
850	 */
851	port->openclose = true;
852	port->port.count = 0;
853
854	gser = port->port_usb;
855	if (gser && gser->disconnect)
856		gser->disconnect(gser);
857
858	/* wait for circular write buffer to drain, disconnect, or at
859	 * most GS_CLOSE_TIMEOUT seconds; then discard the rest
860	 */
861	if (gs_buf_data_avail(&port->port_write_buf) > 0 && gser) {
862		spin_unlock_irq(&port->port_lock);
863		wait_event_interruptible_timeout(port->drain_wait,
864					gs_writes_finished(port),
865					GS_CLOSE_TIMEOUT * HZ);
866		spin_lock_irq(&port->port_lock);
867		gser = port->port_usb;
868	}
869
870	/* Iff we're disconnected, there can be no I/O in flight so it's
871	 * ok to free the circular buffer; else just scrub it.  And don't
872	 * let the push tasklet fire again until we're re-opened.
873	 */
874	if (gser == NULL)
875		gs_buf_free(&port->port_write_buf);
876	else
877		gs_buf_clear(&port->port_write_buf);
878
879	tty->driver_data = NULL;
880	port->port.tty = NULL;
881
882	port->openclose = false;
883
884	pr_debug("gs_close: ttyGS%d (%p,%p) done!\n",
885			port->port_num, tty, file);
886
887	wake_up(&port->port.close_wait);
888exit:
889	spin_unlock_irq(&port->port_lock);
890}
891
892static int gs_write(struct tty_struct *tty, const unsigned char *buf, int count)
893{
894	struct gs_port	*port = tty->driver_data;
895	unsigned long	flags;
896	int		status;
897
898	pr_vdebug("gs_write: ttyGS%d (%p) writing %d bytes\n",
899			port->port_num, tty, count);
900
901	spin_lock_irqsave(&port->port_lock, flags);
902	if (count)
903		count = gs_buf_put(&port->port_write_buf, buf, count);
904	/* treat count == 0 as flush_chars() */
905	if (port->port_usb)
906		status = gs_start_tx(port);
907	spin_unlock_irqrestore(&port->port_lock, flags);
908
909	return count;
910}
911
912static int gs_put_char(struct tty_struct *tty, unsigned char ch)
913{
914	struct gs_port	*port = tty->driver_data;
915	unsigned long	flags;
916	int		status;
917
918	pr_vdebug("gs_put_char: (%d,%p) char=0x%x, called from %ps\n",
919		port->port_num, tty, ch, __builtin_return_address(0));
920
921	spin_lock_irqsave(&port->port_lock, flags);
922	status = gs_buf_put(&port->port_write_buf, &ch, 1);
923	spin_unlock_irqrestore(&port->port_lock, flags);
924
925	return status;
926}
927
928static void gs_flush_chars(struct tty_struct *tty)
929{
930	struct gs_port	*port = tty->driver_data;
931	unsigned long	flags;
932
933	pr_vdebug("gs_flush_chars: (%d,%p)\n", port->port_num, tty);
934
935	spin_lock_irqsave(&port->port_lock, flags);
936	if (port->port_usb)
937		gs_start_tx(port);
938	spin_unlock_irqrestore(&port->port_lock, flags);
939}
940
941static int gs_write_room(struct tty_struct *tty)
942{
943	struct gs_port	*port = tty->driver_data;
944	unsigned long	flags;
945	int		room = 0;
946
947	spin_lock_irqsave(&port->port_lock, flags);
948	if (port->port_usb)
949		room = gs_buf_space_avail(&port->port_write_buf);
950	spin_unlock_irqrestore(&port->port_lock, flags);
951
952	pr_vdebug("gs_write_room: (%d,%p) room=%d\n",
953		port->port_num, tty, room);
954
955	return room;
956}
957
958static int gs_chars_in_buffer(struct tty_struct *tty)
959{
960	struct gs_port	*port = tty->driver_data;
961	unsigned long	flags;
962	int		chars = 0;
963
964	spin_lock_irqsave(&port->port_lock, flags);
965	chars = gs_buf_data_avail(&port->port_write_buf);
966	spin_unlock_irqrestore(&port->port_lock, flags);
967
968	pr_vdebug("gs_chars_in_buffer: (%d,%p) chars=%d\n",
969		port->port_num, tty, chars);
970
971	return chars;
972}
973
974/* undo side effects of setting TTY_THROTTLED */
975static void gs_unthrottle(struct tty_struct *tty)
976{
977	struct gs_port		*port = tty->driver_data;
978	unsigned long		flags;
979
980	spin_lock_irqsave(&port->port_lock, flags);
981	if (port->port_usb) {
982		/* Kickstart read queue processing.  We don't do xon/xoff,
983		 * rts/cts, or other handshaking with the host, but if the
984		 * read queue backs up enough we'll be NAKing OUT packets.
985		 */
986		tasklet_schedule(&port->push);
987		pr_vdebug("ttyGS%d: unthrottle\n", port->port_num);
988	}
989	spin_unlock_irqrestore(&port->port_lock, flags);
990}
991
992static int gs_break_ctl(struct tty_struct *tty, int duration)
993{
994	struct gs_port	*port = tty->driver_data;
995	int		status = 0;
996	struct gserial	*gser;
997
998	pr_vdebug("gs_break_ctl: ttyGS%d, send break (%d) \n",
999			port->port_num, duration);
1000
1001	spin_lock_irq(&port->port_lock);
1002	gser = port->port_usb;
1003	if (gser && gser->send_break)
1004		status = gser->send_break(gser, duration);
1005	spin_unlock_irq(&port->port_lock);
1006
1007	return status;
1008}
1009
1010static const struct tty_operations gs_tty_ops = {
1011	.open =			gs_open,
1012	.close =		gs_close,
1013	.write =		gs_write,
1014	.put_char =		gs_put_char,
1015	.flush_chars =		gs_flush_chars,
1016	.write_room =		gs_write_room,
1017	.chars_in_buffer =	gs_chars_in_buffer,
1018	.unthrottle =		gs_unthrottle,
1019	.break_ctl =		gs_break_ctl,
1020};
1021
1022/*-------------------------------------------------------------------------*/
1023
1024static struct tty_driver *gs_tty_driver;
1025
1026static int
1027gs_port_alloc(unsigned port_num, struct usb_cdc_line_coding *coding)
1028{
1029	struct gs_port	*port;
1030	int		ret = 0;
1031
1032	mutex_lock(&ports[port_num].lock);
1033	if (ports[port_num].port) {
1034		ret = -EBUSY;
1035		goto out;
1036	}
1037
1038	port = kzalloc(sizeof(struct gs_port), GFP_KERNEL);
1039	if (port == NULL) {
1040		ret = -ENOMEM;
1041		goto out;
1042	}
1043
1044	tty_port_init(&port->port);
1045	spin_lock_init(&port->port_lock);
1046	init_waitqueue_head(&port->drain_wait);
1047
1048	tasklet_init(&port->push, gs_rx_push, (unsigned long) port);
1049
1050	INIT_LIST_HEAD(&port->read_pool);
1051	INIT_LIST_HEAD(&port->read_queue);
1052	INIT_LIST_HEAD(&port->write_pool);
1053
1054	port->port_num = port_num;
1055	port->port_line_coding = *coding;
1056
1057	ports[port_num].port = port;
1058out:
1059	mutex_unlock(&ports[port_num].lock);
1060	return ret;
1061}
1062
1063static int gs_closed(struct gs_port *port)
1064{
1065	int cond;
1066
1067	spin_lock_irq(&port->port_lock);
1068	cond = (port->port.count == 0) && !port->openclose;
1069	spin_unlock_irq(&port->port_lock);
1070	return cond;
1071}
1072
1073static void gserial_free_port(struct gs_port *port)
1074{
1075	tasklet_kill(&port->push);
1076	/* wait for old opens to finish */
1077	wait_event(port->port.close_wait, gs_closed(port));
1078	WARN_ON(port->port_usb != NULL);
1079	tty_port_destroy(&port->port);
1080	kfree(port);
1081}
1082
1083void gserial_free_line(unsigned char port_num)
1084{
1085	struct gs_port	*port;
1086
1087	mutex_lock(&ports[port_num].lock);
1088	if (WARN_ON(!ports[port_num].port)) {
1089		mutex_unlock(&ports[port_num].lock);
1090		return;
1091	}
1092	port = ports[port_num].port;
1093	ports[port_num].port = NULL;
1094	mutex_unlock(&ports[port_num].lock);
1095
1096	gserial_free_port(port);
1097	tty_unregister_device(gs_tty_driver, port_num);
1098}
1099EXPORT_SYMBOL_GPL(gserial_free_line);
1100
1101int gserial_alloc_line(unsigned char *line_num)
1102{
1103	struct usb_cdc_line_coding	coding;
1104	struct device			*tty_dev;
1105	int				ret;
1106	int				port_num;
1107
1108	coding.dwDTERate = cpu_to_le32(9600);
1109	coding.bCharFormat = 8;
1110	coding.bParityType = USB_CDC_NO_PARITY;
1111	coding.bDataBits = USB_CDC_1_STOP_BITS;
1112
1113	for (port_num = 0; port_num < MAX_U_SERIAL_PORTS; port_num++) {
1114		ret = gs_port_alloc(port_num, &coding);
1115		if (ret == -EBUSY)
1116			continue;
1117		if (ret)
1118			return ret;
1119		break;
1120	}
1121	if (ret)
1122		return ret;
1123
1124	/* ... and sysfs class devices, so mdev/udev make /dev/ttyGS* */
1125
1126	tty_dev = tty_port_register_device(&ports[port_num].port->port,
1127			gs_tty_driver, port_num, NULL);
1128	if (IS_ERR(tty_dev)) {
1129		struct gs_port	*port;
1130		pr_err("%s: failed to register tty for port %d, err %ld\n",
1131				__func__, port_num, PTR_ERR(tty_dev));
1132
1133		ret = PTR_ERR(tty_dev);
1134		port = ports[port_num].port;
1135		ports[port_num].port = NULL;
1136		gserial_free_port(port);
1137		goto err;
1138	}
1139	*line_num = port_num;
1140err:
1141	return ret;
1142}
1143EXPORT_SYMBOL_GPL(gserial_alloc_line);
1144
1145/**
1146 * gserial_connect - notify TTY I/O glue that USB link is active
1147 * @gser: the function, set up with endpoints and descriptors
1148 * @port_num: which port is active
1149 * Context: any (usually from irq)
1150 *
1151 * This is called activate endpoints and let the TTY layer know that
1152 * the connection is active ... not unlike "carrier detect".  It won't
1153 * necessarily start I/O queues; unless the TTY is held open by any
1154 * task, there would be no point.  However, the endpoints will be
1155 * activated so the USB host can perform I/O, subject to basic USB
1156 * hardware flow control.
1157 *
1158 * Caller needs to have set up the endpoints and USB function in @dev
1159 * before calling this, as well as the appropriate (speed-specific)
1160 * endpoint descriptors, and also have allocate @port_num by calling
1161 * @gserial_alloc_line().
1162 *
1163 * Returns negative errno or zero.
1164 * On success, ep->driver_data will be overwritten.
1165 */
1166int gserial_connect(struct gserial *gser, u8 port_num)
1167{
1168	struct gs_port	*port;
1169	unsigned long	flags;
1170	int		status;
1171
1172	if (port_num >= MAX_U_SERIAL_PORTS)
1173		return -ENXIO;
1174
1175	port = ports[port_num].port;
1176	if (!port) {
1177		pr_err("serial line %d not allocated.\n", port_num);
1178		return -EINVAL;
1179	}
1180	if (port->port_usb) {
1181		pr_err("serial line %d is in use.\n", port_num);
1182		return -EBUSY;
1183	}
1184
1185	/* activate the endpoints */
1186	status = usb_ep_enable(gser->in);
1187	if (status < 0)
1188		return status;
1189	gser->in->driver_data = port;
1190
1191	status = usb_ep_enable(gser->out);
1192	if (status < 0)
1193		goto fail_out;
1194	gser->out->driver_data = port;
1195
1196	/* then tell the tty glue that I/O can work */
1197	spin_lock_irqsave(&port->port_lock, flags);
1198	gser->ioport = port;
1199	port->port_usb = gser;
1200
1201	/* REVISIT unclear how best to handle this state...
1202	 * we don't really couple it with the Linux TTY.
1203	 */
1204	gser->port_line_coding = port->port_line_coding;
1205
1206	/* REVISIT if waiting on "carrier detect", signal. */
1207
1208	/* if it's already open, start I/O ... and notify the serial
1209	 * protocol about open/close status (connect/disconnect).
1210	 */
1211	if (port->port.count) {
1212		pr_debug("gserial_connect: start ttyGS%d\n", port->port_num);
1213		gs_start_io(port);
1214		if (gser->connect)
1215			gser->connect(gser);
1216	} else {
1217		if (gser->disconnect)
1218			gser->disconnect(gser);
1219	}
1220
1221	spin_unlock_irqrestore(&port->port_lock, flags);
1222
1223	return status;
1224
1225fail_out:
1226	usb_ep_disable(gser->in);
1227	gser->in->driver_data = NULL;
1228	return status;
1229}
1230EXPORT_SYMBOL_GPL(gserial_connect);
1231/**
1232 * gserial_disconnect - notify TTY I/O glue that USB link is inactive
1233 * @gser: the function, on which gserial_connect() was called
1234 * Context: any (usually from irq)
1235 *
1236 * This is called to deactivate endpoints and let the TTY layer know
1237 * that the connection went inactive ... not unlike "hangup".
1238 *
1239 * On return, the state is as if gserial_connect() had never been called;
1240 * there is no active USB I/O on these endpoints.
1241 */
1242void gserial_disconnect(struct gserial *gser)
1243{
1244	struct gs_port	*port = gser->ioport;
1245	unsigned long	flags;
1246
1247	if (!port)
1248		return;
1249
1250	/* tell the TTY glue not to do I/O here any more */
1251	spin_lock_irqsave(&port->port_lock, flags);
1252
1253	/* REVISIT as above: how best to track this? */
1254	port->port_line_coding = gser->port_line_coding;
1255
1256	port->port_usb = NULL;
1257	gser->ioport = NULL;
1258	if (port->port.count > 0 || port->openclose) {
1259		wake_up_interruptible(&port->drain_wait);
1260		if (port->port.tty)
1261			tty_hangup(port->port.tty);
1262	}
1263	spin_unlock_irqrestore(&port->port_lock, flags);
1264
1265	/* disable endpoints, aborting down any active I/O */
1266	usb_ep_disable(gser->out);
1267	gser->out->driver_data = NULL;
1268
1269	usb_ep_disable(gser->in);
1270	gser->in->driver_data = NULL;
1271
1272	/* finally, free any unused/unusable I/O buffers */
1273	spin_lock_irqsave(&port->port_lock, flags);
1274	if (port->port.count == 0 && !port->openclose)
1275		gs_buf_free(&port->port_write_buf);
1276	gs_free_requests(gser->out, &port->read_pool, NULL);
1277	gs_free_requests(gser->out, &port->read_queue, NULL);
1278	gs_free_requests(gser->in, &port->write_pool, NULL);
1279
1280	port->read_allocated = port->read_started =
1281		port->write_allocated = port->write_started = 0;
1282
1283	spin_unlock_irqrestore(&port->port_lock, flags);
1284}
1285EXPORT_SYMBOL_GPL(gserial_disconnect);
1286
1287static int userial_init(void)
1288{
1289	unsigned			i;
1290	int				status;
1291
1292	gs_tty_driver = alloc_tty_driver(MAX_U_SERIAL_PORTS);
1293	if (!gs_tty_driver)
1294		return -ENOMEM;
1295
1296	gs_tty_driver->driver_name = "g_serial";
1297	gs_tty_driver->name = "ttyGS";
1298	/* uses dynamically assigned dev_t values */
1299
1300	gs_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1301	gs_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1302	gs_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1303	gs_tty_driver->init_termios = tty_std_termios;
1304
1305	/* 9600-8-N-1 ... matches defaults expected by "usbser.sys" on
1306	 * MS-Windows.  Otherwise, most of these flags shouldn't affect
1307	 * anything unless we were to actually hook up to a serial line.
1308	 */
1309	gs_tty_driver->init_termios.c_cflag =
1310			B9600 | CS8 | CREAD | HUPCL | CLOCAL;
1311	gs_tty_driver->init_termios.c_ispeed = 9600;
1312	gs_tty_driver->init_termios.c_ospeed = 9600;
1313
1314	tty_set_operations(gs_tty_driver, &gs_tty_ops);
1315	for (i = 0; i < MAX_U_SERIAL_PORTS; i++)
1316		mutex_init(&ports[i].lock);
1317
1318	/* export the driver ... */
1319	status = tty_register_driver(gs_tty_driver);
1320	if (status) {
1321		pr_err("%s: cannot register, err %d\n",
1322				__func__, status);
1323		goto fail;
1324	}
1325
1326	pr_debug("%s: registered %d ttyGS* device%s\n", __func__,
1327			MAX_U_SERIAL_PORTS,
1328			(MAX_U_SERIAL_PORTS == 1) ? "" : "s");
1329
1330	return status;
1331fail:
1332	put_tty_driver(gs_tty_driver);
1333	gs_tty_driver = NULL;
1334	return status;
1335}
1336module_init(userial_init);
1337
1338static void userial_cleanup(void)
1339{
1340	tty_unregister_driver(gs_tty_driver);
1341	put_tty_driver(gs_tty_driver);
1342	gs_tty_driver = NULL;
1343}
1344module_exit(userial_cleanup);
1345
1346MODULE_LICENSE("GPL");
1347