linux/drivers/usb/gadget/composite.c
<<
>>
Prefs
   1/*
   2 * composite.c - infrastructure for Composite USB Gadgets
   3 *
   4 * Copyright (C) 2006-2008 David Brownell
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License as published by
   8 * the Free Software Foundation; either version 2 of the License, or
   9 * (at your option) any later version.
  10 *
  11 * This program is distributed in the hope that it will be useful,
  12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 * GNU General Public License for more details.
  15 *
  16 * You should have received a copy of the GNU General Public License
  17 * along with this program; if not, write to the Free Software
  18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19 */
  20
  21/* #define VERBOSE_DEBUG */
  22
  23#include <linux/kallsyms.h>
  24#include <linux/kernel.h>
  25#include <linux/slab.h>
  26#include <linux/device.h>
  27#include <linux/utsname.h>
  28
  29#include <linux/usb/composite.h>
  30
  31
  32/*
  33 * The code in this file is utility code, used to build a gadget driver
  34 * from one or more "function" drivers, one or more "configuration"
  35 * objects, and a "usb_composite_driver" by gluing them together along
  36 * with the relevant device-wide data.
  37 */
  38
  39/* big enough to hold our biggest descriptor */
  40#define USB_BUFSIZ      1024
  41
  42static struct usb_composite_driver *composite;
  43static int (*composite_gadget_bind)(struct usb_composite_dev *cdev);
  44
  45/* Some systems will need runtime overrides for the  product identifiers
  46 * published in the device descriptor, either numbers or strings or both.
  47 * String parameters are in UTF-8 (superset of ASCII's 7 bit characters).
  48 */
  49
  50static ushort idVendor;
  51module_param(idVendor, ushort, 0);
  52MODULE_PARM_DESC(idVendor, "USB Vendor ID");
  53
  54static ushort idProduct;
  55module_param(idProduct, ushort, 0);
  56MODULE_PARM_DESC(idProduct, "USB Product ID");
  57
  58static ushort bcdDevice;
  59module_param(bcdDevice, ushort, 0);
  60MODULE_PARM_DESC(bcdDevice, "USB Device version (BCD)");
  61
  62static char *iManufacturer;
  63module_param(iManufacturer, charp, 0);
  64MODULE_PARM_DESC(iManufacturer, "USB Manufacturer string");
  65
  66static char *iProduct;
  67module_param(iProduct, charp, 0);
  68MODULE_PARM_DESC(iProduct, "USB Product string");
  69
  70static char *iSerialNumber;
  71module_param(iSerialNumber, charp, 0);
  72MODULE_PARM_DESC(iSerialNumber, "SerialNumber string");
  73
  74static char composite_manufacturer[50];
  75
  76/*-------------------------------------------------------------------------*/
  77
  78/**
  79 * usb_add_function() - add a function to a configuration
  80 * @config: the configuration
  81 * @function: the function being added
  82 * Context: single threaded during gadget setup
  83 *
  84 * After initialization, each configuration must have one or more
  85 * functions added to it.  Adding a function involves calling its @bind()
  86 * method to allocate resources such as interface and string identifiers
  87 * and endpoints.
  88 *
  89 * This function returns the value of the function's bind(), which is
  90 * zero for success else a negative errno value.
  91 */
  92int usb_add_function(struct usb_configuration *config,
  93                struct usb_function *function)
  94{
  95        int     value = -EINVAL;
  96
  97        DBG(config->cdev, "adding '%s'/%p to config '%s'/%p\n",
  98                        function->name, function,
  99                        config->label, config);
 100
 101        if (!function->set_alt || !function->disable)
 102                goto done;
 103
 104        function->config = config;
 105        list_add_tail(&function->list, &config->functions);
 106
 107        /* REVISIT *require* function->bind? */
 108        if (function->bind) {
 109                value = function->bind(config, function);
 110                if (value < 0) {
 111                        list_del(&function->list);
 112                        function->config = NULL;
 113                }
 114        } else
 115                value = 0;
 116
 117        /* We allow configurations that don't work at both speeds.
 118         * If we run into a lowspeed Linux system, treat it the same
 119         * as full speed ... it's the function drivers that will need
 120         * to avoid bulk and ISO transfers.
 121         */
 122        if (!config->fullspeed && function->descriptors)
 123                config->fullspeed = true;
 124        if (!config->highspeed && function->hs_descriptors)
 125                config->highspeed = true;
 126
 127done:
 128        if (value)
 129                DBG(config->cdev, "adding '%s'/%p --> %d\n",
 130                                function->name, function, value);
 131        return value;
 132}
 133
 134/**
 135 * usb_function_deactivate - prevent function and gadget enumeration
 136 * @function: the function that isn't yet ready to respond
 137 *
 138 * Blocks response of the gadget driver to host enumeration by
 139 * preventing the data line pullup from being activated.  This is
 140 * normally called during @bind() processing to change from the
 141 * initial "ready to respond" state, or when a required resource
 142 * becomes available.
 143 *
 144 * For example, drivers that serve as a passthrough to a userspace
 145 * daemon can block enumeration unless that daemon (such as an OBEX,
 146 * MTP, or print server) is ready to handle host requests.
 147 *
 148 * Not all systems support software control of their USB peripheral
 149 * data pullups.
 150 *
 151 * Returns zero on success, else negative errno.
 152 */
 153int usb_function_deactivate(struct usb_function *function)
 154{
 155        struct usb_composite_dev        *cdev = function->config->cdev;
 156        unsigned long                   flags;
 157        int                             status = 0;
 158
 159        spin_lock_irqsave(&cdev->lock, flags);
 160
 161        if (cdev->deactivations == 0)
 162                status = usb_gadget_disconnect(cdev->gadget);
 163        if (status == 0)
 164                cdev->deactivations++;
 165
 166        spin_unlock_irqrestore(&cdev->lock, flags);
 167        return status;
 168}
 169
 170/**
 171 * usb_function_activate - allow function and gadget enumeration
 172 * @function: function on which usb_function_activate() was called
 173 *
 174 * Reverses effect of usb_function_deactivate().  If no more functions
 175 * are delaying their activation, the gadget driver will respond to
 176 * host enumeration procedures.
 177 *
 178 * Returns zero on success, else negative errno.
 179 */
 180int usb_function_activate(struct usb_function *function)
 181{
 182        struct usb_composite_dev        *cdev = function->config->cdev;
 183        int                             status = 0;
 184
 185        spin_lock(&cdev->lock);
 186
 187        if (WARN_ON(cdev->deactivations == 0))
 188                status = -EINVAL;
 189        else {
 190                cdev->deactivations--;
 191                if (cdev->deactivations == 0)
 192                        status = usb_gadget_connect(cdev->gadget);
 193        }
 194
 195        spin_unlock(&cdev->lock);
 196        return status;
 197}
 198
 199/**
 200 * usb_interface_id() - allocate an unused interface ID
 201 * @config: configuration associated with the interface
 202 * @function: function handling the interface
 203 * Context: single threaded during gadget setup
 204 *
 205 * usb_interface_id() is called from usb_function.bind() callbacks to
 206 * allocate new interface IDs.  The function driver will then store that
 207 * ID in interface, association, CDC union, and other descriptors.  It
 208 * will also handle any control requests targeted at that interface,
 209 * particularly changing its altsetting via set_alt().  There may
 210 * also be class-specific or vendor-specific requests to handle.
 211 *
 212 * All interface identifier should be allocated using this routine, to
 213 * ensure that for example different functions don't wrongly assign
 214 * different meanings to the same identifier.  Note that since interface
 215 * identifiers are configuration-specific, functions used in more than
 216 * one configuration (or more than once in a given configuration) need
 217 * multiple versions of the relevant descriptors.
 218 *
 219 * Returns the interface ID which was allocated; or -ENODEV if no
 220 * more interface IDs can be allocated.
 221 */
 222int usb_interface_id(struct usb_configuration *config,
 223                struct usb_function *function)
 224{
 225        unsigned id = config->next_interface_id;
 226
 227        if (id < MAX_CONFIG_INTERFACES) {
 228                config->interface[id] = function;
 229                config->next_interface_id = id + 1;
 230                return id;
 231        }
 232        return -ENODEV;
 233}
 234
 235static int config_buf(struct usb_configuration *config,
 236                enum usb_device_speed speed, void *buf, u8 type)
 237{
 238        struct usb_config_descriptor    *c = buf;
 239        void                            *next = buf + USB_DT_CONFIG_SIZE;
 240        int                             len = USB_BUFSIZ - USB_DT_CONFIG_SIZE;
 241        struct usb_function             *f;
 242        int                             status;
 243
 244        /* write the config descriptor */
 245        c = buf;
 246        c->bLength = USB_DT_CONFIG_SIZE;
 247        c->bDescriptorType = type;
 248        /* wTotalLength is written later */
 249        c->bNumInterfaces = config->next_interface_id;
 250        c->bConfigurationValue = config->bConfigurationValue;
 251        c->iConfiguration = config->iConfiguration;
 252        c->bmAttributes = USB_CONFIG_ATT_ONE | config->bmAttributes;
 253        c->bMaxPower = config->bMaxPower ? : (CONFIG_USB_GADGET_VBUS_DRAW / 2);
 254
 255        /* There may be e.g. OTG descriptors */
 256        if (config->descriptors) {
 257                status = usb_descriptor_fillbuf(next, len,
 258                                config->descriptors);
 259                if (status < 0)
 260                        return status;
 261                len -= status;
 262                next += status;
 263        }
 264
 265        /* add each function's descriptors */
 266        list_for_each_entry(f, &config->functions, list) {
 267                struct usb_descriptor_header **descriptors;
 268
 269                if (speed == USB_SPEED_HIGH)
 270                        descriptors = f->hs_descriptors;
 271                else
 272                        descriptors = f->descriptors;
 273                if (!descriptors)
 274                        continue;
 275                status = usb_descriptor_fillbuf(next, len,
 276                        (const struct usb_descriptor_header **) descriptors);
 277                if (status < 0)
 278                        return status;
 279                len -= status;
 280                next += status;
 281        }
 282
 283        len = next - buf;
 284        c->wTotalLength = cpu_to_le16(len);
 285        return len;
 286}
 287
 288static int config_desc(struct usb_composite_dev *cdev, unsigned w_value)
 289{
 290        struct usb_gadget               *gadget = cdev->gadget;
 291        struct usb_configuration        *c;
 292        u8                              type = w_value >> 8;
 293        enum usb_device_speed           speed = USB_SPEED_UNKNOWN;
 294
 295        if (gadget_is_dualspeed(gadget)) {
 296                int                     hs = 0;
 297
 298                if (gadget->speed == USB_SPEED_HIGH)
 299                        hs = 1;
 300                if (type == USB_DT_OTHER_SPEED_CONFIG)
 301                        hs = !hs;
 302                if (hs)
 303                        speed = USB_SPEED_HIGH;
 304
 305        }
 306
 307        /* This is a lookup by config *INDEX* */
 308        w_value &= 0xff;
 309        list_for_each_entry(c, &cdev->configs, list) {
 310                /* ignore configs that won't work at this speed */
 311                if (speed == USB_SPEED_HIGH) {
 312                        if (!c->highspeed)
 313                                continue;
 314                } else {
 315                        if (!c->fullspeed)
 316                                continue;
 317                }
 318                if (w_value == 0)
 319                        return config_buf(c, speed, cdev->req->buf, type);
 320                w_value--;
 321        }
 322        return -EINVAL;
 323}
 324
 325static int count_configs(struct usb_composite_dev *cdev, unsigned type)
 326{
 327        struct usb_gadget               *gadget = cdev->gadget;
 328        struct usb_configuration        *c;
 329        unsigned                        count = 0;
 330        int                             hs = 0;
 331
 332        if (gadget_is_dualspeed(gadget)) {
 333                if (gadget->speed == USB_SPEED_HIGH)
 334                        hs = 1;
 335                if (type == USB_DT_DEVICE_QUALIFIER)
 336                        hs = !hs;
 337        }
 338        list_for_each_entry(c, &cdev->configs, list) {
 339                /* ignore configs that won't work at this speed */
 340                if (hs) {
 341                        if (!c->highspeed)
 342                                continue;
 343                } else {
 344                        if (!c->fullspeed)
 345                                continue;
 346                }
 347                count++;
 348        }
 349        return count;
 350}
 351
 352static void device_qual(struct usb_composite_dev *cdev)
 353{
 354        struct usb_qualifier_descriptor *qual = cdev->req->buf;
 355
 356        qual->bLength = sizeof(*qual);
 357        qual->bDescriptorType = USB_DT_DEVICE_QUALIFIER;
 358        /* POLICY: same bcdUSB and device type info at both speeds */
 359        qual->bcdUSB = cdev->desc.bcdUSB;
 360        qual->bDeviceClass = cdev->desc.bDeviceClass;
 361        qual->bDeviceSubClass = cdev->desc.bDeviceSubClass;
 362        qual->bDeviceProtocol = cdev->desc.bDeviceProtocol;
 363        /* ASSUME same EP0 fifo size at both speeds */
 364        qual->bMaxPacketSize0 = cdev->desc.bMaxPacketSize0;
 365        qual->bNumConfigurations = count_configs(cdev, USB_DT_DEVICE_QUALIFIER);
 366        qual->bRESERVED = 0;
 367}
 368
 369/*-------------------------------------------------------------------------*/
 370
 371static void reset_config(struct usb_composite_dev *cdev)
 372{
 373        struct usb_function             *f;
 374
 375        DBG(cdev, "reset config\n");
 376
 377        list_for_each_entry(f, &cdev->config->functions, list) {
 378                if (f->disable)
 379                        f->disable(f);
 380
 381                bitmap_zero(f->endpoints, 32);
 382        }
 383        cdev->config = NULL;
 384}
 385
 386static int set_config(struct usb_composite_dev *cdev,
 387                const struct usb_ctrlrequest *ctrl, unsigned number)
 388{
 389        struct usb_gadget       *gadget = cdev->gadget;
 390        struct usb_configuration *c = NULL;
 391        int                     result = -EINVAL;
 392        unsigned                power = gadget_is_otg(gadget) ? 8 : 100;
 393        int                     tmp;
 394
 395        if (cdev->config)
 396                reset_config(cdev);
 397
 398        if (number) {
 399                list_for_each_entry(c, &cdev->configs, list) {
 400                        if (c->bConfigurationValue == number) {
 401                                result = 0;
 402                                break;
 403                        }
 404                }
 405                if (result < 0)
 406                        goto done;
 407        } else
 408                result = 0;
 409
 410        INFO(cdev, "%s speed config #%d: %s\n",
 411                ({ char *speed;
 412                switch (gadget->speed) {
 413                case USB_SPEED_LOW:     speed = "low"; break;
 414                case USB_SPEED_FULL:    speed = "full"; break;
 415                case USB_SPEED_HIGH:    speed = "high"; break;
 416                default:                speed = "?"; break;
 417                } ; speed; }), number, c ? c->label : "unconfigured");
 418
 419        if (!c)
 420                goto done;
 421
 422        cdev->config = c;
 423
 424        /* Initialize all interfaces by setting them to altsetting zero. */
 425        for (tmp = 0; tmp < MAX_CONFIG_INTERFACES; tmp++) {
 426                struct usb_function     *f = c->interface[tmp];
 427                struct usb_descriptor_header **descriptors;
 428
 429                if (!f)
 430                        break;
 431
 432                /*
 433                 * Record which endpoints are used by the function. This is used
 434                 * to dispatch control requests targeted at that endpoint to the
 435                 * function's setup callback instead of the current
 436                 * configuration's setup callback.
 437                 */
 438                if (gadget->speed == USB_SPEED_HIGH)
 439                        descriptors = f->hs_descriptors;
 440                else
 441                        descriptors = f->descriptors;
 442
 443                for (; *descriptors; ++descriptors) {
 444                        struct usb_endpoint_descriptor *ep;
 445                        int addr;
 446
 447                        if ((*descriptors)->bDescriptorType != USB_DT_ENDPOINT)
 448                                continue;
 449
 450                        ep = (struct usb_endpoint_descriptor *)*descriptors;
 451                        addr = ((ep->bEndpointAddress & 0x80) >> 3)
 452                             |  (ep->bEndpointAddress & 0x0f);
 453                        set_bit(addr, f->endpoints);
 454                }
 455
 456                result = f->set_alt(f, tmp, 0);
 457                if (result < 0) {
 458                        DBG(cdev, "interface %d (%s/%p) alt 0 --> %d\n",
 459                                        tmp, f->name, f, result);
 460
 461                        reset_config(cdev);
 462                        goto done;
 463                }
 464
 465                if (result == USB_GADGET_DELAYED_STATUS) {
 466                        DBG(cdev,
 467                         "%s: interface %d (%s) requested delayed status\n",
 468                                        __func__, tmp, f->name);
 469                        cdev->delayed_status++;
 470                        DBG(cdev, "delayed_status count %d\n",
 471                                        cdev->delayed_status);
 472                }
 473        }
 474
 475        /* when we return, be sure our power usage is valid */
 476        power = c->bMaxPower ? (2 * c->bMaxPower) : CONFIG_USB_GADGET_VBUS_DRAW;
 477done:
 478        usb_gadget_vbus_draw(gadget, power);
 479        if (result >= 0 && cdev->delayed_status)
 480                result = USB_GADGET_DELAYED_STATUS;
 481        return result;
 482}
 483
 484/**
 485 * usb_add_config() - add a configuration to a device.
 486 * @cdev: wraps the USB gadget
 487 * @config: the configuration, with bConfigurationValue assigned
 488 * @bind: the configuration's bind function
 489 * Context: single threaded during gadget setup
 490 *
 491 * One of the main tasks of a composite @bind() routine is to
 492 * add each of the configurations it supports, using this routine.
 493 *
 494 * This function returns the value of the configuration's @bind(), which
 495 * is zero for success else a negative errno value.  Binding configurations
 496 * assigns global resources including string IDs, and per-configuration
 497 * resources such as interface IDs and endpoints.
 498 */
 499int usb_add_config(struct usb_composite_dev *cdev,
 500                struct usb_configuration *config,
 501                int (*bind)(struct usb_configuration *))
 502{
 503        int                             status = -EINVAL;
 504        struct usb_configuration        *c;
 505
 506        DBG(cdev, "adding config #%u '%s'/%p\n",
 507                        config->bConfigurationValue,
 508                        config->label, config);
 509
 510        if (!config->bConfigurationValue || !bind)
 511                goto done;
 512
 513        /* Prevent duplicate configuration identifiers */
 514        list_for_each_entry(c, &cdev->configs, list) {
 515                if (c->bConfigurationValue == config->bConfigurationValue) {
 516                        status = -EBUSY;
 517                        goto done;
 518                }
 519        }
 520
 521        config->cdev = cdev;
 522        list_add_tail(&config->list, &cdev->configs);
 523
 524        INIT_LIST_HEAD(&config->functions);
 525        config->next_interface_id = 0;
 526
 527        status = bind(config);
 528        if (status < 0) {
 529                list_del(&config->list);
 530                config->cdev = NULL;
 531        } else {
 532                unsigned        i;
 533
 534                DBG(cdev, "cfg %d/%p speeds:%s%s\n",
 535                        config->bConfigurationValue, config,
 536                        config->highspeed ? " high" : "",
 537                        config->fullspeed
 538                                ? (gadget_is_dualspeed(cdev->gadget)
 539                                        ? " full"
 540                                        : " full/low")
 541                                : "");
 542
 543                for (i = 0; i < MAX_CONFIG_INTERFACES; i++) {
 544                        struct usb_function     *f = config->interface[i];
 545
 546                        if (!f)
 547                                continue;
 548                        DBG(cdev, "  interface %d = %s/%p\n",
 549                                i, f->name, f);
 550                }
 551        }
 552
 553        /* set_alt(), or next bind(), sets up
 554         * ep->driver_data as needed.
 555         */
 556        usb_ep_autoconfig_reset(cdev->gadget);
 557
 558done:
 559        if (status)
 560                DBG(cdev, "added config '%s'/%u --> %d\n", config->label,
 561                                config->bConfigurationValue, status);
 562        return status;
 563}
 564
 565/*-------------------------------------------------------------------------*/
 566
 567/* We support strings in multiple languages ... string descriptor zero
 568 * says which languages are supported.  The typical case will be that
 569 * only one language (probably English) is used, with I18N handled on
 570 * the host side.
 571 */
 572
 573static void collect_langs(struct usb_gadget_strings **sp, __le16 *buf)
 574{
 575        const struct usb_gadget_strings *s;
 576        u16                             language;
 577        __le16                          *tmp;
 578
 579        while (*sp) {
 580                s = *sp;
 581                language = cpu_to_le16(s->language);
 582                for (tmp = buf; *tmp && tmp < &buf[126]; tmp++) {
 583                        if (*tmp == language)
 584                                goto repeat;
 585                }
 586                *tmp++ = language;
 587repeat:
 588                sp++;
 589        }
 590}
 591
 592static int lookup_string(
 593        struct usb_gadget_strings       **sp,
 594        void                            *buf,
 595        u16                             language,
 596        int                             id
 597)
 598{
 599        struct usb_gadget_strings       *s;
 600        int                             value;
 601
 602        while (*sp) {
 603                s = *sp++;
 604                if (s->language != language)
 605                        continue;
 606                value = usb_gadget_get_string(s, id, buf);
 607                if (value > 0)
 608                        return value;
 609        }
 610        return -EINVAL;
 611}
 612
 613static int get_string(struct usb_composite_dev *cdev,
 614                void *buf, u16 language, int id)
 615{
 616        struct usb_configuration        *c;
 617        struct usb_function             *f;
 618        int                             len;
 619        const char                      *str;
 620
 621        /* Yes, not only is USB's I18N support probably more than most
 622         * folk will ever care about ... also, it's all supported here.
 623         * (Except for UTF8 support for Unicode's "Astral Planes".)
 624         */
 625
 626        /* 0 == report all available language codes */
 627        if (id == 0) {
 628                struct usb_string_descriptor    *s = buf;
 629                struct usb_gadget_strings       **sp;
 630
 631                memset(s, 0, 256);
 632                s->bDescriptorType = USB_DT_STRING;
 633
 634                sp = composite->strings;
 635                if (sp)
 636                        collect_langs(sp, s->wData);
 637
 638                list_for_each_entry(c, &cdev->configs, list) {
 639                        sp = c->strings;
 640                        if (sp)
 641                                collect_langs(sp, s->wData);
 642
 643                        list_for_each_entry(f, &c->functions, list) {
 644                                sp = f->strings;
 645                                if (sp)
 646                                        collect_langs(sp, s->wData);
 647                        }
 648                }
 649
 650                for (len = 0; len <= 126 && s->wData[len]; len++)
 651                        continue;
 652                if (!len)
 653                        return -EINVAL;
 654
 655                s->bLength = 2 * (len + 1);
 656                return s->bLength;
 657        }
 658
 659        /* Otherwise, look up and return a specified string.  First
 660         * check if the string has not been overridden.
 661         */
 662        if (cdev->manufacturer_override == id)
 663                str = iManufacturer ?: composite->iManufacturer ?:
 664                        composite_manufacturer;
 665        else if (cdev->product_override == id)
 666                str = iProduct ?: composite->iProduct;
 667        else if (cdev->serial_override == id)
 668                str = iSerialNumber;
 669        else
 670                str = NULL;
 671        if (str) {
 672                struct usb_gadget_strings strings = {
 673                        .language = language,
 674                        .strings  = &(struct usb_string) { 0xff, str }
 675                };
 676                return usb_gadget_get_string(&strings, 0xff, buf);
 677        }
 678
 679        /* String IDs are device-scoped, so we look up each string
 680         * table we're told about.  These lookups are infrequent;
 681         * simpler-is-better here.
 682         */
 683        if (composite->strings) {
 684                len = lookup_string(composite->strings, buf, language, id);
 685                if (len > 0)
 686                        return len;
 687        }
 688        list_for_each_entry(c, &cdev->configs, list) {
 689                if (c->strings) {
 690                        len = lookup_string(c->strings, buf, language, id);
 691                        if (len > 0)
 692                                return len;
 693                }
 694                list_for_each_entry(f, &c->functions, list) {
 695                        if (!f->strings)
 696                                continue;
 697                        len = lookup_string(f->strings, buf, language, id);
 698                        if (len > 0)
 699                                return len;
 700                }
 701        }
 702        return -EINVAL;
 703}
 704
 705/**
 706 * usb_string_id() - allocate an unused string ID
 707 * @cdev: the device whose string descriptor IDs are being allocated
 708 * Context: single threaded during gadget setup
 709 *
 710 * @usb_string_id() is called from bind() callbacks to allocate
 711 * string IDs.  Drivers for functions, configurations, or gadgets will
 712 * then store that ID in the appropriate descriptors and string table.
 713 *
 714 * All string identifier should be allocated using this,
 715 * @usb_string_ids_tab() or @usb_string_ids_n() routine, to ensure
 716 * that for example different functions don't wrongly assign different
 717 * meanings to the same identifier.
 718 */
 719int usb_string_id(struct usb_composite_dev *cdev)
 720{
 721        if (cdev->next_string_id < 254) {
 722                /* string id 0 is reserved by USB spec for list of
 723                 * supported languages */
 724                /* 255 reserved as well? -- mina86 */
 725                cdev->next_string_id++;
 726                return cdev->next_string_id;
 727        }
 728        return -ENODEV;
 729}
 730
 731/**
 732 * usb_string_ids() - allocate unused string IDs in batch
 733 * @cdev: the device whose string descriptor IDs are being allocated
 734 * @str: an array of usb_string objects to assign numbers to
 735 * Context: single threaded during gadget setup
 736 *
 737 * @usb_string_ids() is called from bind() callbacks to allocate
 738 * string IDs.  Drivers for functions, configurations, or gadgets will
 739 * then copy IDs from the string table to the appropriate descriptors
 740 * and string table for other languages.
 741 *
 742 * All string identifier should be allocated using this,
 743 * @usb_string_id() or @usb_string_ids_n() routine, to ensure that for
 744 * example different functions don't wrongly assign different meanings
 745 * to the same identifier.
 746 */
 747int usb_string_ids_tab(struct usb_composite_dev *cdev, struct usb_string *str)
 748{
 749        int next = cdev->next_string_id;
 750
 751        for (; str->s; ++str) {
 752                if (unlikely(next >= 254))
 753                        return -ENODEV;
 754                str->id = ++next;
 755        }
 756
 757        cdev->next_string_id = next;
 758
 759        return 0;
 760}
 761
 762/**
 763 * usb_string_ids_n() - allocate unused string IDs in batch
 764 * @c: the device whose string descriptor IDs are being allocated
 765 * @n: number of string IDs to allocate
 766 * Context: single threaded during gadget setup
 767 *
 768 * Returns the first requested ID.  This ID and next @n-1 IDs are now
 769 * valid IDs.  At least provided that @n is non-zero because if it
 770 * is, returns last requested ID which is now very useful information.
 771 *
 772 * @usb_string_ids_n() is called from bind() callbacks to allocate
 773 * string IDs.  Drivers for functions, configurations, or gadgets will
 774 * then store that ID in the appropriate descriptors and string table.
 775 *
 776 * All string identifier should be allocated using this,
 777 * @usb_string_id() or @usb_string_ids_n() routine, to ensure that for
 778 * example different functions don't wrongly assign different meanings
 779 * to the same identifier.
 780 */
 781int usb_string_ids_n(struct usb_composite_dev *c, unsigned n)
 782{
 783        unsigned next = c->next_string_id;
 784        if (unlikely(n > 254 || (unsigned)next + n > 254))
 785                return -ENODEV;
 786        c->next_string_id += n;
 787        return next + 1;
 788}
 789
 790
 791/*-------------------------------------------------------------------------*/
 792
 793static void composite_setup_complete(struct usb_ep *ep, struct usb_request *req)
 794{
 795        if (req->status || req->actual != req->length)
 796                DBG((struct usb_composite_dev *) ep->driver_data,
 797                                "setup complete --> %d, %d/%d\n",
 798                                req->status, req->actual, req->length);
 799}
 800
 801/*
 802 * The setup() callback implements all the ep0 functionality that's
 803 * not handled lower down, in hardware or the hardware driver(like
 804 * device and endpoint feature flags, and their status).  It's all
 805 * housekeeping for the gadget function we're implementing.  Most of
 806 * the work is in config and function specific setup.
 807 */
 808static int
 809composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
 810{
 811        struct usb_composite_dev        *cdev = get_gadget_data(gadget);
 812        struct usb_request              *req = cdev->req;
 813        int                             value = -EOPNOTSUPP;
 814        u16                             w_index = le16_to_cpu(ctrl->wIndex);
 815        u8                              intf = w_index & 0xFF;
 816        u16                             w_value = le16_to_cpu(ctrl->wValue);
 817        u16                             w_length = le16_to_cpu(ctrl->wLength);
 818        struct usb_function             *f = NULL;
 819        u8                              endp;
 820
 821        /* partial re-init of the response message; the function or the
 822         * gadget might need to intercept e.g. a control-OUT completion
 823         * when we delegate to it.
 824         */
 825        req->zero = 0;
 826        req->complete = composite_setup_complete;
 827        req->length = 0;
 828        gadget->ep0->driver_data = cdev;
 829
 830        switch (ctrl->bRequest) {
 831
 832        /* we handle all standard USB descriptors */
 833        case USB_REQ_GET_DESCRIPTOR:
 834                if (ctrl->bRequestType != USB_DIR_IN)
 835                        goto unknown;
 836                switch (w_value >> 8) {
 837
 838                case USB_DT_DEVICE:
 839                        cdev->desc.bNumConfigurations =
 840                                count_configs(cdev, USB_DT_DEVICE);
 841                        value = min(w_length, (u16) sizeof cdev->desc);
 842                        memcpy(req->buf, &cdev->desc, value);
 843                        break;
 844                case USB_DT_DEVICE_QUALIFIER:
 845                        if (!gadget_is_dualspeed(gadget))
 846                                break;
 847                        device_qual(cdev);
 848                        value = min_t(int, w_length,
 849                                sizeof(struct usb_qualifier_descriptor));
 850                        break;
 851                case USB_DT_OTHER_SPEED_CONFIG:
 852                        if (!gadget_is_dualspeed(gadget))
 853                                break;
 854                        /* FALLTHROUGH */
 855                case USB_DT_CONFIG:
 856                        value = config_desc(cdev, w_value);
 857                        if (value >= 0)
 858                                value = min(w_length, (u16) value);
 859                        break;
 860                case USB_DT_STRING:
 861                        value = get_string(cdev, req->buf,
 862                                        w_index, w_value & 0xff);
 863                        if (value >= 0)
 864                                value = min(w_length, (u16) value);
 865                        break;
 866                }
 867                break;
 868
 869        /* any number of configs can work */
 870        case USB_REQ_SET_CONFIGURATION:
 871                if (ctrl->bRequestType != 0)
 872                        goto unknown;
 873                if (gadget_is_otg(gadget)) {
 874                        if (gadget->a_hnp_support)
 875                                DBG(cdev, "HNP available\n");
 876                        else if (gadget->a_alt_hnp_support)
 877                                DBG(cdev, "HNP on another port\n");
 878                        else
 879                                VDBG(cdev, "HNP inactive\n");
 880                }
 881                spin_lock(&cdev->lock);
 882                value = set_config(cdev, ctrl, w_value);
 883                spin_unlock(&cdev->lock);
 884                break;
 885        case USB_REQ_GET_CONFIGURATION:
 886                if (ctrl->bRequestType != USB_DIR_IN)
 887                        goto unknown;
 888                if (cdev->config)
 889                        *(u8 *)req->buf = cdev->config->bConfigurationValue;
 890                else
 891                        *(u8 *)req->buf = 0;
 892                value = min(w_length, (u16) 1);
 893                break;
 894
 895        /* function drivers must handle get/set altsetting; if there's
 896         * no get() method, we know only altsetting zero works.
 897         */
 898        case USB_REQ_SET_INTERFACE:
 899                if (ctrl->bRequestType != USB_RECIP_INTERFACE)
 900                        goto unknown;
 901                if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
 902                        break;
 903                f = cdev->config->interface[intf];
 904                if (!f)
 905                        break;
 906                if (w_value && !f->set_alt)
 907                        break;
 908                value = f->set_alt(f, w_index, w_value);
 909                if (value == USB_GADGET_DELAYED_STATUS) {
 910                        DBG(cdev,
 911                         "%s: interface %d (%s) requested delayed status\n",
 912                                        __func__, intf, f->name);
 913                        cdev->delayed_status++;
 914                        DBG(cdev, "delayed_status count %d\n",
 915                                        cdev->delayed_status);
 916                }
 917                break;
 918        case USB_REQ_GET_INTERFACE:
 919                if (ctrl->bRequestType != (USB_DIR_IN|USB_RECIP_INTERFACE))
 920                        goto unknown;
 921                if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
 922                        break;
 923                f = cdev->config->interface[intf];
 924                if (!f)
 925                        break;
 926                /* lots of interfaces only need altsetting zero... */
 927                value = f->get_alt ? f->get_alt(f, w_index) : 0;
 928                if (value < 0)
 929                        break;
 930                *((u8 *)req->buf) = value;
 931                value = min(w_length, (u16) 1);
 932                break;
 933        default:
 934unknown:
 935                VDBG(cdev,
 936                        "non-core control req%02x.%02x v%04x i%04x l%d\n",
 937                        ctrl->bRequestType, ctrl->bRequest,
 938                        w_value, w_index, w_length);
 939
 940                /* functions always handle their interfaces and endpoints...
 941                 * punt other recipients (other, WUSB, ...) to the current
 942                 * configuration code.
 943                 *
 944                 * REVISIT it could make sense to let the composite device
 945                 * take such requests too, if that's ever needed:  to work
 946                 * in config 0, etc.
 947                 */
 948                switch (ctrl->bRequestType & USB_RECIP_MASK) {
 949                case USB_RECIP_INTERFACE:
 950                        if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
 951                                break;
 952                        f = cdev->config->interface[intf];
 953                        break;
 954
 955                case USB_RECIP_ENDPOINT:
 956                        endp = ((w_index & 0x80) >> 3) | (w_index & 0x0f);
 957                        list_for_each_entry(f, &cdev->config->functions, list) {
 958                                if (test_bit(endp, f->endpoints))
 959                                        break;
 960                        }
 961                        if (&f->list == &cdev->config->functions)
 962                                f = NULL;
 963                        break;
 964                }
 965
 966                if (f && f->setup)
 967                        value = f->setup(f, ctrl);
 968                else {
 969                        struct usb_configuration        *c;
 970
 971                        c = cdev->config;
 972                        if (c && c->setup)
 973                                value = c->setup(c, ctrl);
 974                }
 975
 976                goto done;
 977        }
 978
 979        /* respond with data transfer before status phase? */
 980        if (value >= 0 && value != USB_GADGET_DELAYED_STATUS) {
 981                req->length = value;
 982                req->zero = value < w_length;
 983                value = usb_ep_queue(gadget->ep0, req, GFP_ATOMIC);
 984                if (value < 0) {
 985                        DBG(cdev, "ep_queue --> %d\n", value);
 986                        req->status = 0;
 987                        composite_setup_complete(gadget->ep0, req);
 988                }
 989        } else if (value == USB_GADGET_DELAYED_STATUS && w_length != 0) {
 990                WARN(cdev,
 991                        "%s: Delayed status not supported for w_length != 0",
 992                        __func__);
 993        }
 994
 995done:
 996        /* device either stalls (value < 0) or reports success */
 997        return value;
 998}
 999
