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