linux/drivers/usb/gadget/composite.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0+
   2/*
   3 * composite.c - infrastructure for Composite USB Gadgets
   4 *
   5 * Copyright (C) 2006-2008 David Brownell
   6 */
   7
   8/* #define VERBOSE_DEBUG */
   9
  10#include <linux/kallsyms.h>
  11#include <linux/kernel.h>
  12#include <linux/slab.h>
  13#include <linux/module.h>
  14#include <linux/device.h>
  15#include <linux/utsname.h>
  16#include <linux/bitfield.h>
  17
  18#include <linux/usb/composite.h>
  19#include <linux/usb/otg.h>
  20#include <asm/unaligned.h>
  21
  22#include "u_os_desc.h"
  23
  24/**
  25 * struct usb_os_string - represents OS String to be reported by a gadget
  26 * @bLength: total length of the entire descritor, always 0x12
  27 * @bDescriptorType: USB_DT_STRING
  28 * @qwSignature: the OS String proper
  29 * @bMS_VendorCode: code used by the host for subsequent requests
  30 * @bPad: not used, must be zero
  31 */
  32struct usb_os_string {
  33        __u8    bLength;
  34        __u8    bDescriptorType;
  35        __u8    qwSignature[OS_STRING_QW_SIGN_LEN];
  36        __u8    bMS_VendorCode;
  37        __u8    bPad;
  38} __packed;
  39
  40/*
  41 * The code in this file is utility code, used to build a gadget driver
  42 * from one or more "function" drivers, one or more "configuration"
  43 * objects, and a "usb_composite_driver" by gluing them together along
  44 * with the relevant device-wide data.
  45 */
  46
  47static struct usb_gadget_strings **get_containers_gs(
  48                struct usb_gadget_string_container *uc)
  49{
  50        return (struct usb_gadget_strings **)uc->stash;
  51}
  52
  53/**
  54 * function_descriptors() - get function descriptors for speed
  55 * @f: the function
  56 * @speed: the speed
  57 *
  58 * Returns the descriptors or NULL if not set.
  59 */
  60static struct usb_descriptor_header **
  61function_descriptors(struct usb_function *f,
  62                     enum usb_device_speed speed)
  63{
  64        struct usb_descriptor_header **descriptors;
  65
  66        /*
  67         * NOTE: we try to help gadget drivers which might not be setting
  68         * max_speed appropriately.
  69         */
  70
  71        switch (speed) {
  72        case USB_SPEED_SUPER_PLUS:
  73                descriptors = f->ssp_descriptors;
  74                if (descriptors)
  75                        break;
  76                fallthrough;
  77        case USB_SPEED_SUPER:
  78                descriptors = f->ss_descriptors;
  79                if (descriptors)
  80                        break;
  81                fallthrough;
  82        case USB_SPEED_HIGH:
  83                descriptors = f->hs_descriptors;
  84                if (descriptors)
  85                        break;
  86                fallthrough;
  87        default:
  88                descriptors = f->fs_descriptors;
  89        }
  90
  91        /*
  92         * if we can't find any descriptors at all, then this gadget deserves to
  93         * Oops with a NULL pointer dereference
  94         */
  95
  96        return descriptors;
  97}
  98
  99/**
 100 * next_desc() - advance to the next desc_type descriptor
 101 * @t: currect pointer within descriptor array
 102 * @desc_type: descriptor type
 103 *
 104 * Return: next desc_type descriptor or NULL
 105 *
 106 * Iterate over @t until either desc_type descriptor found or
 107 * NULL (that indicates end of list) encountered
 108 */
 109static struct usb_descriptor_header**
 110next_desc(struct usb_descriptor_header **t, u8 desc_type)
 111{
 112        for (; *t; t++) {
 113                if ((*t)->bDescriptorType == desc_type)
 114                        return t;
 115        }
 116        return NULL;
 117}
 118
 119/*
 120 * for_each_desc() - iterate over desc_type descriptors in the
 121 * descriptors list
 122 * @start: pointer within descriptor array.
 123 * @iter_desc: desc_type descriptor to use as the loop cursor
 124 * @desc_type: wanted descriptr type
 125 */
 126#define for_each_desc(start, iter_desc, desc_type) \
 127        for (iter_desc = next_desc(start, desc_type); \
 128             iter_desc; iter_desc = next_desc(iter_desc + 1, desc_type))
 129
 130/**
 131 * config_ep_by_speed_and_alt() - configures the given endpoint
 132 * according to gadget speed.
 133 * @g: pointer to the gadget
 134 * @f: usb function
 135 * @_ep: the endpoint to configure
 136 * @alt: alternate setting number
 137 *
 138 * Return: error code, 0 on success
 139 *
 140 * This function chooses the right descriptors for a given
 141 * endpoint according to gadget speed and saves it in the
 142 * endpoint desc field. If the endpoint already has a descriptor
 143 * assigned to it - overwrites it with currently corresponding
 144 * descriptor. The endpoint maxpacket field is updated according
 145 * to the chosen descriptor.
 146 * Note: the supplied function should hold all the descriptors
 147 * for supported speeds
 148 */
 149int config_ep_by_speed_and_alt(struct usb_gadget *g,
 150                                struct usb_function *f,
 151                                struct usb_ep *_ep,
 152                                u8 alt)
 153{
 154        struct usb_endpoint_descriptor *chosen_desc = NULL;
 155        struct usb_interface_descriptor *int_desc = NULL;
 156        struct usb_descriptor_header **speed_desc = NULL;
 157
 158        struct usb_ss_ep_comp_descriptor *comp_desc = NULL;
 159        int want_comp_desc = 0;
 160
 161        struct usb_descriptor_header **d_spd; /* cursor for speed desc */
 162
 163        if (!g || !f || !_ep)
 164                return -EIO;
 165
 166        /* select desired speed */
 167        switch (g->speed) {
 168        case USB_SPEED_SUPER_PLUS:
 169                if (gadget_is_superspeed_plus(g)) {
 170                        speed_desc = f->ssp_descriptors;
 171                        want_comp_desc = 1;
 172                        break;
 173                }
 174                fallthrough;
 175        case USB_SPEED_SUPER:
 176                if (gadget_is_superspeed(g)) {
 177                        speed_desc = f->ss_descriptors;
 178                        want_comp_desc = 1;
 179                        break;
 180                }
 181                fallthrough;
 182        case USB_SPEED_HIGH:
 183                if (gadget_is_dualspeed(g)) {
 184                        speed_desc = f->hs_descriptors;
 185                        break;
 186                }
 187                fallthrough;
 188        default:
 189                speed_desc = f->fs_descriptors;
 190        }
 191
 192        /* find correct alternate setting descriptor */
 193        for_each_desc(speed_desc, d_spd, USB_DT_INTERFACE) {
 194                int_desc = (struct usb_interface_descriptor *)*d_spd;
 195
 196                if (int_desc->bAlternateSetting == alt) {
 197                        speed_desc = d_spd;
 198                        goto intf_found;
 199                }
 200        }
 201        return -EIO;
 202
 203intf_found:
 204        /* find descriptors */
 205        for_each_desc(speed_desc, d_spd, USB_DT_ENDPOINT) {
 206                chosen_desc = (struct usb_endpoint_descriptor *)*d_spd;
 207                if (chosen_desc->bEndpointAddress == _ep->address)
 208                        goto ep_found;
 209        }
 210        return -EIO;
 211
 212ep_found:
 213        /* commit results */
 214        _ep->maxpacket = usb_endpoint_maxp(chosen_desc);
 215        _ep->desc = chosen_desc;
 216        _ep->comp_desc = NULL;
 217        _ep->maxburst = 0;
 218        _ep->mult = 1;
 219
 220        if (g->speed == USB_SPEED_HIGH && (usb_endpoint_xfer_isoc(_ep->desc) ||
 221                                usb_endpoint_xfer_int(_ep->desc)))
 222                _ep->mult = usb_endpoint_maxp_mult(_ep->desc);
 223
 224        if (!want_comp_desc)
 225                return 0;
 226
 227        /*
 228         * Companion descriptor should follow EP descriptor
 229         * USB 3.0 spec, #9.6.7
 230         */
 231        comp_desc = (struct usb_ss_ep_comp_descriptor *)*(++d_spd);
 232        if (!comp_desc ||
 233            (comp_desc->bDescriptorType != USB_DT_SS_ENDPOINT_COMP))
 234                return -EIO;
 235        _ep->comp_desc = comp_desc;
 236        if (g->speed >= USB_SPEED_SUPER) {
 237                switch (usb_endpoint_type(_ep->desc)) {
 238                case USB_ENDPOINT_XFER_ISOC:
 239                        /* mult: bits 1:0 of bmAttributes */
 240                        _ep->mult = (comp_desc->bmAttributes & 0x3) + 1;
 241                        fallthrough;
 242                case USB_ENDPOINT_XFER_BULK:
 243                case USB_ENDPOINT_XFER_INT:
 244                        _ep->maxburst = comp_desc->bMaxBurst + 1;
 245                        break;
 246                default:
 247                        if (comp_desc->bMaxBurst != 0) {
 248                                struct usb_composite_dev *cdev;
 249
 250                                cdev = get_gadget_data(g);
 251                                ERROR(cdev, "ep0 bMaxBurst must be 0\n");
 252                        }
 253                        _ep->maxburst = 1;
 254                        break;
 255                }
 256        }
 257        return 0;
 258}
 259EXPORT_SYMBOL_GPL(config_ep_by_speed_and_alt);
 260
 261/**
 262 * config_ep_by_speed() - configures the given endpoint
 263 * according to gadget speed.
 264 * @g: pointer to the gadget
 265 * @f: usb function
 266 * @_ep: the endpoint to configure
 267 *
 268 * Return: error code, 0 on success
 269 *
 270 * This function chooses the right descriptors for a given
 271 * endpoint according to gadget speed and saves it in the
 272 * endpoint desc field. If the endpoint already has a descriptor
 273 * assigned to it - overwrites it with currently corresponding
 274 * descriptor. The endpoint maxpacket field is updated according
 275 * to the chosen descriptor.
 276 * Note: the supplied function should hold all the descriptors
 277 * for supported speeds
 278 */
 279int config_ep_by_speed(struct usb_gadget *g,
 280                        struct usb_function *f,
 281                        struct usb_ep *_ep)
 282{
 283        return config_ep_by_speed_and_alt(g, f, _ep, 0);
 284}
 285EXPORT_SYMBOL_GPL(config_ep_by_speed);
 286
 287/**
 288 * usb_add_function() - add a function to a configuration
 289 * @config: the configuration
 290 * @function: the function being added
 291 * Context: single threaded during gadget setup
 292 *
 293 * After initialization, each configuration must have one or more
 294 * functions added to it.  Adding a function involves calling its @bind()
 295 * method to allocate resources such as interface and string identifiers
 296 * and endpoints.
 297 *
 298 * This function returns the value of the function's bind(), which is
 299 * zero for success else a negative errno value.
 300 */
 301int usb_add_function(struct usb_configuration *config,
 302                struct usb_function *function)
 303{
 304        int     value = -EINVAL;
 305
 306        DBG(config->cdev, "adding '%s'/%p to config '%s'/%p\n",
 307                        function->name, function,
 308                        config->label, config);
 309
 310        if (!function->set_alt || !function->disable)
 311                goto done;
 312
 313        function->config = config;
 314        list_add_tail(&function->list, &config->functions);
 315
 316        if (function->bind_deactivated) {
 317                value = usb_function_deactivate(function);
 318                if (value)
 319                        goto done;
 320        }
 321
 322        /* REVISIT *require* function->bind? */
 323        if (function->bind) {
 324                value = function->bind(config, function);
 325                if (value < 0) {
 326                        list_del(&function->list);
 327                        function->config = NULL;
 328                }
 329        } else
 330                value = 0;
 331
 332        /* We allow configurations that don't work at both speeds.
 333         * If we run into a lowspeed Linux system, treat it the same
 334         * as full speed ... it's the function drivers that will need
 335         * to avoid bulk and ISO transfers.
 336         */
 337        if (!config->fullspeed && function->fs_descriptors)
 338                config->fullspeed = true;
 339        if (!config->highspeed && function->hs_descriptors)
 340                config->highspeed = true;
 341        if (!config->superspeed && function->ss_descriptors)
 342                config->superspeed = true;
 343        if (!config->superspeed_plus && function->ssp_descriptors)
 344                config->superspeed_plus = true;
 345
 346done:
 347        if (value)
 348                DBG(config->cdev, "adding '%s'/%p --> %d\n",
 349                                function->name, function, value);
 350        return value;
 351}
 352EXPORT_SYMBOL_GPL(usb_add_function);
 353
 354void usb_remove_function(struct usb_configuration *c, struct usb_function *f)
 355{
 356        if (f->disable)
 357                f->disable(f);
 358
 359        bitmap_zero(f->endpoints, 32);
 360        list_del(&f->list);
 361        if (f->unbind)
 362                f->unbind(c, f);
 363
 364        if (f->bind_deactivated)
 365                usb_function_activate(f);
 366}
 367EXPORT_SYMBOL_GPL(usb_remove_function);
 368
 369/**
 370 * usb_function_deactivate - prevent function and gadget enumeration
 371 * @function: the function that isn't yet ready to respond
 372 *
 373 * Blocks response of the gadget driver to host enumeration by
 374 * preventing the data line pullup from being activated.  This is
 375 * normally called during @bind() processing to change from the
 376 * initial "ready to respond" state, or when a required resource
 377 * becomes available.
 378 *
 379 * For example, drivers that serve as a passthrough to a userspace
 380 * daemon can block enumeration unless that daemon (such as an OBEX,
 381 * MTP, or print server) is ready to handle host requests.
 382 *
 383 * Not all systems support software control of their USB peripheral
 384 * data pullups.
 385 *
 386 * Returns zero on success, else negative errno.
 387 */
 388int usb_function_deactivate(struct usb_function *function)
 389{
 390        struct usb_composite_dev        *cdev = function->config->cdev;
 391        unsigned long                   flags;
 392        int                             status = 0;
 393
 394        spin_lock_irqsave(&cdev->lock, flags);
 395
 396        if (cdev->deactivations == 0) {
 397                spin_unlock_irqrestore(&cdev->lock, flags);
 398                status = usb_gadget_deactivate(cdev->gadget);
 399                spin_lock_irqsave(&cdev->lock, flags);
 400        }
 401        if (status == 0)
 402                cdev->deactivations++;
 403
 404        spin_unlock_irqrestore(&cdev->lock, flags);
 405        return status;
 406}
 407EXPORT_SYMBOL_GPL(usb_function_deactivate);
 408
 409/**
 410 * usb_function_activate - allow function and gadget enumeration
 411 * @function: function on which usb_function_activate() was called
 412 *
 413 * Reverses effect of usb_function_deactivate().  If no more functions
 414 * are delaying their activation, the gadget driver will respond to
 415 * host enumeration procedures.
 416 *
 417 * Returns zero on success, else negative errno.
 418 */
 419int usb_function_activate(struct usb_function *function)
 420{
 421        struct usb_composite_dev        *cdev = function->config->cdev;
 422        unsigned long                   flags;
 423        int                             status = 0;
 424
 425        spin_lock_irqsave(&cdev->lock, flags);
 426
 427        if (WARN_ON(cdev->deactivations == 0))
 428                status = -EINVAL;
 429        else {
 430                cdev->deactivations--;
 431                if (cdev->deactivations == 0) {
 432                        spin_unlock_irqrestore(&cdev->lock, flags);
 433                        status = usb_gadget_activate(cdev->gadget);
 434                        spin_lock_irqsave(&cdev->lock, flags);
 435                }
 436        }
 437
 438        spin_unlock_irqrestore(&cdev->lock, flags);
 439        return status;
 440}
 441EXPORT_SYMBOL_GPL(usb_function_activate);
 442
 443/**
 444 * usb_interface_id() - allocate an unused interface ID
 445 * @config: configuration associated with the interface
 446 * @function: function handling the interface
 447 * Context: single threaded during gadget setup
 448 *
 449 * usb_interface_id() is called from usb_function.bind() callbacks to
 450 * allocate new interface IDs.  The function driver will then store that
 451 * ID in interface, association, CDC union, and other descriptors.  It
 452 * will also handle any control requests targeted at that interface,
 453 * particularly changing its altsetting via set_alt().  There may
 454 * also be class-specific or vendor-specific requests to handle.
 455 *
 456 * All interface identifier should be allocated using this routine, to
 457 * ensure that for example different functions don't wrongly assign
 458 * different meanings to the same identifier.  Note that since interface
 459 * identifiers are configuration-specific, functions used in more than
 460 * one configuration (or more than once in a given configuration) need
 461 * multiple versions of the relevant descriptors.
 462 *
 463 * Returns the interface ID which was allocated; or -ENODEV if no
 464 * more interface IDs can be allocated.
 465 */
 466int usb_interface_id(struct usb_configuration *config,
 467                struct usb_function *function)
 468{
 469        unsigned id = config->next_interface_id;
 470
 471        if (id < MAX_CONFIG_INTERFACES) {
 472                config->interface[id] = function;
 473                config->next_interface_id = id + 1;
 474                return id;
 475        }
 476        return -ENODEV;
 477}
 478EXPORT_SYMBOL_GPL(usb_interface_id);
 479
 480static u8 encode_bMaxPower(enum usb_device_speed speed,
 481                struct usb_configuration *c)
 482{
 483        unsigned val;
 484
 485        if (c->MaxPower || (c->bmAttributes & USB_CONFIG_ATT_SELFPOWER))
 486                val = c->MaxPower;
 487        else
 488                val = CONFIG_USB_GADGET_VBUS_DRAW;
 489        if (!val)
 490                return 0;
 491        if (speed < USB_SPEED_SUPER)
 492                return min(val, 500U) / 2;
 493        else
 494                /*
 495                 * USB 3.x supports up to 900mA, but since 900 isn't divisible
 496                 * by 8 the integral division will effectively cap to 896mA.
 497                 */
 498                return min(val, 900U) / 8;
 499}
 500
 501static int config_buf(struct usb_configuration *config,
 502                enum usb_device_speed speed, void *buf, u8 type)
 503{
 504        struct usb_config_descriptor    *c = buf;
 505        void                            *next = buf + USB_DT_CONFIG_SIZE;
 506        int                             len;
 507        struct usb_function             *f;
 508        int                             status;
 509
 510        len = USB_COMP_EP0_BUFSIZ - USB_DT_CONFIG_SIZE;
 511        /* write the config descriptor */
 512        c = buf;
 513        c->bLength = USB_DT_CONFIG_SIZE;
 514        c->bDescriptorType = type;
 515        /* wTotalLength is written later */
 516        c->bNumInterfaces = config->next_interface_id;
 517        c->bConfigurationValue = config->bConfigurationValue;
 518        c->iConfiguration = config->iConfiguration;
 519        c->bmAttributes = USB_CONFIG_ATT_ONE | config->bmAttributes;
 520        c->bMaxPower = encode_bMaxPower(speed, config);
 521
 522        /* There may be e.g. OTG descriptors */
 523        if (config->descriptors) {
 524                status = usb_descriptor_fillbuf(next, len,
 525                                config->descriptors);
 526                if (status < 0)
 527                        return status;
 528                len -= status;
 529                next += status;
 530        }
 531
 532        /* add each function's descriptors */
 533        list_for_each_entry(f, &config->functions, list) {
 534                struct usb_descriptor_header **descriptors;
 535
 536                descriptors = function_descriptors(f, speed);
 537                if (!descriptors)
 538                        continue;
 539                status = usb_descriptor_fillbuf(next, len,
 540                        (const struct usb_descriptor_header **) descriptors);
 541                if (status < 0)
 542                        return status;
 543                len -= status;
 544                next += status;
 545        }
 546
 547        len = next - buf;
 548        c->wTotalLength = cpu_to_le16(len);
 549        return len;
 550}
 551
 552static int config_desc(struct usb_composite_dev *cdev, unsigned w_value)
 553{
 554        struct usb_gadget               *gadget = cdev->gadget;
 555        struct usb_configuration        *c;
 556        struct list_head                *pos;
 557        u8                              type = w_value >> 8;
 558        enum usb_device_speed           speed = USB_SPEED_UNKNOWN;
 559
 560        if (gadget->speed >= USB_SPEED_SUPER)
 561                speed = gadget->speed;
 562        else if (gadget_is_dualspeed(gadget)) {
 563                int     hs = 0;
 564                if (gadget->speed == USB_SPEED_HIGH)
 565                        hs = 1;
 566                if (type == USB_DT_OTHER_SPEED_CONFIG)
 567                        hs = !hs;
 568                if (hs)
 569                        speed = USB_SPEED_HIGH;
 570
 571        }
 572
 573        /* This is a lookup by config *INDEX* */
 574        w_value &= 0xff;
 575
 576        pos = &cdev->configs;
 577        c = cdev->os_desc_config;
 578        if (c)
 579                goto check_config;
 580
 581        while ((pos = pos->next) !=  &cdev->configs) {
 582                c = list_entry(pos, typeof(*c), list);
 583
 584                /* skip OS Descriptors config which is handled separately */
 585                if (c == cdev->os_desc_config)
 586                        continue;
 587
 588check_config:
 589                /* ignore configs that won't work at this speed */
 590                switch (speed) {
 591                case USB_SPEED_SUPER_PLUS:
 592                        if (!c->superspeed_plus)
 593                                continue;
 594                        break;
 595                case USB_SPEED_SUPER:
 596                        if (!c->superspeed)
 597                                continue;
 598                        break;
 599                case USB_SPEED_HIGH:
 600                        if (!c->highspeed)
 601                                continue;
 602                        break;
 603                default:
 604                        if (!c->fullspeed)
 605                                continue;
 606                }
 607
 608                if (w_value == 0)
 609                        return config_buf(c, speed, cdev->req->buf, type);
 610                w_value--;
 611        }
 612        return -EINVAL;
 613}
 614
 615static int count_configs(struct usb_composite_dev *cdev, unsigned type)
 616{
 617        struct usb_gadget               *gadget = cdev->gadget;
 618        struct usb_configuration        *c;
 619        unsigned                        count = 0;
 620        int                             hs = 0;
 621        int                             ss = 0;
 622        int                             ssp = 0;
 623
 624        if (gadget_is_dualspeed(gadget)) {
 625                if (gadget->speed == USB_SPEED_HIGH)
 626                        hs = 1;
 627                if (gadget->speed == USB_SPEED_SUPER)
 628                        ss = 1;
 629                if (gadget->speed == USB_SPEED_SUPER_PLUS)
 630                        ssp = 1;
 631                if (type == USB_DT_DEVICE_QUALIFIER)
 632                        hs = !hs;
 633        }
 634        list_for_each_entry(c, &cdev->configs, list) {
 635                /* ignore configs that won't work at this speed */
 636                if (ssp) {
 637                        if (!c->superspeed_plus)
 638                                continue;
 639                } else if (ss) {
 640                        if (!c->superspeed)
 641                                continue;
 642                } else if (hs) {
 643                        if (!c->highspeed)
 644                                continue;
 645                } else {
 646                        if (!c->fullspeed)
 647                                continue;
 648                }
 649                count++;
 650        }
 651        return count;
 652}
 653
 654/**
 655 * bos_desc() - prepares the BOS descriptor.
 656 * @cdev: pointer to usb_composite device to generate the bos
 657 *      descriptor for
 658 *
 659 * This function generates the BOS (Binary Device Object)
 660 * descriptor and its device capabilities descriptors. The BOS
 661 * descriptor should be supported by a SuperSpeed device.
 662 */
 663static int bos_desc(struct usb_composite_dev *cdev)
 664{
 665        struct usb_ext_cap_descriptor   *usb_ext;
 666        struct usb_dcd_config_params    dcd_config_params;
 667        struct usb_bos_descriptor       *bos = cdev->req->buf;
 668        unsigned int                    besl = 0;
 669
 670        bos->bLength = USB_DT_BOS_SIZE;
 671        bos->bDescriptorType = USB_DT_BOS;
 672
 673        bos->wTotalLength = cpu_to_le16(USB_DT_BOS_SIZE);
 674        bos->bNumDeviceCaps = 0;
 675
 676        /* Get Controller configuration */
 677        if (cdev->gadget->ops->get_config_params) {
 678                cdev->gadget->ops->get_config_params(cdev->gadget,
 679                                                     &dcd_config_params);
 680        } else {
 681                dcd_config_params.besl_baseline =
 682                        USB_DEFAULT_BESL_UNSPECIFIED;
 683                dcd_config_params.besl_deep =
 684                        USB_DEFAULT_BESL_UNSPECIFIED;
 685                dcd_config_params.bU1devExitLat =
 686                        USB_DEFAULT_U1_DEV_EXIT_LAT;
 687                dcd_config_params.bU2DevExitLat =
 688                        cpu_to_le16(USB_DEFAULT_U2_DEV_EXIT_LAT);
 689        }
 690
 691        if (dcd_config_params.besl_baseline != USB_DEFAULT_BESL_UNSPECIFIED)
 692                besl = USB_BESL_BASELINE_VALID |
 693                        USB_SET_BESL_BASELINE(dcd_config_params.besl_baseline);
 694
 695        if (dcd_config_params.besl_deep != USB_DEFAULT_BESL_UNSPECIFIED)
 696                besl |= USB_BESL_DEEP_VALID |
 697                        USB_SET_BESL_DEEP(dcd_config_params.besl_deep);
 698
 699        /*
 700         * A SuperSpeed device shall include the USB2.0 extension descriptor
 701         * and shall support LPM when operating in USB2.0 HS mode.
 702         */
 703        usb_ext = cdev->req->buf + le16_to_cpu(bos->wTotalLength);
 704        bos->bNumDeviceCaps++;
 705        le16_add_cpu(&bos->wTotalLength, USB_DT_USB_EXT_CAP_SIZE);
 706        usb_ext->bLength = USB_DT_USB_EXT_CAP_SIZE;
 707        usb_ext->bDescriptorType = USB_DT_DEVICE_CAPABILITY;
 708        usb_ext->bDevCapabilityType = USB_CAP_TYPE_EXT;
 709        usb_ext->bmAttributes = cpu_to_le32(USB_LPM_SUPPORT |
 710                                            USB_BESL_SUPPORT | besl);
 711
 712        /*
 713         * The Superspeed USB Capability descriptor shall be implemented by all
 714         * SuperSpeed devices.
 715         */
 716        if (gadget_is_superspeed(cdev->gadget)) {
 717                struct usb_ss_cap_descriptor *ss_cap;
 718
 719                ss_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength);
 720                bos->bNumDeviceCaps++;
 721                le16_add_cpu(&bos->wTotalLength, USB_DT_USB_SS_CAP_SIZE);
 722                ss_cap->bLength = USB_DT_USB_SS_CAP_SIZE;
 723                ss_cap->bDescriptorType = USB_DT_DEVICE_CAPABILITY;
 724                ss_cap->bDevCapabilityType = USB_SS_CAP_TYPE;
 725                ss_cap->bmAttributes = 0; /* LTM is not supported yet */
 726                ss_cap->wSpeedSupported = cpu_to_le16(USB_LOW_SPEED_OPERATION |
 727                                                      USB_FULL_SPEED_OPERATION |
 728                                                      USB_HIGH_SPEED_OPERATION |
 729                                                      USB_5GBPS_OPERATION);
 730                ss_cap->bFunctionalitySupport = USB_LOW_SPEED_OPERATION;
 731                ss_cap->bU1devExitLat = dcd_config_params.bU1devExitLat;
 732                ss_cap->bU2DevExitLat = dcd_config_params.bU2DevExitLat;
 733        }
 734
 735        /* The SuperSpeedPlus USB Device Capability descriptor */
 736        if (gadget_is_superspeed_plus(cdev->gadget)) {
 737                struct usb_ssp_cap_descriptor *ssp_cap;
 738                u8 ssac = 1;
 739                u8 ssic;
 740                int i;
 741
 742                if (cdev->gadget->max_ssp_rate == USB_SSP_GEN_2x2)
 743                        ssac = 3;
 744
 745                /*
 746                 * Paired RX and TX sublink speed attributes share
 747                 * the same SSID.
 748                 */
 749                ssic = (ssac + 1) / 2 - 1;
 750
 751                ssp_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength);
 752                bos->bNumDeviceCaps++;
 753
 754                le16_add_cpu(&bos->wTotalLength, USB_DT_USB_SSP_CAP_SIZE(ssac));
 755                ssp_cap->bLength = USB_DT_USB_SSP_CAP_SIZE(ssac);
 756                ssp_cap->bDescriptorType = USB_DT_DEVICE_CAPABILITY;
 757                ssp_cap->bDevCapabilityType = USB_SSP_CAP_TYPE;
 758                ssp_cap->bReserved = 0;
 759                ssp_cap->wReserved = 0;
 760
 761                ssp_cap->bmAttributes =
 762                        cpu_to_le32(FIELD_PREP(USB_SSP_SUBLINK_SPEED_ATTRIBS, ssac) |
 763                                    FIELD_PREP(USB_SSP_SUBLINK_SPEED_IDS, ssic));
 764
 765                ssp_cap->wFunctionalitySupport =
 766                        cpu_to_le16(FIELD_PREP(USB_SSP_MIN_SUBLINK_SPEED_ATTRIBUTE_ID, 0) |
 767                                    FIELD_PREP(USB_SSP_MIN_RX_LANE_COUNT, 1) |
 768                                    FIELD_PREP(USB_SSP_MIN_TX_LANE_COUNT, 1));
 769
 770                /*
 771                 * Use 1 SSID if the gadget supports up to gen2x1 or not
 772                 * specified:
 773                 * - SSID 0 for symmetric RX/TX sublink speed of 10 Gbps.
 774                 *
 775                 * Use 1 SSID if the gadget supports up to gen1x2:
 776                 * - SSID 0 for symmetric RX/TX sublink speed of 5 Gbps.
 777                 *
 778                 * Use 2 SSIDs if the gadget supports up to gen2x2:
 779                 * - SSID 0 for symmetric RX/TX sublink speed of 5 Gbps.
 780                 * - SSID 1 for symmetric RX/TX sublink speed of 10 Gbps.
 781                 */
 782                for (i = 0; i < ssac + 1; i++) {
 783                        u8 ssid;
 784                        u8 mantissa;
 785                        u8 type;
 786
 787                        ssid = i >> 1;
 788
 789                        if (cdev->gadget->max_ssp_rate == USB_SSP_GEN_2x1 ||
 790                            cdev->gadget->max_ssp_rate == USB_SSP_GEN_UNKNOWN)
 791                                mantissa = 10;
 792                        else
 793                                mantissa = 5 << ssid;
 794
 795                        if (i % 2)
 796                                type = USB_SSP_SUBLINK_SPEED_ST_SYM_TX;
 797                        else
 798                                type = USB_SSP_SUBLINK_SPEED_ST_SYM_RX;
 799
 800                        ssp_cap->bmSublinkSpeedAttr[i] =
 801                                cpu_to_le32(FIELD_PREP(USB_SSP_SUBLINK_SPEED_SSID, ssid) |
 802                                            FIELD_PREP(USB_SSP_SUBLINK_SPEED_LSE,
 803                                                       USB_SSP_SUBLINK_SPEED_LSE_GBPS) |
 804                                            FIELD_PREP(USB_SSP_SUBLINK_SPEED_ST, type) |
 805                                            FIELD_PREP(USB_SSP_SUBLINK_SPEED_LP,
 806                                                       USB_SSP_SUBLINK_SPEED_LP_SSP) |
 807                                            FIELD_PREP(USB_SSP_SUBLINK_SPEED_LSM, mantissa));
 808                }
 809        }
 810
 811        return le16_to_cpu(bos->wTotalLength);
 812}
 813
 814static void device_qual(struct usb_composite_dev *cdev)
 815{
 816        struct usb_qualifier_descriptor *qual = cdev->req->buf;
 817
 818        qual->bLength = sizeof(*qual);
 819        qual->bDescriptorType = USB_DT_DEVICE_QUALIFIER;
 820        /* POLICY: same bcdUSB and device type info at both speeds */
 821        qual->bcdUSB = cdev->desc.bcdUSB;
 822        qual->bDeviceClass = cdev->desc.bDeviceClass;
 823        qual->bDeviceSubClass = cdev->desc.bDeviceSubClass;
 824        qual->bDeviceProtocol = cdev->desc.bDeviceProtocol;
 825        /* ASSUME same EP0 fifo size at both speeds */
 826        qual->bMaxPacketSize0 = cdev->gadget->ep0->maxpacket;
 827        qual->bNumConfigurations = count_configs(cdev, USB_DT_DEVICE_QUALIFIER);
 828        qual->bRESERVED = 0;
 829}
 830
 831/*-------------------------------------------------------------------------*/
 832
 833static void reset_config(struct usb_composite_dev *cdev)
 834{
 835        struct usb_function             *f;
 836
 837        DBG(cdev, "reset config\n");
 838
 839        list_for_each_entry(f, &cdev->config->functions, list) {
 840                if (f->disable)
 841                        f->disable(f);
 842
 843                bitmap_zero(f->endpoints, 32);
 844        }
 845        cdev->config = NULL;
 846        cdev->delayed_status = 0;
 847}
 848
 849static int set_config(struct usb_composite_dev *cdev,
 850                const struct usb_ctrlrequest *ctrl, unsigned number)
 851{
 852        struct usb_gadget       *gadget = cdev->gadget;
 853        struct usb_configuration *c = NULL;
 854        int                     result = -EINVAL;
 855        unsigned                power = gadget_is_otg(gadget) ? 8 : 100;
 856        int                     tmp;
 857
 858        if (number) {
 859                list_for_each_entry(c, &cdev->configs, list) {
 860                        if (c->bConfigurationValue == number) {
 861                                /*
 862                                 * We disable the FDs of the previous
 863                                 * configuration only if the new configuration
 864                                 * is a valid one
 865                                 */
 866                                if (cdev->config)
 867                                        reset_config(cdev);
 868                                result = 0;
 869                                break;
 870                        }
 871                }
 872                if (result < 0)
 873                        goto done;
 874        } else { /* Zero configuration value - need to reset the config */
 875                if (cdev->config)
 876                        reset_config(cdev);
 877                result = 0;
 878        }
 879
 880        DBG(cdev, "%s config #%d: %s\n",
 881            usb_speed_string(gadget->speed),
 882            number, c ? c->label : "unconfigured");
 883
 884        if (!c)
 885                goto done;
 886
 887        usb_gadget_set_state(gadget, USB_STATE_CONFIGURED);
 888        cdev->config = c;
 889
 890        /* Initialize all interfaces by setting them to altsetting zero. */
 891        for (tmp = 0; tmp < MAX_CONFIG_INTERFACES; tmp++) {
 892                struct usb_function     *f = c->interface[tmp];
 893                struct usb_descriptor_header **descriptors;
 894
 895                if (!f)
 896                        break;
 897
 898                /*
 899                 * Record which endpoints are used by the function. This is used
 900                 * to dispatch control requests targeted at that endpoint to the
 901                 * function's setup callback instead of the current
 902                 * configuration's setup callback.
 903                 */
 904                descriptors = function_descriptors(f, gadget->speed);
 905
 906                for (; *descriptors; ++descriptors) {
 907                        struct usb_endpoint_descriptor *ep;
 908                        int addr;
 909
 910                        if ((*descriptors)->bDescriptorType != USB_DT_ENDPOINT)
 911                                continue;
 912
 913                        ep = (struct usb_endpoint_descriptor *)*descriptors;
 914                        addr = ((ep->bEndpointAddress & 0x80) >> 3)
 915                             |  (ep->bEndpointAddress & 0x0f);
 916                        set_bit(addr, f->endpoints);
 917                }
 918
 919                result = f->set_alt(f, tmp, 0);
 920                if (result < 0) {
 921                        DBG(cdev, "interface %d (%s/%p) alt 0 --> %d\n",
 922                                        tmp, f->name, f, result);
 923
 924                        reset_config(cdev);
 925                        goto done;
 926                }
 927
 928                if (result == USB_GADGET_DELAYED_STATUS) {
 929                        DBG(cdev,
 930                         "%s: interface %d (%s) requested delayed status\n",
 931                                        __func__, tmp, f->name);
 932                        cdev->delayed_status++;
 933                        DBG(cdev, "delayed_status count %d\n",
 934                                        cdev->delayed_status);
 935                }
 936        }
 937
 938        /* when we return, be sure our power usage is valid */
 939        if (c->MaxPower || (c->bmAttributes & USB_CONFIG_ATT_SELFPOWER))
 940                power = c->MaxPower;
 941        else
 942                power = CONFIG_USB_GADGET_VBUS_DRAW;
 943
 944        if (gadget->speed < USB_SPEED_SUPER)
 945                power = min(power, 500U);
 946        else
 947                power = min(power, 900U);
 948done:
 949        if (power <= USB_SELF_POWER_VBUS_MAX_DRAW)
 950                usb_gadget_set_selfpowered(gadget);
 951        else
 952                usb_gadget_clear_selfpowered(gadget);
 953
 954        usb_gadget_vbus_draw(gadget, power);
 955        if (result >= 0 && cdev->delayed_status)
 956                result = USB_GADGET_DELAYED_STATUS;
 957        return result;
 958}
 959
 960int usb_add_config_only(struct usb_composite_dev *cdev,
 961                struct usb_configuration *config)
 962{
 963        struct usb_configuration *c;
 964
 965        if (!config->bConfigurationValue)
 966                return -EINVAL;
 967
 968        /* Prevent duplicate configuration identifiers */
 969        list_for_each_entry(c, &cdev->configs, list) {
 970                if (c->bConfigurationValue == config->bConfigurationValue)
 971                        return -EBUSY;
 972        }
 973
 974        config->cdev = cdev;
 975        list_add_tail(&config->list, &cdev->configs);
 976
 977        INIT_LIST_HEAD(&config->functions);
 978        config->next_interface_id = 0;
 979        memset(config->interface, 0, sizeof(config->interface));
 980
 981        return 0;
 982}
 983EXPORT_SYMBOL_GPL(usb_add_config_only);
 984
 985/**
 986 * usb_add_config() - add a configuration to a device.
 987 * @cdev: wraps the USB gadget
 988 * @config: the configuration, with bConfigurationValue assigned
 989 * @bind: the configuration's bind function
 990 * Context: single threaded during gadget setup
 991 *
 992 * One of the main tasks of a composite @bind() routine is to
 993 * add each of the configurations it supports, using this routine.
 994 *
 995 * This function returns the value of the configuration's @bind(), which
 996 * is zero for success else a negative errno value.  Binding configurations
 997 * assigns global resources including string IDs, and per-configuration
 998 * resources such as interface IDs and endpoints.
 999 */
1000int usb_add_config(struct usb_composite_dev *cdev,
1001                struct usb_configuration *config,
1002                int (*bind)(struct usb_configuration *))
1003{
1004        int                             status = -EINVAL;
1005
1006        if (!bind)
1007                goto done;
1008
1009        DBG(cdev, "adding config #%u '%s'/%p\n",
1010                        config->bConfigurationValue,
1011                        config->label, config);
1012
1013        status = usb_add_config_only(cdev, config);
1014        if (status)
1015                goto done;
1016
1017        status = bind(config);
1018        if (status < 0) {
1019                while (!list_empty(&config->functions)) {
1020                        struct usb_function             *f;
1021
1022                        f = list_first_entry(&config->functions,
1023                                        struct usb_function, list);
1024                        list_del(&f->list);
1025                        if (f->unbind) {
1026                                DBG(cdev, "unbind function '%s'/%p\n",
1027                                        f->name, f);
1028                                f->unbind(config, f);
1029                                /* may free memory for "f" */
1030                        }
1031                }
1032                list_del(&config->list);
1033                config->cdev = NULL;
1034        } else {
1035                unsigned        i;
1036
1037                DBG(cdev, "cfg %d/%p speeds:%s%s%s%s\n",
1038                        config->bConfigurationValue, config,
1039                        config->superspeed_plus ? " superplus" : "",
1040                        config->superspeed ? " super" : "",
1041                        config->highspeed ? " high" : "",
1042                        config->fullspeed
1043                                ? (gadget_is_dualspeed(cdev->gadget)
1044                                        ? " full"
1045                                        : " full/low")
1046                                : "");
1047
1048                for (i = 0; i < MAX_CONFIG_INTERFACES; i++) {
1049                        struct usb_function     *f = config->interface[i];
1050
1051                        if (!f)
1052                                continue;
1053                        DBG(cdev, "  interface %d = %s/%p\n",
1054                                i, f->name, f);
1055                }
1056        }
1057
1058        /* set_alt(), or next bind(), sets up ep->claimed as needed */
1059        usb_ep_autoconfig_reset(cdev->gadget);
1060
1061done:
1062        if (status)
1063                DBG(cdev, "added config '%s'/%u --> %d\n", config->label,
1064                                config->bConfigurationValue, status);
1065        return status;
1066}
1067EXPORT_SYMBOL_GPL(usb_add_config);
1068
1069static void remove_config(struct usb_composite_dev *cdev,
1070                              struct usb_configuration *config)
1071{
1072        while (!list_empty(&config->functions)) {
1073                struct usb_function             *f;
1074
1075                f = list_first_entry(&config->functions,
1076                                struct usb_function, list);
1077
1078                usb_remove_function(config, f);
1079        }
1080        list_del(&config->list);
1081        if (config->unbind) {
1082                DBG(cdev, "unbind config '%s'/%p\n", config->label, config);
1083                config->unbind(config);
1084                        /* may free memory for "c" */
1085        }
1086}
1087
1088/**
1089 * usb_remove_config() - remove a configuration from a device.
1090 * @cdev: wraps the USB gadget
1091 * @config: the configuration
1092 *
1093 * Drivers must call usb_gadget_disconnect before calling this function
1094 * to disconnect the device from the host and make sure the host will not
1095 * try to enumerate the device while we are changing the config list.
1096 */
1097void usb_remove_config(struct usb_composite_dev *cdev,
1098                      struct usb_configuration *config)
1099{
1100        unsigned long flags;
1101
1102        spin_lock_irqsave(&cdev->lock, flags);
1103
1104        if (cdev->config == config)
1105                reset_config(cdev);
1106
1107        spin_unlock_irqrestore(&cdev->lock, flags);
1108
1109        remove_config(cdev, config);
1110}
1111
1112/*-------------------------------------------------------------------------*/
1113
1114/* We support strings in multiple languages ... string descriptor zero
1115 * says which languages are supported.  The typical case will be that
1116 * only one language (probably English) is used, with i18n handled on
1117 * the host side.
1118 */
1119
1120static void collect_langs(struct usb_gadget_strings **sp, __le16 *buf)
1121{
1122        const struct usb_gadget_strings *s;
1123        __le16                          language;
1124        __le16                          *tmp;
1125
1126        while (*sp) {
1127                s = *sp;
1128                language = cpu_to_le16(s->language);
1129                for (tmp = buf; *tmp && tmp < &buf[USB_MAX_STRING_LEN]; tmp++) {
1130                        if (*tmp == language)
1131                                goto repeat;
1132                }
1133                *tmp++ = language;
1134repeat:
1135                sp++;
1136        }
1137}
1138
1139static int lookup_string(
1140        struct usb_gadget_strings       **sp,
1141        void                            *buf,
1142        u16                             language,
1143        int                             id
1144)
1145{
1146        struct usb_gadget_strings       *s;
1147        int                             value;
1148
1149        while (*sp) {
1150                s = *sp++;
1151                if (s->language != language)
1152                        continue;
1153                value = usb_gadget_get_string(s, id, buf);
1154                if (value > 0)
1155                        return value;
1156        }
1157        return -EINVAL;
1158}
1159
1160static int get_string(struct usb_composite_dev *cdev,
1161                void *buf, u16 language, int id)
1162{
1163        struct usb_composite_driver     *composite = cdev->driver;
1164        struct usb_gadget_string_container *uc;
1165        struct usb_configuration        *c;
1166        struct usb_function             *f;
1167        int                             len;
1168
1169        /* Yes, not only is USB's i18n support probably more than most
1170         * folk will ever care about ... also, it's all supported here.
1171         * (Except for UTF8 support for Unicode's "Astral Planes".)
1172         */
1173
1174        /* 0 == report all available language codes */
1175        if (id == 0) {
1176                struct usb_string_descriptor    *s = buf;
1177                struct usb_gadget_strings       **sp;
1178
1179                memset(s, 0, 256);
1180                s->bDescriptorType = USB_DT_STRING;
1181
1182                sp = composite->strings;
1183                if (sp)
1184                        collect_langs(sp, s->wData);
1185
1186                list_for_each_entry(c, &cdev->configs, list) {
1187                        sp = c->strings;
1188                        if (sp)
1189                                collect_langs(sp, s->wData);
1190
1191                        list_for_each_entry(f, &c->functions, list) {
1192                                sp = f->strings;
1193                                if (sp)
1194                                        collect_langs(sp, s->wData);
1195                        }
1196                }
1197                list_for_each_entry(uc, &cdev->gstrings, list) {
1198                        struct usb_gadget_strings **sp;
1199
1200                        sp = get_containers_gs(uc);
1201                        collect_langs(sp, s->wData);
1202                }
1203
1204                for (len = 0; len <= USB_MAX_STRING_LEN && s->wData[len]; len++)
1205                        continue;
1206                if (!len)
1207                        return -EINVAL;
1208
1209                s->bLength = 2 * (len + 1);
1210                return s->bLength;
1211        }
1212
1213        if (cdev->use_os_string && language == 0 && id == OS_STRING_IDX) {
1214                struct usb_os_string *b = buf;
1215                b->bLength = sizeof(*b);
1216                b->bDescriptorType = USB_DT_STRING;
1217                compiletime_assert(
1218                        sizeof(b->qwSignature) == sizeof(cdev->qw_sign),
1219                        "qwSignature size must be equal to qw_sign");
1220                memcpy(&b->qwSignature, cdev->qw_sign, sizeof(b->qwSignature));
1221                b->bMS_VendorCode = cdev->b_vendor_code;
1222                b->bPad = 0;
1223                return sizeof(*b);
1224        }
1225
1226        list_for_each_entry(uc, &cdev->gstrings, list) {
1227                struct usb_gadget_strings **sp;
1228
1229                sp = get_containers_gs(uc);
1230                len = lookup_string(sp, buf, language, id);
1231                if (len > 0)
1232                        return len;
1233        }
1234
1235        /* String IDs are device-scoped, so we look up each string
1236         * table we're told about.  These lookups are infrequent;
1237         * simpler-is-better here.
1238         */
1239        if (composite->strings) {
1240                len = lookup_string(composite->strings, buf, language, id);
1241                if (len > 0)
1242                        return len;
1243        }
1244        list_for_each_entry(c, &cdev->configs, list) {
1245                if (c->strings) {
1246                        len = lookup_string(c->strings, buf, language, id);
1247                        if (len > 0)
1248                                return len;
1249                }
1250                list_for_each_entry(f, &c->functions, list) {
1251                        if (!f->strings)
1252                                continue;
1253                        len = lookup_string(f->strings, buf, language, id);
1254                        if (len > 0)
1255                                return len;
1256                }
1257        }
1258        return -EINVAL;
1259}
1260
1261/**
1262 * usb_string_id() - allocate an unused string ID
1263 * @cdev: the device whose string descriptor IDs are being allocated
1264 * Context: single threaded during gadget setup
1265 *
1266 * @usb_string_id() is called from bind() callbacks to allocate
1267 * string IDs.  Drivers for functions, configurations, or gadgets will
1268 * then store that ID in the appropriate descriptors and string table.
1269 *
1270 * All string identifier should be allocated using this,
1271 * @usb_string_ids_tab() or @usb_string_ids_n() routine, to ensure
1272 * that for example different functions don't wrongly assign different
1273 * meanings to the same identifier.
1274 */
1275int usb_string_id(struct usb_composite_dev *cdev)
1276{
1277        if (cdev->next_string_id < 254) {
1278                /* string id 0 is reserved by USB spec for list of
1279                 * supported languages */
1280                /* 255 reserved as well? -- mina86 */
1281                cdev->next_string_id++;
1282                return cdev->next_string_id;
1283        }
1284        return -ENODEV;
1285}
1286EXPORT_SYMBOL_GPL(usb_string_id);
1287
1288/**
1289 * usb_string_ids_tab() - allocate unused string IDs in batch
1290 * @cdev: the device whose string descriptor IDs are being allocated
1291 * @str: an array of usb_string objects to assign numbers to
1292 * Context: single threaded during gadget setup
1293 *
1294 * @usb_string_ids() is called from bind() callbacks to allocate
1295 * string IDs.  Drivers for functions, configurations, or gadgets will
1296 * then copy IDs from the string table to the appropriate descriptors
1297 * and string table for other languages.
1298 *
1299 * All string identifier should be allocated using this,
1300 * @usb_string_id() or @usb_string_ids_n() routine, to ensure that for
1301 * example different functions don't wrongly assign different meanings
1302 * to the same identifier.
1303 */
1304int usb_string_ids_tab(struct usb_composite_dev *cdev, struct usb_string *str)
1305{
1306        int next = cdev->next_string_id;
1307
1308        for (; str->s; ++str) {
1309                if (unlikely(next >= 254))
1310                        return -ENODEV;
1311                str->id = ++next;
1312        }
1313
1314        cdev->next_string_id = next;
1315
1316        return 0;
1317}
1318EXPORT_SYMBOL_GPL(usb_string_ids_tab);
1319
1320static struct usb_gadget_string_container *copy_gadget_strings(
1321                struct usb_gadget_strings **sp, unsigned n_gstrings,
1322                unsigned n_strings)
1323{
1324        struct usb_gadget_string_container *uc;
1325        struct usb_gadget_strings **gs_array;
1326        struct usb_gadget_strings *gs;
1327        struct usb_string *s;
1328        unsigned mem;
1329        unsigned n_gs;
1330        unsigned n_s;
1331        void *stash;
1332
1333        mem = sizeof(*uc);
1334        mem += sizeof(void *) * (n_gstrings + 1);
1335        mem += sizeof(struct usb_gadget_strings) * n_gstrings;
1336        mem += sizeof(struct usb_string) * (n_strings + 1) * (n_gstrings);
1337        uc = kmalloc(mem, GFP_KERNEL);
1338        if (!uc)
1339                return ERR_PTR(-ENOMEM);
1340        gs_array = get_containers_gs(uc);
1341        stash = uc->stash;
1342        stash += sizeof(void *) * (n_gstrings + 1);
1343        for (n_gs = 0; n_gs < n_gstrings; n_gs++) {
1344                struct usb_string *org_s;
1345
1346                gs_array[n_gs] = stash;
1347                gs = gs_array[n_gs];
1348                stash += sizeof(struct usb_gadget_strings);
1349                gs->language = sp[n_gs]->language;
1350                gs->strings = stash;
1351                org_s = sp[n_gs]->strings;
1352
1353                for (n_s = 0; n_s < n_strings; n_s++) {
1354                        s = stash;
1355                        stash += sizeof(struct usb_string);
1356                        if (org_s->s)
1357                                s->s = org_s->s;
1358                        else
1359                                s->s = "";
1360                        org_s++;
1361                }
1362                s = stash;
1363                s->s = NULL;
1364                stash += sizeof(struct usb_string);
1365
1366        }
1367        gs_array[n_gs] = NULL;
1368        return uc;
1369}
1370
1371/**
1372 * usb_gstrings_attach() - attach gadget strings to a cdev and assign ids
1373 * @cdev: the device whose string descriptor IDs are being allocated
1374 * and attached.
1375 * @sp: an array of usb_gadget_strings to attach.
1376 * @n_strings: number of entries in each usb_strings array (sp[]->strings)
1377 *
1378 * This function will create a deep copy of usb_gadget_strings and usb_string
1379 * and attach it to the cdev. The actual string (usb_string.s) will not be
1380 * copied but only a referenced will be made. The struct usb_gadget_strings
1381 * array may contain multiple languages and should be NULL terminated.
1382 * The ->language pointer of each struct usb_gadget_strings has to contain the
1383 * same amount of entries.
1384 * For instance: sp[0] is en-US, sp[1] is es-ES. It is expected that the first
1385 * usb_string entry of es-ES contains the translation of the first usb_string
1386 * entry of en-US. Therefore both entries become the same id assign.
1387 */
1388struct usb_string *usb_gstrings_attach(struct usb_composite_dev *cdev,
1389                struct usb_gadget_strings **sp, unsigned n_strings)
1390{
1391        struct usb_gadget_string_container *uc;
1392        struct usb_gadget_strings **n_gs;
1393        unsigned n_gstrings = 0;
1394        unsigned i;
1395        int ret;
1396
1397        for (i = 0; sp[i]; i++)
1398                n_gstrings++;
1399
1400        if (!n_gstrings)
1401                return ERR_PTR(-EINVAL);
1402
1403        uc = copy_gadget_strings(sp, n_gstrings, n_strings);
1404        if (IS_ERR(uc))
1405                return ERR_CAST(uc);
1406
1407        n_gs = get_containers_gs(uc);
1408        ret = usb_string_ids_tab(cdev, n_gs[0]->strings);
1409        if (ret)
1410                goto err;
1411
1412        for (i = 1; i < n_gstrings; i++) {
1413                struct usb_string *m_s;
1414                struct usb_string *s;
1415                unsigned n;
1416
1417                m_s = n_gs[0]->strings;
1418                s = n_gs[i]->strings;
1419                for (n = 0; n < n_strings; n++) {
1420                        s->id = m_s->id;
1421                        s++;
1422                        m_s++;
1423                }
1424        }
1425        list_add_tail(&uc->list, &cdev->gstrings);
1426        return n_gs[0]->strings;
1427err:
1428        kfree(uc);
1429        return ERR_PTR(ret);
1430}
1431EXPORT_SYMBOL_GPL(usb_gstrings_attach);
1432
1433/**
1434 * usb_string_ids_n() - allocate unused string IDs in batch
1435 * @c: the device whose string descriptor IDs are being allocated
1436 * @n: number of string IDs to allocate
1437 * Context: single threaded during gadget setup
1438 *
1439 * Returns the first requested ID.  This ID and next @n-1 IDs are now
1440 * valid IDs.  At least provided that @n is non-zero because if it
1441 * is, returns last requested ID which is now very useful information.
1442 *
1443 * @usb_string_ids_n() is called from bind() callbacks to allocate
1444 * string IDs.  Drivers for functions, configurations, or gadgets will
1445 * then store that ID in the appropriate descriptors and string table.
1446 *
1447 * All string identifier should be allocated using this,
1448 * @usb_string_id() or @usb_string_ids_n() routine, to ensure that for
1449 * example different functions don't wrongly assign different meanings
1450 * to the same identifier.
1451 */
1452int usb_string_ids_n(struct usb_composite_dev *c, unsigned n)
1453{
1454        unsigned next = c->next_string_id;
1455        if (unlikely(n > 254 || (unsigned)next + n > 254))
1456                return -ENODEV;
1457        c->next_string_id += n;
1458        return next + 1;
1459}
1460EXPORT_SYMBOL_GPL(usb_string_ids_n);
1461
1462/*-------------------------------------------------------------------------*/
1463
1464static void composite_setup_complete(struct usb_ep *ep, struct usb_request *req)
1465{
1466        struct usb_composite_dev *cdev;
1467
1468        if (req->status || req->actual != req->length)
1469                DBG((struct usb_composite_dev *) ep->driver_data,
1470                                "setup complete --> %d, %d/%d\n",
1471                                req->status, req->actual, req->length);
1472
1473        /*
1474         * REVIST The same ep0 requests are shared with function drivers
1475         * so they don't have to maintain the same ->complete() stubs.
1476         *
1477         * Because of that, we need to check for the validity of ->context
1478         * here, even though we know we've set it to something useful.
1479         */
1480        if (!req->context)
1481                return;
1482
1483        cdev = req->context;
1484
1485        if (cdev->req == req)
1486                cdev->setup_pending = false;
1487        else if (cdev->os_desc_req == req)
1488                cdev->os_desc_pending = false;
1489        else
1490                WARN(1, "unknown request %p\n", req);
1491}
1492
1493static int composite_ep0_queue(struct usb_composite_dev *cdev,
1494                struct usb_request *req, gfp_t gfp_flags)
1495{
1496        int ret;
1497
1498        ret = usb_ep_queue(cdev->gadget->ep0, req, gfp_flags);
1499        if (ret == 0) {
1500                if (cdev->req == req)
1501                        cdev->setup_pending = true;
1502                else if (cdev->os_desc_req == req)
1503                        cdev->os_desc_pending = true;
1504                else
1505                        WARN(1, "unknown request %p\n", req);
1506        }
1507
1508        return ret;
1509}
1510
1511static int count_ext_compat(struct usb_configuration *c)
1512{
1513        int i, res;
1514
1515        res = 0;
1516        for (i = 0; i < c->next_interface_id; ++i) {
1517                struct usb_function *f;
1518                int j;
1519
1520                f = c->interface[i];
1521                for (j = 0; j < f->os_desc_n; ++j) {
1522                        struct usb_os_desc *d;
1523
1524                        if (i != f->os_desc_table[j].if_id)
1525                                continue;
1526                        d = f->os_desc_table[j].os_desc;
1527                        if (d && d->ext_compat_id)
1528                                ++res;
1529                }
1530        }
1531        BUG_ON(res > 255);
1532        return res;
1533}
1534
1535static int fill_ext_compat(struct usb_configuration *c, u8 *buf)
1536{
1537        int i, count;
1538
1539        count = 16;
1540        buf += 16;
1541        for (i = 0; i < c->next_interface_id; ++i) {
1542                struct usb_function *f;
1543                int j;
1544
1545                f = c->interface[i];
1546                for (j = 0; j < f->os_desc_n; ++j) {
1547                        struct usb_os_desc *d;
1548
1549                        if (i != f->os_desc_table[j].if_id)
1550                                continue;
1551                        d = f->os_desc_table[j].os_desc;
1552                        if (d && d->ext_compat_id) {
1553                                *buf++ = i;
1554                                *buf++ = 0x01;
1555                                memcpy(buf, d->ext_compat_id, 16);
1556                                buf += 22;
1557                        } else {
1558                                ++buf;
1559                                *buf = 0x01;
1560                                buf += 23;
1561                        }
1562                        count += 24;
1563                        if (count + 24 >= USB_COMP_EP0_OS_DESC_BUFSIZ)
1564                                return count;
1565                }
1566        }
1567
1568        return count;
1569}
1570
1571static int count_ext_prop(struct usb_configuration *c, int interface)
1572{
1573        struct usb_function *f;
1574        int j;
1575
1576        f = c->interface[interface];
1577        for (j = 0; j < f->os_desc_n; ++j) {
1578                struct usb_os_desc *d;
1579
1580                if (interface != f->os_desc_table[j].if_id)
1581                        continue;
1582                d = f->os_desc_table[j].os_desc;
1583                if (d && d->ext_compat_id)
1584                        return d->ext_prop_count;
1585        }
1586        return 0;
1587}
1588
1589static int len_ext_prop(struct usb_configuration *c, int interface)
1590{
1591        struct usb_function *f;
1592        struct usb_os_desc *d;
1593        int j, res;
1594
1595        res = 10; /* header length */
1596        f = c->interface[interface];
1597        for (j = 0; j < f->os_desc_n; ++j) {
1598                if (interface != f->os_desc_table[j].if_id)
1599                        continue;
1600                d = f->os_desc_table[j].os_desc;
1601                if (d)
1602                        return min(res + d->ext_prop_len, 4096);
1603        }
1604        return res;
1605}
1606
1607static int fill_ext_prop(struct usb_configuration *c, int interface, u8 *buf)
1608{
1609        struct usb_function *f;
1610        struct usb_os_desc *d;
1611        struct usb_os_desc_ext_prop *ext_prop;
1612        int j, count, n, ret;
1613
1614        f = c->interface[interface];
1615        count = 10; /* header length */
1616        buf += 10;
1617        for (j = 0; j < f->os_desc_n; ++j) {
1618                if (interface != f->os_desc_table[j].if_id)
1619                        continue;
1620                d = f->os_desc_table[j].os_desc;
1621                if (d)
1622                        list_for_each_entry(ext_prop, &d->ext_prop, entry) {
1623                                n = ext_prop->data_len +
1624                                        ext_prop->name_len + 14;
1625                                if (count + n >= USB_COMP_EP0_OS_DESC_BUFSIZ)
1626                                        return count;
1627                                usb_ext_prop_put_size(buf, n);
1628                                usb_ext_prop_put_type(buf, ext_prop->type);
1629                                ret = usb_ext_prop_put_name(buf, ext_prop->name,
1630                                                            ext_prop->name_len);
1631                                if (ret < 0)
1632                                        return ret;
1633                                switch (ext_prop->type) {
1634                                case USB_EXT_PROP_UNICODE:
1635                                case USB_EXT_PROP_UNICODE_ENV:
1636                                case USB_EXT_PROP_UNICODE_LINK:
1637                                        usb_ext_prop_put_unicode(buf, ret,
1638                                                         ext_prop->data,
1639                                                         ext_prop->data_len);
1640                                        break;
1641                                case USB_EXT_PROP_BINARY:
1642                                        usb_ext_prop_put_binary(buf, ret,
1643                                                        ext_prop->data,
1644                                                        ext_prop->data_len);
1645                                        break;
1646                                case USB_EXT_PROP_LE32:
1647                                        /* not implemented */
1648                                case USB_EXT_PROP_BE32:
1649                                        /* not implemented */
1650                                default:
1651                                        return -EINVAL;
1652                                }
1653                                buf += n;
1654                                count += n;
1655                        }
1656        }
1657
1658        return count;
1659}
1660
1661/*
1662 * The setup() callback implements all the ep0 functionality that's
1663 * not handled lower down, in hardware or the hardware driver(like
1664 * device and endpoint feature flags, and their status).  It's all
1665 * housekeeping for the gadget function we're implementing.  Most of
1666 * the work is in config and function specific setup.
1667 */
1668int
1669composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
1670{
1671        struct usb_composite_dev        *cdev = get_gadget_data(gadget);
1672        struct usb_request              *req = cdev->req;
1673        int                             value = -EOPNOTSUPP;
1674        int                             status = 0;
1675        u16                             w_index = le16_to_cpu(ctrl->wIndex);
1676        u8                              intf = w_index & 0xFF;
1677        u16                             w_value = le16_to_cpu(ctrl->wValue);
1678        u16                             w_length = le16_to_cpu(ctrl->wLength);
1679        struct usb_function             *f = NULL;
1680        u8                              endp;
1681
1682        /* partial re-init of the response message; the function or the
1683         * gadget might need to intercept e.g. a control-OUT completion
1684         * when we delegate to it.
1685         */
1686        req->zero = 0;
1687        req->context = cdev;
1688        req->complete = composite_setup_complete;
1689        req->length = 0;
1690        gadget->ep0->driver_data = cdev;
1691
1692        /*
1693         * Don't let non-standard requests match any of the cases below
1694         * by accident.
1695         */
1696        if ((ctrl->bRequestType & USB_TYPE_MASK) != USB_TYPE_STANDARD)
1697                goto unknown;
1698
1699        switch (ctrl->bRequest) {
1700
1701        /* we handle all standard USB descriptors */
1702        case USB_REQ_GET_DESCRIPTOR:
1703                if (ctrl->bRequestType != USB_DIR_IN)
1704                        goto unknown;
1705                switch (w_value >> 8) {
1706
1707                case USB_DT_DEVICE:
1708                        cdev->desc.bNumConfigurations =
1709                                count_configs(cdev, USB_DT_DEVICE);
1710                        cdev->desc.bMaxPacketSize0 =
1711                                cdev->gadget->ep0->maxpacket;
1712                        if (gadget_is_superspeed(gadget)) {
1713                                if (gadget->speed >= USB_SPEED_SUPER) {
1714                                        cdev->desc.bcdUSB = cpu_to_le16(0x0320);
1715                                        cdev->desc.bMaxPacketSize0 = 9;
1716                                } else {
1717                                        cdev->desc.bcdUSB = cpu_to_le16(0x0210);
1718                                }
1719                        } else {
1720                                if (gadget->lpm_capable)
1721                                        cdev->desc.bcdUSB = cpu_to_le16(0x0201);
1722                                else
1723                                        cdev->desc.bcdUSB = cpu_to_le16(0x0200);
1724                        }
1725
1726                        value = min(w_length, (u16) sizeof cdev->desc);
1727                        memcpy(req->buf, &cdev->desc, value);
1728                        break;
1729                case USB_DT_DEVICE_QUALIFIER:
1730                        if (!gadget_is_dualspeed(gadget) ||
1731                            gadget->speed >= USB_SPEED_SUPER)
1732                                break;
1733                        device_qual(cdev);
1734                        value = min_t(int, w_length,
1735                                sizeof(struct usb_qualifier_descriptor));
1736                        break;
1737                case USB_DT_OTHER_SPEED_CONFIG:
1738                        if (!gadget_is_dualspeed(gadget) ||
1739                            gadget->speed >= USB_SPEED_SUPER)
1740                                break;
1741                        fallthrough;
1742                case USB_DT_CONFIG:
1743                        value = config_desc(cdev, w_value);
1744                        if (value >= 0)
1745                                value = min(w_length, (u16) value);
1746                        break;
1747                case USB_DT_STRING:
1748                        value = get_string(cdev, req->buf,
1749                                        w_index, w_value & 0xff);
1750                        if (value >= 0)
1751                                value = min(w_length, (u16) value);
1752                        break;
1753                case USB_DT_BOS:
1754                        if (gadget_is_superspeed(gadget) ||
1755                            gadget->lpm_capable) {
1756                                value = bos_desc(cdev);
1757                                value = min(w_length, (u16) value);
1758                        }
1759                        break;
1760                case USB_DT_OTG:
1761                        if (gadget_is_otg(gadget)) {
1762                                struct usb_configuration *config;
1763                                int otg_desc_len = 0;
1764
1765                                if (cdev->config)
1766                                        config = cdev->config;
1767                                else
1768                                        config = list_first_entry(
1769                                                        &cdev->configs,
1770                                                struct usb_configuration, list);
1771                                if (!config)
1772                                        goto done;
1773
1774                                if (gadget->otg_caps &&
1775                                        (gadget->otg_caps->otg_rev >= 0x0200))
1776                                        otg_desc_len += sizeof(
1777                                                struct usb_otg20_descriptor);
1778                                else
1779                                        otg_desc_len += sizeof(
1780                                                struct usb_otg_descriptor);
1781
1782                                value = min_t(int, w_length, otg_desc_len);
1783                                memcpy(req->buf, config->descriptors[0], value);
1784                        }
1785                        break;
1786                }
1787                break;
1788
1789        /* any number of configs can work */
1790        case USB_REQ_SET_CONFIGURATION:
1791                if (ctrl->bRequestType != 0)
1792                        goto unknown;
1793                if (gadget_is_otg(gadget)) {
1794                        if (gadget->a_hnp_support)
1795                                DBG(cdev, "HNP available\n");
1796                        else if (gadget->a_alt_hnp_support)
1797                                DBG(cdev, "HNP on another port\n");
1798                        else
1799                                VDBG(cdev, "HNP inactive\n");
1800                }
1801                spin_lock(&cdev->lock);
1802                value = set_config(cdev, ctrl, w_value);
1803                spin_unlock(&cdev->lock);
1804                break;
1805        case USB_REQ_GET_CONFIGURATION:
1806                if (ctrl->bRequestType != USB_DIR_IN)
1807                        goto unknown;
1808                if (cdev->config)
1809                        *(u8 *)req->buf = cdev->config->bConfigurationValue;
1810                else
1811                        *(u8 *)req->buf = 0;
1812                value = min(w_length, (u16) 1);
1813                break;
1814
1815        /* function drivers must handle get/set altsetting */
1816        case USB_REQ_SET_INTERFACE:
1817                if (ctrl->bRequestType != USB_RECIP_INTERFACE)
1818                        goto unknown;
1819                if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
1820                        break;
1821                f = cdev->config->interface[intf];
1822                if (!f)
1823                        break;
1824
1825                /*
1826                 * If there's no get_alt() method, we know only altsetting zero
1827                 * works. There is no need to check if set_alt() is not NULL
1828                 * as we check this in usb_add_function().
1829                 */
1830                if (w_value && !f->get_alt)
1831                        break;
1832
1833                spin_lock(&cdev->lock);
1834                value = f->set_alt(f, w_index, w_value);
1835                if (value == USB_GADGET_DELAYED_STATUS) {
1836                        DBG(cdev,
1837                         "%s: interface %d (%s) requested delayed status\n",
1838                                        __func__, intf, f->name);
1839                        cdev->delayed_status++;
1840                        DBG(cdev, "delayed_status count %d\n",
1841                                        cdev->delayed_status);
1842                }
1843                spin_unlock(&cdev->lock);
1844                break;
1845        case USB_REQ_GET_INTERFACE:
1846                if (ctrl->bRequestType != (USB_DIR_IN|USB_RECIP_INTERFACE))
1847                        goto unknown;
1848                if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
1849                        break;
1850                f = cdev->config->interface[intf];
1851                if (!f)
1852                        break;
1853                /* lots of interfaces only need altsetting zero... */
1854                value = f->get_alt ? f->get_alt(f, w_index) : 0;
1855                if (value < 0)
1856                        break;
1857                *((u8 *)req->buf) = value;
1858                value = min(w_length, (u16) 1);
1859                break;
1860        case USB_REQ_GET_STATUS:
1861                if (gadget_is_otg(gadget) && gadget->hnp_polling_support &&
1862                                                (w_index == OTG_STS_SELECTOR)) {
1863                        if (ctrl->bRequestType != (USB_DIR_IN |
1864                                                        USB_RECIP_DEVICE))
1865                                goto unknown;
1866                        *((u8 *)req->buf) = gadget->host_request_flag;
1867                        value = 1;
1868                        break;
1869                }
1870
1871                /*
1872                 * USB 3.0 additions:
1873                 * Function driver should handle get_status request. If such cb
1874                 * wasn't supplied we respond with default value = 0
1875                 * Note: function driver should supply such cb only for the
1876                 * first interface of the function
1877                 */
1878                if (!gadget_is_superspeed(gadget))
1879                        goto unknown;
1880                if (ctrl->bRequestType != (USB_DIR_IN | USB_RECIP_INTERFACE))
1881                        goto unknown;
1882                value = 2;      /* This is the length of the get_status reply */
1883                put_unaligned_le16(0, req->buf);
1884                if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
1885                        break;
1886                f = cdev->config->interface[intf];
1887                if (!f)
1888                        break;
1889                status = f->get_status ? f->get_status(f) : 0;
1890                if (status < 0)
1891                        break;
1892                put_unaligned_le16(status & 0x0000ffff, req->buf);
1893                break;
1894        /*
1895         * Function drivers should handle SetFeature/ClearFeature
1896         * (FUNCTION_SUSPEND) request. function_suspend cb should be supplied
1897         * only for the first interface of the function
1898         */
1899        case USB_REQ_CLEAR_FEATURE:
1900        case USB_REQ_SET_FEATURE:
1901                if (!gadget_is_superspeed(gadget))
1902                        goto unknown;
1903                if (ctrl->bRequestType != (USB_DIR_OUT | USB_RECIP_INTERFACE))
1904                        goto unknown;
1905                switch (w_value) {
1906                case USB_INTRF_FUNC_SUSPEND:
1907                        if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
1908                                break;
1909                        f = cdev->config->interface[intf];
1910                        if (!f)
1911                                break;
1912                        value = 0;
1913                        if (f->func_suspend)
1914                                value = f->func_suspend(f, w_index >> 8);
1915                        if (value < 0) {
1916                                ERROR(cdev,
1917                                      "func_suspend() returned error %d\n",
1918                                      value);
1919                                value = 0;
1920                        }
1921                        break;
1922                }
1923                break;
1924        default:
1925unknown:
1926                /*
1927                 * OS descriptors handling
1928                 */
1929                if (cdev->use_os_string && cdev->os_desc_config &&
1930                    (ctrl->bRequestType & USB_TYPE_VENDOR) &&
1931                    ctrl->bRequest == cdev->b_vendor_code) {
1932                        struct usb_configuration        *os_desc_cfg;
1933                        u8                              *buf;
1934                        int                             interface;
1935                        int                             count = 0;
1936
1937                        req = cdev->os_desc_req;
1938                        req->context = cdev;
1939                        req->complete = composite_setup_complete;
1940                        buf = req->buf;
1941                        os_desc_cfg = cdev->os_desc_config;
1942                        w_length = min_t(u16, w_length, USB_COMP_EP0_OS_DESC_BUFSIZ);
1943                        memset(buf, 0, w_length);
1944                        buf[5] = 0x01;
1945                        switch (ctrl->bRequestType & USB_RECIP_MASK) {
1946                        case USB_RECIP_DEVICE:
1947                                if (w_index != 0x4 || (w_value >> 8))
1948                                        break;
1949                                buf[6] = w_index;
1950                                /* Number of ext compat interfaces */
1951                                count = count_ext_compat(os_desc_cfg);
1952                                buf[8] = count;
1953                                count *= 24; /* 24 B/ext compat desc */
1954                                count += 16; /* header */
1955                                put_unaligned_le32(count, buf);
1956                                value = w_length;
1957                                if (w_length > 0x10) {
1958                                        value = fill_ext_compat(os_desc_cfg, buf);
1959                                        value = min_t(u16, w_length, value);
1960                                }
1961                                break;
1962                        case USB_RECIP_INTERFACE:
1963                                if (w_index != 0x5 || (w_value >> 8))
1964                                        break;
1965                                interface = w_value & 0xFF;
1966                                buf[6] = w_index;
1967                                count = count_ext_prop(os_desc_cfg,
1968                                        interface);
1969                                put_unaligned_le16(count, buf + 8);
1970                                count = len_ext_prop(os_desc_cfg,
1971                                        interface);
1972                                put_unaligned_le32(count, buf);
1973                                value = w_length;
1974                                if (w_length > 0x0A) {
1975                                        value = fill_ext_prop(os_desc_cfg,
1976                                                              interface, buf);
1977                                        if (value >= 0)
1978                                                value = min_t(u16, w_length, value);
1979                                }
1980                                break;
1981                        }
1982
1983                        goto check_value;
1984                }
1985
1986                VDBG(cdev,
1987                        "non-core control req%02x.%02x v%04x i%04x l%d\n",
1988                        ctrl->bRequestType, ctrl->bRequest,
1989                        w_value, w_index, w_length);
1990
1991                /* functions always handle their interfaces and endpoints...
1992                 * punt other recipients (other, WUSB, ...) to the current
1993                 * configuration code.
1994                 */
1995                if (cdev->config) {
1996                        list_for_each_entry(f, &cdev->config->functions, list)
1997                                if (f->req_match &&
1998                                    f->req_match(f, ctrl, false))
1999                                        goto try_fun_setup;
2000                } else {
2001                        struct usb_configuration *c;
2002                        list_for_each_entry(c, &cdev->configs, list)
2003                                list_for_each_entry(f, &c->functions, list)
2004                                        if (f->req_match &&
2005                                            f->req_match(f, ctrl, true))
2006                                                goto try_fun_setup;
2007                }
2008                f = NULL;
2009
2010                switch (ctrl->bRequestType & USB_RECIP_MASK) {
2011                case USB_RECIP_INTERFACE:
2012                        if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
2013                                break;
2014                        f = cdev->config->interface[intf];
2015                        break;
2016
2017                case USB_RECIP_ENDPOINT:
2018                        if (!cdev->config)
2019                                break;
2020                        endp = ((w_index & 0x80) >> 3) | (w_index & 0x0f);
2021                        list_for_each_entry(f, &cdev->config->functions, list) {
2022                                if (test_bit(endp, f->endpoints))
2023                                        break;
2024                        }
2025                        if (&f->list == &cdev->config->functions)
2026                                f = NULL;
2027                        break;
2028                }
2029try_fun_setup:
2030                if (f && f->setup)
2031                        value = f->setup(f, ctrl);
2032                else {
2033                        struct usb_configuration        *c;
2034
2035                        c = cdev->config;
2036                        if (!c)
2037                                goto done;
2038
2039                        /* try current config's setup */
2040                        if (c->setup) {
2041                                value = c->setup(c, ctrl);
2042                                goto done;
2043                        }
2044
2045                        /* try the only function in the current config */
2046                        if (!list_is_singular(&c->functions))
2047                                goto done;
2048                        f = list_first_entry(&c->functions, struct usb_function,
2049                                             list);
2050                        if (f->setup)
2051                                value = f->setup(f, ctrl);
2052                }
2053
2054                goto done;
2055        }
2056
2057check_value:
2058        /* respond with data transfer before status phase? */
2059        if (value >= 0 && value != USB_GADGET_DELAYED_STATUS) {
2060                req->length = value;
2061                req->context = cdev;
2062                req->zero = value < w_length;
2063                value = composite_ep0_queue(cdev, req, GFP_ATOMIC);
2064                if (value < 0) {
2065                        DBG(cdev, "ep_queue --> %d\n", value);
2066                        req->status = 0;
2067                        composite_setup_complete(gadget->ep0, req);
2068                }
2069        } else if (value == USB_GADGET_DELAYED_STATUS && w_length != 0) {
2070                WARN(cdev,
2071                        "%s: Delayed status not supported for w_length != 0",
2072                        __func__);
2073        }
2074
2075done:
2076        /* device either stalls (value < 0) or reports success */
2077        return value;
2078}
2079
2080static void __composite_disconnect(struct usb_gadget *gadget)
2081{
2082        struct usb_composite_dev        *cdev = get_gadget_data(gadget);
2083        unsigned long                   flags;
2084
2085        /* REVISIT:  should we have config and device level
2086         * disconnect callbacks?
2087         */
2088        spin_lock_irqsave(&cdev->lock, flags);
2089        cdev->suspended = 0;
2090        if (cdev->config)
2091                reset_config(cdev);
2092        if (cdev->driver->disconnect)
2093                cdev->driver->disconnect(cdev);
2094        spin_unlock_irqrestore(&cdev->lock, flags);
2095}
2096
2097void composite_disconnect(struct usb_gadget *gadget)
2098{
2099        usb_gadget_vbus_draw(gadget, 0);
2100        __composite_disconnect(gadget);
2101}
2102
2103void composite_reset(struct usb_gadget *gadget)
2104{
2105        /*
2106         * Section 1.4.13 Standard Downstream Port of the USB battery charging
2107         * specification v1.2 states that a device connected on a SDP shall only
2108         * draw at max 100mA while in a connected, but unconfigured state.
2109         */
2110        usb_gadget_vbus_draw(gadget, 100);
2111        __composite_disconnect(gadget);
2112}
2113
2114/*-------------------------------------------------------------------------*/
2115
2116static ssize_t suspended_show(struct device *dev, struct device_attribute *attr,
2117                              char *buf)
2118{
2119        struct usb_gadget *gadget = dev_to_usb_gadget(dev);
2120        struct usb_composite_dev *cdev = get_gadget_data(gadget);
2121
2122        return sprintf(buf, "%d\n", cdev->suspended);
2123}
2124static DEVICE_ATTR_RO(suspended);
2125
2126static void __composite_unbind(struct usb_gadget *gadget, bool unbind_driver)
2127{
2128        struct usb_composite_dev        *cdev = get_gadget_data(gadget);
2129        struct usb_gadget_strings       *gstr = cdev->driver->strings[0];
2130        struct usb_string               *dev_str = gstr->strings;
2131
2132        /* composite_disconnect() must already have been called
2133         * by the underlying peripheral controller driver!
2134         * so there's no i/o concurrency that could affect the
2135         * state protected by cdev->lock.
2136         */
2137        WARN_ON(cdev->config);
2138
2139        while (!list_empty(&cdev->configs)) {
2140                struct usb_configuration        *c;
2141                c = list_first_entry(&cdev->configs,
2142                                struct usb_configuration, list);
2143                remove_config(cdev, c);
2144        }
2145        if (cdev->driver->unbind && unbind_driver)
2146                cdev->driver->unbind(cdev);
2147
2148        composite_dev_cleanup(cdev);
2149
2150        if (dev_str[USB_GADGET_MANUFACTURER_IDX].s == cdev->def_manufacturer)
2151                dev_str[USB_GADGET_MANUFACTURER_IDX].s = "";
2152
2153        kfree(cdev->def_manufacturer);
2154        kfree(cdev);
2155        set_gadget_data(gadget, NULL);
2156}
2157
2158static void composite_unbind(struct usb_gadget *gadget)
2159{
2160        __composite_unbind(gadget, true);
2161}
2162
2163static void update_unchanged_dev_desc(struct usb_device_descriptor *new,
2164                const struct usb_device_descriptor *old)
2165{
2166        __le16 idVendor;
2167        __le16 idProduct;
2168        __le16 bcdDevice;
2169        u8 iSerialNumber;
2170        u8 iManufacturer;
2171        u8 iProduct;
2172
2173        /*
2174         * these variables may have been set in
2175         * usb_composite_overwrite_options()
2176         */
2177        idVendor = new->idVendor;
2178        idProduct = new->idProduct;
2179        bcdDevice = new->bcdDevice;
2180        iSerialNumber = new->iSerialNumber;
2181        iManufacturer = new->iManufacturer;
2182        iProduct = new->iProduct;
2183
2184        *new = *old;
2185        if (idVendor)
2186                new->idVendor = idVendor;
2187        if (idProduct)
2188                new->idProduct = idProduct;
2189        if (bcdDevice)
2190                new->bcdDevice = bcdDevice;
2191        else
2192                new->bcdDevice = cpu_to_le16(get_default_bcdDevice());
2193        if (iSerialNumber)
2194                new->iSerialNumber = iSerialNumber;
2195        if (iManufacturer)
2196                new->iManufacturer = iManufacturer;
2197        if (iProduct)
2198                new->iProduct = iProduct;
2199}
2200
2201int composite_dev_prepare(struct usb_composite_driver *composite,
2202                struct usb_composite_dev *cdev)
2203{
2204        struct usb_gadget *gadget = cdev->gadget;
2205        int ret = -ENOMEM;
2206
2207        /* preallocate control response and buffer */
2208        cdev->req = usb_ep_alloc_request(gadget->ep0, GFP_KERNEL);
2209        if (!cdev->req)
2210                return -ENOMEM;
2211
2212        cdev->req->buf = kmalloc(USB_COMP_EP0_BUFSIZ, GFP_KERNEL);
2213        if (!cdev->req->buf)
2214                goto fail;
2215
2216        ret = device_create_file(&gadget->dev, &dev_attr_suspended);
2217        if (ret)
2218                goto fail_dev;
2219
2220        cdev->req->complete = composite_setup_complete;
2221        cdev->req->context = cdev;
2222        gadget->ep0->driver_data = cdev;
2223
2224        cdev->driver = composite;
2225
2226        /*
2227         * As per USB compliance update, a device that is actively drawing
2228         * more than 100mA from USB must report itself as bus-powered in
2229         * the GetStatus(DEVICE) call.
2230         */
2231        if (CONFIG_USB_GADGET_VBUS_DRAW <= USB_SELF_POWER_VBUS_MAX_DRAW)
2232                usb_gadget_set_selfpowered(gadget);
2233
2234        /* interface and string IDs start at zero via kzalloc.
2235         * we force endpoints to start unassigned; few controller
2236         * drivers will zero ep->driver_data.
2237         */
2238        usb_ep_autoconfig_reset(gadget);
2239        return 0;
2240fail_dev:
2241        kfree(cdev->req->buf);
2242fail:
2243        usb_ep_free_request(gadget->ep0, cdev->req);
2244        cdev->req = NULL;
2245        return ret;
2246}
2247
2248int composite_os_desc_req_prepare(struct usb_composite_dev *cdev,
2249                                  struct usb_ep *ep0)
2250{
2251        int ret = 0;
2252
2253        cdev->os_desc_req = usb_ep_alloc_request(ep0, GFP_KERNEL);
2254        if (!cdev->os_desc_req) {
2255                ret = -ENOMEM;
2256                goto end;
2257        }
2258
2259        cdev->os_desc_req->buf = kmalloc(USB_COMP_EP0_OS_DESC_BUFSIZ,
2260                                         GFP_KERNEL);
2261        if (!cdev->os_desc_req->buf) {
2262                ret = -ENOMEM;
2263                usb_ep_free_request(ep0, cdev->os_desc_req);
2264                goto end;
2265        }
2266        cdev->os_desc_req->context = cdev;
2267        cdev->os_desc_req->complete = composite_setup_complete;
2268end:
2269        return ret;
2270}
2271
2272void composite_dev_cleanup(struct usb_composite_dev *cdev)
2273{
2274        struct usb_gadget_string_container *uc, *tmp;
2275        struct usb_ep                      *ep, *tmp_ep;
2276
2277        list_for_each_entry_safe(uc, tmp, &cdev->gstrings, list) {
2278                list_del(&uc->list);
2279                kfree(uc);
2280        }
2281        if (cdev->os_desc_req) {
2282                if (cdev->os_desc_pending)
2283                        usb_ep_dequeue(cdev->gadget->ep0, cdev->os_desc_req);
2284
2285                kfree(cdev->os_desc_req->buf);
2286                cdev->os_desc_req->buf = NULL;
2287                usb_ep_free_request(cdev->gadget->ep0, cdev->os_desc_req);
2288                cdev->os_desc_req = NULL;
2289        }
2290        if (cdev->req) {
2291                if (cdev->setup_pending)
2292                        usb_ep_dequeue(cdev->gadget->ep0, cdev->req);
2293
2294                kfree(cdev->req->buf);
2295                cdev->req->buf = NULL;
2296                usb_ep_free_request(cdev->gadget->ep0, cdev->req);
2297                cdev->req = NULL;
2298        }
2299        cdev->next_string_id = 0;
2300        device_remove_file(&cdev->gadget->dev, &dev_attr_suspended);
2301
2302        /*
2303         * Some UDC backends have a dynamic EP allocation scheme.
2304         *
2305         * In that case, the dispose() callback is used to notify the
2306         * backend that the EPs are no longer in use.
2307         *
2308         * Note: The UDC backend can remove the EP from the ep_list as
2309         *       a result, so we need to use the _safe list iterator.
2310         */
2311        list_for_each_entry_safe(ep, tmp_ep,
2312                                 &cdev->gadget->ep_list, ep_list) {
2313                if (ep->ops->dispose)
2314                        ep->ops->dispose(ep);
2315        }
2316}
2317
2318static int composite_bind(struct usb_gadget *gadget,
2319                struct usb_gadget_driver *gdriver)
2320{
2321        struct usb_composite_dev        *cdev;
2322        struct usb_composite_driver     *composite = to_cdriver(gdriver);
2323        int                             status = -ENOMEM;
2324
2325        cdev = kzalloc(sizeof *cdev, GFP_KERNEL);
2326        if (!cdev)
2327                return status;
2328
2329        spin_lock_init(&cdev->lock);
2330        cdev->gadget = gadget;
2331        set_gadget_data(gadget, cdev);
2332        INIT_LIST_HEAD(&cdev->configs);
2333        INIT_LIST_HEAD(&cdev->gstrings);
2334
2335        status = composite_dev_prepare(composite, cdev);
2336        if (status)
2337                goto fail;
2338
2339        /* composite gadget needs to assign strings for whole device (like
2340         * serial number), register function drivers, potentially update
2341         * power state and consumption, etc
2342         */
2343        status = composite->bind(cdev);
2344        if (status < 0)
2345                goto fail;
2346
2347        if (cdev->use_os_string) {
2348                status = composite_os_desc_req_prepare(cdev, gadget->ep0);
2349                if (status)
2350                        goto fail;
2351        }
2352
2353        update_unchanged_dev_desc(&cdev->desc, composite->dev);
2354
2355        /* has userspace failed to provide a serial number? */
2356        if (composite->needs_serial && !cdev->desc.iSerialNumber)
2357                WARNING(cdev, "userspace failed to provide iSerialNumber\n");
2358
2359        INFO(cdev, "%s ready\n", composite->name);
2360        return 0;
2361
2362fail:
2363        __composite_unbind(gadget, false);
2364        return status;
2365}
2366
2367/*-------------------------------------------------------------------------*/
2368
2369void composite_suspend(struct usb_gadget *gadget)
2370{
2371        struct usb_composite_dev        *cdev = get_gadget_data(gadget);
2372        struct usb_function             *f;
2373
2374        /* REVISIT:  should we have config level
2375         * suspend/resume callbacks?
2376         */
2377        DBG(cdev, "suspend\n");
2378        if (cdev->config) {
2379                list_for_each_entry(f, &cdev->config->functions, list) {
2380                        if (f->suspend)
2381                                f->suspend(f);
2382                }
2383        }
2384        if (cdev->driver->suspend)
2385                cdev->driver->suspend(cdev);
2386
2387        cdev->suspended = 1;
2388
2389        usb_gadget_set_selfpowered(gadget);
2390        usb_gadget_vbus_draw(gadget, 2);
2391}
2392
2393void composite_resume(struct usb_gadget *gadget)
2394{
2395        struct usb_composite_dev        *cdev = get_gadget_data(gadget);
2396        struct usb_function             *f;
2397        unsigned                        maxpower;
2398
2399        /* REVISIT:  should we have config level
2400         * suspend/resume callbacks?
2401         */
2402        DBG(cdev, "resume\n");
2403        if (cdev->driver->resume)
2404                cdev->driver->resume(cdev);
2405        if (cdev->config) {
2406                list_for_each_entry(f, &cdev->config->functions, list) {
2407                        if (f->resume)
2408                                f->resume(f);
2409                }
2410
2411                maxpower = cdev->config->MaxPower ?
2412                        cdev->config->MaxPower : CONFIG_USB_GADGET_VBUS_DRAW;
2413                if (gadget->speed < USB_SPEED_SUPER)
2414                        maxpower = min(maxpower, 500U);
2415                else
2416                        maxpower = min(maxpower, 900U);
2417
2418                if (maxpower > USB_SELF_POWER_VBUS_MAX_DRAW)
2419                        usb_gadget_clear_selfpowered(gadget);
2420
2421                usb_gadget_vbus_draw(gadget, maxpower);
2422        }
2423
2424        cdev->suspended = 0;
2425}
2426
2427/*-------------------------------------------------------------------------*/
2428
2429static const struct usb_gadget_driver composite_driver_template = {
2430        .bind           = composite_bind,
2431        .unbind         = composite_unbind,
2432
2433        .setup          = composite_setup,
2434        .reset          = composite_reset,
2435        .disconnect     = composite_disconnect,
2436
2437        .suspend        = composite_suspend,
2438        .resume         = composite_resume,
2439
2440        .driver = {
2441                .owner          = THIS_MODULE,
2442        },
2443};
2444
2445/**
2446 * usb_composite_probe() - register a composite driver
2447 * @driver: the driver to register
2448 *
2449 * Context: single threaded during gadget setup
2450 *
2451 * This function is used to register drivers using the composite driver
2452 * framework.  The return value is zero, or a negative errno value.
2453 * Those values normally come from the driver's @bind method, which does
2454 * all the work of setting up the driver to match the hardware.
2455 *
2456 * On successful return, the gadget is ready to respond to requests from
2457 * the host, unless one of its components invokes usb_gadget_disconnect()
2458 * while it was binding.  That would usually be done in order to wait for
2459 * some userspace participation.
2460 */
2461int usb_composite_probe(struct usb_composite_driver *driver)
2462{
2463        struct usb_gadget_driver *gadget_driver;
2464
2465        if (!driver || !driver->dev || !driver->bind)
2466                return -EINVAL;
2467
2468        if (!driver->name)
2469                driver->name = "composite";
2470
2471        driver->gadget_driver = composite_driver_template;
2472        gadget_driver = &driver->gadget_driver;
2473
2474        gadget_driver->function =  (char *) driver->name;
2475        gadget_driver->driver.name = driver->name;
2476        gadget_driver->max_speed = driver->max_speed;
2477
2478        return usb_gadget_probe_driver(gadget_driver);
2479}
2480EXPORT_SYMBOL_GPL(usb_composite_probe);
2481
2482/**
2483 * usb_composite_unregister() - unregister a composite driver
2484 * @driver: the driver to unregister
2485 *
2486 * This function is used to unregister drivers using the composite
2487 * driver framework.
2488 */
2489void usb_composite_unregister(struct usb_composite_driver *driver)
2490{
2491        usb_gadget_unregister_driver(&driver->gadget_driver);
2492}
2493EXPORT_SYMBOL_GPL(usb_composite_unregister);
2494
2495/**
2496 * usb_composite_setup_continue() - Continue with the control transfer
2497 * @cdev: the composite device who's control transfer was kept waiting
2498 *
2499 * This function must be called by the USB function driver to continue
2500 * with the control transfer's data/status stage in case it had requested to
2501 * delay the data/status stages. A USB function's setup handler (e.g. set_alt())
2502 * can request the composite framework to delay the setup request's data/status
2503 * stages by returning USB_GADGET_DELAYED_STATUS.
2504 */
2505void usb_composite_setup_continue(struct usb_composite_dev *cdev)
2506{
2507        int                     value;
2508        struct usb_request      *req = cdev->req;
2509        unsigned long           flags;
2510
2511        DBG(cdev, "%s\n", __func__);
2512        spin_lock_irqsave(&cdev->lock, flags);
2513
2514        if (cdev->delayed_status == 0) {
2515                WARN(cdev, "%s: Unexpected call\n", __func__);
2516
2517        } else if (--cdev->delayed_status == 0) {
2518                DBG(cdev, "%s: Completing delayed status\n", __func__);
2519                req->length = 0;
2520                req->context = cdev;
2521                value = composite_ep0_queue(cdev, req, GFP_ATOMIC);
2522                if (value < 0) {
2523                        DBG(cdev, "ep_queue --> %d\n", value);
2524                        req->status = 0;
2525                        composite_setup_complete(cdev->gadget->ep0, req);
2526                }
2527        }
2528
2529        spin_unlock_irqrestore(&cdev->lock, flags);
2530}
2531EXPORT_SYMBOL_GPL(usb_composite_setup_continue);
2532
2533static char *composite_default_mfr(struct usb_gadget *gadget)
2534{
2535        return kasprintf(GFP_KERNEL, "%s %s with %s", init_utsname()->sysname,
2536                         init_utsname()->release, gadget->name);
2537}
2538
2539void usb_composite_overwrite_options(struct usb_composite_dev *cdev,
2540                struct usb_composite_overwrite *covr)
2541{
2542        struct usb_device_descriptor    *desc = &cdev->desc;
2543        struct usb_gadget_strings       *gstr = cdev->driver->strings[0];
2544        struct usb_string               *dev_str = gstr->strings;
2545
2546        if (covr->idVendor)
2547                desc->idVendor = cpu_to_le16(covr->idVendor);
2548
2549        if (covr->idProduct)
2550                desc->idProduct = cpu_to_le16(covr->idProduct);
2551
2552        if (covr->bcdDevice)
2553                desc->bcdDevice = cpu_to_le16(covr->bcdDevice);
2554
2555        if (covr->serial_number) {
2556                desc->iSerialNumber = dev_str[USB_GADGET_SERIAL_IDX].id;
2557                dev_str[USB_GADGET_SERIAL_IDX].s = covr->serial_number;
2558        }
2559        if (covr->manufacturer) {
2560                desc->iManufacturer = dev_str[USB_GADGET_MANUFACTURER_IDX].id;
2561                dev_str[USB_GADGET_MANUFACTURER_IDX].s = covr->manufacturer;
2562
2563        } else if (!strlen(dev_str[USB_GADGET_MANUFACTURER_IDX].s)) {
2564                desc->iManufacturer = dev_str[USB_GADGET_MANUFACTURER_IDX].id;
2565                cdev->def_manufacturer = composite_default_mfr(cdev->gadget);
2566                dev_str[USB_GADGET_MANUFACTURER_IDX].s = cdev->def_manufacturer;
2567        }
2568
2569        if (covr->product) {
2570                desc->iProduct = dev_str[USB_GADGET_PRODUCT_IDX].id;
2571                dev_str[USB_GADGET_PRODUCT_IDX].s = covr->product;
2572        }
2573}
2574EXPORT_SYMBOL_GPL(usb_composite_overwrite_options);
2575
2576MODULE_LICENSE("GPL");
2577MODULE_AUTHOR("David Brownell");
2578