13 Oct, 2012

1 commit


11 Sep, 2012

1 commit

  • Apps which deal with devices which also have a kernel driver, need to do
    the following:
    1) Check which driver is attached, so as to not detach the wrong driver
    (ie detaching usbfs while another instance of the app is using the device)
    2) Detach the kernel driver
    3) Claim the interface

    Where moving from one step to the next for both 1-2 and 2-3 consists of
    a (small) race window. So currently such apps are racy and people just live
    with it.

    This patch adds a new ioctl which makes it possible for apps to do this
    in a race free manner. For flexibility apps can choose to:
    1) Specify the driver to disconnect
    2) Specify to disconnect any driver except for the one named by the app
    3) Disconnect any driver

    Note that if there is no driver attached, the ioctl will just act like the
    regular claim-interface ioctl, this is by design, as returning an error for
    this condition would open a new bag of race-conditions.

    Changes in v2:
    -Fix indentation of if blocks where the condition spans multiple lines

    Signed-off-by: Hans de Goede
    Acked-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     

07 Jul, 2012

2 commits

  • When using urb->transfer_buffer we need to allocate physical contiguous buffers
    for the entire transfer, which is pretty much guaranteed to fail with large
    transfers.

    Currently userspace works around this by breaking large transfers into multiple
    urbs. For large bulk transfers this leads to all kind of complications.

    This patch makes it possible for userspace to reliable submit large bulk
    transfers to scatter-gather capable host controllers in one go, by using a
    scatterlist to break the transfer up in managable chunks.

    Signed-off-by: Hans de Goede
    Acked-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     
  • There are a few (new) usbdevfs capabilities which an application cannot
    discover in any other way then checking the kernel version. There are 3
    problems with this:
    1) It is just not very pretty.
    2) Given the tendency of enterprise distros to backport stuff it is not
    reliable.
    3) As discussed in length on the mailinglist, USBDEVFS_URB_BULK_CONTINUATION
    does not work as it should when combined with USBDEVFS_URB_SHORT_NOT_OK
    (which is its intended use) on devices attached to an XHCI controller.
    So the availability of these features can be host controller dependent,
    making depending on them based on the kernel version not a good idea.

    This patch besides adding the new ioctl also adds flags for the following
    existing capabilities:

    USBDEVFS_CAP_ZERO_PACKET, available since 2.6.31
    USBDEVFS_CAP_BULK_CONTINUATION, available since 2.6.32, except for XHCI
    USBDEVFS_CAP_NO_PACKET_SIZE_LIM, available since 3.3

    Note that this patch only does not advertise the USBDEVFS_URB_BULK_CONTINUATION
    cap for XHCI controllers, bulk transfers with this flag set will still be
    accepted when submitted to XHCI controllers.

    Returning -EINVAL for them would break existing apps, and in most cases the
    troublesome scenario wrt USBDEVFS_URB_SHORT_NOT_OK urbs on XHCI controllers
    will never get hit, so this would break working use cases.

    The disadvantage of not returning -EINVAL is that cases were it is causing
    real trouble may go undetected / the cause of the trouble may be unclear,
    but this is the best we can do.

    Signed-off-by: Hans de Goede
    Acked-by: Alan Stern
    Acked-by: Sarah Sharp
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     

11 Dec, 2009

1 commit

  • Half the compat_ioctl handling is in devio.c, the other
    half is in fs/compat_ioctl.c. This moves everything into
    one place for consistency.

    As a positive side-effect, push down the BKL into the
    ioctl methods.

    Signed-off-by: Arnd Bergmann
    Acked-by: Greg Kroah-Hartman
    Cc: Alan Stern
    Cc: Oliver Neukum
    Cc: Alon Bar-Lev
    Cc: David Vrabel
    Cc: linux-usb@vger.kernel.org

    Arnd Bergmann
     

23 Sep, 2009

