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                        bulk_in_endpoint[num_bulk_in] = endpoint;
 768                        ++num_bulk_in;
 769                }
 770
 771                if (usb_endpoint_is_bulk_out(endpoint)) {
 772                        /* we found a bulk out endpoint */
 773                        dev_dbg(ddev, "found bulk out on endpoint %d\n", i);
 774                        bulk_out_endpoint[num_bulk_out] = endpoint;
 775                        ++num_bulk_out;
 776                }
 777
 778                if (usb_endpoint_is_int_in(endpoint)) {
 779                        /* we found a interrupt in endpoint */
 780                        dev_dbg(ddev, "found interrupt in on endpoint %d\n", i);
 781                        interrupt_in_endpoint[num_interrupt_in] = endpoint;
 782                        ++num_interrupt_in;
 783                }
 784
 785                if (usb_endpoint_is_int_out(endpoint)) {
 786                        /* we found an interrupt out endpoint */
 787                        dev_dbg(ddev, "found interrupt out on endpoint %d\n", i);
 788                        interrupt_out_endpoint[num_interrupt_out] = endpoint;
 789                        ++num_interrupt_out;
 790                }
 791        }
 792
 793#if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
 794        /* BEGIN HORRIBLE HACK FOR PL2303 */
 795        /* this is needed due to the looney way its endpoints are set up */
 796        if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
 797             (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
 798            ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
 799             (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
 800            ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
 801             (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) ||
 802            ((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
 803             (le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) {
 804                if (interface != dev->actconfig->interface[0]) {
 805                        /* check out the endpoints of the other interface*/
 806                        iface_desc = dev->actconfig->interface[0]->cur_altsetting;
 807                        for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
 808                                endpoint = &iface_desc->endpoint[i].desc;
 809                                if (usb_endpoint_is_int_in(endpoint)) {
 810                                        /* we found a interrupt in endpoint */
 811                                        dev_dbg(ddev, "found interrupt in for Prolific device on separate interface\n");
 812                                        interrupt_in_endpoint[num_interrupt_in] = endpoint;
 813                                        ++num_interrupt_in;
 814                                }
 815                        }
 816                }
 817
 818                /* Now make sure the PL-2303 is configured correctly.
 819                 * If not, give up now and hope this hack will work
 820                 * properly during a later invocation of usb_serial_probe
 821                 */
 822                if (num_bulk_in == 0 || num_bulk_out == 0) {
 823                        dev_info(ddev, "PL-2303 hack: descriptors matched but endpoints did not\n");
 824                        usb_serial_put(serial);
 825                        module_put(type->driver.owner);
 826                        return -ENODEV;
 827                }
 828        }
 829        /* END HORRIBLE HACK FOR PL2303 */
 830#endif
 831
 832#ifdef CONFIG_USB_SERIAL_GENERIC
 833        if (type == &usb_serial_generic_device) {
 834                num_ports = num_bulk_out;
 835                if (num_ports == 0) {
 836                        dev_err(ddev, "Generic device with no bulk out, not allowed.\n");
 837                        usb_serial_put(serial);
 838                        module_put(type->driver.owner);
 839                        return -EIO;
 840                }
 841                dev_info(ddev, "The \"generic\" usb-serial driver is only for testing and one-off prototypes.\n");
 842                dev_info(ddev, "Tell linux-usb@vger.kernel.org to add your device to a proper driver.\n");
 843        }
 844#endif
 845        if (!num_ports) {
 846                /* if this device type has a calc_num_ports function, call it */
 847                if (type->calc_num_ports)
 848                        num_ports = type->calc_num_ports(serial);
 849                if (!num_ports)
 850                        num_ports = type->num_ports;
 851        }
 852
 853        serial->num_ports = num_ports;
 854        serial->num_bulk_in = num_bulk_in;
 855        serial->num_bulk_out = num_bulk_out;
 856        serial->num_interrupt_in = num_interrupt_in;
 857        serial->num_interrupt_out = num_interrupt_out;
 858
 859        /* found all that we need */
 860        dev_info(ddev, "%s converter detected\n", type->description);
 861
 862        /* create our ports, we need as many as the max endpoints */
 863        /* we don't use num_ports here because some devices have more
 864           endpoint pairs than ports */
 865        max_endpoints = max(num_bulk_in, num_bulk_out);
 866        max_endpoints = max(max_endpoints, num_interrupt_in);
 867        max_endpoints = max(max_endpoints, num_interrupt_out);
 868        max_endpoints = max(max_endpoints, (int)serial->num_ports);
 869        serial->num_port_pointers = max_endpoints;
 870
 871        dev_dbg(ddev, "setting up %d port structure(s)\n", max_endpoints);
 872        for (i = 0; i < max_endpoints; ++i) {
 873                port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
 874                if (!port)
 875                        goto probe_error;
 876                tty_port_init(&port->port);
 877                port->port.ops = &serial_port_ops;
 878                port->serial = serial;
 879                spin_lock_init(&port->lock);
 880                /* Keep this for private driver use for the moment but
 881                   should probably go away */
 882                INIT_WORK(&port->work, usb_serial_port_work);
 883                serial->port[i] = port;
 884                port->dev.parent = &interface->dev;
 885                port->dev.driver = NULL;
 886                port->dev.bus = &usb_serial_bus_type;
 887                port->dev.release = &usb_serial_port_release;
 888                device_initialize(&port->dev);
 889        }
 890
 891        /* set up the endpoint information */
 892        for (i = 0; i < num_bulk_in; ++i) {
 893                endpoint = bulk_in_endpoint[i];
 894                port = serial->port[i];
 895                buffer_size = max_t(int, serial->type->bulk_in_size,
 896                                usb_endpoint_maxp(endpoint));
 897                port->bulk_in_size = buffer_size;
 898                port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
 899
 900                for (j = 0; j < ARRAY_SIZE(port->read_urbs); ++j) {
 901                        set_bit(j, &port->read_urbs_free);
 902                        port->read_urbs[j] = usb_alloc_urb(0, GFP_KERNEL);
 903                        if (!port->read_urbs[j])
 904                                goto probe_error;
 905                        port->bulk_in_buffers[j] = kmalloc(buffer_size,
 906                                                                GFP_KERNEL);
 907                        if (!port->bulk_in_buffers[j])
 908                                goto probe_error;
 909                        usb_fill_bulk_urb(port->read_urbs[j], dev,
 910                                        usb_rcvbulkpipe(dev,
 911                                                endpoint->bEndpointAddress),
 912                                        port->bulk_in_buffers[j], buffer_size,
 913                                        serial->type->read_bulk_callback,
 914                                        port);
 915                }
 916
 917                port->read_urb = port->read_urbs[0];
 918                port->bulk_in_buffer = port->bulk_in_buffers[0];
 919        }
 920
 921        for (i = 0; i < num_bulk_out; ++i) {
 922                endpoint = bulk_out_endpoint[i];
 923                port = serial->port[i];
 924                if (kfifo_alloc(&port->write_fifo, PAGE_SIZE, GFP_KERNEL))
 925                        goto probe_error;
 926                buffer_size = max_t(int, serial->type->bulk_out_size,
 927                                                usb_endpoint_maxp(endpoint));
 928                port->bulk_out_size = buffer_size;
 929                port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
 930
 931                for (j = 0; j < ARRAY_SIZE(port->write_urbs); ++j) {
 932                        set_bit(j, &port->write_urbs_free);
 933                        port->write_urbs[j] = usb_alloc_urb(0, GFP_KERNEL);
 934                        if (!port->write_urbs[j])
 935                                goto probe_error;
 936                        port->bulk_out_buffers[j] = kmalloc(buffer_size,
 937                                                                GFP_KERNEL);
 938                        if (!port->bulk_out_buffers[j])
 939                                goto probe_error;
 940                        usb_fill_bulk_urb(port->write_urbs[j], dev,
 941                                        usb_sndbulkpipe(dev,
 942                                                endpoint->bEndpointAddress),
 943                                        port->bulk_out_buffers[j], buffer_size,
 944                                        serial->type->write_bulk_callback,
 945                                        port);
 946                }
 947
 948                port->write_urb = port->write_urbs[0];
 949                port->bulk_out_buffer = port->bulk_out_buffers[0];
 950        }
 951
 952        if (serial->type->read_int_callback) {
 953                for (i = 0; i < num_interrupt_in; ++i) {
 954                        endpoint = interrupt_in_endpoint[i];
 955                        port = serial->port[i];
 956                        port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
 957                        if (!port->interrupt_in_urb)
 958                                goto probe_error;
 959                        buffer_size = usb_endpoint_maxp(endpoint);
 960                        port->interrupt_in_endpointAddress =
 961                                                endpoint->bEndpointAddress;
 962                        port->interrupt_in_buffer = kmalloc(buffer_size,
 963                                                                GFP_KERNEL);
 964                        if (!port->interrupt_in_buffer)
 965                                goto probe_error;
 966                        usb_fill_int_urb(port->interrupt_in_urb, dev,
 967                                usb_rcvintpipe(dev,
 968                                                endpoint->bEndpointAddress),
 969                                port->interrupt_in_buffer, buffer_size,
 970                                serial->type->read_int_callback, port,
 971                                endpoint->bInterval);
 972                }
 973        } else if (num_interrupt_in) {
 974                dev_dbg(ddev, "The device claims to support interrupt in transfers, but read_int_callback is not defined\n");
 975        }
 976
 977        if (serial->type->write_int_callback) {
 978                for (i = 0; i < num_interrupt_out; ++i) {
 979                        endpoint = interrupt_out_endpoint[i];
 980                        port = serial->port[i];
 981                        port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
 982                        if (!port->interrupt_out_urb)
 983                                goto probe_error;
 984                        buffer_size = usb_endpoint_maxp(endpoint);
 985                        port->interrupt_out_size = buffer_size;
 986                        port->interrupt_out_endpointAddress =
 987                                                endpoint->bEndpointAddress;
 988                        port->interrupt_out_buffer = kmalloc(buffer_size,
 989                                                                GFP_KERNEL);
 990                        if (!port->interrupt_out_buffer)
 991                                goto probe_error;
 992                        usb_fill_int_urb(port->interrupt_out_urb, dev,
 993                                usb_sndintpipe(dev,
 994                                                  endpoint->bEndpointAddress),
 995                                port->interrupt_out_buffer, buffer_size,
 996                                serial->type->write_int_callback, port,
 997                                endpoint->bInterval);
 998                }
 999        } else if (num_interrupt_out) {
1000                dev_dbg(ddev, "The device claims to support interrupt out transfers, but write_int_callback is not defined\n");
1001        }
1002
1003        usb_set_intfdata(interface, serial);
1004
1005        /* if this device type has an attach function, call it */
1006        if (type->attach) {
1007                retval = type->attach(serial);
1008                if (retval < 0)
1009                        goto probe_error;
1010                serial->attached = 1;
1011                if (retval > 0) {
1012                        /* quietly accept this device, but don't bind to a
1013                           serial port as it's about to disappear */
1014                        serial->num_ports = 0;
1015                        goto exit;
1016                }
1017        } else {
1018                serial->attached = 1;
1019        }
1020
1021        /* Avoid race with tty_open and serial_install by setting the
1022         * disconnected flag and not clearing it until all ports have been
1023         * registered.
1024         */
1025        serial->disconnected = 1;
1026
1027        if (allocate_minors(serial, num_ports)) {
1028                dev_err(ddev, "No more free serial minor numbers\n");
1029                goto probe_error;
1030        }
1031
1032        /* register all of the individual ports with the driver core */
1033        for (i = 0; i < num_ports; ++i) {
1034                port = serial->port[i];
1035                dev_set_name(&port->dev, "ttyUSB%d", port->minor);
1036                dev_dbg(ddev, "registering %s\n", dev_name(&port->dev));
1037                device_enable_async_suspend(&port->dev);
1038
1039                retval = device_add(&port->dev);
1040                if (retval)
1041                        dev_err(ddev, "Error registering port device, continuing\n");
1042        }
1043
1044        serial->disconnected = 0;
1045
1046        usb_serial_console_init(serial->port[0]->minor);
1047exit:
1048        module_put(type->driver.owner);
1049        return 0;
1050
1051probe_error:
1052        usb_serial_put(serial);
1053        module_put(type->driver.owner);
1054        return -EIO;
1055}
1056
1057static void usb_serial_disconnect(struct usb_interface *interface)
1058{
1059        int i;
1060        struct usb_serial *serial = usb_get_intfdata(interface);
1061        struct device *dev = &interface->dev;
1062        struct usb_serial_port *port;
1063
1064        usb_serial_console_disconnect(serial);
1065
1066        mutex_lock(&serial->disc_mutex);
1067        /* must set a flag, to signal subdrivers */
1068        serial->disconnected = 1;
1069        mutex_unlock(&serial->disc_mutex);
1070
1071        for (i = 0; i < serial->num_ports; ++i) {
1072                port = serial->port[i];
1073                if (port) {
1074                        struct tty_struct *tty = tty_port_tty_get(&port->port);
1075                        if (tty) {
1076                                tty_vhangup(tty);
1077                                tty_kref_put(tty);
1078                        }
1079                        usb_serial_port_poison_urbs(port);
1080                        wake_up_interruptible(&port->port.delta_msr_wait);
1081                        cancel_work_sync(&port->work);
1082                        if (device_is_registered(&port->dev))
1083                                device_del(&port->dev);
1084                }
1085        }
1086        if (serial->type->disconnect)
1087                serial->type->disconnect(serial);
1088
1089        /* let the last holder of this object cause it to be cleaned up */
1090        usb_serial_put(serial);
1091        dev_info(dev, "device disconnected\n");
1092}
1093
1094int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
1095{
1096        struct usb_serial *serial = usb_get_intfdata(intf);
1097        struct usb_serial_port *port;
1098        int i, r = 0;
1099
1100        serial->suspending = 1;
1101
1102        /*
1103         * serial->type->suspend() MUST return 0 in system sleep context,
1104         * otherwise, the resume callback has to recover device from
1105         * previous suspend failure.
1106         */
1107        if (serial->type->suspend) {
1108                r = serial->type->suspend(serial, message);
1109                if (r < 0) {
1110                        serial->suspending = 0;
1111                        goto err_out;
1112                }
1113        }
1114
1115        for (i = 0; i < serial->num_ports; ++i) {
1116                port = serial->port[i];
1117                if (port)
1118                        usb_serial_port_poison_urbs(port);
1119        }
1120
1121err_out:
1122        return r;
1123}
1124EXPORT_SYMBOL(usb_serial_suspend);
1125
1126static void usb_serial_unpoison_port_urbs(struct usb_serial *serial)
1127{
1128        struct usb_serial_port *port;
1129        int i;
1130
1131        for (i = 0; i < serial->num_ports; ++i) {
1132                port = serial->port[i];
1133                if (port)
1134                        usb_serial_port_unpoison_urbs(port);
1135        }
1136}
1137
1138int usb_serial_resume(struct usb_interface *intf)
1139{
1140        struct usb_serial *serial = usb_get_intfdata(intf);
1141        int rv;
1142
1143        usb_serial_unpoison_port_urbs(serial);
1144
1145        serial->suspending = 0;
1146        if (serial->type->resume)
1147                rv = serial->type->resume(serial);
1148        else
1149                rv = usb_serial_generic_resume(serial);
1150
1151        return rv;
1152}
1153EXPORT_SYMBOL(usb_serial_resume);
1154
1155static int usb_serial_reset_resume(struct usb_interface *intf)
1156{
1157        struct usb_serial *serial = usb_get_intfdata(intf);
1158        int rv;
1159
1160        usb_serial_unpoison_port_urbs(serial);
1161
1162        serial->suspending = 0;
1163        if (serial->type->reset_resume) {
1164                rv = serial->type->reset_resume(serial);
1165        } else {
1166                rv = -EOPNOTSUPP;
1167                intf->needs_binding = 1;
1168        }
1169
1170        return rv;
1171}
1172
1173static const struct tty_operations serial_ops = {
1174        .open =                 serial_open,
1175        .close =                serial_close,
1176        .write =                serial_write,
1177        .hangup =               serial_hangup,
1178        .write_room =           serial_write_room,
1179        .ioctl =                serial_ioctl,
1180        .set_termios =          serial_set_termios,
1181        .throttle =             serial_throttle,
1182        .unthrottle =           serial_unthrottle,
1183        .break_ctl =            serial_break,
1184        .chars_in_buffer =      serial_chars_in_buffer,
1185        .wait_until_sent =      serial_wait_until_sent,
1186        .tiocmget =             serial_tiocmget,
1187        .tiocmset =             serial_tiocmset,
1188        .get_icount =           serial_get_icount,
1189        .cleanup =              serial_cleanup,
1190        .install =              serial_install,
1191        .proc_fops =            &serial_proc_fops,
1192};
1193
1194
1195struct tty_driver *usb_serial_tty_driver;
1196
1197/* Driver structure we register with the USB core */
1198static struct usb_driver usb_serial_driver = {
1199        .name =         "usbserial",
1200        .probe =        usb_serial_probe,
1201        .disconnect =   usb_serial_disconnect,
1202        .suspend =      usb_serial_suspend,
1203        .resume =       usb_serial_resume,
1204        .no_dynamic_id =        1,
1205        .supports_autosuspend = 1,
1206};
1207
1208static int __init usb_serial_init(void)
1209{
1210        int result;
1211
1212        usb_serial_tty_driver = alloc_tty_driver(USB_SERIAL_TTY_MINORS);
1213        if (!usb_serial_tty_driver)
1214                return -ENOMEM;
1215
1216        /* Initialize our global data */
1217        result = bus_register(&usb_serial_bus_type);
1218        if (result) {
1219                pr_err("%s - registering bus driver failed\n", __func__);
1220                goto exit_bus;
1221        }
1222
1223        usb_serial_tty_driver->driver_name = "usbserial";
1224        usb_serial_tty_driver->name = "ttyUSB";
1225        usb_serial_tty_driver->major = USB_SERIAL_TTY_MAJOR;
1226        usb_serial_tty_driver->minor_start = 0;
1227        usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1228        usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1229        usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW |
1230                                                TTY_DRIVER_DYNAMIC_DEV;
1231        usb_serial_tty_driver->init_termios = tty_std_termios;
1232        usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD
1233                                                        | HUPCL | CLOCAL;
1234        usb_serial_tty_driver->init_termios.c_ispeed = 9600;
1235        usb_serial_tty_driver->init_termios.c_ospeed = 9600;
1236        tty_set_operations(usb_serial_tty_driver, &serial_ops);
1237        result = tty_register_driver(usb_serial_tty_driver);
1238        if (result) {
1239                pr_err("%s - tty_register_driver failed\n", __func__);
1240                goto exit_reg_driver;
1241        }
1242
1243        /* register the USB driver */
1244        result = usb_register(&usb_serial_driver);
1245        if (result < 0) {
1246                pr_err("%s - usb_register failed\n", __func__);
1247                goto exit_tty;
1248        }
1249
1250        /* register the generic driver, if we should */
1251        result = usb_serial_generic_register();
1252        if (result < 0) {
1253                pr_err("%s - registering generic driver failed\n", __func__);
1254                goto exit_generic;
1255        }
1256
1257        return result;
1258
1259exit_generic:
1260        usb_deregister(&usb_serial_driver);
1261
1262exit_tty:
1263        tty_unregister_driver(usb_serial_tty_driver);
1264
1265exit_reg_driver:
1266        bus_unregister(&usb_serial_bus_type);
1267
1268exit_bus:
1269        pr_err("%s - returning with error %d\n", __func__, result);
1270        put_tty_driver(usb_serial_tty_driver);
1271        return result;
1272}
1273
1274
1275static void __exit usb_serial_exit(void)
1276{
1277        usb_serial_console_exit();
1278
1279        usb_serial_generic_deregister();
1280
1281        usb_deregister(&usb_serial_driver);
1282        tty_unregister_driver(usb_serial_tty_driver);
1283        put_tty_driver(usb_serial_tty_driver);
1284        bus_unregister(&usb_serial_bus_type);
1285}
1286
1287
1288module_init(usb_serial_init);
1289module_exit(usb_serial_exit);
1290
1291#define set_to_generic_if_null(type, function)                          \
1292        do {                                                            \
1293                if (!type->function) {                                  \
1294                        type->function = usb_serial_generic_##function; \
1295                        pr_debug("%s: using generic " #function "\n",   \
1296                                                type->driver.name);     \
1297                }                                                       \
1298        } while (0)
1299
1300static void usb_serial_operations_init(struct usb_serial_driver *device)
1301{
1302        set_to_generic_if_null(device, open);
1303        set_to_generic_if_null(device, write);
1304        set_to_generic_if_null(device, close);
1305        set_to_generic_if_null(device, write_room);
1306        set_to_generic_if_null(device, chars_in_buffer);
1307        if (device->tx_empty)
1308                set_to_generic_if_null(device, wait_until_sent);
1309        set_to_generic_if_null(device, read_bulk_callback);
1310        set_to_generic_if_null(device, write_bulk_callback);
1311        set_to_generic_if_null(device, process_read_urb);
1312        set_to_generic_if_null(device, prepare_write_buffer);
1313}
1314
1315static int usb_serial_register(struct usb_serial_driver *driver)
1316{
1317        int retval;
1318
1319        if (usb_disabled())
1320                return -ENODEV;
1321
1322        if (!driver->description)
1323                driver->description = driver->driver.name;
1324        if (!driver->usb_driver) {
1325                WARN(1, "Serial driver %s has no usb_driver\n",
1326                                driver->description);
1327                return -EINVAL;
1328        }
1329
1330        usb_serial_operations_init(driver);
1331
1332        /* Add this device to our list of devices */
1333        mutex_lock(&table_lock);
1334        list_add(&driver->driver_list, &usb_serial_driver_list);
1335
1336        retval = usb_serial_bus_register(driver);
1337        if (retval) {
1338                pr_err("problem %d when registering driver %s\n", retval, driver->description);
1339                list_del(&driver->driver_list);
1340        } else {
1341                pr_info("USB Serial support registered for %s\n", driver->description);
1342        }
1343        mutex_unlock(&table_lock);
1344        return retval;
1345}
1346
1347static void usb_serial_deregister(struct usb_serial_driver *device)
1348{
1349        pr_info("USB Serial deregistering driver %s\n", device->description);
1350
1351        mutex_lock(&table_lock);
1352        list_del(&device->driver_list);
1353        mutex_unlock(&table_lock);
1354
1355        usb_serial_bus_deregister(device);
1356}
1357
1358/**
1359 * usb_serial_register_drivers - register drivers for a usb-serial module
1360 * @serial_drivers: NULL-terminated array of pointers to drivers to be registered
1361 * @name: name of the usb_driver for this set of @serial_drivers
1362 * @id_table: list of all devices this @serial_drivers set binds to
1363 *
1364 * Registers all the drivers in the @serial_drivers array, and dynamically
1365 * creates a struct usb_driver with the name @name and id_table of @id_table.
1366 */
1367int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[],
1368                                const char *name,
1369                                const struct usb_device_id *id_table)
1370{
1371        int rc;
1372        struct usb_driver *udriver;
1373        struct usb_serial_driver * const *sd;
1374
1375        /*
1376         * udriver must be registered before any of the serial drivers,
1377         * because the store_new_id() routine for the serial drivers (in
1378         * bus.c) probes udriver.
1379         *
1380         * Performance hack: We don't want udriver to be probed until
1381         * the serial drivers are registered, because the probe would
1382         * simply fail for lack of a matching serial driver.
1383         * So we leave udriver's id_table set to NULL until we are all set.
1384         *
1385         * Suspend/resume support is implemented in the usb-serial core,
1386         * so fill in the PM-related fields in udriver.
1387         */
1388        udriver = kzalloc(sizeof(*udriver), GFP_KERNEL);
1389        if (!udriver)
1390                return -ENOMEM;
1391
1392        udriver->name = name;
1393        udriver->no_dynamic_id = 1;
1394        udriver->supports_autosuspend = 1;
1395        udriver->suspend = usb_serial_suspend;
1396        udriver->resume = usb_serial_resume;
1397        udriver->probe = usb_serial_probe;
1398        udriver->disconnect = usb_serial_disconnect;
1399
1400        /* we only set the reset_resume field if the serial_driver has one */
1401        for (sd = serial_drivers; *sd; ++sd) {
1402                if ((*sd)->reset_resume) {
1403                        udriver->reset_resume = usb_serial_reset_resume;
1404                        break;
1405                }
1406        }
1407
1408        rc = usb_register(udriver);
1409        if (rc)
1410                return rc;
1411
1412        for (sd = serial_drivers; *sd; ++sd) {
1413                (*sd)->usb_driver = udriver;
1414                rc = usb_serial_register(*sd);
1415                if (rc)
1416                        goto failed;
1417        }
1418
1419        /* Now set udriver's id_table and look for matches */
1420        udriver->id_table = id_table;
1421        rc = driver_attach(&udriver->drvwrap.driver);
1422        return 0;
1423
1424 failed:
1425        while (sd-- > serial_drivers)
1426                usb_serial_deregister(*sd);
1427        usb_deregister(udriver);
1428        return rc;
1429}
1430EXPORT_SYMBOL_GPL(usb_serial_register_drivers);
1431
1432/**
1433 * usb_serial_deregister_drivers - deregister drivers for a usb-serial module
1434 * @serial_drivers: NULL-terminated array of pointers to drivers to be deregistered
1435 *
1436 * Deregisters all the drivers in the @serial_drivers array and deregisters and
1437 * frees the struct usb_driver that was created by the call to
1438 * usb_serial_register_drivers().
1439 */
1440void usb_serial_deregister_drivers(struct usb_serial_driver *const serial_drivers[])
1441{
1442        struct usb_driver *udriver = (*serial_drivers)->usb_driver;
1443
1444        for (; *serial_drivers; ++serial_drivers)
1445                usb_serial_deregister(*serial_drivers);
1446        usb_deregister(udriver);
1447        kfree(udriver);
1448}
1449EXPORT_SYMBOL_GPL(usb_serial_deregister_drivers);
1450
1451MODULE_AUTHOR(DRIVER_AUTHOR);
1452MODULE_DESCRIPTION(DRIVER_DESC);
1453MODULE_LICENSE("GPL");
1454