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