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