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