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