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