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