On Tue, Jun 15, 2004, David Brownell <[EMAIL PROTECTED]> wrote:
> Alan Stern wrote:
> >On Thu, 15 Jan 2004, Greg KH wrote:
> >
> >> We really
> >>need to start over and make usbfs2. It should look something like the
> >>gadgetfs interface.
> >
> >What about backward compatibility?
>
> How much is needed? Remember that usbfs1 and usbfs2 need to
> coexist for a while. What "usbfs1" APIs should carry forward
> to a "usbfs2-only" world, if any? It's rather ioctl-abusive.
Backward compatibility could exist simply by keeping usbfs1 around for a
little while, but keeping it deprecated.
I'd rather start from scratch to avoid some of the mistakes that usbfs1
made.
> I think before anyone dives into implementation on "usbfs2" it'd
> be worth hearing peoples' ideas on what it should do. Not so much
> "how it should do it" if possible ("use libfs", "api like this", etc)
> but more at the level of functional requirements, including any
> backwards compatibility.
>
> The one thing I keep hearing about is a file-per-endpoint I/O model.
> So that read()/write() calls can be used. And using AIO to replace
> the usbfs-specific async request model ... that can get rid of quite
> a lot of "usbfs1" problems right away. (Those are both things that
> "gadgetfs" supports.)
I don't care much about file-per-endpoint and I suspect most other
people wouldn't care much either. It doesn't buy us much.
AIO is definately something I would like to see.
> But there's more to "usbfs1" than that. Stuff like device discovery,
> lifecycle (including driver bind/unbind) and access control; "usbfs2"
> will need analogues for all that. And likely a few other things that
> applications would like to have had with usbfs. That's all stuff that
> I don't think can be borrowed from gadgetfs, since the two sides see
> different events and can't have identical responses.
>
> Here are some questions that come to mind. I don't claim to
> know the answers to many, or even most, of these.
>
> * How about usermode APIs? "libusb" and "usb(dev)fs" are
> essentially what C programmers use, and there's some
> notion of portability to non-Linux systems. I'm not
> sure it's realistic to try helping BSD implement usbfs2.
> Also, a C-only framework is undesirable. (Minimizing
> use of ioctl will be a big win for non-C programming.)
I agree. While libusb works with C and C++, other programming languages
should be able to use usbfs2 as well.
> * How about UI/commandline tools? If users can't browse
> usb devices easily with "usbfs2" I have a hard time
> imagining everyone converting. "usbutils" may well need
> replacement. Maybe sysfs is what should be browsed.
If sysfs works well, I don't see any requirement for usbfs2 to duplicate
that feature.
Especially since sysfs works for all devices.
> * How should this relate to "udev"? One implementation
> strategy would make "usbfs2" endpoint files be regular
> character devices. There are other strategies too,
> including not coupling them at all.
Perhaps a sockets interface would be more appropriate?
Device nodes work well for a generic API like block or character
devices, but it gets into problems with USB.
> * How should this relate to "sysfs"? I kind of like the
> idea of having the "usbfs2" directory structure match
> sysfs. If the two are linked effectively, then all
> of the /proc/bus/usb/devices functionality should be
> coming from sysfs. (Except, see the next point.)
>
> * How should non-current configurations be exposed?
> Right now they're not visible through sysfs in the
> way they're visible in /proc/bus/usb/devices. It may
> be just fine to say that usermode code must issue
> the control requests itself.
I can't think of any reason why we need to have non-current
configurations (or alternate settings) exposed through sysfs or usbfs2.
In fact, exposing it could be confusing.
> * How should interfaces be presented? My initial guess
> is as directory, with files for each endpoint in the
> active altsetting and likely one for ep0 ... at least,
> interfaces claimed by "usbfs2" could look that way.
>
> If they're claimed by some kernel driver, or aren't
> claimed at all, I'm not sure if they should appear.
> (Other than in sysfs.) We should still have the
> ability to let usermode code control what kernel driver
> is bound to which interface.
I agree with you.
> * How much should "usbfs2" really be part of "usbcore"?
> I think some per-device capabilities (fetching config
> descriptors, for one) should exist even when no user
> mode driver is talking to any device interface.
>
> Couldn't we make "usbfs2" just probe()/disconnect()
> like any other interface's driver ... and not have
> interfaces accessible otherwise? No auto-claim.
> Trivial if sysfs binding info becomes writable (the
> symlink syscall could do that), vs. just readonly.
usbfs1 works like that right now, except for it autobinds (with some
comments in the code to remove that "feature")
> * How should devices be presented? My initial guess is
> as a directory, with subdirectories for each interface
> and one file for ep0 access. (Unconfigured devices
> will have no interfaces, so no per-interface ep0 file.)
> Plus of course the sysfs info.
Ideally I'd like to see a single directory with all of the endpoints and
symlinks from interface directories to the endpoint directories.
> * How should buses be presented? Maybe not at all, other
> than by the root hub having a different type of name.
>
> * How will USB OTG support affect this? Hard to say just now,
> but it'll be good to keep that in mind.
>
> Anyway, that's a bunch of random thoughts and questions in the
> direction of "usbfs2". I hope they can help seed discussions!
To be honest usbfs1 hasn't limited the functionality in libusb too much.
I would just like to see cleaner interfaces in some areas. Specifically
asynchronous transfers and device connect/removal.
I guess the latter could be solved by some tighter integration into udev
as well.
JE
-------------------------------------------------------
This SF.Net email is sponsored by The 2004 JavaOne(SM) Conference
Learn from the experts at JavaOne(SM), Sun's Worldwide Java Developer
Conference, June 28 - July 1 at the Moscone Center in San Francisco, CA
REGISTER AND SAVE! http://java.sun.com/javaone/sf Priority Code NWMGYKND
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel