Skip to content
  • Bjørn Mork's avatar
    USB: cdc-wdm: implement IOCTL_WDM_MAX_COMMAND · 3edce1cf
    Bjørn Mork authored
    
    
    Userspace applications need to know the maximum supported message
    size.
    
    The cdc-wdm driver translates between a character device stream
    and a message based protocol.  Each message is transported as a
    usb control message with no further encapsulation or syncronization.
    Each read or write on the character device should translate to
    exactly one usb control message to ensure that message boundaries
    are kept intact.  That means that the userspace application must
    know the maximum message size supported by the device and driver,
    making this size a vital part of the cdc-wdm character device API.
    
    CDC WDM and CDC MBIM functions export the maximum supported
    message size through CDC functional descriptors.  The cdc-wdm and
    cdc_mbim drivers will parse these descriptors and use the value
    chosen by the device.  The only current way for a userspace
    application to retrive the value is by duplicating the descriptor
    parsing. This is an unnecessary complex task, and application
    writers are likely to postpone it, using a fixed value and adding
    a "todo" item.
    
    QMI functions have no way to tell the host what message size they
    support.  The qmi_wwan driver use a fixed value based on protocol
    recommendations and observed device behaviour.  Userspace
    applications must know and hard code the same value.  This scheme
    will break if we ever encounter a QMI device needing a device
    specific message size quirk.  We are currently unable to support
    such a device because using a non default size would break the
    implicit userspace API.
    
    The message size is currently a hidden attribute of the cdc-wdm
    userspace API.  Retrieving it is unnecessarily complex, increasing
    the possibility of drivers and applications using different limits.
    The resulting errors are hard to debug, and can only be replicated
    on identical hardware.
    
    Exporting the maximum message size from the driver simplifies the
    task for the userspace application, and creates a unified
    information source independent of device and function class. It also
    serves to document that the message size is part of the cdc-wdm
    userspace API.
    
    This proposed API extension has been presented for the authors of
    userspace applications and libraries using the current API: libmbim,
    libqmi, uqmi, oFono and ModemManager.  The replies were:
    
    Aleksander Morgado:
     "We do really need max message size for MBIM; and as you say, it may be
      good to have the max message size info also for QMI, so the new ioctl
      seems a good addition. So +1 from my side, for what it's worth."
    
    Dan Williams:
     "Yeah, +1 here.  I'd prefer the sysfs file, but the fact that that
      doesn't work for fd passing pretty much kills it."
    
    No negative replies are so far received.
    
    Cc: Aleksander Morgado <aleksander@lanedo.com>
    Cc: Dan Williams <dcbw@redhat.com>
    Signed-off-by: default avatarBjørn Mork <bjorn@mork.no>
    Acked-by: default avatarOliver Neukum <oliver@neukum.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    3edce1cf