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