Subject: Re: usb control endpoint exclusive access
To: None <wulf@ping.net.au>
From: Lennart Augustsson <lennart@augustsson.net>
List: tech-kern
Date: 05/16/2005 17:34:07
You patch is fine and you can apply it if you like.

The control endpoint can have shared access since it
always remains open.  The other endpoints are a different matter.

	-- Lennart

Berndt Josef Wulf wrote:
> G'day,
> 
> I'm currently working with the USRP development board that uses a FX2 USB-2.0 
> interface. NetBSD has no problems in assigning it to the ugen device. The 
> application expects to be able to open endpoint 0, the designated USB
> control endpoint, by more than one process. The applications use libusb to 
> access the USB interface.
> 
> On inspection of the ugen source code it can be seen that the ugen device 
> driver only permits exclusive access to the control endpoint and any other 
> endpoint for this matter. I suspect other USB devices will do likewise.
> 
> My current work around to this problem by using a modified version of the 
> kernel permitting multiple access to the control endpoint of the USB 
> interface. The applied patch is shown below:
> 
> --- ugen.c.orig 2005-05-16 02:46:59.000000000 +0930
> +++ ugen.c      2005-05-16 03:18:59.000000000 +0930
> @@ -333,14 +333,14 @@
>         if (sc == NULL || sc->sc_dying)
>                 return (ENXIO);
> 
> -       if (sc->sc_is_open[endpt])
> -               return (EBUSY);
> -
>         if (endpt == USB_CONTROL_ENDPOINT) {
>                 sc->sc_is_open[USB_CONTROL_ENDPOINT] = 1;
>                 return (0);
>         }
> 
> +       if (sc->sc_is_open[endpt])
> +               return (EBUSY);
> +
>         /* Make sure there are pipes for all directions. */
>         for (dir = OUT; dir <= IN; dir++) {
>                 if (flag & (dir == OUT ? FWRITE : FREAD)) {
> 
> 
> This grants shared access to the control endpoint but only exclusive access 
> rights to the other endpoints.
> 
> The applications work fine with the above work around applied.
> 
> What is the best and more importantly the correct way of solving this problem?
> 
> cheerio Berndt