linux/drivers/usb/serial/usb-serial.c
<<
>>
Prefs
   1/*
   2 * USB Serial Converter driver
   3 *
   4 * Copyright (C) 2009 - 2013 Johan Hovold (jhovold@gmail.com)
   5 * Copyright (C) 1999 - 2012 Greg Kroah-Hartman (greg@kroah.com)
   6 * Copyright (C) 2000 Peter Berger (pberger@brimson.com)
   7 * Copyright (C) 2000 Al Borchers (borchers@steinerpoint.com)
   8 *
   9 *      This program is free software; you can redistribute it and/or
  10 *      modify it under the terms of the GNU General Public License version
  11 *      2 as published by the Free Software Foundation.
  12 *
  13 * This driver was originally based on the ACM driver by Armin Fuerst (which was
  14 * based on a driver by Brad Keryan)
  15 *
  16 * See Documentation/usb/usb-serial.txt for more information on using this
  17 * driver
  18 */
  19
  20#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  21
  22#include <linux/kernel.h>
  23#include <linux/errno.h>
  24#include <linux/init.h>
  25#include <linux/slab.h>
  26#include <linux/tty.h>
  27#include <linux/tty_driver.h>
  28#include <linux/tty_flip.h>
  29#include <linux/module.h>
  30#include <linux/moduleparam.h>
  31#include <linux/seq_file.h>
  32#include <linux/spinlock.h>
  33#include <linux/mutex.h>
  34#include <linux/list.h>
  35#include <linux/uaccess.h>
  36#include <linux/serial.h>
  37#include <linux/usb.h>
  38#include <linux/usb/serial.h>
  39#include <linux/kfifo.h>
  40#include <linux/idr.h>
  41#include "pl2303.h"
  42
  43#define DRIVER_AUTHOR "Greg Kroah-Hartman <gregkh@linuxfoundation.org>"
  44#define DRIVER_DESC "USB Serial Driver core"
  45
  46#define USB_SERIAL_TTY_MAJOR    188
  47#define USB_SERIAL_TTY_MINORS   512     /* should be enough for a while */
  48
  49/* There is no MODULE_DEVICE_TABLE for usbserial.c.  Instead
  50   the MODULE_DEVICE_TABLE declarations in each serial driver
  51   cause the "hotplug" program to pull in whatever module is necessary
  52   via modprobe, and modprobe will load usbserial because the serial
  53   drivers depend on it.
  54*/
  55
  56static DEFINE_IDR(serial_minors);
  57static DEFINE_MUTEX(table_lock);
  58static LIST_HEAD(usb_serial_driver_list);
  59
  60/*
  61 * Look up the serial port structure.  If it is found and it hasn't been
  62 * disconnected, return with the parent usb_serial structure's disc_mutex held
  63 * and its refcount incremented.  Otherwise return NULL.
  64 */
  65struct usb_serial_port *usb_serial_port_get_by_minor(unsigned minor)
  66{
  67        struct usb_serial *serial;
  68        struct usb_serial_port *port;
  69
  70        mutex_lock(&table_lock);
  71        port = idr_find(&serial_minors, minor);
  72        if (!port)
  73                goto exit;
  74
  75        serial = port->serial;
  76        mutex_lock(&serial->disc_mutex);
  77        if (serial->disconnected) {
  78                mutex_unlock(&serial->disc_mutex);
  79                port = NULL;
  80        } else {
  81                kref_get(&serial->kref);
  82        }
  83exit:
  84        mutex_unlock(&table_lock);
  85        return port;
  86}
  87
  88static int allocate_minors(struct usb_serial *serial, int num_ports)
  89{
  90        struct usb_serial_port *port;
  91        unsigned int i, j;
  92        int minor;
  93
  94        dev_dbg(&serial->interface->dev, "%s %d\n", __func__, num_ports);
  95
  96        mutex_lock(&table_lock);
  97        for (i = 0; i < num_ports; ++i) {
  98                port = serial->port[i];
  99                minor = idr_alloc(&serial_minors, port, 0, 0, GFP_KERNEL);
 100                if (minor < 0)
 101                        goto error;
 102                port->minor = minor;
 103                port->port_number = i;
 104        }
 105        serial->minors_reserved = 1;
 106        mutex_unlock(&table_lock);
 107        return 0;
 108error:
 109        /* unwind the already allocated minors */
 110        for (j = 0; j < i; ++j)
 111                idr_remove(&serial_minors, serial->port[j]->minor);
 112        mutex_unlock(&table_lock);
 113        return minor;
 114}
 115
 116static void release_minors(struct usb_serial *serial)
 117{
 118        int i;
 119
 120        mutex_lock(&table_lock);
 121        for (i = 0; i < serial->num_ports; ++i)
 122                idr_remove(&serial_minors, serial->port[i]->minor);
 123        mutex_unlock(&table_lock);
 124        serial->minors_reserved = 0;
 125}
 126
 127static void destroy_serial(struct kref *kref)
 128{
 129        struct usb_serial *serial;
 130        struct usb_serial_port *port;
 131        int i;
 132
 133        serial = to_usb_serial(kref);
 134
 135        /* return the minor range that this device had */
 136        if (serial->minors_reserved)
 137                release_minors(serial);
 138
 139        if (serial->attached && serial->type->release)
 140                serial->type->release(serial);
 141
 142        /* Now that nothing is using the ports, they can be freed */
 143        for (i = 0; i < serial->num_port_pointers; ++i) {
 144                port = serial->port[i];
 145                if (port) {
 146                        port->serial = NULL;
 147                        put_device(&port->dev);
 148                }
 149        }
 150
 151        usb_put_intf(serial->interface);
 152        usb_put_dev(serial->dev);
 153        kfree(serial);
 154}
 155
 156void usb_serial_put(struct usb_serial *serial)
 157{
 158        kref_put(&serial->kref, destroy_serial);
 159}
 160
 161/*****************************************************************************
 162 * Driver tty interface functions
 163 *****************************************************************************/
 164
 165/**
 166 * serial_install - install tty
 167 * @driver: the driver (USB in our case)
 168 * @tty: the tty being created
 169 *
 170 * Create the termios objects for this tty.  We use the default
 171 * USB serial settings but permit them to be overridden by
 172 * serial->type->init_termios.
 173 *
 174 * This is the first place a new tty gets used.  Hence this is where we
 175 * acquire references to the usb_serial structure and the driver module,
 176 * where we store a pointer to the port, and where we do an autoresume.
 177 * All these actions are reversed in serial_cleanup().
 178 */
 179static int serial_install(struct tty_driver *driver, struct tty_struct *tty)
 180{
 181        int idx = tty->index;
 182        struct usb_serial *serial;
 183        struct usb_serial_port *port;
 184        int retval = -ENODEV;
 185
 186        port = usb_serial_port_get_by_minor(idx);
 187        if (!port)
 188                return retval;
 189
 190        serial = port->serial;
 191        if (!try_module_get(serial->type->driver.owner))
 192                goto error_module_get;
 193
 194        retval = usb_autopm_get_interface(serial->interface);
 195        if (retval)
 196                goto error_get_interface;
 197
 198        retval = tty_port_install(&port->port, driver, tty);
 199        if (retval)
 200                goto error_init_termios;
 201
 202        mutex_unlock(&serial->disc_mutex);
 203
 204        /* allow the driver to update the settings */
 205        if (serial->type->init_termios)
 206                serial->type->init_termios(tty);
 207
 208        tty->driver_data = port;
 209
 210        return retval;
 211
 212 error_init_termios:
 213        usb_autopm_put_interface(serial->interface);
 214 error_get_interface:
 215        module_put(serial->type->driver.owner);
 216 error_module_get:
 217        usb_serial_put(serial);
 218        mutex_unlock(&serial->disc_mutex);
 219        return retval;
 220}
 221
 222static int serial_port_activate(struct tty_port *tport, struct tty_struct *tty)
 223{
 224        struct usb_serial_port *port =
 225                container_of(tport, struct usb_serial_port, port);
 226        struct usb_serial *serial = port->serial;
 227        int retval;
 228
 229        mutex_lock(&serial->disc_mutex);
 230        if (serial->disconnected)
 231                retval = -ENODEV;
 232        else
 233                retval = port->serial->type->open(tty, port);
 234        mutex_unlock(&serial->disc_mutex);
 235
 236        if (retval < 0)
 237                retval = usb_translate_errors(retval);
 238
 239        return retval;
 240}
 241
 242static int serial_open(struct tty_struct *tty, struct file *filp)
 243{
 244        struct usb_serial_port *port = tty->driver_data;
 245
 246        dev_dbg(tty->dev, "%s\n", __func__);
 247
 248        return tty_port_open(&port->port, tty, filp);
 249}
 250
 251/**
 252 * serial_port_shutdown - shut down hardware
 253 * @tport: tty port to shut down
 254 *
 255 * Shut down a USB serial port. Serialized against activate by the
 256 * tport mutex and kept to matching open/close pairs
 257 * of calls by the ASYNCB_INITIALIZED flag.
 258 *
 259 * Not called if tty is console.
 260 */
 261static void serial_port_shutdown(struct tty_port *tport)
 262{
 263        struct usb_serial_port *port =
 264                container_of(tport, struct usb_serial_port, port);
 265        struct usb_serial_driver *drv = port->serial->type;
 266
 267        if (drv->close)
 268                drv->close(port);
 269}
 270
 271static void serial_hangup(struct tty_struct *tty)
 272{
 273        struct usb_serial_port *port = tty->driver_data;
 274
 275        dev_dbg(tty->dev, "%s\n", __func__);
 276
 277        tty_port_hangup(&port->port);
 278}
 279
 280static void serial_close(struct tty_struct *tty, struct file *filp)
 281{
 282        struct usb_serial_port *port = tty->driver_data;
 283
 284        dev_dbg(tty->dev, "%s\n", __func__);
 285
 286        tty_port_close(&port->port, tty, filp);
 287}
 288
 289/**
 290 * serial_cleanup - free resources post close/hangup
 291 * @port: port to free up
 292 *
 293 * Do the resource freeing and refcount dropping for the port.
 294 * Avoid freeing the console.
 295 *
 296 * Called asynchronously after the last tty kref is dropped.
 297 */
 298static void serial_cleanup(struct tty_struct *tty)
 299{
 300        struct usb_serial_port *port = tty->driver_data;
 301        struct usb_serial *serial;
 302        struct module *owner;
 303
 304        dev_dbg(tty->dev, "%s\n", __func__);
 305
 306        /* The console is magical.  Do not hang up the console hardware
 307         * or there will be tears.
 308         */
 309        if (port->port.console)
 310                return;
 311
 312        tty->driver_data = NULL;
 313
 314        serial = port->serial;
 315        owner = serial->type->driver.owner;
 316
 317        mutex_lock(&serial->disc_mutex);
 318        if (!serial->disconnected)
 319                usb_autopm_put_interface(serial->interface);
 320        mutex_unlock(&serial->disc_mutex);
 321
 322        usb_serial_put(serial);
 323        module_put(owner);
 324}
 325
 326static int serial_write(struct tty_struct *tty, const unsigned char *buf,
 327                                                                int count)
 328{
 329        struct usb_serial_port *port = tty->driver_data;
 330        int retval = -ENODEV;
 331
 332        if (port->serial->dev->state == USB_STATE_NOTATTACHED)
 333                goto exit;
 334
 335        dev_dbg(tty->dev, "%s - %d byte(s)\n", __func__, count);
 336
 337        retval = port->serial->type->write(tty, port, buf, count);
 338        if (retval < 0)
 339                retval = usb_translate_errors(retval);
 340exit:
 341        return retval;
 342}
 343
 344static int serial_write_room(struct tty_struct *tty)
 345{
 346        struct usb_serial_port *port = tty->driver_data;
 347
 348        dev_dbg(tty->dev, "%s\n", __func__);
 349
 350        return port->serial->type->write_room(tty);
 351}
 352
 353static int serial_chars_in_buffer(struct tty_struct *tty)
 354{
 355        struct usb_serial_port *port = tty->driver_data;
 356        struct usb_serial *serial = port->serial;
 357
 358        dev_dbg(tty->dev, "%s\n", __func__);
 359
 360        if (serial->disconnected)
 361                return 0;
 362
 363        return serial->type->chars_in_buffer(tty);
 364}
 365
 366static void serial_wait_until_sent(struct tty_struct *tty, int timeout)
 367{
 368        struct usb_serial_port *port = tty->driver_data;
 369        struct usb_serial *serial = port->serial;
 370
 371        dev_dbg(tty->dev, "%s\n", __func__);
 372
 373        if (!port->serial->type->wait_until_sent)
 374                return;
 375
 376        mutex_lock(&serial->disc_mutex);
 377        if (!serial->disconnected)
 378                port->serial->type->wait_until_sent(tty, timeout);
 379        mutex_unlock(&serial->disc_mutex);
 380}
 381
 382static void serial_throttle(struct tty_struct *tty)
 383{
 384        struct usb_serial_port *port = tty->driver_data;
 385
 386        dev_dbg(tty->dev, "%s\n", __func__);
 387
 388        if (port->serial->type->throttle)
 389                port->serial->type->throttle(tty);
 390}
 391
 392static void serial_unthrottle(struct tty_struct *tty)
 393{
 394        struct usb_serial_port *port = tty->driver_data;
 395
 396        dev_dbg(tty->dev, "%s\n", __func__);
 397
 398        if (port->serial->type->unthrottle)
 399                port->serial->type->unthrottle(tty);
 400}
 401
 402static int serial_ioctl(struct tty_struct *tty,
 403                                        unsigned int cmd, unsigned long arg)
 404{
 405        struct usb_serial_port *port = tty->driver_data;
 406        int retval = -ENOIOCTLCMD;
 407
 408        dev_dbg(tty->dev, "%s - cmd 0x%04x\n", __func__, cmd);
 409
 410        switch (cmd) {
 411        case TIOCMIWAIT:
 412                if (port->serial->type->tiocmiwait)
 413                        retval = port->serial->type->tiocmiwait(tty, arg);
 414                break;
 415        default:
 416                if (port->serial->type->ioctl)
 417                        retval = port->serial->type->ioctl(tty, cmd, arg);
 418        }
 419
 420        return retval;
 421}
 422
 423static void serial_set_termios(struct tty_struct *tty, struct ktermios *old)
 424{
 425        struct usb_serial_port *port = tty->driver_data;
 426
 427        dev_dbg(tty->dev, "%s\n", __func__);
 428
 429        if (port->serial->type->set_termios)
 430                port->serial->type->set_termios(tty, port, old);
 431        else
 432                tty_termios_copy_hw(&tty->termios, old);
 433}
 434
 435static int serial_break(struct tty_struct *tty, int break_state)
 436{
 437        struct usb_serial_port *port = tty->driver_data;
 438
 439        dev_dbg(tty->dev, "%s\n", __func__);
 440
 441        if (port->serial->type->break_ctl)
 442                port->serial->type->break_ctl(tty, break_state);
 443
 444        return 0;
 445}
 446
 447static int serial_proc_show(struct seq_file *m, void *v)
 448{
 449        struct usb_serial *serial;
 450        struct usb_serial_port *port;
 451        int i;
 452        char tmp[40];
 453
 454        seq_puts(m, "usbserinfo:1.0 driver:2.0\n");
 455        for (i = 0; i < USB_SERIAL_TTY_MINORS; ++i) {
 456                port = usb_serial_port_get_by_minor(i);
 457                if (port == NULL)
 458                        continue;
 459                serial = port->serial;
 460
 461                seq_printf(m, "%d:", i);
 462                if (serial->type->driver.owner)
 463                        seq_printf(m, " module:%s",
 464                                module_name(serial->type->driver.owner));
 465                seq_printf(m, " name:\"%s\"",
 466                                serial->type->description);
 467                seq_printf(m, " vendor:%04x product:%04x",
 468                        le16_to_cpu(serial->dev->descriptor.idVendor),
 469                        le16_to_cpu(serial->dev->descriptor.idProduct));
 470                seq_printf(m, " num_ports:%d", serial->num_ports);
 471                seq_printf(m, " port:%d", port->port_number);
 472                usb_make_path(serial->dev, tmp, sizeof(tmp));
 473                seq_printf(m, " path:%s", tmp);
 474
 475                seq_putc(m, '\n');
 476                usb_serial_put(serial);
 477                mutex_unlock(&serial->disc_mutex);
 478        }
 479        return 0;
 480}
 481
 482static int serial_proc_open(struct inode *inode, struct file *file)
 483{
 484        return single_open(file, serial_proc_show, NULL);
 485}
 486
 487static const struct file_operations serial_proc_fops = {
 488        .owner          = THIS_MODULE,
 489        .open           = serial_proc_open,
 490        .read           = seq_read,
 491        .llseek         = seq_lseek,
 492        .release        = single_release,
 493};
 494
 495static int serial_tiocmget(struct tty_struct *tty)
 496{
 497        struct usb_serial_port *port = tty->driver_data;
 498
 499        dev_dbg(tty->dev, "%s\n", __func__);
 500
 501        if (port->serial->type->tiocmget)
 502                return port->serial->type->tiocmget(tty);
 503        return -EINVAL;
 504}
 505
 506static int serial_tiocmset(struct tty_struct *tty,
 507                            unsigned int set, unsigned int clear)
 508{
 509        struct usb_serial_port *port = tty->driver_data;
 510
 511        dev_dbg(tty->dev, "%s\n", __func__);
 512
 513        if (port->serial->type->tiocmset)
 514                return port->serial->type->tiocmset(tty, set, clear);
 515        return -EINVAL;
 516}
 517
 518static int serial_get_icount(struct tty_struct *tty,
 519                                struct serial_icounter_struct *icount)
 520{
 521        struct usb_serial_port *port = tty->driver_data;
 522
 523        dev_dbg(tty->dev, "%s\n", __func__);
 524
 525        if (port->serial->type->get_icount)
 526                return port->serial->type->get_icount(tty, icount);
 527        return -EINVAL;
 528}
 529
 530/*
 531 * We would be calling tty_wakeup here, but unfortunately some line
 532 * disciplines have an annoying habit of calling tty->write from
 533 * the write wakeup callback (e.g. n_hdlc.c).
 534 */
 535void usb_serial_port_softint(struct usb_serial_port *port)
 536{
 537        schedule_work(&port->work);
 538}
 539EXPORT_SYMBOL_GPL(usb_serial_port_softint);
 540
 541static void usb_serial_port_work(struct work_struct *work)
 542{
 543        struct usb_serial_port *port =
 544                container_of(work, struct usb_serial_port, work);
 545
 546        tty_port_tty_wakeup(&port->port);
 547}
 548
 549static void usb_serial_port_poison_urbs(struct usb_serial_port *port)
 550{
 551        int i;
 552
 553        for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i)
 554                usb_poison_urb(port->read_urbs[i]);
 555        for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i)
 556                usb_poison_urb(port->write_urbs[i]);
 557
 558        usb_poison_urb(port->interrupt_in_urb);
 559        usb_poison_urb(port->interrupt_out_urb);
 560}
 561
 562static void usb_serial_port_unpoison_urbs(struct usb_serial_port *port)
 563{
 564        int i;
 565
 566        for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i)
 567                usb_unpoison_urb(port->read_urbs[i]);
 568        for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i)
 569                usb_unpoison_urb(port->write_urbs[i]);
 570
 571        usb_unpoison_urb(port->interrupt_in_urb);
 572        usb_unpoison_urb(port->interrupt_out_urb);
 573}
 574
 575static void usb_serial_port_release(struct device *dev)
 576{
 577        struct usb_serial_port *port = to_usb_serial_port(dev);
 578        int i;
 579
 580        dev_dbg(dev, "%s\n", __func__);
 581
 582        usb_free_urb(port->interrupt_in_urb);
 583        usb_free_urb(port->interrupt_out_urb);
 584        for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) {
 585                usb_free_urb(port->read_urbs[i]);
 586                kfree(port->bulk_in_buffers[i]);
 587        }
 588        for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i) {
 589                usb_free_urb(port->write_urbs[i]);
 590                kfree(port->bulk_out_buffers[i]);
 591        }
 592        kfifo_free(&port->write_fifo);
 593        kfree(port->interrupt_in_buffer);
 594        kfree(port->interrupt_out_buffer);
 595        tty_port_destroy(&port->port);
 596        kfree(port);
 597}
 598
 599static 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                return NULL;
 608        serial->dev = usb_get_dev(dev);
 609        serial->type = driver;
 610        serial->interface = usb_get_intf(interface);
 611        kref_init(&serial->kref);
 612        mutex_init(&serial->disc_mutex);
 613        serial->minors_reserved = 0;
 614
 615        return serial;
 616}
 617
 618static 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
 634static 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                dev_dbg(&intf->dev, "static descriptor matches\n");
 642                goto exit;
 643        }
 644        id = match_dynamic_id(intf, drv);
 645        if (id)
 646                dev_dbg(&intf->dev, "dynamic descriptor matches\n");
 647exit:
 648        return id;
 649}
 650
 651/* Caller must hold table_lock */
 652static struct usb_serial_driver *search_serial_device(
 653                                        struct usb_interface *iface)
 654{
 655        const struct usb_device_id *id = NULL;
 656        struct usb_serial_driver *drv;
 657        struct usb_driver *driver = to_usb_driver(iface->dev.driver);
 658
 659        /* Check if the usb id matches a known device */
 660        list_for_each_entry(drv, &usb_serial_driver_list, driver_list) {
 661                if (drv->usb_driver == driver)
 662                        id = get_iface_id(drv, iface);
 663                if (id)
 664                        return drv;
 665        }
 666
 667        return NULL;
 668}
 669
 670static int serial_port_carrier_raised(struct tty_port *port)
 671{
 672        struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
 673        struct usb_serial_driver *drv = p->serial->type;
 674
 675        if (drv->carrier_raised)
 676                return drv->carrier_raised(p);
 677        /* No carrier control - don't block */
 678        return 1;
 679}
 680
 681static void serial_port_dtr_rts(struct tty_port *port, int on)
 682{
 683        struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
 684        struct usb_serial_driver *drv = p->serial->type;
 685
 686        if (drv->dtr_rts)
 687                drv->dtr_rts(p, on);
 688}
 689
 690static const struct tty_port_operations serial_port_ops = {
 691        .carrier_raised         = serial_port_carrier_raised,
 692        .dtr_rts                = serial_port_dtr_rts,
 693        .activate               = serial_port_activate,
 694        .shutdown               = serial_port_shutdown,
 695};
 696
 697static int usb_serial_probe(struct usb_interface *interface,
 698                               const struct usb_device_id *id)
 699{
 700        struct device *ddev = &interface->dev;
 701        struct usb_device *dev = interface_to_usbdev(interface);
 702        struct usb_serial *serial = NULL;
 703        struct usb_serial_port *port;
 704        struct usb_host_interface *iface_desc;
 705        struct usb_endpoint_descriptor *endpoint;
 706        struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
 707        struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
 708        struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
 709        struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
 710        struct usb_serial_driver *type = NULL;
 711        int retval;
 712        int buffer_size;
 713        int i;
 714        int j;
 715        int num_interrupt_in = 0;
 716        int num_interrupt_out = 0;
 717        int num_bulk_in = 0;
 718        int num_bulk_out = 0;
 719        int num_ports = 0;
 720        int max_endpoints;
 721
 722        mutex_lock(&table_lock);
 723        type = search_serial_device(interface);
 724        if (!type) {
 725                mutex_unlock(&table_lock);
 726                dev_dbg(ddev, "none matched\n");
 727                return -ENODEV;
 728        }
 729
 730        if (!try_module_get(type->driver.owner)) {
 731                mutex_unlock(&table_lock);
 732                dev_err(ddev, "module get failed, exiting\n");
 733                return -EIO;
 734        }
 735        mutex_unlock(&table_lock);
 736
 737        serial = create_serial(dev, interface, type);
 738        if (!serial) {
 739                module_put(type->driver.owner);
 740                return -ENOMEM;
 741        }
 742
 743        /* if this device type has a probe function, call it */
 744        if (type->probe) {
 745                const struct usb_device_id *id;
 746
 747                id = get_iface_id(type, interface);
 748                retval = type->probe(serial, id);
 749
 750                if (retval) {
 751                        dev_dbg(ddev, "sub driver rejected device\n");
 752                        usb_serial_put(serial);
 753                        module_put(type->driver.owner);
 754                        return retval;
 755                }
 756        }
 757
 758        /* descriptor matches, let's find the endpoints needed */
 759        /* check out the endpoints */
 760        iface_desc = interface->cur_altsetting;
 761        for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
 762                endpoint = &iface_desc->endpoint[i].desc;
 763
 764                if (usb_endpoint_is_bulk_in(endpoint)) {
 765                        /* we found a bulk in endpoint */
 766                        dev_dbg(ddev, "found bulk in on endpoint %d\n", i);
 767                        if (num_bulk_in < MAX_NUM_PORTS) {
 768                                bulk_in_endpoint[num_bulk_in] = endpoint;
 769                                ++num_bulk_in;
 770                        }
 771                }
 772
 773                if (usb_endpoint_is_bulk_out(endpoint)) {
 774                        /* we found a bulk out endpoint */
 775                        dev_dbg(ddev, "found bulk out on endpoint %d\n", i);
 776                        if (num_bulk_out < MAX_NUM_PORTS) {
 777                                bulk_out_endpoint[num_bulk_out] = endpoint;
 778                                ++num_bulk_out;
 779                        }
 780                }
 781
 782                if (usb_endpoint_is_int_in(endpoint)) {
 783                        /* we found a interrupt in endpoint */
 784                        dev_dbg(ddev, "found interrupt in on endpoint %d\n", i);
 785                        if (num_interrupt_in < MAX_NUM_PORTS) {
 786                                interrupt_in_endpoint[num_interrupt_in] =
 787                                                endpoint;
 788                                ++num_interrupt_in;
 789                        }
 790                }
 791
 792                if (usb_endpoint_is_int_out(endpoint)) {
 793                        /* we found an interrupt out endpoint */
 794                        dev_dbg(ddev, "found interrupt out on endpoint %d\n", i);
 795                        if (num_interrupt_out < MAX_NUM_PORTS) {
 796                                interrupt_out_endpoint[num_interrupt_out] =
 797                                                endpoint;
 798                                ++num_interrupt_out;
 799                        }
 800                }
 801        }
 802
 803#if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
 804        /* BEGIN HORRIBLE HACK FOR PL2303 */
 805        /* this is needed due to the looney way its endpoints are set up */
 806        if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
 807             (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
 808            ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
 809             (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
 810            ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
 811             (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) ||
 812            ((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
 813             (le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) {
 814                if (interface != dev->actconfig->interface[0]) {
 815                        /* check out the endpoints of the other interface*/
 816                        iface_desc = dev->actconfig->interface[0]->cur_altsetting;
 817                        for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
 818                                endpoint = &iface_desc->endpoint[i].desc;
 819                                if (usb_endpoint_is_int_in(endpoint)) {
 820                                        /* we found a interrupt in endpoint */
 821                                        dev_dbg(ddev, "found interrupt in for Prolific device on separate interface\n");
 822                                        if (num_interrupt_in < MAX_NUM_PORTS) {
 823                                                interrupt_in_endpoint[num_interrupt_in] = endpoint;
 824                                                ++num_interrupt_in;
 825                                        }
 826                                }
 827                        }
 828                }
 829
 830                /* Now make sure the PL-2303 is configured correctly.
 831                 * If not, give up now and hope this hack will work
 832                 * properly during a later invocation of usb_serial_probe
 833                 */
 834                if (num_bulk_in == 0 || num_bulk_out == 0) {
 835                        dev_info(ddev, "PL-2303 hack: descriptors matched but endpoints did not\n");
 836                        usb_serial_put(serial);
 837                        module_put(type->driver.owner);
 838                        return -ENODEV;
 839                }
 840        }
 841        /* END HORRIBLE HACK FOR PL2303 */
 842#endif
 843
 844#ifdef CONFIG_USB_SERIAL_GENERIC
 845        if (type == &usb_serial_generic_device) {
 846                num_ports = num_bulk_out;
 847                if (num_ports == 0) {
 848                        dev_err(ddev, "Generic device with no bulk out, not allowed.\n");
 849                        usb_serial_put(serial);
 850                        module_put(type->driver.owner);
 851                        return -EIO;
 852                }
 853                dev_info(ddev, "The \"generic\" usb-serial driver is only for testing and one-off prototypes.\n");
 854                dev_info(ddev, "Tell linux-usb@vger.kernel.org to add your device to a proper driver.\n");
 855        }
 856#endif
 857        if (!num_ports) {
 858                /* if this device type has a calc_num_ports function, call it */
 859                if (type->calc_num_ports)
 860                        num_ports = type->calc_num_ports(serial);
 861                if (!num_ports)
 862                        num_ports = type->num_ports;
 863        }
 864
 865        if (num_ports > MAX_NUM_PORTS) {
 866                dev_warn(ddev, "too many ports requested: %d\n", num_ports);
 867                num_ports = MAX_NUM_PORTS;
 868        }
 869
 870        serial->num_ports = num_ports;
 871        serial->num_bulk_in = num_bulk_in;
 872        serial->num_bulk_out = num_bulk_out;
 873        serial->num_interrupt_in = num_interrupt_in;
 874        serial->num_interrupt_out = num_interrupt_out;
 875
 876        /* found all that we need */
 877        dev_info(ddev, "%s converter detected\n", type->description);
 878
 879        /* create our ports, we need as many as the max endpoints */
 880        /* we don't use num_ports here because some devices have more
 881           endpoint pairs than ports */
 882        max_endpoints = max(num_bulk_in, num_bulk_out);
 883        max_endpoints = max(max_endpoints, num_interrupt_in);
 884        max_endpoints = max(max_endpoints, num_interrupt_out);
 885        max_endpoints = max(max_endpoints, (int)serial->num_ports);
 886        serial->num_port_pointers = max_endpoints;
 887
 888        dev_dbg(ddev, "setting up %d port structure(s)\n", max_endpoints);
 889        for (i = 0; i < max_endpoints; ++i) {
 890                port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
 891                if (!port)
 892                        goto probe_error;
 893                tty_port_init(&port->port);
 894                port->port.ops = &serial_port_ops;
 895                port->serial = serial;
 896                spin_lock_init(&port->lock);
 897                /* Keep this for private driver use for the moment but
 898                   should probably go away */
 899                INIT_WORK(&port->work, usb_serial_port_work);
 900                serial->port[i] = port;
 901                port->dev.parent = &interface->dev;
 902                port->dev.driver = NULL;
 903                port->dev.bus = &usb_serial_bus_type;
 904                port->dev.release = &usb_serial_port_release;
 905                device_initialize(&port->dev);
 906        }
 907
 908        /* set up the endpoint information */
 909        for (i = 0; i < num_bulk_in; ++i) {
 910                endpoint = bulk_in_endpoint[i];
 911                port = serial->port[i];
 912                buffer_size = max_t(int, serial->type->bulk_in_size,
 913                                usb_endpoint_maxp(endpoint));
 914                port->bulk_in_size = buffer_size;
 915                port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
 916
 917                for (j = 0; j < ARRAY_SIZE(port->read_urbs); ++j) {
 918                        set_bit(j, &port->read_urbs_free);
 919                        port->read_urbs[j] = usb_alloc_urb(0, GFP_KERNEL);
 920                        if (!port->read_urbs[j])
 921                                goto probe_error;
 922                        port->bulk_in_buffers[j] = kmalloc(buffer_size,
 923                                                                GFP_KERNEL);
 924                        if (!port->bulk_in_buffers[j])
 925                                goto probe_error;
 926                        usb_fill_bulk_urb(port->read_urbs[j], dev,
 927                                        usb_rcvbulkpipe(dev,
 928                                                endpoint->bEndpointAddress),
 929                                        port->bulk_in_buffers[j], buffer_size,
 930                                        serial->type->read_bulk_callback,
 931                                        port);
 932                }
 933
 934                port->read_urb = port->read_urbs[0];
 935                port->bulk_in_buffer = port->bulk_in_buffers[0];
 936        }
 937
 938        for (i = 0; i < num_bulk_out; ++i) {
 939                endpoint = bulk_out_endpoint[i];
 940                port = serial->port[i];
 941                if (kfifo_alloc(&port->write_fifo, PAGE_SIZE, GFP_KERNEL))
 942                        goto probe_error;
 943                buffer_size = max_t(int, serial->type->bulk_out_size,
 944                                                usb_endpoint_maxp(endpoint));
 945                port->bulk_out_size = buffer_size;
 946                port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
 947
 948                for (j = 0; j < ARRAY_SIZE(port->write_urbs); ++j) {
 949                        set_bit(j, &port->write_urbs_free);
 950                        port->write_urbs[j] = usb_alloc_urb(0, GFP_KERNEL);
 951                        if (!port->write_urbs[j])
 952                                goto probe_error;
 953                        port->bulk_out_buffers[j] = kmalloc(buffer_size,
 954                                                                GFP_KERNEL);
 955                        if (!port->bulk_out_buffers[j])
 956                                goto probe_error;
 957                        usb_fill_bulk_urb(port->write_urbs[j], dev,
 958                                        usb_sndbulkpipe(dev,
 959                                                endpoint->bEndpointAddress),
 960                                        port->bulk_out_buffers[j], buffer_size,
 961                                        serial->type->write_bulk_callback,
 962                                        port);
 963                }
 964
 965                port->write_urb = port->write_urbs[0];
 966                port->bulk_out_buffer = port->bulk_out_buffers[0];
 967        }
 968
 969        if (serial->type->read_int_callback) {
 970                for (i = 0; i < num_interrupt_in; ++i) {
 971                        endpoint = interrupt_in_endpoint[i];
 972                        port = serial->port[i];
 973                        port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
 974                        if (!port->interrupt_in_urb)
 975                                goto probe_error;
 976                        buffer_size = usb_endpoint_maxp(endpoint);
 977                        port->interrupt_in_endpointAddress =
 978                                                endpoint->bEndpointAddress;
 979                        port->interrupt_in_buffer = kmalloc(buffer_size,
 980                                                                GFP_KERNEL);
 981                        if (!port->interrupt_in_buffer)
 982                                goto probe_error;
 983                        usb_fill_int_urb(port->interrupt_in_urb, dev,
 984                                usb_rcvintpipe(dev,
 985                                                endpoint->bEndpointAddress),
 986                                port->interrupt_in_buffer, buffer_size,
 987                                serial->type->read_int_callback, port,
 988                                endpoint->bInterval);
 989                }
 990        } else if (num_interrupt_in) {
 991                dev_dbg(ddev, "The device claims to support interrupt in transfers, but read_int_callback is not defined\n");
 992        }
 993
 994        if (serial->type->write_int_callback) {
 995                for (i = 0; i < num_interrupt_out; ++i) {
 996                        endpoint = interrupt_out_endpoint[i];
 997                        port = serial->port[i];
 998                        port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
 999                        if (!port->interrupt_out_urb)
1000                                goto probe_error;
1001                        buffer_size = usb_endpoint_maxp(endpoint);
1002                        port->interrupt_out_size = buffer_size;
1003                        port->interrupt_out_endpointAddress =
1004                                                endpoint->bEndpointAddress;
1005                        port->interrupt_out_buffer = kmalloc(buffer_size,
1006                                                                GFP_KERNEL);
1007                        if (!port->interrupt_out_buffer)
1008                                goto probe_error;
1009                        usb_fill_int_urb(port->interrupt_out_urb, dev,
1010                                usb_sndintpipe(dev,
1011                                                  endpoint->bEndpointAddress),
1012                                port->interrupt_out_buffer, buffer_size,
1013                                serial->type->write_int_callback, port,
1014                                endpoint->bInterval);
1015                }
1016        } else if (num_interrupt_out) {
1017                dev_dbg(ddev, "The device claims to support interrupt out transfers, but write_int_callback is not defined\n");
1018        }
1019
1020        usb_set_intfdata(interface, serial);
1021
1022        /* if this device type has an attach function, call it */
1023        if (type->attach) {
1024                retval = type->attach(serial);
1025                if (retval < 0)
1026                        goto probe_error;
1027                serial->attached = 1;
1028                if (retval > 0) {
1029                        /* quietly accept this device, but don't bind to a
1030                           serial port as it's about to disappear */
1031                        serial->num_ports = 0;
1032                        goto exit;
1033                }
1034        } else {
1035                serial->attached = 1;
1036        }
1037
1038        /* Avoid race with tty_open and serial_install by setting the
1039         * disconnected flag and not clearing it until all ports have been
1040         * registered.
1041         */
1042        serial->disconnected = 1;
1043
1044        if (allocate_minors(serial, num_ports)) {
1045                dev_err(ddev, "No more free serial minor numbers\n");
1046                goto probe_error;
1047        }
1048
1049        /* register all of the individual ports with the driver core */
1050        for (i = 0; i < num_ports; ++i) {
1051                port = serial->port[i];
1052                dev_set_name(&port->dev, "ttyUSB%d", port->minor);
1053                dev_dbg(ddev, "registering %s\n", dev_name(&port->dev));
1054                device_enable_async_suspend(&port->dev);
1055
1056                retval = device_add(&port->dev);
1057                if (retval)
1058                        dev_err(ddev, "Error registering port device, continuing\n");
1059        }
1060
1061        serial->disconnected = 0;
1062
1063        usb_serial_console_init(serial->port[0]->minor);
1064exit:
1065        module_put(type->driver.owner);
1066        return 0;
1067
1068probe_error:
1069        usb_serial_put(serial);
1070        module_put(type->driver.owner);
1071        return -EIO;
1072}
1073
1074static void usb_serial_disconnect(struct usb_interface *interface)
1075{
1076        int i;
1077        struct usb_serial *serial = usb_get_intfdata(interface);
1078        struct device *dev = &interface->dev;
1079        struct usb_serial_port *port;
1080        struct tty_struct *tty;
1081
1082        usb_serial_console_disconnect(serial);
1083
1084        mutex_lock(&serial->disc_mutex);
1085        /* must set a flag, to signal subdrivers */
1086        serial->disconnected = 1;
1087        mutex_unlock(&serial->disc_mutex);
1088
1089        for (i = 0; i < serial->num_ports; ++i) {
1090                port = serial->port[i];
1091                tty = tty_port_tty_get(&port->port);
1092                if (tty) {
1093                        tty_vhangup(tty);
1094                        tty_kref_put(tty);
1095                }
1096                usb_serial_port_poison_urbs(port);
1097                wake_up_interruptible(&port->port.delta_msr_wait);
1098                cancel_work_sync(&port->work);
1099                if (device_is_registered(&port->dev))
1100                        device_del(&port->dev);
1101        }
1102        if (serial->type->disconnect)
1103                serial->type->disconnect(serial);
1104
1105        /* let the last holder of this object cause it to be cleaned up */
1106        usb_serial_put(serial);
1107        dev_info(dev, "device disconnected\n");
1108}
1109
1110int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
1111{
1112        struct usb_serial *serial = usb_get_intfdata(intf);
1113        int i, r = 0;
1114
1115        serial->suspending = 1;
1116
1117        /*
1118         * serial->type->suspend() MUST return 0 in system sleep context,
1119         * otherwise, the resume callback has to recover device from
1120         * previous suspend failure.
1121         */
1122        if (serial->type->suspend) {
1123                r = serial->type->suspend(serial, message);
1124                if (r < 0) {
1125                        serial->suspending = 0;
1126                        goto err_out;
1127                }
1128        }
1129
1130        for (i = 0; i < serial->num_ports; ++i)
1131                usb_serial_port_poison_urbs(serial->port[i]);
1132err_out:
1133        return r;
1134}
1135EXPORT_SYMBOL(usb_serial_suspend);
1136
1137static void usb_serial_unpoison_port_urbs(struct usb_serial *serial)
1138{
1139        int i;
1140
1141        for (i = 0; i < serial->num_ports; ++i)
1142                usb_serial_port_unpoison_urbs(serial->port[i]);
1143}
1144
1145int usb_serial_resume(struct usb_interface *intf)
1146{
1147        struct usb_serial *serial = usb_get_intfdata(intf);
1148        int rv;
1149
1150        usb_serial_unpoison_port_urbs(serial);
1151
1152        serial->suspending = 0;
1153        if (serial->type->resume)
1154                rv = serial->type->resume(serial);
1155        else
1156                rv = usb_serial_generic_resume(serial);
1157
1158        return rv;
1159}
1160EXPORT_SYMBOL(usb_serial_resume);
1161
1162static int usb_serial_reset_resume(struct usb_interface *intf)
1163{
1164        struct usb_serial *serial = usb_get_intfdata(intf);
1165        int rv;
1166
1167        usb_serial_unpoison_port_urbs(serial);
1168
1169        serial->suspending = 0;
1170        if (serial->type->reset_resume) {
1171                rv = serial->type->reset_resume(serial);
1172        } else {
1173                rv = -EOPNOTSUPP;
1174                intf->needs_binding = 1;
1175        }
1176
1177        return rv;
1178}
1179
1180static const struct tty_operations serial_ops = {
1181        .open =                 serial_open,
1182        .close =                serial_close,
1183        .write =                serial_write,
1184        .hangup =               serial_hangup,
1185        .write_room =           serial_write_room,
1186        .ioctl =                serial_ioctl,
1187        .set_termios =          serial_set_termios,
1188        .throttle =             serial_throttle,
1189        .unthrottle =           serial_unthrottle,
1190        .break_ctl =            serial_break,
1191        .chars_in_buffer =      serial_chars_in_buffer,
1192        .wait_until_sent =      serial_wait_until_sent,
1193        .tiocmget =             serial_tiocmget,
1194        .tiocmset =             serial_tiocmset,
1195        .get_icount =           serial_get_icount,
1196        .cleanup =              serial_cleanup,
1197        .install =              serial_install,
1198        .proc_fops =            &serial_proc_fops,
1199};
1200
1201
1202struct tty_driver *usb_serial_tty_driver;
1203
1204/* Driver structure we register with the USB core */
1205static struct usb_driver usb_serial_driver = {
1206        .name =         "usbserial",
1207        .probe =        usb_serial_probe,
1208        .disconnect =   usb_serial_disconnect,
1209        .suspend =      usb_serial_suspend,
1210        .resume =       usb_serial_resume,
1211        .no_dynamic_id =        1,
1212        .supports_autosuspend = 1,
1213};
1214
1215static int __init usb_serial_init(void)
1216{
1217        int result;
1218
1219        usb_serial_tty_driver = alloc_tty_driver(USB_SERIAL_TTY_MINORS);
1220        if (!usb_serial_tty_driver)
1221                return -ENOMEM;
1222
1223        /* Initialize our global data */
1224        result = bus_register(&usb_serial_bus_type);
1225        if (result) {
1226                pr_err("%s - registering bus driver failed\n", __func__);
1227                goto exit_bus;
1228        }
1229
1230        usb_serial_tty_driver->driver_name = "usbserial";
1231        usb_serial_tty_driver->name = "ttyUSB";
1232        usb_serial_tty_driver->major = USB_SERIAL_TTY_MAJOR;
1233        usb_serial_tty_driver->minor_start = 0;
1234        usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1235        usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1236        usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW |
1237                                                TTY_DRIVER_DYNAMIC_DEV;
1238        usb_serial_tty_driver->init_termios = tty_std_termios;
1239        usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD
1240                                                        | HUPCL | CLOCAL;
1241        usb_serial_tty_driver->init_termios.c_ispeed = 9600;
1242        usb_serial_tty_driver->init_termios.c_ospeed = 9600;
1243        tty_set_operations(usb_serial_tty_driver, &serial_ops);
1244        result = tty_register_driver(usb_serial_tty_driver);
1245        if (result) {
1246                pr_err("%s - tty_register_driver failed\n", __func__);
1247                goto exit_reg_driver;
1248        }
1249
1250        /* register the USB driver */
1251        result = usb_register(&usb_serial_driver);
1252        if (result < 0) {
1253                pr_err("%s - usb_register failed\n", __func__);
1254                goto exit_tty;
1255        }
1256
1257        /* register the generic driver, if we should */
1258        result = usb_serial_generic_register();
1259        if (result < 0) {
1260                pr_err("%s - registering generic driver failed\n", __func__);
1261                goto exit_generic;
1262        }
1263
1264        return result;
1265
1266exit_generic:
1267        usb_deregister(&usb_serial_driver);
1268
1269exit_tty:
1270        tty_unregister_driver(usb_serial_tty_driver);
1271
1272exit_reg_driver:
1273        bus_unregister(&usb_serial_bus_type);
1274
1275exit_bus:
1276        pr_err("%s - returning with error %d\n", __func__, result);
1277        put_tty_driver(usb_serial_tty_driver);
1278        return result;
1279}
1280
1281
1282static void __exit usb_serial_exit(void)
1283{
1284        usb_serial_console_exit();
1285
1286        usb_serial_generic_deregister();
1287
1288        usb_deregister(&usb_serial_driver);
1289        tty_unregister_driver(usb_serial_tty_driver);
1290        put_tty_driver(usb_serial_tty_driver);
1291        bus_unregister(&usb_serial_bus_type);
1292}
1293
1294
1295module_init(usb_serial_init);
1296module_exit(usb_serial_exit);
1297
1298#define set_to_generic_if_null(type, function)                          \
1299        do {                                                            \
1300                if (!type->function) {                                  \
1301                        type->function = usb_serial_generic_##function; \
1302                        pr_debug("%s: using generic " #function "\n",   \
1303                                                type->driver.name);     \
1304                }                                                       \
1305        } while (0)
1306
1307static void usb_serial_operations_init(struct usb_serial_driver *device)
1308{
1309        set_to_generic_if_null(device, open);
1310        set_to_generic_if_null(device, write);
1311        set_to_generic_if_null(device, close);
1312        set_to_generic_if_null(device, write_room);
1313        set_to_generic_if_null(device, chars_in_buffer);
1314        if (device->tx_empty)
1315                set_to_generic_if_null(device, wait_until_sent);
1316        set_to_generic_if_null(device, read_bulk_callback);
1317        set_to_generic_if_null(device, write_bulk_callback);
1318        set_to_generic_if_null(device, process_read_urb);
1319        set_to_generic_if_null(device, prepare_write_buffer);
1320}
1321
1322static int usb_serial_register(struct usb_serial_driver *driver)
1323{
1324        int retval;
1325
1326        if (usb_disabled())
1327                return -ENODEV;
1328
1329        if (!driver->description)
1330                driver->description = driver->driver.name;
1331        if (!driver->usb_driver) {
1332                WARN(1, "Serial driver %s has no usb_driver\n",
1333                                driver->description);
1334                return -EINVAL;
1335        }
1336
1337        usb_serial_operations_init(driver);
1338
1339        /* Add this device to our list of devices */
1340        mutex_lock(&table_lock);
1341        list_add(&driver->driver_list, &usb_serial_driver_list);
1342
1343        retval = usb_serial_bus_register(driver);
1344        if (retval) {
1345                pr_err("problem %d when registering driver %s\n", retval, driver->description);
1346                list_del(&driver->driver_list);
1347        } else {
1348                pr_info("USB Serial support registered for %s\n", driver->description);
1349        }
1350        mutex_unlock(&table_lock);
1351        return retval;
1352}
1353
1354static void usb_serial_deregister(struct usb_serial_driver *device)
1355{
1356        pr_info("USB Serial deregistering driver %s\n", device->description);
1357
1358        mutex_lock(&table_lock);
1359        list_del(&device->driver_list);
1360        mutex_unlock(&table_lock);
1361
1362        usb_serial_bus_deregister(device);
1363}
1364
1365/**
1366 * usb_serial_register_drivers - register drivers for a usb-serial module
1367 * @serial_drivers: NULL-terminated array of pointers to drivers to be registered
1368 * @name: name of the usb_driver for this set of @serial_drivers
1369 * @id_table: list of all devices this @serial_drivers set binds to
1370 *
1371 * Registers all the drivers in the @serial_drivers array, and dynamically
1372 * creates a struct usb_driver with the name @name and id_table of @id_table.
1373 */
1374int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[],
1375                                const char *name,
1376                                const struct usb_device_id *id_table)
1377{
1378        int rc;
1379        struct usb_driver *udriver;
1380        struct usb_serial_driver * const *sd;
1381
1382        /*
1383         * udriver must be registered before any of the serial drivers,
1384         * because the store_new_id() routine for the serial drivers (in
1385         * bus.c) probes udriver.
1386         *
1387         * Performance hack: We don't want udriver to be probed until
1388         * the serial drivers are registered, because the probe would
1389         * simply fail for lack of a matching serial driver.
1390         * So we leave udriver's id_table set to NULL until we are all set.
1391         *
1392         * Suspend/resume support is implemented in the usb-serial core,
1393         * so fill in the PM-related fields in udriver.
1394         */
1395        udriver = kzalloc(sizeof(*udriver), GFP_KERNEL);
1396        if (!udriver)
1397                return -ENOMEM;
1398
1399        udriver->name = name;
1400        udriver->no_dynamic_id = 1;
1401        udriver->supports_autosuspend = 1;
1402        udriver->suspend = usb_serial_suspend;
1403        udriver->resume = usb_serial_resume;
1404        udriver->probe = usb_serial_probe;
1405        udriver->disconnect = usb_serial_disconnect;
1406
1407        /* we only set the reset_resume field if the serial_driver has one */
1408        for (sd = serial_drivers; *sd; ++sd) {
1409                if ((*sd)->reset_resume) {
1410                        udriver->reset_resume = usb_serial_reset_resume;
1411                        break;
1412                }
1413        }
1414
1415        rc = usb_register(udriver);
1416        if (rc)
1417                return rc;
1418
1419        for (sd = serial_drivers; *sd; ++sd) {
1420                (*sd)->usb_driver = udriver;
1421                rc = usb_serial_register(*sd);
1422                if (rc)
1423                        goto failed;
1424        }
1425
1426        /* Now set udriver's id_table and look for matches */
1427        udriver->id_table = id_table;
1428        rc = driver_attach(&udriver->drvwrap.driver);
1429        return 0;
1430
1431 failed:
1432        while (sd-- > serial_drivers)
1433                usb_serial_deregister(*sd);
1434        usb_deregister(udriver);
1435        return rc;
1436}
1437EXPORT_SYMBOL_GPL(usb_serial_register_drivers);
1438
1439/**
1440 * usb_serial_deregister_drivers - deregister drivers for a usb-serial module
1441 * @serial_drivers: NULL-terminated array of pointers to drivers to be deregistered
1442 *
1443 * Deregisters all the drivers in the @serial_drivers array and deregisters and
1444 * frees the struct usb_driver that was created by the call to
1445 * usb_serial_register_drivers().
1446 */
1447void usb_serial_deregister_drivers(struct usb_serial_driver *const serial_drivers[])
1448{
1449        struct usb_driver *udriver = (*serial_drivers)->usb_driver;
1450
1451        for (; *serial_drivers; ++serial_drivers)
1452                usb_serial_deregister(*serial_drivers);
1453        usb_deregister(udriver);
1454        kfree(udriver);
1455}
1456EXPORT_SYMBOL_GPL(usb_serial_deregister_drivers);
1457
1458MODULE_AUTHOR(DRIVER_AUTHOR);
1459MODULE_DESCRIPTION(DRIVER_DESC);
1460MODULE_LICENSE("GPL");
1461