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