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