On Saturday 19 May 2007, Ragner Magalhaes wrote:
> The following series implements USB Composite Gadget Support.

And I'm finally looking at this again.  :)

These patches seem to be "step one", just starting to
make conversions.  I'm assuming that you're circulating
them to get feedback (which, sorry, has been a bit hard
to come by) before later steps...


> [PATCH 1/6] USB gadget driver.

This is badly misnamed -- "gadget.c" implies that it's the
one and only gadget driver.  But it isn't; a "gadget" is
whatever talks to the abstracted hardware.  And gadgets
aren't required to use this utility code.

This is instead a composite gadget driver optimized to work
with a *single* function driver.  It needs to be renamed.
I'd suggest "single.c", "singlefunc.c", or somesuch.


> [PATCH 2/6] Composite gadget driver.

This should actually be patch #1.  Among other things, it
defines the <linux/usb/composite.h> header used in your
patch #1!

Now, this patch is basically a version of something I sent
some time back. Explicitly *without* a signed-off-by.  So
it's wrong for you to both (a) list it as "From:" you, and
also to (b) add my signed-off-by line.


> [PATCH 3/6] Composite gadget driver upgrade.

I'm reviewing this with the expectation that the good
bits will merge directly into your #2.  In fact, since
you're including an older version of my patch, some
of that has already been done... 


> [PATCH 4/6] Kconfig modifications for USB Composite gadget support.

Not really ... there's (a) stuff to switch two gadget
drivers over so they're "function" drivers using the
"single.c" glue code, and (b) stuff to build all the
composite gadget utility code into one module, but it's
missing (c) an actual composite gadget.

I know you had an actual composite gadget in earlier
patches ... you should include one, so that we can
see that it all works.

You seem to be assuming that for example that a g_ether
module would be an Ethernet gadget driver module if
there's no composite gadget defined, else it would be
a function module.  That's the wrong way to do things.

The point of the "g_*" naming convention, and also the
Kconfig, is that when you select "Ethernet Gadget" you
get an Ethernet gadget module.

The way to assemble a given composite gadget, let's call
it "Fred" and named "g_fred", should be to link all the
functions together into that "g_fred.ko" module.  It
must be possible to modprobe "g_ether" *OR* "g_fred"...


> [PATCH 5/6] Composite File Storage gadget support.
> [PATCH 6/6] Composite Ether gadget support.

#5 and #6 just convert those gadget drivers to "function"
drivers.  But I see that they still have most of the code
which should have been eliminated by such a conversion ...


> The Composite Gadget can handle one or two configurations.
> When the first usb_function modprobe'ed

Don't assume functions can be modprobed by themselves
to mix'n'match.  There needs to be "glue" code which
understands that for example a specific combination has
particular product and vendor IDs, and in general uses
particular device descriptors.  The device class info
can matter a lot, for example...


> has two configurations 
> the Composite Gadget will have two configurations, for the
> other functions modprobe'ed after will be used the selected or
> standard configuration only, their interfaces will be part
> of the Composite's Configurations.
> Then exchanging configs in the Composite will only affect the
> first function.
> In case the first modprobe'ed function has only one configure,
> the Composite Gadget WILL have only one configuration.
> This behavior is useful when modprobe'ing g_ether as the first
> usb_function due to the RNDIS and CDC Configurations.

That seems like a fair approach to take, at least in terms
of managing configurations.  Although I don't see why only
the first function should be special.

On the other hand, folk are finding that RNDIS is significantly
less than Microsoft has promised, so maybe we shouldn't care
so much about that.  Wouldn't it simplify things if we didn't
have to handle that case?

... and then there's the whole "other speed config" thing.
There need to be both full speed and high speed configs, if
the hardware supports high speed operation...



> When the ether is modprobe'ed first:
> 
>                    (Device Decriptor)
>                  /                \
>             (Config 0)             (Config 1)
> (eth config 0 + fsg config)  (eth config 1 + fsg config)

Did you test that with MS-Windows?  The point about multiple
configs that Microsoft demands that the first listed config
be RNDIS.  (That's not necessarily config 0!!)  I don't recall
any expectation that "RNDIS + mass storage" could work...


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to