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