1 /* 2 * USB Serial Converter driver 3 * 4 * Copyright (C) 1999 - 2005 Greg Kroah-Hartman (greg@kroah.com) 5 * Copyright (C) 2000 Peter Berger (pberger@brimson.com) 6 * Copyright (C) 2000 Al Borchers (borchers@steinerpoint.com) 7 * 8 * This program is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License version 10 * 2 as published by the Free Software Foundation. 11 * 12 * This driver was originally based on the ACM driver by Armin Fuerst (which was 13 * based on a driver by Brad Keryan) 14 * 15 * See Documentation/usb/usb-serial.txt for more information on using this 16 * driver 17 * 18 */ 19 20 #include <linux/kernel.h> 21 #include <linux/errno.h> 22 #include <linux/init.h> 23 #include <linux/slab.h> 24 #include <linux/smp_lock.h> 25 #include <linux/tty.h> 26 #include <linux/tty_driver.h> 27 #include <linux/tty_flip.h> 28 #include <linux/module.h> 29 #include <linux/moduleparam.h> 30 #include <linux/seq_file.h> 31 #include <linux/spinlock.h> 32 #include <linux/mutex.h> 33 #include <linux/list.h> 34 #include <linux/uaccess.h> 35 #include <linux/usb.h> 36 #include <linux/usb/serial.h> 37 #include "pl2303.h" 38 39 /* 40 * Version Information 41 */ 42 #define DRIVER_AUTHOR "Greg Kroah-Hartman, greg@kroah.com, http://www.kroah.com/linux/" 43 #define DRIVER_DESC "USB Serial Driver core" 44 45 static void port_free(struct usb_serial_port *port); 46 47 /* Driver structure we register with the USB core */ 48 static struct usb_driver usb_serial_driver = { 49 .name = "usbserial", 50 .probe = usb_serial_probe, 51 .disconnect = usb_serial_disconnect, 52 .suspend = usb_serial_suspend, 53 .resume = usb_serial_resume, 54 .no_dynamic_id = 1, 55 }; 56 57 /* There is no MODULE_DEVICE_TABLE for usbserial.c. Instead 58 the MODULE_DEVICE_TABLE declarations in each serial driver 59 cause the "hotplug" program to pull in whatever module is necessary 60 via modprobe, and modprobe will load usbserial because the serial 61 drivers depend on it. 62 */ 63 64 static int debug; 65 /* initially all NULL */ 66 static struct usb_serial *serial_table[SERIAL_TTY_MINORS]; 67 static DEFINE_MUTEX(table_lock); 68 static LIST_HEAD(usb_serial_driver_list); 69 70 struct usb_serial *usb_serial_get_by_index(unsigned index) 71 { 72 struct usb_serial *serial; 73 74 mutex_lock(&table_lock); 75 serial = serial_table[index]; 76 77 if (serial) 78 kref_get(&serial->kref); 79 mutex_unlock(&table_lock); 80 return serial; 81 } 82 83 static struct usb_serial *get_free_serial(struct usb_serial *serial, 84 int num_ports, unsigned int *minor) 85 { 86 unsigned int i, j; 87 int good_spot; 88 89 dbg("%s %d", __func__, num_ports); 90 91 *minor = 0; 92 mutex_lock(&table_lock); 93 for (i = 0; i < SERIAL_TTY_MINORS; ++i) { 94 if (serial_table[i]) 95 continue; 96 97 good_spot = 1; 98 for (j = 1; j <= num_ports-1; ++j) 99 if ((i+j >= SERIAL_TTY_MINORS) || (serial_table[i+j])) { 100 good_spot = 0; 101 i += j; 102 break; 103 } 104 if (good_spot == 0) 105 continue; 106 107 *minor = i; 108 j = 0; 109 dbg("%s - minor base = %d", __func__, *minor); 110 for (i = *minor; (i < (*minor + num_ports)) && (i < SERIAL_TTY_MINORS); ++i) { 111 serial_table[i] = serial; 112 serial->port[j++]->number = i; 113 } 114 mutex_unlock(&table_lock); 115 return serial; 116 } 117 mutex_unlock(&table_lock); 118 return NULL; 119 } 120 121 static void return_serial(struct usb_serial *serial) 122 { 123 int i; 124 125 dbg("%s", __func__); 126 127 for (i = 0; i < serial->num_ports; ++i) 128 serial_table[serial->minor + i] = NULL; 129 } 130 131 static void destroy_serial(struct kref *kref) 132 { 133 struct usb_serial *serial; 134 struct usb_serial_port *port; 135 int i; 136 137 serial = to_usb_serial(kref); 138 139 dbg("%s - %s", __func__, serial->type->description); 140 141 /* return the minor range that this device had */ 142 if (serial->minor != SERIAL_TTY_NO_MINOR) 143 return_serial(serial); 144 145 serial->type->release(serial); 146 147 for (i = 0; i < serial->num_ports; ++i) { 148 port = serial->port[i]; 149 if (port) 150 put_device(&port->dev); 151 } 152 153 /* If this is a "fake" port, we have to clean it up here, as it will 154 * not get cleaned up in port_release() as it was never registered with 155 * the driver core */ 156 if (serial->num_ports < serial->num_port_pointers) { 157 for (i = serial->num_ports; 158 i < serial->num_port_pointers; ++i) { 159 port = serial->port[i]; 160 if (port) 161 port_free(port); 162 } 163 } 164 165 usb_put_dev(serial->dev); 166 167 /* free up any memory that we allocated */ 168 kfree(serial); 169 } 170 171 void usb_serial_put(struct usb_serial *serial) 172 { 173 mutex_lock(&table_lock); 174 kref_put(&serial->kref, destroy_serial); 175 mutex_unlock(&table_lock); 176 } 177 178 /***************************************************************************** 179 * Driver tty interface functions 180 *****************************************************************************/ 181 static int serial_open (struct tty_struct *tty, struct file *filp) 182 { 183 struct usb_serial *serial; 184 struct usb_serial_port *port; 185 unsigned int portNumber; 186 int retval = 0; 187 188 dbg("%s", __func__); 189 190 /* get the serial object associated with this tty pointer */ 191 serial = usb_serial_get_by_index(tty->index); 192 if (!serial) { 193 tty->driver_data = NULL; 194 return -ENODEV; 195 } 196 197 mutex_lock(&serial->disc_mutex); 198 portNumber = tty->index - serial->minor; 199 port = serial->port[portNumber]; 200 if (!port || serial->disconnected) 201 retval = -ENODEV; 202 else 203 get_device(&port->dev); 204 /* 205 * Note: Our locking order requirement does not allow port->mutex 206 * to be acquired while serial->disc_mutex is held. 207 */ 208 mutex_unlock(&serial->disc_mutex); 209 if (retval) 210 goto bailout_serial_put; 211 212 if (mutex_lock_interruptible(&port->mutex)) { 213 retval = -ERESTARTSYS; 214 goto bailout_port_put; 215 } 216 217 ++port->port.count; 218 219 /* set up our port structure making the tty driver 220 * remember our port object, and us it */ 221 tty->driver_data = port; 222 tty_port_tty_set(&port->port, tty); 223 224 /* If the console is attached, the device is already open */ 225 if (port->port.count == 1 && !port->console) { 226 227 /* lock this module before we call it 228 * this may fail, which means we must bail out, 229 * safe because we are called with BKL held */ 230 if (!try_module_get(serial->type->driver.owner)) { 231 retval = -ENODEV; 232 goto bailout_mutex_unlock; 233 } 234 235 mutex_lock(&serial->disc_mutex); 236 if (serial->disconnected) 237 retval = -ENODEV; 238 else 239 retval = usb_autopm_get_interface(serial->interface); 240 if (retval) 241 goto bailout_module_put; 242 243 /* only call the device specific open if this 244 * is the first time the port is opened */ 245 retval = serial->type->open(tty, port, filp); 246 if (retval) 247 goto bailout_interface_put; 248 mutex_unlock(&serial->disc_mutex); 249 } 250 mutex_unlock(&port->mutex); 251 /* Now do the correct tty layer semantics */ 252 retval = tty_port_block_til_ready(&port->port, tty, filp); 253 if (retval == 0) 254 return 0; 255 256 bailout_interface_put: 257 usb_autopm_put_interface(serial->interface); 258 bailout_module_put: 259 mutex_unlock(&serial->disc_mutex); 260 module_put(serial->type->driver.owner); 261 bailout_mutex_unlock: 262 port->port.count = 0; 263 tty->driver_data = NULL; 264 tty_port_tty_set(&port->port, NULL); 265 mutex_unlock(&port->mutex); 266 bailout_port_put: 267 put_device(&port->dev); 268 bailout_serial_put: 269 usb_serial_put(serial); 270 return retval; 271 } 272 273 /** 274 * serial_do_down - shut down hardware 275 * @port: port to shut down 276 * 277 * Shut down a USB port unless it is the console. We never shut down the 278 * console hardware as it will always be in use. 279 * 280 * Don't free any resources at this point 281 */ 282 static void serial_do_down(struct usb_serial_port *port) 283 { 284 struct usb_serial_driver *drv = port->serial->type; 285 struct usb_serial *serial; 286 struct module *owner; 287 288 /* The console is magical, do not hang up the console hardware 289 or there will be tears */ 290 if (port->console) 291 return; 292 293 mutex_lock(&port->mutex); 294 serial = port->serial; 295 owner = serial->type->driver.owner; 296 297 if (drv->close) 298 drv->close(port); 299 300 mutex_unlock(&port->mutex); 301 } 302 303 /** 304 * serial_do_free - free resources post close/hangup 305 * @port: port to free up 306 * 307 * Do the resource freeing and refcount dropping for the port. We must 308 * be careful about ordering and we must avoid freeing up the console. 309 */ 310 311 static void serial_do_free(struct usb_serial_port *port) 312 { 313 struct usb_serial *serial; 314 struct module *owner; 315 316 /* The console is magical, do not hang up the console hardware 317 or there will be tears */ 318 if (port->console) 319 return; 320 321 serial = port->serial; 322 owner = serial->type->driver.owner; 323 put_device(&port->dev); 324 /* Mustn't dereference port any more */ 325 mutex_lock(&serial->disc_mutex); 326 if (!serial->disconnected) 327 usb_autopm_put_interface(serial->interface); 328 mutex_unlock(&serial->disc_mutex); 329 usb_serial_put(serial); 330 /* Mustn't dereference serial any more */ 331 module_put(owner); 332 } 333 334 static void serial_close(struct tty_struct *tty, struct file *filp) 335 { 336 struct usb_serial_port *port = tty->driver_data; 337 338 if (!port) 339 return; 340 341 dbg("%s - port %d", __func__, port->number); 342 343 344 if (tty_port_close_start(&port->port, tty, filp) == 0) 345 return; 346 347 serial_do_down(port); 348 tty_port_close_end(&port->port, tty); 349 tty_port_tty_set(&port->port, NULL); 350 serial_do_free(port); 351 } 352 353 static void serial_hangup(struct tty_struct *tty) 354 { 355 struct usb_serial_port *port = tty->driver_data; 356 serial_do_down(port); 357 tty_port_hangup(&port->port); 358 serial_do_free(port); 359 } 360 361 static int serial_write(struct tty_struct *tty, const unsigned char *buf, 362 int count) 363 { 364 struct usb_serial_port *port = tty->driver_data; 365 int retval = -ENODEV; 366 367 if (port->serial->dev->state == USB_STATE_NOTATTACHED) 368 goto exit; 369 370 dbg("%s - port %d, %d byte(s)", __func__, port->number, count); 371 372 /* count is managed under the mutex lock for the tty so cannot 373 drop to zero until after the last close completes */ 374 WARN_ON(!port->port.count); 375 376 /* pass on to the driver specific version of this function */ 377 retval = port->serial->type->write(tty, port, buf, count); 378 379 exit: 380 return retval; 381 } 382 383 static int serial_write_room(struct tty_struct *tty) 384 { 385 struct usb_serial_port *port = tty->driver_data; 386 dbg("%s - port %d", __func__, port->number); 387 WARN_ON(!port->port.count); 388 /* pass on to the driver specific version of this function */ 389 return port->serial->type->write_room(tty); 390 } 391 392 static int serial_chars_in_buffer(struct tty_struct *tty) 393 { 394 struct usb_serial_port *port = tty->driver_data; 395 dbg("%s = port %d", __func__, port->number); 396 397 WARN_ON(!port->port.count); 398 /* if the device was unplugged then any remaining characters 399 fell out of the connector ;) */ 400 if (port->serial->disconnected) 401 return 0; 402 /* pass on to the driver specific version of this function */ 403 return port->serial->type->chars_in_buffer(tty); 404 } 405 406 static void serial_throttle(struct tty_struct *tty) 407 { 408 struct usb_serial_port *port = tty->driver_data; 409 dbg("%s - port %d", __func__, port->number); 410 411 WARN_ON(!port->port.count); 412 /* pass on to the driver specific version of this function */ 413 if (port->serial->type->throttle) 414 port->serial->type->throttle(tty); 415 } 416 417 static void serial_unthrottle(struct tty_struct *tty) 418 { 419 struct usb_serial_port *port = tty->driver_data; 420 dbg("%s - port %d", __func__, port->number); 421 422 WARN_ON(!port->port.count); 423 /* pass on to the driver specific version of this function */ 424 if (port->serial->type->unthrottle) 425 port->serial->type->unthrottle(tty); 426 } 427 428 static int serial_ioctl(struct tty_struct *tty, struct file *file, 429 unsigned int cmd, unsigned long arg) 430 { 431 struct usb_serial_port *port = tty->driver_data; 432 int retval = -ENODEV; 433 434 dbg("%s - port %d, cmd 0x%.4x", __func__, port->number, cmd); 435 436 WARN_ON(!port->port.count); 437 438 /* pass on to the driver specific version of this function 439 if it is available */ 440 if (port->serial->type->ioctl) { 441 retval = port->serial->type->ioctl(tty, file, cmd, arg); 442 } else 443 retval = -ENOIOCTLCMD; 444 return retval; 445 } 446 447 static void serial_set_termios(struct tty_struct *tty, struct ktermios *old) 448 { 449 struct usb_serial_port *port = tty->driver_data; 450 dbg("%s - port %d", __func__, port->number); 451 452 WARN_ON(!port->port.count); 453 /* pass on to the driver specific version of this function 454 if it is available */ 455 if (port->serial->type->set_termios) 456 port->serial->type->set_termios(tty, port, old); 457 else 458 tty_termios_copy_hw(tty->termios, old); 459 } 460 461 static int serial_break(struct tty_struct *tty, int break_state) 462 { 463 struct usb_serial_port *port = tty->driver_data; 464 465 dbg("%s - port %d", __func__, port->number); 466 467 WARN_ON(!port->port.count); 468 /* pass on to the driver specific version of this function 469 if it is available */ 470 if (port->serial->type->break_ctl) 471 port->serial->type->break_ctl(tty, break_state); 472 return 0; 473 } 474 475 static int serial_proc_show(struct seq_file *m, void *v) 476 { 477 struct usb_serial *serial; 478 int i; 479 char tmp[40]; 480 481 dbg("%s", __func__); 482 seq_puts(m, "usbserinfo:1.0 driver:2.0\n"); 483 for (i = 0; i < SERIAL_TTY_MINORS; ++i) { 484 serial = usb_serial_get_by_index(i); 485 if (serial == NULL) 486 continue; 487 488 seq_printf(m, "%d:", i); 489 if (serial->type->driver.owner) 490 seq_printf(m, " module:%s", 491 module_name(serial->type->driver.owner)); 492 seq_printf(m, " name:\"%s\"", 493 serial->type->description); 494 seq_printf(m, " vendor:%04x product:%04x", 495 le16_to_cpu(serial->dev->descriptor.idVendor), 496 le16_to_cpu(serial->dev->descriptor.idProduct)); 497 seq_printf(m, " num_ports:%d", serial->num_ports); 498 seq_printf(m, " port:%d", i - serial->minor + 1); 499 usb_make_path(serial->dev, tmp, sizeof(tmp)); 500 seq_printf(m, " path:%s", tmp); 501 502 seq_putc(m, '\n'); 503 usb_serial_put(serial); 504 } 505 return 0; 506 } 507 508 static int serial_proc_open(struct inode *inode, struct file *file) 509 { 510 return single_open(file, serial_proc_show, NULL); 511 } 512 513 static const struct file_operations serial_proc_fops = { 514 .owner = THIS_MODULE, 515 .open = serial_proc_open, 516 .read = seq_read, 517 .llseek = seq_lseek, 518 .release = single_release, 519 }; 520 521 static int serial_tiocmget(struct tty_struct *tty, struct file *file) 522 { 523 struct usb_serial_port *port = tty->driver_data; 524 525 dbg("%s - port %d", __func__, port->number); 526 527 WARN_ON(!port->port.count); 528 if (port->serial->type->tiocmget) 529 return port->serial->type->tiocmget(tty, file); 530 return -EINVAL; 531 } 532 533 static int serial_tiocmset(struct tty_struct *tty, struct file *file, 534 unsigned int set, unsigned int clear) 535 { 536 struct usb_serial_port *port = tty->driver_data; 537 538 dbg("%s - port %d", __func__, port->number); 539 540 WARN_ON(!port->port.count); 541 if (port->serial->type->tiocmset) 542 return port->serial->type->tiocmset(tty, file, set, clear); 543 return -EINVAL; 544 } 545 546 /* 547 * We would be calling tty_wakeup here, but unfortunately some line 548 * disciplines have an annoying habit of calling tty->write from 549 * the write wakeup callback (e.g. n_hdlc.c). 550 */ 551 void usb_serial_port_softint(struct usb_serial_port *port) 552 { 553 schedule_work(&port->work); 554 } 555 EXPORT_SYMBOL_GPL(usb_serial_port_softint); 556 557 static void usb_serial_port_work(struct work_struct *work) 558 { 559 struct usb_serial_port *port = 560 container_of(work, struct usb_serial_port, work); 561 struct tty_struct *tty; 562 563 dbg("%s - port %d", __func__, port->number); 564 565 tty = tty_port_tty_get(&port->port); 566 if (!tty) 567 return; 568 569 tty_wakeup(tty); 570 tty_kref_put(tty); 571 } 572 573 static void port_release(struct device *dev) 574 { 575 struct usb_serial_port *port = to_usb_serial_port(dev); 576 577 dbg ("%s - %s", __func__, dev_name(dev)); 578 port_free(port); 579 } 580 581 static void kill_traffic(struct usb_serial_port *port) 582 { 583 usb_kill_urb(port->read_urb); 584 usb_kill_urb(port->write_urb); 585 /* 586 * This is tricky. 587 * Some drivers submit the read_urb in the 588 * handler for the write_urb or vice versa 589 * this order determines the order in which 590 * usb_kill_urb() must be used to reliably 591 * kill the URBs. As it is unknown here, 592 * both orders must be used in turn. 593 * The call below is not redundant. 594 */ 595 usb_kill_urb(port->read_urb); 596 usb_kill_urb(port->interrupt_in_urb); 597 usb_kill_urb(port->interrupt_out_urb); 598 } 599 600 static void port_free(struct usb_serial_port *port) 601 { 602 /* 603 * Stop all the traffic before cancelling the work, so that 604 * nobody will restart it by calling usb_serial_port_softint. 605 */ 606 kill_traffic(port); 607 cancel_work_sync(&port->work); 608 609 usb_free_urb(port->read_urb); 610 usb_free_urb(port->write_urb); 611 usb_free_urb(port->interrupt_in_urb); 612 usb_free_urb(port->interrupt_out_urb); 613 kfree(port->bulk_in_buffer); 614 kfree(port->bulk_out_buffer); 615 kfree(port->interrupt_in_buffer); 616 kfree(port->interrupt_out_buffer); 617 kfree(port); 618 } 619 620 static struct usb_serial *create_serial(struct usb_device *dev, 621 struct usb_interface *interface, 622 struct usb_serial_driver *driver) 623 { 624 struct usb_serial *serial; 625 626 serial = kzalloc(sizeof(*serial), GFP_KERNEL); 627 if (!serial) { 628 dev_err(&dev->dev, "%s - out of memory\n", __func__); 629 return NULL; 630 } 631 serial->dev = usb_get_dev(dev); 632 serial->type = driver; 633 serial->interface = interface; 634 kref_init(&serial->kref); 635 mutex_init(&serial->disc_mutex); 636 serial->minor = SERIAL_TTY_NO_MINOR; 637 638 return serial; 639 } 640 641 static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf, 642 struct usb_serial_driver *drv) 643 { 644 struct usb_dynid *dynid; 645 646 spin_lock(&drv->dynids.lock); 647 list_for_each_entry(dynid, &drv->dynids.list, node) { 648 if (usb_match_one_id(intf, &dynid->id)) { 649 spin_unlock(&drv->dynids.lock); 650 return &dynid->id; 651 } 652 } 653 spin_unlock(&drv->dynids.lock); 654 return NULL; 655 } 656 657 static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv, 658 struct usb_interface *intf) 659 { 660 const struct usb_device_id *id; 661 662 id = usb_match_id(intf, drv->id_table); 663 if (id) { 664 dbg("static descriptor matches"); 665 goto exit; 666 } 667 id = match_dynamic_id(intf, drv); 668 if (id) 669 dbg("dynamic descriptor matches"); 670 exit: 671 return id; 672 } 673 674 static struct usb_serial_driver *search_serial_device( 675 struct usb_interface *iface) 676 { 677 const struct usb_device_id *id; 678 struct usb_serial_driver *drv; 679 680 /* Check if the usb id matches a known device */ 681 list_for_each_entry(drv, &usb_serial_driver_list, driver_list) { 682 id = get_iface_id(drv, iface); 683 if (id) 684 return drv; 685 } 686 687 return NULL; 688 } 689 690 static int serial_carrier_raised(struct tty_port *port) 691 { 692 struct usb_serial_port *p = container_of(port, struct usb_serial_port, port); 693 struct usb_serial_driver *drv = p->serial->type; 694 if (drv->carrier_raised) 695 return drv->carrier_raised(p); 696 /* No carrier control - don't block */ 697 return 1; 698 } 699 700 static void serial_dtr_rts(struct tty_port *port, int on) 701 { 702 struct usb_serial_port *p = container_of(port, struct usb_serial_port, port); 703 struct usb_serial_driver *drv = p->serial->type; 704 if (drv->dtr_rts) 705 drv->dtr_rts(p, on); 706 } 707 708 static const struct tty_port_operations serial_port_ops = { 709 .carrier_raised = serial_carrier_raised, 710 .dtr_rts = serial_dtr_rts, 711 }; 712 713 int usb_serial_probe(struct usb_interface *interface, 714 const struct usb_device_id *id) 715 { 716 struct usb_device *dev = interface_to_usbdev(interface); 717 struct usb_serial *serial = NULL; 718 struct usb_serial_port *port; 719 struct usb_host_interface *iface_desc; 720 struct usb_endpoint_descriptor *endpoint; 721 struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS]; 722 struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS]; 723 struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS]; 724 struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS]; 725 struct usb_serial_driver *type = NULL; 726 int retval; 727 unsigned int minor; 728 int buffer_size; 729 int i; 730 int num_interrupt_in = 0; 731 int num_interrupt_out = 0; 732 int num_bulk_in = 0; 733 int num_bulk_out = 0; 734 int num_ports = 0; 735 int max_endpoints; 736 737 lock_kernel(); /* guard against unloading a serial driver module */ 738 type = search_serial_device(interface); 739 if (!type) { 740 unlock_kernel(); 741 dbg("none matched"); 742 return -ENODEV; 743 } 744 745 serial = create_serial(dev, interface, type); 746 if (!serial) { 747 unlock_kernel(); 748 dev_err(&interface->dev, "%s - out of memory\n", __func__); 749 return -ENOMEM; 750 } 751 752 /* if this device type has a probe function, call it */ 753 if (type->probe) { 754 const struct usb_device_id *id; 755 756 if (!try_module_get(type->driver.owner)) { 757 unlock_kernel(); 758 dev_err(&interface->dev, 759 "module get failed, exiting\n"); 760 kfree(serial); 761 return -EIO; 762 } 763 764 id = get_iface_id(type, interface); 765 retval = type->probe(serial, id); 766 module_put(type->driver.owner); 767 768 if (retval) { 769 unlock_kernel(); 770 dbg("sub driver rejected device"); 771 kfree(serial); 772 return retval; 773 } 774 } 775 776 /* descriptor matches, let's find the endpoints needed */ 777 /* check out the endpoints */ 778 iface_desc = interface->cur_altsetting; 779 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { 780 endpoint = &iface_desc->endpoint[i].desc; 781 782 if (usb_endpoint_is_bulk_in(endpoint)) { 783 /* we found a bulk in endpoint */ 784 dbg("found bulk in on endpoint %d", i); 785 bulk_in_endpoint[num_bulk_in] = endpoint; 786 ++num_bulk_in; 787 } 788 789 if (usb_endpoint_is_bulk_out(endpoint)) { 790 /* we found a bulk out endpoint */ 791 dbg("found bulk out on endpoint %d", i); 792 bulk_out_endpoint[num_bulk_out] = endpoint; 793 ++num_bulk_out; 794 } 795 796 if (usb_endpoint_is_int_in(endpoint)) { 797 /* we found a interrupt in endpoint */ 798 dbg("found interrupt in on endpoint %d", i); 799 interrupt_in_endpoint[num_interrupt_in] = endpoint; 800 ++num_interrupt_in; 801 } 802 803 if (usb_endpoint_is_int_out(endpoint)) { 804 /* we found an interrupt out endpoint */ 805 dbg("found interrupt out on endpoint %d", i); 806 interrupt_out_endpoint[num_interrupt_out] = endpoint; 807 ++num_interrupt_out; 808 } 809 } 810 811 #if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE) 812 /* BEGIN HORRIBLE HACK FOR PL2303 */ 813 /* this is needed due to the looney way its endpoints are set up */ 814 if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) && 815 (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) || 816 ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) && 817 (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) || 818 ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) && 819 (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) || 820 ((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) && 821 (le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) { 822 if (interface != dev->actconfig->interface[0]) { 823 /* check out the endpoints of the other interface*/ 824 iface_desc = dev->actconfig->interface[0]->cur_altsetting; 825 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { 826 endpoint = &iface_desc->endpoint[i].desc; 827 if (usb_endpoint_is_int_in(endpoint)) { 828 /* we found a interrupt in endpoint */ 829 dbg("found interrupt in for Prolific device on separate interface"); 830 interrupt_in_endpoint[num_interrupt_in] = endpoint; 831 ++num_interrupt_in; 832 } 833 } 834 } 835 836 /* Now make sure the PL-2303 is configured correctly. 837 * If not, give up now and hope this hack will work 838 * properly during a later invocation of usb_serial_probe 839 */ 840 if (num_bulk_in == 0 || num_bulk_out == 0) { 841 unlock_kernel(); 842 dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n"); 843 kfree(serial); 844 return -ENODEV; 845 } 846 } 847 /* END HORRIBLE HACK FOR PL2303 */ 848 #endif 849 850 #ifdef CONFIG_USB_SERIAL_GENERIC 851 if (type == &usb_serial_generic_device) { 852 num_ports = num_bulk_out; 853 if (num_ports == 0) { 854 unlock_kernel(); 855 dev_err(&interface->dev, 856 "Generic device with no bulk out, not allowed.\n"); 857 kfree(serial); 858 return -EIO; 859 } 860 } 861 #endif 862 if (!num_ports) { 863 /* if this device type has a calc_num_ports function, call it */ 864 if (type->calc_num_ports) { 865 if (!try_module_get(type->driver.owner)) { 866 unlock_kernel(); 867 dev_err(&interface->dev, 868 "module get failed, exiting\n"); 869 kfree(serial); 870 return -EIO; 871 } 872 num_ports = type->calc_num_ports(serial); 873 module_put(type->driver.owner); 874 } 875 if (!num_ports) 876 num_ports = type->num_ports; 877 } 878 879 serial->num_ports = num_ports; 880 serial->num_bulk_in = num_bulk_in; 881 serial->num_bulk_out = num_bulk_out; 882 serial->num_interrupt_in = num_interrupt_in; 883 serial->num_interrupt_out = num_interrupt_out; 884 885 /* found all that we need */ 886 dev_info(&interface->dev, "%s converter detected\n", 887 type->description); 888 889 /* create our ports, we need as many as the max endpoints */ 890 /* we don't use num_ports here because some devices have more 891 endpoint pairs than ports */ 892 max_endpoints = max(num_bulk_in, num_bulk_out); 893 max_endpoints = max(max_endpoints, num_interrupt_in); 894 max_endpoints = max(max_endpoints, num_interrupt_out); 895 max_endpoints = max(max_endpoints, (int)serial->num_ports); 896 serial->num_port_pointers = max_endpoints; 897 unlock_kernel(); 898 899 dbg("%s - setting up %d port structures for this device", 900 __func__, max_endpoints); 901 for (i = 0; i < max_endpoints; ++i) { 902 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL); 903 if (!port) 904 goto probe_error; 905 tty_port_init(&port->port); 906 port->port.ops = &serial_port_ops; 907 port->serial = serial; 908 spin_lock_init(&port->lock); 909 mutex_init(&port->mutex); 910 INIT_WORK(&port->work, usb_serial_port_work); 911 serial->port[i] = port; 912 } 913 914 /* set up the endpoint information */ 915 for (i = 0; i < num_bulk_in; ++i) { 916 endpoint = bulk_in_endpoint[i]; 917 port = serial->port[i]; 918 port->read_urb = usb_alloc_urb(0, GFP_KERNEL); 919 if (!port->read_urb) { 920 dev_err(&interface->dev, "No free urbs available\n"); 921 goto probe_error; 922 } 923 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize); 924 port->bulk_in_size = buffer_size; 925 port->bulk_in_endpointAddress = endpoint->bEndpointAddress; 926 port->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL); 927 if (!port->bulk_in_buffer) { 928 dev_err(&interface->dev, 929 "Couldn't allocate bulk_in_buffer\n"); 930 goto probe_error; 931 } 932 usb_fill_bulk_urb(port->read_urb, dev, 933 usb_rcvbulkpipe(dev, 934 endpoint->bEndpointAddress), 935 port->bulk_in_buffer, buffer_size, 936 serial->type->read_bulk_callback, port); 937 } 938 939 for (i = 0; i < num_bulk_out; ++i) { 940 endpoint = bulk_out_endpoint[i]; 941 port = serial->port[i]; 942 port->write_urb = usb_alloc_urb(0, GFP_KERNEL); 943 if (!port->write_urb) { 944 dev_err(&interface->dev, "No free urbs available\n"); 945 goto probe_error; 946 } 947 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize); 948 port->bulk_out_size = buffer_size; 949 port->bulk_out_endpointAddress = endpoint->bEndpointAddress; 950 port->bulk_out_buffer = kmalloc(buffer_size, GFP_KERNEL); 951 if (!port->bulk_out_buffer) { 952 dev_err(&interface->dev, 953 "Couldn't allocate bulk_out_buffer\n"); 954 goto probe_error; 955 } 956 usb_fill_bulk_urb(port->write_urb, dev, 957 usb_sndbulkpipe(dev, 958 endpoint->bEndpointAddress), 959 port->bulk_out_buffer, buffer_size, 960 serial->type->write_bulk_callback, port); 961 } 962 963 if (serial->type->read_int_callback) { 964 for (i = 0; i < num_interrupt_in; ++i) { 965 endpoint = interrupt_in_endpoint[i]; 966 port = serial->port[i]; 967 port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL); 968 if (!port->interrupt_in_urb) { 969 dev_err(&interface->dev, 970 "No free urbs available\n"); 971 goto probe_error; 972 } 973 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize); 974 port->interrupt_in_endpointAddress = 975 endpoint->bEndpointAddress; 976 port->interrupt_in_buffer = kmalloc(buffer_size, 977 GFP_KERNEL); 978 if (!port->interrupt_in_buffer) { 979 dev_err(&interface->dev, 980 "Couldn't allocate interrupt_in_buffer\n"); 981 goto probe_error; 982 } 983 usb_fill_int_urb(port->interrupt_in_urb, dev, 984 usb_rcvintpipe(dev, 985 endpoint->bEndpointAddress), 986 port->interrupt_in_buffer, buffer_size, 987 serial->type->read_int_callback, port, 988 endpoint->bInterval); 989 } 990 } else if (num_interrupt_in) { 991 dbg("the device claims to support interrupt in transfers, but read_int_callback is not defined"); 992 } 993 994 if (serial->type->write_int_callback) { 995 for (i = 0; i < num_interrupt_out; ++i) { 996 endpoint = interrupt_out_endpoint[i]; 997 port = serial->port[i]; 998 port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL); 999 if (!port->interrupt_out_urb) { 1000 dev_err(&interface->dev, 1001 "No free urbs available\n"); 1002 goto probe_error; 1003 } 1004 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize); 1005 port->interrupt_out_size = buffer_size; 1006 port->interrupt_out_endpointAddress = 1007 endpoint->bEndpointAddress; 1008 port->interrupt_out_buffer = kmalloc(buffer_size, 1009 GFP_KERNEL); 1010 if (!port->interrupt_out_buffer) { 1011 dev_err(&interface->dev, 1012 "Couldn't allocate interrupt_out_buffer\n"); 1013 goto probe_error; 1014 } 1015 usb_fill_int_urb(port->interrupt_out_urb, dev, 1016 usb_sndintpipe(dev, 1017 endpoint->bEndpointAddress), 1018 port->interrupt_out_buffer, buffer_size, 1019 serial->type->write_int_callback, port, 1020 endpoint->bInterval); 1021 } 1022 } else if (num_interrupt_out) { 1023 dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined"); 1024 } 1025 1026 /* if this device type has an attach function, call it */ 1027 if (type->attach) { 1028 if (!try_module_get(type->driver.owner)) { 1029 dev_err(&interface->dev, 1030 "module get failed, exiting\n"); 1031 goto probe_error; 1032 } 1033 retval = type->attach(serial); 1034 module_put(type->driver.owner); 1035 if (retval < 0) 1036 goto probe_error; 1037 if (retval > 0) { 1038 /* quietly accept this device, but don't bind to a 1039 serial port as it's about to disappear */ 1040 serial->num_ports = 0; 1041 goto exit; 1042 } 1043 } 1044 1045 if (get_free_serial(serial, num_ports, &minor) == NULL) { 1046 dev_err(&interface->dev, "No more free serial devices\n"); 1047 goto probe_error; 1048 } 1049 serial->minor = minor; 1050 1051 /* register all of the individual ports with the driver core */ 1052 for (i = 0; i < num_ports; ++i) { 1053 port = serial->port[i]; 1054 port->dev.parent = &interface->dev; 1055 port->dev.driver = NULL; 1056 port->dev.bus = &usb_serial_bus_type; 1057 port->dev.release = &port_release; 1058 1059 dev_set_name(&port->dev, "ttyUSB%d", port->number); 1060 dbg ("%s - registering %s", __func__, dev_name(&port->dev)); 1061 port->dev_state = PORT_REGISTERING; 1062 retval = device_register(&port->dev); 1063 if (retval) { 1064 dev_err(&port->dev, "Error registering port device, " 1065 "continuing\n"); 1066 port->dev_state = PORT_UNREGISTERED; 1067 } else { 1068 port->dev_state = PORT_REGISTERED; 1069 } 1070 } 1071 1072 usb_serial_console_init(debug, minor); 1073 1074 exit: 1075 /* success */ 1076 usb_set_intfdata(interface, serial); 1077 return 0; 1078 1079 probe_error: 1080 for (i = 0; i < num_bulk_in; ++i) { 1081 port = serial->port[i]; 1082 if (!port) 1083 continue; 1084 usb_free_urb(port->read_urb); 1085 kfree(port->bulk_in_buffer); 1086 } 1087 for (i = 0; i < num_bulk_out; ++i) { 1088 port = serial->port[i]; 1089 if (!port) 1090 continue; 1091 usb_free_urb(port->write_urb); 1092 kfree(port->bulk_out_buffer); 1093 } 1094 for (i = 0; i < num_interrupt_in; ++i) { 1095 port = serial->port[i]; 1096 if (!port) 1097 continue; 1098 usb_free_urb(port->interrupt_in_urb); 1099 kfree(port->interrupt_in_buffer); 1100 } 1101 for (i = 0; i < num_interrupt_out; ++i) { 1102 port = serial->port[i]; 1103 if (!port) 1104 continue; 1105 usb_free_urb(port->interrupt_out_urb); 1106 kfree(port->interrupt_out_buffer); 1107 } 1108 1109 /* free up any memory that we allocated */ 1110 for (i = 0; i < serial->num_port_pointers; ++i) 1111 kfree(serial->port[i]); 1112 kfree(serial); 1113 return -EIO; 1114 } 1115 EXPORT_SYMBOL_GPL(usb_serial_probe); 1116 1117 void usb_serial_disconnect(struct usb_interface *interface) 1118 { 1119 int i; 1120 struct usb_serial *serial = usb_get_intfdata(interface); 1121 struct device *dev = &interface->dev; 1122 struct usb_serial_port *port; 1123 1124 usb_serial_console_disconnect(serial); 1125 dbg("%s", __func__); 1126 1127 mutex_lock(&serial->disc_mutex); 1128 usb_set_intfdata(interface, NULL); 1129 /* must set a flag, to signal subdrivers */ 1130 serial->disconnected = 1; 1131 mutex_unlock(&serial->disc_mutex); 1132 1133 for (i = 0; i < serial->num_ports; ++i) { 1134 port = serial->port[i]; 1135 if (port) { 1136 struct tty_struct *tty = tty_port_tty_get(&port->port); 1137 if (tty) { 1138 /* The hangup will occur asynchronously but 1139 the object refcounts will sort out all the 1140 cleanup */ 1141 tty_hangup(tty); 1142 tty_kref_put(tty); 1143 } 1144 kill_traffic(port); 1145 cancel_work_sync(&port->work); 1146 if (port->dev_state == PORT_REGISTERED) { 1147 1148 /* Make sure the port is bound so that the 1149 * driver's port_remove method is called. 1150 */ 1151 if (!port->dev.driver) { 1152 int rc; 1153 1154 port->dev.driver = 1155 &serial->type->driver; 1156 rc = device_bind_driver(&port->dev); 1157 } 1158 port->dev_state = PORT_UNREGISTERING; 1159 device_del(&port->dev); 1160 port->dev_state = PORT_UNREGISTERED; 1161 } 1162 } 1163 } 1164 serial->type->disconnect(serial); 1165 1166 /* let the last holder of this object 1167 * cause it to be cleaned up */ 1168 usb_serial_put(serial); 1169 dev_info(dev, "device disconnected\n"); 1170 } 1171 EXPORT_SYMBOL_GPL(usb_serial_disconnect); 1172 1173 int usb_serial_suspend(struct usb_interface *intf, pm_message_t message) 1174 { 1175 struct usb_serial *serial = usb_get_intfdata(intf); 1176 struct usb_serial_port *port; 1177 int i, r = 0; 1178 1179 serial->suspending = 1; 1180 1181 for (i = 0; i < serial->num_ports; ++i) { 1182 port = serial->port[i]; 1183 if (port) 1184 kill_traffic(port); 1185 } 1186 1187 if (serial->type->suspend) 1188 r = serial->type->suspend(serial, message); 1189 1190 return r; 1191 } 1192 EXPORT_SYMBOL(usb_serial_suspend); 1193 1194 int usb_serial_resume(struct usb_interface *intf) 1195 { 1196 struct usb_serial *serial = usb_get_intfdata(intf); 1197 int rv; 1198 1199 serial->suspending = 0; 1200 if (serial->type->resume) 1201 rv = serial->type->resume(serial); 1202 else 1203 rv = usb_serial_generic_resume(serial); 1204 1205 return rv; 1206 } 1207 EXPORT_SYMBOL(usb_serial_resume); 1208 1209 static const struct tty_operations serial_ops = { 1210 .open = serial_open, 1211 .close = serial_close, 1212 .write = serial_write, 1213 .hangup = serial_hangup, 1214 .write_room = serial_write_room, 1215 .ioctl = serial_ioctl, 1216 .set_termios = serial_set_termios, 1217 .throttle = serial_throttle, 1218 .unthrottle = serial_unthrottle, 1219 .break_ctl = serial_break, 1220 .chars_in_buffer = serial_chars_in_buffer, 1221 .tiocmget = serial_tiocmget, 1222 .tiocmset = serial_tiocmset, 1223 .proc_fops = &serial_proc_fops, 1224 }; 1225 1226 1227 struct tty_driver *usb_serial_tty_driver; 1228 1229 static int __init usb_serial_init(void) 1230 { 1231 int i; 1232 int result; 1233 1234 usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS); 1235 if (!usb_serial_tty_driver) 1236 return -ENOMEM; 1237 1238 /* Initialize our global data */ 1239 for (i = 0; i < SERIAL_TTY_MINORS; ++i) 1240 serial_table[i] = NULL; 1241 1242 result = bus_register(&usb_serial_bus_type); 1243 if (result) { 1244 printk(KERN_ERR "usb-serial: %s - registering bus driver " 1245 "failed\n", __func__); 1246 goto exit_bus; 1247 } 1248 1249 usb_serial_tty_driver->owner = THIS_MODULE; 1250 usb_serial_tty_driver->driver_name = "usbserial"; 1251 usb_serial_tty_driver->name = "ttyUSB"; 1252 usb_serial_tty_driver->major = SERIAL_TTY_MAJOR; 1253 usb_serial_tty_driver->minor_start = 0; 1254 usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL; 1255 usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL; 1256 usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW | 1257 TTY_DRIVER_DYNAMIC_DEV; 1258 usb_serial_tty_driver->init_termios = tty_std_termios; 1259 usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD 1260 | HUPCL | CLOCAL; 1261 usb_serial_tty_driver->init_termios.c_ispeed = 9600; 1262 usb_serial_tty_driver->init_termios.c_ospeed = 9600; 1263 tty_set_operations(usb_serial_tty_driver, &serial_ops); 1264 result = tty_register_driver(usb_serial_tty_driver); 1265 if (result) { 1266 printk(KERN_ERR "usb-serial: %s - tty_register_driver failed\n", 1267 __func__); 1268 goto exit_reg_driver; 1269 } 1270 1271 /* register the USB driver */ 1272 result = usb_register(&usb_serial_driver); 1273 if (result < 0) { 1274 printk(KERN_ERR "usb-serial: %s - usb_register failed\n", 1275 __func__); 1276 goto exit_tty; 1277 } 1278 1279 /* register the generic driver, if we should */ 1280 result = usb_serial_generic_register(debug); 1281 if (result < 0) { 1282 printk(KERN_ERR "usb-serial: %s - registering generic " 1283 "driver failed\n", __func__); 1284 goto exit_generic; 1285 } 1286 1287 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n"); 1288 1289 return result; 1290 1291 exit_generic: 1292 usb_deregister(&usb_serial_driver); 1293 1294 exit_tty: 1295 tty_unregister_driver(usb_serial_tty_driver); 1296 1297 exit_reg_driver: 1298 bus_unregister(&usb_serial_bus_type); 1299 1300 exit_bus: 1301 printk(KERN_ERR "usb-serial: %s - returning with error %d\n", 1302 __func__, result); 1303 put_tty_driver(usb_serial_tty_driver); 1304 return result; 1305 } 1306 1307 1308 static void __exit usb_serial_exit(void) 1309 { 1310 usb_serial_console_exit(); 1311 1312 usb_serial_generic_deregister(); 1313 1314 usb_deregister(&usb_serial_driver); 1315 tty_unregister_driver(usb_serial_tty_driver); 1316 put_tty_driver(usb_serial_tty_driver); 1317 bus_unregister(&usb_serial_bus_type); 1318 } 1319 1320 1321 module_init(usb_serial_init); 1322 module_exit(usb_serial_exit); 1323 1324 #define set_to_generic_if_null(type, function) \ 1325 do { \ 1326 if (!type->function) { \ 1327 type->function = usb_serial_generic_##function; \ 1328 dbg("Had to override the " #function \ 1329 " usb serial operation with the generic one.");\ 1330 } \ 1331 } while (0) 1332 1333 static void fixup_generic(struct usb_serial_driver *device) 1334 { 1335 set_to_generic_if_null(device, open); 1336 set_to_generic_if_null(device, write); 1337 set_to_generic_if_null(device, close); 1338 set_to_generic_if_null(device, write_room); 1339 set_to_generic_if_null(device, chars_in_buffer); 1340 set_to_generic_if_null(device, read_bulk_callback); 1341 set_to_generic_if_null(device, write_bulk_callback); 1342 set_to_generic_if_null(device, disconnect); 1343 set_to_generic_if_null(device, release); 1344 } 1345 1346 int usb_serial_register(struct usb_serial_driver *driver) 1347 { 1348 /* must be called with BKL held */ 1349 int retval; 1350 1351 if (usb_disabled()) 1352 return -ENODEV; 1353 1354 fixup_generic(driver); 1355 1356 if (!driver->description) 1357 driver->description = driver->driver.name; 1358 1359 /* Add this device to our list of devices */ 1360 list_add(&driver->driver_list, &usb_serial_driver_list); 1361 1362 retval = usb_serial_bus_register(driver); 1363 if (retval) { 1364 printk(KERN_ERR "usb-serial: problem %d when registering " 1365 "driver %s\n", retval, driver->description); 1366 list_del(&driver->driver_list); 1367 } else 1368 printk(KERN_INFO "USB Serial support registered for %s\n", 1369 driver->description); 1370 1371 return retval; 1372 } 1373 EXPORT_SYMBOL_GPL(usb_serial_register); 1374 1375 1376 void usb_serial_deregister(struct usb_serial_driver *device) 1377 { 1378 /* must be called with BKL held */ 1379 printk(KERN_INFO "USB Serial deregistering driver %s\n", 1380 device->description); 1381 list_del(&device->driver_list); 1382 usb_serial_bus_deregister(device); 1383 } 1384 EXPORT_SYMBOL_GPL(usb_serial_deregister); 1385 1386 /* Module information */ 1387 MODULE_AUTHOR(DRIVER_AUTHOR); 1388 MODULE_DESCRIPTION(DRIVER_DESC); 1389 MODULE_LICENSE("GPL"); 1390 1391 module_param(debug, bool, S_IRUGO | S_IWUSR); 1392 MODULE_PARM_DESC(debug, "Debug enabled or not"); 1393