Re: [RFC v3][PATCH 1/2] usb: gadget: Add USB Functions Gadget

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Mon, Oct 22, 2012 at 04:26:35PM +0200, Sebastian Andrzej Siewior wrote:
> after a mkdir config0 you should allocate a struct usb_configuration for this.
> 
> |                +->function0
> |                    + name (=> ether)
> 
> Here I am not sure if we should name it function0 and have name property
> or just put the name of the the directory into usb_get_function() and
> request that functions.
> I am also not sure if the order of the functions is important. *I* think
> that it does not matter if we first expose the serial function and then
> the mass storage and next time the other way around. Other opinions?

I don't it should matter, what matters though is which configuration we
expose first.

> >1) What kind of ground work/housekeeping are required before configfs
> >works can be considered?
> 
> on top of my head:
> - the serial gadget family that is acm, obex and the "simple serial"
>   require to know in advance the number of available ports. This limit
>   is shared among all users of u_serial. One should look and see if this
>   limitation could be hidden somewhere in u_serial or removed
>   completely.
> 
> - if the function API is consider "okay" convert the remaining functions
>   to it.
> 
> - descriptor allocation / creation rework.
>   Each functions brings a few of their own descriptors. The user might
>   want to change them. Besides the "obvious" VID/PID thingy there are
>   the string descriptors. Currently a bunch of functions allocate the
>   descriptors "once" and check if the of the first id is 0 and if not,
>   they skip the allocation. This is done in order to share the string
>   (and descriptor which contains iSerial for instance) across multiple
>   configurations. This sharing does not work if we plan to use the same
>   function twice on two UDCs where we could have diffent IDs.

correct

>   What I had in mind was:
>   - create a copy of each descriptor. Each descriptor should have a name
>     or something different that can be used as an unique identifier.
>   - after the copy has been done, the function can request the copy by
>     the name and update some fields like the endpoint number in case of
>     an endpoint descriptor.
>   - configfs could also allow to edit some fields here like the string.

note that the string is a separate descriptor :-) configfs should allow
for a string descriptor to be linked to e.g. the iManufacturer field of
a device descriptor. Maybe a symlink is enough ?

>   - each gadget provides now two sometimes three copies of those
>     descriptors. To make things simpler the gadget could provide only
>     set of descriptors (for instance only SS) and composite would create
>     HS and FS from it if desired.

I don't think that will work. Think about isochronous and interrupt
endpoints where wMaxPacketSize can be whatever we want. I'd rather
allocate 3 sets of descriptors :-s

>   - after attaching all functions within a config, the code resets the
>     allocated endpoints. This is done because only one config can be
>     active at a time and therefore the endpoints are shared.
>     Not only the endpoints can be shared among configs but also among
>     alternate interfaces. If you look at the tcm gadget I share the same
>     endpoints between UAS and BOT. Maybe this could be done in a better
>     way. Also I hate that we allocate HS descriptors and fill the blanks
>     in FS descriptors.
> 
>   Each point here is just one of my thought. I currently try hard not to
>   mix everything in one series and get everything NAKed due to one bad
>   thought :) Right now it works. I am not sure how "well" they are.
> 
> >Can configfs works be done in parallel?
> You can take what you have and rebase on top of recent code. The problem
> is that we can't merge incomplete code and stuff that is missing something
> because we can't change an interface. The rulles are for now that we
> want a generic interface and it should be possible to attach it to more
> than just one UDC at a time and we don't want break anything.
> 
> >2) If only f_* files remain, where will they be used? Now they are
> >used by their gadget counterparts, e.g. f_sourcesink and f_loopback
> >are used by zero.c. In other words, if f_* files deal with the
> >usb functions level and only they remain, then what takes care of
> >usb configurations and usb devices?
> 
> The configfs interface. Let me tell you more what I dreaming about while
> I fall asleep: Now I try to ease the entry pain for configfs. The new
> code should be used by configfs and by the g_* code and the g_* code
> shouldn't notice a thing while using it. Once the configfs is stable and
> working well and people don't complain that it is hard to handle, we can
> ask all users to switch to it instead of using modprobe g_*. Any why
> should they use it? Because it is so much more flexible. Then we could
> provide a script/tool which is named g_zero.sh and does what "modprobe
> g_zero" would do but via configfs. And then, if nobody is using
> "modprobe g_*" anymore, we could remove them.

right.

-- 
balbi

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux