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