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; 543 int status; 544 unsigned started; 545 546 if (!port->port_usb || !port->port.tty) 547 return -EIO; 548 549 /* Allocate RX and TX I/O buffers. We can't easily do this much 550 * earlier (with GFP_KERNEL) because the requests are coupled to 551 * endpoints, as are the packet sizes we'll be using. Different 552 * configurations may use different endpoints with a given port; 553 * and high speed vs full speed changes packet sizes too. 554 */ 555 ep = port->port_usb->out; 556 status = gs_alloc_requests(ep, head, gs_read_complete, 557 &port->read_allocated); 558 if (status) 559 return status; 560 561 status = gs_alloc_requests(port->port_usb->in, &port->write_pool, 562 gs_write_complete, &port->write_allocated); 563 if (status) { 564 gs_free_requests(ep, head, &port->read_allocated); 565 return status; 566 } 567 568 /* queue read requests */ 569 port->n_read = 0; 570 started = gs_start_rx(port); 571 572 if (started) { 573 gs_start_tx(port); 574 /* Unblock any pending writes into our circular buffer, in case 575 * we didn't in gs_start_tx() */ 576 tty_wakeup(port->port.tty); 577 } else { 578 /* Free reqs only if we are still connected */ 579 if (port->port_usb) { 580 gs_free_requests(ep, head, &port->read_allocated); 581 gs_free_requests(port->port_usb->in, &port->write_pool, 582 &port->write_allocated); 583 } 584 status = -EIO; 585 } 586 587 return status; 588 } 589 590 /*-------------------------------------------------------------------------*/ 591 592 /* TTY Driver */ 593 594 /* 595 * gs_open sets up the link between a gs_port and its associated TTY. 596 * That link is broken *only* by TTY close(), and all driver methods 597 * know that. 598 */ 599 static int gs_open(struct tty_struct *tty, struct file *file) 600 { 601 int port_num = tty->index; 602 struct gs_port *port; 603 int status = 0; 604 605 mutex_lock(&ports[port_num].lock); 606 port = ports[port_num].port; 607 if (!port) { 608 status = -ENODEV; 609 goto out; 610 } 611 612 spin_lock_irq(&port->port_lock); 613 614 /* allocate circular buffer on first open */ 615 if (!kfifo_initialized(&port->port_write_buf)) { 616 617 spin_unlock_irq(&port->port_lock); 618 619 /* 620 * portmaster's mutex still protects from simultaneous open(), 621 * and close() can't happen, yet. 622 */ 623 624 status = kfifo_alloc(&port->port_write_buf, 625 WRITE_BUF_SIZE, GFP_KERNEL); 626 if (status) { 627 pr_debug("gs_open: ttyGS%d (%p,%p) no buffer\n", 628 port_num, tty, file); 629 goto out; 630 } 631 632 spin_lock_irq(&port->port_lock); 633 } 634 635 /* already open? Great. */ 636 if (port->port.count++) 637 goto exit_unlock_port; 638 639 tty->driver_data = port; 640 port->port.tty = tty; 641 642 /* if connected, start the I/O stream */ 643 if (port->port_usb) { 644 /* if port is suspended, wait resume to start I/0 stream */ 645 if (!port->suspended) { 646 struct gserial *gser = port->port_usb; 647 648 pr_debug("gs_open: start ttyGS%d\n", port->port_num); 649 gs_start_io(port); 650 651 if (gser->connect) 652 gser->connect(gser); 653 } else { 654 pr_debug("delay start of ttyGS%d\n", port->port_num); 655 port->start_delayed = true; 656 } 657 } 658 659 pr_debug("gs_open: ttyGS%d (%p,%p)\n", port->port_num, tty, file); 660 661 exit_unlock_port: 662 spin_unlock_irq(&port->port_lock); 663 out: 664 mutex_unlock(&ports[port_num].lock); 665 return status; 666 } 667 668 static int gs_close_flush_done(struct gs_port *p) 669 { 670 int cond; 671 672 /* return true on disconnect or empty buffer or if raced with open() */ 673 spin_lock_irq(&p->port_lock); 674 cond = p->port_usb == NULL || !kfifo_len(&p->port_write_buf) || 675 p->port.count > 1; 676 spin_unlock_irq(&p->port_lock); 677 678 return cond; 679 } 680 681 static void gs_close(struct tty_struct *tty, struct file *file) 682 { 683 struct gs_port *port = tty->driver_data; 684 struct gserial *gser; 685 686 spin_lock_irq(&port->port_lock); 687 688 if (port->port.count != 1) { 689 raced_with_open: 690 if (port->port.count == 0) 691 WARN_ON(1); 692 else 693 --port->port.count; 694 goto exit; 695 } 696 697 pr_debug("gs_close: ttyGS%d (%p,%p) ...\n", port->port_num, tty, file); 698 699 gser = port->port_usb; 700 if (gser && !port->suspended && gser->disconnect) 701 gser->disconnect(gser); 702 703 /* wait for circular write buffer to drain, disconnect, or at 704 * most GS_CLOSE_TIMEOUT seconds; then discard the rest 705 */ 706 if (kfifo_len(&port->port_write_buf) > 0 && gser) { 707 spin_unlock_irq(&port->port_lock); 708 wait_event_interruptible_timeout(port->drain_wait, 709 gs_close_flush_done(port), 710 GS_CLOSE_TIMEOUT * HZ); 711 spin_lock_irq(&port->port_lock); 712 713 if (port->port.count != 1) 714 goto raced_with_open; 715 716 gser = port->port_usb; 717 } 718 719 /* Iff we're disconnected, there can be no I/O in flight so it's 720 * ok to free the circular buffer; else just scrub it. And don't 721 * let the push async work fire again until we're re-opened. 722 */ 723 if (gser == NULL) 724 kfifo_free(&port->port_write_buf); 725 else 726 kfifo_reset(&port->port_write_buf); 727 728 port->start_delayed = false; 729 port->port.count = 0; 730 port->port.tty = NULL; 731 732 pr_debug("gs_close: ttyGS%d (%p,%p) done!\n", 733 port->port_num, tty, file); 734 735 wake_up(&port->close_wait); 736 exit: 737 spin_unlock_irq(&port->port_lock); 738 } 739 740 static ssize_t gs_write(struct tty_struct *tty, const u8 *buf, size_t count) 741 { 742 struct gs_port *port = tty->driver_data; 743 unsigned long flags; 744 745 pr_vdebug("gs_write: ttyGS%d (%p) writing %zu bytes\n", 746 port->port_num, tty, count); 747 748 spin_lock_irqsave(&port->port_lock, flags); 749 if (count) 750 count = kfifo_in(&port->port_write_buf, buf, count); 751 /* treat count == 0 as flush_chars() */ 752 if (port->port_usb) 753 gs_start_tx(port); 754 spin_unlock_irqrestore(&port->port_lock, flags); 755 756 return count; 757 } 758 759 static int gs_put_char(struct tty_struct *tty, u8 ch) 760 { 761 struct gs_port *port = tty->driver_data; 762 unsigned long flags; 763 int status; 764 765 pr_vdebug("gs_put_char: (%d,%p) char=0x%x, called from %ps\n", 766 port->port_num, tty, ch, __builtin_return_address(0)); 767 768 spin_lock_irqsave(&port->port_lock, flags); 769 status = kfifo_put(&port->port_write_buf, ch); 770 spin_unlock_irqrestore(&port->port_lock, flags); 771 772 return status; 773 } 774 775 static void gs_flush_chars(struct tty_struct *tty) 776 { 777 struct gs_port *port = tty->driver_data; 778 unsigned long flags; 779 780 pr_vdebug("gs_flush_chars: (%d,%p)\n", port->port_num, tty); 781 782 spin_lock_irqsave(&port->port_lock, flags); 783 if (port->port_usb) 784 gs_start_tx(port); 785 spin_unlock_irqrestore(&port->port_lock, flags); 786 } 787 788 static unsigned int gs_write_room(struct tty_struct *tty) 789 { 790 struct gs_port *port = tty->driver_data; 791 unsigned long flags; 792 unsigned int room = 0; 793 794 spin_lock_irqsave(&port->port_lock, flags); 795 if (port->port_usb) 796 room = kfifo_avail(&port->port_write_buf); 797 spin_unlock_irqrestore(&port->port_lock, flags); 798 799 pr_vdebug("gs_write_room: (%d,%p) room=%u\n", 800 port->port_num, tty, room); 801 802 return room; 803 } 804 805 static unsigned int gs_chars_in_buffer(struct tty_struct *tty) 806 { 807 struct gs_port *port = tty->driver_data; 808 unsigned long flags; 809 unsigned int chars; 810 811 spin_lock_irqsave(&port->port_lock, flags); 812 chars = kfifo_len(&port->port_write_buf); 813 spin_unlock_irqrestore(&port->port_lock, flags); 814 815 pr_vdebug("gs_chars_in_buffer: (%d,%p) chars=%u\n", 816 port->port_num, tty, chars); 817 818 return chars; 819 } 820 821 /* undo side effects of setting TTY_THROTTLED */ 822 static void gs_unthrottle(struct tty_struct *tty) 823 { 824 struct gs_port *port = tty->driver_data; 825 unsigned long flags; 826 827 spin_lock_irqsave(&port->port_lock, flags); 828 if (port->port_usb) { 829 /* Kickstart read queue processing. We don't do xon/xoff, 830 * rts/cts, or other handshaking with the host, but if the 831 * read queue backs up enough we'll be NAKing OUT packets. 832 */ 833 pr_vdebug("ttyGS%d: unthrottle\n", port->port_num); 834 schedule_delayed_work(&port->push, 0); 835 } 836 spin_unlock_irqrestore(&port->port_lock, flags); 837 } 838 839 static int gs_break_ctl(struct tty_struct *tty, int duration) 840 { 841 struct gs_port *port = tty->driver_data; 842 int status = 0; 843 struct gserial *gser; 844 845 pr_vdebug("gs_break_ctl: ttyGS%d, send break (%d) \n", 846 port->port_num, duration); 847 848 spin_lock_irq(&port->port_lock); 849 gser = port->port_usb; 850 if (gser && gser->send_break) 851 status = gser->send_break(gser, duration); 852 spin_unlock_irq(&port->port_lock); 853 854 return status; 855 } 856 857 static const struct tty_operations gs_tty_ops = { 858 .open = gs_open, 859 .close = gs_close, 860 .write = gs_write, 861 .put_char = gs_put_char, 862 .flush_chars = gs_flush_chars, 863 .write_room = gs_write_room, 864 .chars_in_buffer = gs_chars_in_buffer, 865 .unthrottle = gs_unthrottle, 866 .break_ctl = gs_break_ctl, 867 }; 868 869 /*-------------------------------------------------------------------------*/ 870 871 static struct tty_driver *gs_tty_driver; 872 873 #ifdef CONFIG_U_SERIAL_CONSOLE 874 875 static void gs_console_complete_out(struct usb_ep *ep, struct usb_request *req) 876 { 877 struct gs_console *cons = req->context; 878 879 switch (req->status) { 880 default: 881 pr_warn("%s: unexpected %s status %d\n", 882 __func__, ep->name, req->status); 883 fallthrough; 884 case 0: 885 /* normal completion */ 886 spin_lock(&cons->lock); 887 req->length = 0; 888 schedule_work(&cons->work); 889 spin_unlock(&cons->lock); 890 break; 891 case -ECONNRESET: 892 case -ESHUTDOWN: 893 /* disconnect */ 894 pr_vdebug("%s: %s shutdown\n", __func__, ep->name); 895 break; 896 } 897 } 898 899 static void __gs_console_push(struct gs_console *cons) 900 { 901 struct usb_request *req = cons->req; 902 struct usb_ep *ep; 903 size_t size; 904 905 if (!req) 906 return; /* disconnected */ 907 908 if (req->length) 909 return; /* busy */ 910 911 ep = cons->console.data; 912 size = kfifo_out(&cons->buf, req->buf, ep->maxpacket); 913 if (!size) 914 return; 915 916 if (cons->missed && ep->maxpacket >= 64) { 917 char buf[64]; 918 size_t len; 919 920 len = sprintf(buf, "\n[missed %zu bytes]\n", cons->missed); 921 kfifo_in(&cons->buf, buf, len); 922 cons->missed = 0; 923 } 924 925 req->length = size; 926 927 spin_unlock_irq(&cons->lock); 928 if (usb_ep_queue(ep, req, GFP_ATOMIC)) 929 req->length = 0; 930 spin_lock_irq(&cons->lock); 931 } 932 933 static void gs_console_work(struct work_struct *work) 934 { 935 struct gs_console *cons = container_of(work, struct gs_console, work); 936 937 spin_lock_irq(&cons->lock); 938 939 __gs_console_push(cons); 940 941 spin_unlock_irq(&cons->lock); 942 } 943 944 static void gs_console_write(struct console *co, 945 const char *buf, unsigned count) 946 { 947 struct gs_console *cons = container_of(co, struct gs_console, console); 948 unsigned long flags; 949 size_t n; 950 951 spin_lock_irqsave(&cons->lock, flags); 952 953 n = kfifo_in(&cons->buf, buf, count); 954 if (n < count) 955 cons->missed += count - n; 956 957 if (cons->req && !cons->req->length) 958 schedule_work(&cons->work); 959 960 spin_unlock_irqrestore(&cons->lock, flags); 961 } 962 963 static struct tty_driver *gs_console_device(struct console *co, int *index) 964 { 965 *index = co->index; 966 return gs_tty_driver; 967 } 968 969 static int gs_console_connect(struct gs_port *port) 970 { 971 struct gs_console *cons = port->console; 972 struct usb_request *req; 973 struct usb_ep *ep; 974 975 if (!cons) 976 return 0; 977 978 ep = port->port_usb->in; 979 req = gs_alloc_req(ep, ep->maxpacket, GFP_ATOMIC); 980 if (!req) 981 return -ENOMEM; 982 req->complete = gs_console_complete_out; 983 req->context = cons; 984 req->length = 0; 985 986 spin_lock(&cons->lock); 987 cons->req = req; 988 cons->console.data = ep; 989 spin_unlock(&cons->lock); 990 991 pr_debug("ttyGS%d: console connected!\n", port->port_num); 992 993 schedule_work(&cons->work); 994 995 return 0; 996 } 997 998 static void gs_console_disconnect(struct gs_port *port) 999 { 1000 struct gs_console *cons = port->console; 1001 struct usb_request *req; 1002 struct usb_ep *ep; 1003 1004 if (!cons) 1005 return; 1006 1007 spin_lock(&cons->lock); 1008 1009 req = cons->req; 1010 ep = cons->console.data; 1011 cons->req = NULL; 1012 1013 spin_unlock(&cons->lock); 1014 1015 if (!req) 1016 return; 1017 1018 usb_ep_dequeue(ep, req); 1019 gs_free_req(ep, req); 1020 } 1021 1022 static int gs_console_init(struct gs_port *port) 1023 { 1024 struct gs_console *cons; 1025 int err; 1026 1027 if (port->console) 1028 return 0; 1029 1030 cons = kzalloc(sizeof(*port->console), GFP_KERNEL); 1031 if (!cons) 1032 return -ENOMEM; 1033 1034 strcpy(cons->console.name, "ttyGS"); 1035 cons->console.write = gs_console_write; 1036 cons->console.device = gs_console_device; 1037 cons->console.flags = CON_PRINTBUFFER; 1038 cons->console.index = port->port_num; 1039 1040 INIT_WORK(&cons->work, gs_console_work); 1041 spin_lock_init(&cons->lock); 1042 1043 err = kfifo_alloc(&cons->buf, GS_CONSOLE_BUF_SIZE, GFP_KERNEL); 1044 if (err) { 1045 pr_err("ttyGS%d: allocate console buffer failed\n", port->port_num); 1046 kfree(cons); 1047 return err; 1048 } 1049 1050 port->console = cons; 1051 register_console(&cons->console); 1052 1053 spin_lock_irq(&port->port_lock); 1054 if (port->port_usb) 1055 gs_console_connect(port); 1056 spin_unlock_irq(&port->port_lock); 1057 1058 return 0; 1059 } 1060 1061 static void gs_console_exit(struct gs_port *port) 1062 { 1063 struct gs_console *cons = port->console; 1064 1065 if (!cons) 1066 return; 1067 1068 unregister_console(&cons->console); 1069 1070 spin_lock_irq(&port->port_lock); 1071 if (cons->req) 1072 gs_console_disconnect(port); 1073 spin_unlock_irq(&port->port_lock); 1074 1075 cancel_work_sync(&cons->work); 1076 kfifo_free(&cons->buf); 1077 kfree(cons); 1078 port->console = NULL; 1079 } 1080 1081 ssize_t gserial_set_console(unsigned char port_num, const char *page, size_t count) 1082 { 1083 struct gs_port *port; 1084 bool enable; 1085 int ret; 1086 1087 ret = kstrtobool(page, &enable); 1088 if (ret) 1089 return ret; 1090 1091 mutex_lock(&ports[port_num].lock); 1092 port = ports[port_num].port; 1093 1094 if (WARN_ON(port == NULL)) { 1095 ret = -ENXIO; 1096 goto out; 1097 } 1098 1099 if (enable) 1100 ret = gs_console_init(port); 1101 else 1102 gs_console_exit(port); 1103 out: 1104 mutex_unlock(&ports[port_num].lock); 1105 1106 return ret < 0 ? ret : count; 1107 } 1108 EXPORT_SYMBOL_GPL(gserial_set_console); 1109 1110 ssize_t gserial_get_console(unsigned char port_num, char *page) 1111 { 1112 struct gs_port *port; 1113 ssize_t ret; 1114 1115 mutex_lock(&ports[port_num].lock); 1116 port = ports[port_num].port; 1117 1118 if (WARN_ON(port == NULL)) 1119 ret = -ENXIO; 1120 else 1121 ret = sprintf(page, "%u\n", !!port->console); 1122 1123 mutex_unlock(&ports[port_num].lock); 1124 1125 return ret; 1126 } 1127 EXPORT_SYMBOL_GPL(gserial_get_console); 1128 1129 #else 1130 1131 static int gs_console_connect(struct gs_port *port) 1132 { 1133 return 0; 1134 } 1135 1136 static void gs_console_disconnect(struct gs_port *port) 1137 { 1138 } 1139 1140 static int gs_console_init(struct gs_port *port) 1141 { 1142 return -ENOSYS; 1143 } 1144 1145 static void gs_console_exit(struct gs_port *port) 1146 { 1147 } 1148 1149 #endif 1150 1151 static int 1152 gs_port_alloc(unsigned port_num, struct usb_cdc_line_coding *coding) 1153 { 1154 struct gs_port *port; 1155 int ret = 0; 1156 1157 mutex_lock(&ports[port_num].lock); 1158 if (ports[port_num].port) { 1159 ret = -EBUSY; 1160 goto out; 1161 } 1162 1163 port = kzalloc(sizeof(struct gs_port), GFP_KERNEL); 1164 if (port == NULL) { 1165 ret = -ENOMEM; 1166 goto out; 1167 } 1168 1169 tty_port_init(&port->port); 1170 spin_lock_init(&port->port_lock); 1171 init_waitqueue_head(&port->drain_wait); 1172 init_waitqueue_head(&port->close_wait); 1173 1174 INIT_DELAYED_WORK(&port->push, gs_rx_push); 1175 1176 INIT_LIST_HEAD(&port->read_pool); 1177 INIT_LIST_HEAD(&port->read_queue); 1178 INIT_LIST_HEAD(&port->write_pool); 1179 1180 port->port_num = port_num; 1181 port->port_line_coding = *coding; 1182 1183 ports[port_num].port = port; 1184 out: 1185 mutex_unlock(&ports[port_num].lock); 1186 return ret; 1187 } 1188 1189 static int gs_closed(struct gs_port *port) 1190 { 1191 int cond; 1192 1193 spin_lock_irq(&port->port_lock); 1194 cond = port->port.count == 0; 1195 spin_unlock_irq(&port->port_lock); 1196 1197 return cond; 1198 } 1199 1200 static void gserial_free_port(struct gs_port *port) 1201 { 1202 cancel_delayed_work_sync(&port->push); 1203 /* wait for old opens to finish */ 1204 wait_event(port->close_wait, gs_closed(port)); 1205 WARN_ON(port->port_usb != NULL); 1206 tty_port_destroy(&port->port); 1207 kfree(port); 1208 } 1209 1210 void gserial_free_line(unsigned char port_num) 1211 { 1212 struct gs_port *port; 1213 1214 mutex_lock(&ports[port_num].lock); 1215 if (!ports[port_num].port) { 1216 mutex_unlock(&ports[port_num].lock); 1217 return; 1218 } 1219 port = ports[port_num].port; 1220 gs_console_exit(port); 1221 ports[port_num].port = NULL; 1222 mutex_unlock(&ports[port_num].lock); 1223 1224 gserial_free_port(port); 1225 tty_unregister_device(gs_tty_driver, port_num); 1226 } 1227 EXPORT_SYMBOL_GPL(gserial_free_line); 1228 1229 int gserial_alloc_line_no_console(unsigned char *line_num) 1230 { 1231 struct usb_cdc_line_coding coding; 1232 struct gs_port *port; 1233 struct device *tty_dev; 1234 int ret; 1235 int port_num; 1236 1237 coding.dwDTERate = cpu_to_le32(9600); 1238 coding.bCharFormat = 8; 1239 coding.bParityType = USB_CDC_NO_PARITY; 1240 coding.bDataBits = USB_CDC_1_STOP_BITS; 1241 1242 for (port_num = 0; port_num < MAX_U_SERIAL_PORTS; port_num++) { 1243 ret = gs_port_alloc(port_num, &coding); 1244 if (ret == -EBUSY) 1245 continue; 1246 if (ret) 1247 return ret; 1248 break; 1249 } 1250 if (ret) 1251 return ret; 1252 1253 /* ... and sysfs class devices, so mdev/udev make /dev/ttyGS* */ 1254 1255 port = ports[port_num].port; 1256 tty_dev = tty_port_register_device(&port->port, 1257 gs_tty_driver, port_num, NULL); 1258 if (IS_ERR(tty_dev)) { 1259 pr_err("%s: failed to register tty for port %d, err %ld\n", 1260 __func__, port_num, PTR_ERR(tty_dev)); 1261 1262 ret = PTR_ERR(tty_dev); 1263 mutex_lock(&ports[port_num].lock); 1264 ports[port_num].port = NULL; 1265 mutex_unlock(&ports[port_num].lock); 1266 gserial_free_port(port); 1267 goto err; 1268 } 1269 *line_num = port_num; 1270 err: 1271 return ret; 1272 } 1273 EXPORT_SYMBOL_GPL(gserial_alloc_line_no_console); 1274 1275 int gserial_alloc_line(unsigned char *line_num) 1276 { 1277 int ret = gserial_alloc_line_no_console(line_num); 1278 1279 if (!ret && !*line_num) 1280 gs_console_init(ports[*line_num].port); 1281 1282 return ret; 1283 } 1284 EXPORT_SYMBOL_GPL(gserial_alloc_line); 1285 1286 /** 1287 * gserial_connect - notify TTY I/O glue that USB link is active 1288 * @gser: the function, set up with endpoints and descriptors 1289 * @port_num: which port is active 1290 * Context: any (usually from irq) 1291 * 1292 * This is called activate endpoints and let the TTY layer know that 1293 * the connection is active ... not unlike "carrier detect". It won't 1294 * necessarily start I/O queues; unless the TTY is held open by any 1295 * task, there would be no point. However, the endpoints will be 1296 * activated so the USB host can perform I/O, subject to basic USB 1297 * hardware flow control. 1298 * 1299 * Caller needs to have set up the endpoints and USB function in @dev 1300 * before calling this, as well as the appropriate (speed-specific) 1301 * endpoint descriptors, and also have allocate @port_num by calling 1302 * @gserial_alloc_line(). 1303 * 1304 * Returns negative errno or zero. 1305 * On success, ep->driver_data will be overwritten. 1306 */ 1307 int gserial_connect(struct gserial *gser, u8 port_num) 1308 { 1309 struct gs_port *port; 1310 unsigned long flags; 1311 int status; 1312 1313 if (port_num >= MAX_U_SERIAL_PORTS) 1314 return -ENXIO; 1315 1316 port = ports[port_num].port; 1317 if (!port) { 1318 pr_err("serial line %d not allocated.\n", port_num); 1319 return -EINVAL; 1320 } 1321 if (port->port_usb) { 1322 pr_err("serial line %d is in use.\n", port_num); 1323 return -EBUSY; 1324 } 1325 1326 /* activate the endpoints */ 1327 status = usb_ep_enable(gser->in); 1328 if (status < 0) 1329 return status; 1330 gser->in->driver_data = port; 1331 1332 status = usb_ep_enable(gser->out); 1333 if (status < 0) 1334 goto fail_out; 1335 gser->out->driver_data = port; 1336 1337 /* then tell the tty glue that I/O can work */ 1338 spin_lock_irqsave(&port->port_lock, flags); 1339 gser->ioport = port; 1340 port->port_usb = gser; 1341 1342 /* REVISIT unclear how best to handle this state... 1343 * we don't really couple it with the Linux TTY. 1344 */ 1345 gser->port_line_coding = port->port_line_coding; 1346 1347 /* REVISIT if waiting on "carrier detect", signal. */ 1348 1349 /* if it's already open, start I/O ... and notify the serial 1350 * protocol about open/close status (connect/disconnect). 1351 */ 1352 if (port->port.count) { 1353 pr_debug("gserial_connect: start ttyGS%d\n", port->port_num); 1354 gs_start_io(port); 1355 if (gser->connect) 1356 gser->connect(gser); 1357 } else { 1358 if (gser->disconnect) 1359 gser->disconnect(gser); 1360 } 1361 1362 status = gs_console_connect(port); 1363 spin_unlock_irqrestore(&port->port_lock, flags); 1364 1365 return status; 1366 1367 fail_out: 1368 usb_ep_disable(gser->in); 1369 return status; 1370 } 1371 EXPORT_SYMBOL_GPL(gserial_connect); 1372 /** 1373 * gserial_disconnect - notify TTY I/O glue that USB link is inactive 1374 * @gser: the function, on which gserial_connect() was called 1375 * Context: any (usually from irq) 1376 * 1377 * This is called to deactivate endpoints and let the TTY layer know 1378 * that the connection went inactive ... not unlike "hangup". 1379 * 1380 * On return, the state is as if gserial_connect() had never been called; 1381 * there is no active USB I/O on these endpoints. 1382 */ 1383 void gserial_disconnect(struct gserial *gser) 1384 { 1385 struct gs_port *port = gser->ioport; 1386 unsigned long flags; 1387 1388 if (!port) 1389 return; 1390 1391 spin_lock_irqsave(&serial_port_lock, flags); 1392 1393 /* tell the TTY glue not to do I/O here any more */ 1394 spin_lock(&port->port_lock); 1395 1396 gs_console_disconnect(port); 1397 1398 /* REVISIT as above: how best to track this? */ 1399 port->port_line_coding = gser->port_line_coding; 1400 1401 port->port_usb = NULL; 1402 gser->ioport = NULL; 1403 if (port->port.count > 0) { 1404 wake_up_interruptible(&port->drain_wait); 1405 if (port->port.tty) 1406 tty_hangup(port->port.tty); 1407 } 1408 port->suspended = false; 1409 spin_unlock(&port->port_lock); 1410 spin_unlock_irqrestore(&serial_port_lock, flags); 1411 1412 /* disable endpoints, aborting down any active I/O */ 1413 usb_ep_disable(gser->out); 1414 usb_ep_disable(gser->in); 1415 1416 /* finally, free any unused/unusable I/O buffers */ 1417 spin_lock_irqsave(&port->port_lock, flags); 1418 if (port->port.count == 0) 1419 kfifo_free(&port->port_write_buf); 1420 gs_free_requests(gser->out, &port->read_pool, NULL); 1421 gs_free_requests(gser->out, &port->read_queue, NULL); 1422 gs_free_requests(gser->in, &port->write_pool, NULL); 1423 1424 port->read_allocated = port->read_started = 1425 port->write_allocated = port->write_started = 0; 1426 1427 spin_unlock_irqrestore(&port->port_lock, flags); 1428 } 1429 EXPORT_SYMBOL_GPL(gserial_disconnect); 1430 1431 void gserial_suspend(struct gserial *gser) 1432 { 1433 struct gs_port *port; 1434 unsigned long flags; 1435 1436 spin_lock_irqsave(&serial_port_lock, flags); 1437 port = gser->ioport; 1438 1439 if (!port) { 1440 spin_unlock_irqrestore(&serial_port_lock, flags); 1441 return; 1442 } 1443 1444 spin_lock(&port->port_lock); 1445 spin_unlock(&serial_port_lock); 1446 port->suspended = true; 1447 port->start_delayed = true; 1448 spin_unlock_irqrestore(&port->port_lock, flags); 1449 } 1450 EXPORT_SYMBOL_GPL(gserial_suspend); 1451 1452 void gserial_resume(struct gserial *gser) 1453 { 1454 struct gs_port *port; 1455 unsigned long flags; 1456 1457 spin_lock_irqsave(&serial_port_lock, flags); 1458 port = gser->ioport; 1459 1460 if (!port) { 1461 spin_unlock_irqrestore(&serial_port_lock, flags); 1462 return; 1463 } 1464 1465 spin_lock(&port->port_lock); 1466 spin_unlock(&serial_port_lock); 1467 port->suspended = false; 1468 if (!port->start_delayed) { 1469 spin_unlock_irqrestore(&port->port_lock, flags); 1470 return; 1471 } 1472 1473 pr_debug("delayed start ttyGS%d\n", port->port_num); 1474 gs_start_io(port); 1475 if (gser->connect) 1476 gser->connect(gser); 1477 port->start_delayed = false; 1478 spin_unlock_irqrestore(&port->port_lock, flags); 1479 } 1480 EXPORT_SYMBOL_GPL(gserial_resume); 1481 1482 static int __init userial_init(void) 1483 { 1484 struct tty_driver *driver; 1485 unsigned i; 1486 int status; 1487 1488 driver = tty_alloc_driver(MAX_U_SERIAL_PORTS, TTY_DRIVER_REAL_RAW | 1489 TTY_DRIVER_DYNAMIC_DEV); 1490 if (IS_ERR(driver)) 1491 return PTR_ERR(driver); 1492 1493 driver->driver_name = "g_serial"; 1494 driver->name = "ttyGS"; 1495 /* uses dynamically assigned dev_t values */ 1496 1497 driver->type = TTY_DRIVER_TYPE_SERIAL; 1498 driver->subtype = SERIAL_TYPE_NORMAL; 1499 driver->init_termios = tty_std_termios; 1500 1501 /* 9600-8-N-1 ... matches defaults expected by "usbser.sys" on 1502 * MS-Windows. Otherwise, most of these flags shouldn't affect 1503 * anything unless we were to actually hook up to a serial line. 1504 */ 1505 driver->init_termios.c_cflag = 1506 B9600 | CS8 | CREAD | HUPCL | CLOCAL; 1507 driver->init_termios.c_ispeed = 9600; 1508 driver->init_termios.c_ospeed = 9600; 1509 1510 tty_set_operations(driver, &gs_tty_ops); 1511 for (i = 0; i < MAX_U_SERIAL_PORTS; i++) 1512 mutex_init(&ports[i].lock); 1513 1514 /* export the driver ... */ 1515 status = tty_register_driver(driver); 1516 if (status) { 1517 pr_err("%s: cannot register, err %d\n", 1518 __func__, status); 1519 goto fail; 1520 } 1521 1522 gs_tty_driver = driver; 1523 1524 pr_debug("%s: registered %d ttyGS* device%s\n", __func__, 1525 MAX_U_SERIAL_PORTS, 1526 (MAX_U_SERIAL_PORTS == 1) ? "" : "s"); 1527 1528 return status; 1529 fail: 1530 tty_driver_kref_put(driver); 1531 return status; 1532 } 1533 module_init(userial_init); 1534 1535 static void __exit userial_cleanup(void) 1536 { 1537 tty_unregister_driver(gs_tty_driver); 1538 tty_driver_kref_put(gs_tty_driver); 1539 gs_tty_driver = NULL; 1540 } 1541 module_exit(userial_cleanup); 1542 1543 MODULE_LICENSE("GPL"); 1544