2 commits

  • This patch (as1283) adds a new flag, USBDEVFS_URB_BULK_CONTINUATION,
    to usbfs. It is intended for userspace libraries such as libusb and
    openusb. When they have to break up a single usbfs bulk transfer into
    multiple URBs, they will set the flag on all but the first URB of the
    series.

    If an error other than an unlink occurs, the kernel will automatically
    cancel all the following URBs for the same endpoint and refuse to
    accept new submissions, until an URB is encountered that is not marked
    as a BULK_CONTINUATION. Such an URB would indicate the start of a new
    transfer or the presence of an older library, so the kernel returns to
    normal operation.

    This enables libraries to delimit bulk transfers correctly, even in
    the presence of early termination as indicated by short packets.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch (as1258) implements a feature that users have been asking
    for: It gives programs the ability to "claim" a port on a hub, via a
    new usbfs ioctl. A device plugged into a "claimed" port will not be
    touched by the kernel beyond the immediate necessities of
    initialization and enumeration.

    In particular, when a device is plugged into a "claimed" port, the
    kernel will not select and install a configuration. And when a config
    is installed by usbfs or sysfs, the kernel will not probe any drivers
    for any of the interfaces. (However the kernel will fetch various
    string descriptors during enumeration. One could argue that this
    isn't really necessary, but the strings are exported in sysfs.)

    The patch does not guarantee exclusive access to these devices; it is
    still possible for more than one program to open the device file
    concurrently. Programs are responsible for coordinating access among
    themselves.

    A demonstration program showing how to use the new interface can be
    found in an attachment to

    http://marc.info/?l=linux-usb&m=124345857431452&w=2

    The patch also makes a small simplification to the hub driver,
    replacing a bunch of more-or-less useless variants of "out of memory"
    with a single message.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     

22 Jul, 2008

1 commit


25 Apr, 2008

1 commit

  • This patch (as1079) cleans up the way URB_* flags are exported in
    usbfs.

    The URB_NO_INTERRUPT flag is now exported (this is the
    only behavioral change).

    USBDEVFS_URB_* macros are added for URB_NO_FSBR,
    URB_ZERO_PACKET, and URB_NO_INTERRUPT, making explicit the
    fact that the kernel accepts them.

    The flag matching takes into account that the URB_* values
    may change as the kernel evolves, whereas the USBDEVFS_URB_*
    values must remain fixed since they are a user API.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     

02 Feb, 2008

1 commit

  • fix warning:
    drivers/usb/core/devio.c:1226:20: warning: incorrect type in assignment (different address spaces)
    drivers/usb/core/devio.c:1226:20: expected void *usercontext
    drivers/usb/core/devio.c:1226:20: got void [noderef] *

    Signed-off-by: Marcin Slusarz
    Signed-off-by: Greg Kroah-Hartman

    Marcin Slusarz
     

29 Nov, 2007

1 commit

  • This trivial documentation patch corrects a comment in usbdevice_fs.h; it
    previously suggested that the signal would only be sent on error, but I am
    told that it is sent on both successful and unsuccessful completion, and
    that zero indicates that no signal should be sent.

    Signed-off-by: Phil Endecott
    Signed-off-by: Greg Kroah-Hartman

    Phil Endecott
     

17 Feb, 2007

1 commit


24 Sep, 2006

1 commit


25 Apr, 2006

1 commit


29 Oct, 2005

1 commit

  • Dell supplied me with the following test:

    #include
    #include
    #include
    #include
    #include

    main(int argc,char*argv[])
    {
    struct usbdevfs_hub_portinfo hubPortInfo = {0};
    struct usbdevfs_ioctl command = {0};
    command.ifno = 0;
    command.ioctl_code = USBDEVFS_HUB_PORTINFO;
    command.data = (void*)&hubPortInfo;
    int fd, ret;
    if(argc != 2) {
    fprintf(stderr,"Usage: %s /proc/bus/usb//\n",argv[0]);
    fprintf(stderr,"Example: %s /proc/bus/usb/001/001\n",argv[0]);
    exit(1);
    }
    errno = 0;
    fd = open(argv[1],O_RDWR);
    if(fd < 0) {
    perror("open failed:");
    exit(errno);
    }
    errno = 0;
    ret = ioctl(fd,USBDEVFS_IOCTL,&command);
    printf("IOCTL return status:%d\n",ret);
    if(ret
    Signed-off-by: Greg Kroah-Hartman

    Pete Zaitcev
     

13 Sep, 2005

1 commit

  • [USBDEVFS] fix inclusion of to avoud header mess

    Without moving the include of compat.h down, userspace programs that use
    usbdevice_fs.h end up including half the kernel includes (and eventually
    fail to compile).

    Signed-off-by: Harald Welte
    Signed-off-by: Greg Kroah-Hartman

    Harald Welte
     

17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds