• Jack Pham's avatar
    usb: gadget: f_fs: Re-use SS descriptors for SuperSpeedPlus · a353397b
    Jack Pham authored
    In many cases a function that supports SuperSpeed can very well
    operate in SuperSpeedPlus, if a gadget controller supports it,
    as the endpoint descriptors (and companion descriptors) are
    generally identical and can be re-used. This is true for two
    commonly used functions: Android's ADB and MTP. So we can simply
    assign the usb_function's ssp_descriptors array to point to its
    ss_descriptors, if available. Similarly, we need to allow an
    epfile's ioctl for FUNCTIONFS_ENDPOINT_DESC to correctly
    return the corresponding SuperSpeed endpoint descriptor in case
    the connected speed is SuperSpeedPlus as well.
    
    The only exception is if a function wants to implement an
    Isochronous endpoint capable of transferring more than 48KB per
    service interval when operating at greater than USB 3.1 Gen1
    speed, in which case it would require an additional SuperSpeedPlus
    Isochronous Endpoint Companion descriptor to be returned as part
    of the Configuration Descriptor. Support for that would need
    to be separately added to the userspace-facing FunctionFS API
    which may not be a trivial task--likely a new descriptor format
    (v3?) may need to be devised to allow for separate SS and SSP
    descriptors to be supplied.
    Signed-off-by: default avatarJack Pham <jackp@codeaurora.org>
    Cc: stable <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20201027230731.9073-1-jackp@codeaurora.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    a353397b
f_fs.c 90.4 KB