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