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