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