1000static void composite_disconnect(struct usb_gadget *gadget)
1001{
1002        struct usb_composite_dev        *cdev = get_gadget_data(gadget);
1003        unsigned long                   flags;
1004
1005        /* REVISIT:  should we have config and device level
1006         * disconnect callbacks?
1007         */
1008        spin_lock_irqsave(&cdev->lock, flags);
1009        if (cdev->config)
1010                reset_config(cdev);
1011        if (composite->disconnect)
1012                composite->disconnect(cdev);
1013        spin_unlock_irqrestore(&cdev->lock, flags);
1014}
1015
1016/*-------------------------------------------------------------------------*/
1017
1018static ssize_t composite_show_suspended(struct device *dev,
1019                                        struct device_attribute *attr,
1020                                        char *buf)
1021{
1022        struct usb_gadget *gadget = dev_to_usb_gadget(dev);
1023        struct usb_composite_dev *cdev = get_gadget_data(gadget);
1024
1025        return sprintf(buf, "%d\n", cdev->suspended);
1026}
1027
1028static DEVICE_ATTR(suspended, 0444, composite_show_suspended, NULL);
1029
1030static void
1031composite_unbind(struct usb_gadget *gadget)
1032{
1033        struct usb_composite_dev        *cdev = get_gadget_data(gadget);
1034
1035        /* composite_disconnect() must already have been called
1036         * by the underlying peripheral controller driver!
1037         * so there's no i/o concurrency that could affect the
1038         * state protected by cdev->lock.
1039         */
1040        WARN_ON(cdev->config);
1041
1042        while (!list_empty(&cdev->configs)) {
1043                struct usb_configuration        *c;
1044
1045                c = list_first_entry(&cdev->configs,
1046                                struct usb_configuration, list);
1047                while (!list_empty(&c->functions)) {
1048                        struct usb_function             *f;
1049
1050                        f = list_first_entry(&c->functions,
1051                                        struct usb_function, list);
1052                        list_del(&f->list);
1053                        if (f->unbind) {
1054                                DBG(cdev, "unbind function '%s'/%p\n",
1055                                                f->name, f);
1056                                f->unbind(c, f);
1057                                /* may free memory for "f" */
1058                        }
1059                }
1060                list_del(&c->list);
1061                if (c->unbind) {
1062                        DBG(cdev, "unbind config '%s'/%p\n", c->label, c);
1063                        c->unbind(c);
1064                        /* may free memory for "c" */
1065                }
1066        }
1067        if (composite->unbind)
1068                composite->unbind(cdev);
1069
1070        if (cdev->req) {
1071                kfree(cdev->req->buf);
1072                usb_ep_free_request(gadget->ep0, cdev->req);
1073        }
1074        device_remove_file(&gadget->dev, &dev_attr_suspended);
1075        kfree(cdev);
1076        set_gadget_data(gadget, NULL);
1077        composite = NULL;
1078}
1079
1080static u8 override_id(struct usb_composite_dev *cdev, u8 *desc)
1081{
1082        if (!*desc) {
1083                int ret = usb_string_id(cdev);
1084                if (unlikely(ret < 0))
1085                        WARNING(cdev, "failed to override string ID\n");
1086                else
1087                        *desc = ret;
1088        }
1089
1090        return *desc;
1091}
1092
1093static int composite_bind(struct usb_gadget *gadget)
1094{
1095        struct usb_composite_dev        *cdev;
1096        int                             status = -ENOMEM;
1097
1098        cdev = kzalloc(sizeof *cdev, GFP_KERNEL);
1099        if (!cdev)
1100                return status;
1101
1102        spin_lock_init(&cdev->lock);
1103        cdev->gadget = gadget;
1104        set_gadget_data(gadget, cdev);
1105        INIT_LIST_HEAD(&cdev->configs);
1106
1107        /* preallocate control response and buffer */
1108        cdev->req = usb_ep_alloc_request(gadget->ep0, GFP_KERNEL);
1109        if (!cdev->req)
1110                goto fail;
1111        cdev->req->buf = kmalloc(USB_BUFSIZ, GFP_KERNEL);
1112        if (!cdev->req->buf)
1113                goto fail;
1114        cdev->req->complete = composite_setup_complete;
1115        gadget->ep0->driver_data = cdev;
1116
1117        cdev->bufsiz = USB_BUFSIZ;
1118        cdev->driver = composite;
1119
1120        /*
1121         * As per USB compliance update, a device that is actively drawing
1122         * more than 100mA from USB must report itself as bus-powered in
1123         * the GetStatus(DEVICE) call.
1124         */
1125        if (CONFIG_USB_GADGET_VBUS_DRAW <= USB_SELF_POWER_VBUS_MAX_DRAW)
1126                usb_gadget_set_selfpowered(gadget);
1127
1128        /* interface and string IDs start at zero via kzalloc.
1129         * we force endpoints to start unassigned; few controller
1130         * drivers will zero ep->driver_data.
1131         */
1132        usb_ep_autoconfig_reset(cdev->gadget);
1133
1134        /* composite gadget needs to assign strings for whole device (like
1135         * serial number), register function drivers, potentially update
1136         * power state and consumption, etc
1137         */
1138        status = composite_gadget_bind(cdev);
1139        if (status < 0)
1140                goto fail;
1141
1142        cdev->desc = *composite->dev;
1143        cdev->desc.bMaxPacketSize0 = gadget->ep0->maxpacket;
1144
1145        /* standardized runtime overrides for device ID data */
1146        if (idVendor)
1147                cdev->desc.idVendor = cpu_to_le16(idVendor);
1148        if (idProduct)
1149                cdev->desc.idProduct = cpu_to_le16(idProduct);
1150        if (bcdDevice)
1151                cdev->desc.bcdDevice = cpu_to_le16(bcdDevice);
1152
1153        /* string overrides */
1154        if (iManufacturer || !cdev->desc.iManufacturer) {
1155                if (!iManufacturer && !composite->iManufacturer &&
1156                    !*composite_manufacturer)
1157                        snprintf(composite_manufacturer,
1158                                 sizeof composite_manufacturer,
1159                                 "%s %s with %s",
1160                                 init_utsname()->sysname,
1161                                 init_utsname()->release,
1162                                 gadget->name);
1163
1164                cdev->manufacturer_override =
1165                        override_id(cdev, &cdev->desc.iManufacturer);
1166        }
1167
1168        if (iProduct || (!cdev->desc.iProduct && composite->iProduct))
1169                cdev->product_override =
1170                        override_id(cdev, &cdev->desc.iProduct);
1171
1172        if (iSerialNumber)
1173                cdev->serial_override =
1174                        override_id(cdev, &cdev->desc.iSerialNumber);
1175
1176        /* has userspace failed to provide a serial number? */
1177        if (composite->needs_serial && !cdev->desc.iSerialNumber)
1178                WARNING(cdev, "userspace failed to provide iSerialNumber\n");
1179
1180        /* finish up */
1181        status = device_create_file(&gadget->dev, &dev_attr_suspended);
1182        if (status)
1183                goto fail;
1184
1185        INFO(cdev, "%s ready\n", composite->name);
1186        return 0;
1187
1188fail:
1189        composite_unbind(gadget);
1190        return status;
1191}
1192
1193/*-------------------------------------------------------------------------*/
1194
1195static void
1196composite_suspend(struct usb_gadget *gadget)
1197{
1198        struct usb_composite_dev        *cdev = get_gadget_data(gadget);
1199        struct usb_function             *f;
1200
1201        /* REVISIT:  should we have config level
1202         * suspend/resume callbacks?
1203         */
1204        DBG(cdev, "suspend\n");
1205        if (cdev->config) {
1206                list_for_each_entry(f, &cdev->config->functions, list) {
1207                        if (f->suspend)
1208                                f->suspend(f);
1209                }
1210        }
1211        if (composite->suspend)
1212                composite->suspend(cdev);
1213
1214        cdev->suspended = 1;
1215
1216        usb_gadget_vbus_draw(gadget, 2);
1217}
1218
1219static void
1220composite_resume(struct usb_gadget *gadget)
1221{
1222        struct usb_composite_dev        *cdev = get_gadget_data(gadget);
1223        struct usb_function             *f;
1224        u8                              maxpower;
1225
1226        /* REVISIT:  should we have config level
1227         * suspend/resume callbacks?
1228         */
1229        DBG(cdev, "resume\n");
1230        if (composite->resume)
1231                composite->resume(cdev);
1232        if (cdev->config) {
1233                list_for_each_entry(f, &cdev->config->functions, list) {
1234                        if (f->resume)
1235                                f->resume(f);
1236                }
1237
1238                maxpower = cdev->config->bMaxPower;
1239
1240                usb_gadget_vbus_draw(gadget, maxpower ?
1241                        (2 * maxpower) : CONFIG_USB_GADGET_VBUS_DRAW);
1242        }
1243
1244        cdev->suspended = 0;
1245}
1246
1247/*-------------------------------------------------------------------------*/
1248
1249static struct usb_gadget_driver composite_driver = {
1250        .speed          = USB_SPEED_HIGH,
1251
1252        .unbind         = composite_unbind,
1253
1254        .setup          = composite_setup,
1255        .disconnect     = composite_disconnect,
1256
1257        .suspend        = composite_suspend,
1258        .resume         = composite_resume,
1259
1260        .driver = {
1261                .owner          = THIS_MODULE,
1262        },
1263};
1264
1265/**
1266 * usb_composite_probe() - register a composite driver
1267 * @driver: the driver to register
1268 * @bind: the callback used to allocate resources that are shared across the
1269 *      whole device, such as string IDs, and add its configurations using
1270 *      @usb_add_config().  This may fail by returning a negative errno
1271 *      value; it should return zero on successful initialization.
1272 * Context: single threaded during gadget setup
1273 *
1274 * This function is used to register drivers using the composite driver
1275 * framework.  The return value is zero, or a negative errno value.
1276 * Those values normally come from the driver's @bind method, which does
1277 * all the work of setting up the driver to match the hardware.
1278 *
1279 * On successful return, the gadget is ready to respond to requests from
1280 * the host, unless one of its components invokes usb_gadget_disconnect()
1281 * while it was binding.  That would usually be done in order to wait for
1282 * some userspace participation.
1283 */
1284int usb_composite_probe(struct usb_composite_driver *driver,
1285                               int (*bind)(struct usb_composite_dev *cdev))
1286{
1287        if (!driver || !driver->dev || !bind || composite)
1288                return -EINVAL;
1289
1290        if (!driver->name)
1291                driver->name = "composite";
1292        if (!driver->iProduct)
1293                driver->iProduct = driver->name;
1294        composite_driver.function =  (char *) driver->name;
1295        composite_driver.driver.name = driver->name;
1296        composite = driver;
1297        composite_gadget_bind = bind;
1298
1299        return usb_gadget_probe_driver(&composite_driver, composite_bind);
1300}
1301
1302/**
1303 * usb_composite_unregister() - unregister a composite driver
1304 * @driver: the driver to unregister
1305 *
1306 * This function is used to unregister drivers using the composite
1307 * driver framework.
1308 */
1309void usb_composite_unregister(struct usb_composite_driver *driver)
1310{
1311        if (composite != driver)
1312                return;
1313        usb_gadget_unregister_driver(&composite_driver);
1314}
1315
1316/**
1317 * usb_composite_setup_continue() - Continue with the control transfer
1318 * @cdev: the composite device who's control transfer was kept waiting
1319 *
1320 * This function must be called by the USB function driver to continue
1321 * with the control transfer's data/status stage in case it had requested to
1322 * delay the data/status stages. A USB function's setup handler (e.g. set_alt())
1323 * can request the composite framework to delay the setup request's data/status
1324 * stages by returning USB_GADGET_DELAYED_STATUS.
1325 */
1326void usb_composite_setup_continue(struct usb_composite_dev *cdev)
1327{
1328        int                     value;
1329        struct usb_request      *req = cdev->req;
1330        unsigned long           flags;
1331
1332        DBG(cdev, "%s\n", __func__);
1333        spin_lock_irqsave(&cdev->lock, flags);
1334
1335        if (cdev->delayed_status == 0) {
1336                WARN(cdev, "%s: Unexpected call\n", __func__);
1337
1338        } else if (--cdev->delayed_status == 0) {
1339                DBG(cdev, "%s: Completing delayed status\n", __func__);
1340                req->length = 0;
1341                value = usb_ep_queue(cdev->gadget->ep0, req, GFP_ATOMIC);
1342                if (value < 0) {
1343                        DBG(cdev, "ep_queue --> %d\n", value);
1344                        req->status = 0;
1345                        composite_setup_complete(cdev->gadget->ep0, req);
1346                }
1347        }
1348
1349        spin_unlock_irqrestore(&cdev->lock, flags);
1350}
1351
1352