public inbox for ecos-devel@sourceware.org
 help / color / mirror / Atom feed
From: Frank Pagliughi <fpagliughi@mindspring.com>
To: Chris Holgate <chris@zynaptic.com>
Cc: Andrew Lunn <andrew@lunn.ch>,
	  Simon Kallweit <simon.kallweit@intefo.ch>,
	 ecos-devel@sourceware.org
Subject: Re: STM32 USB support
Date: Wed, 20 May 2009 14:54:00 -0000	[thread overview]
Message-ID: <4A1419A0.3010806@mindspring.com> (raw)
In-Reply-To: <4A13D90F.2000600@zynaptic.com>


> My main bugbear is the way in which class drivers currently access
> device endpoints.  At the moment you need to know which low level driver
> is in use and the completely arbitrary names of the exported static
> endpoint data structures.  This should really be hidden behind a generic
> API which is defined by usbs.h.  I think that this would be an easy
> change and would require mimimal additions to the existing drivers.
> Existing drivers could add the endpoint 'getter' functions and still
> export their static endpoint data structures for legacy class drivers.
>   
In addition, it's difficult to specify endpoints which can be used for 
either direction. I believe several drivers specify that all their 
generic endpoints are "rx endpoints" and if you want to use one to 
transmit data you must overlay a "tx endpoint" on top of it. That's not 
a big problem, but it's confusing. In addition, then rx/tx data 
structures lack a few fields to completely (easily) handle a generic 
endpoint, like the endpoint number, and maybe some intermediate buffer 
pointers to handle a single transfer. So each driver has to add this 
functionality in one way or another.


>> IIRC, at the time I had fairly convinced myself that what was needed was
>> an entirely new USB subsystem that would:
>> - make it much easier to work with the flexible new chips
>> - handle much more of the device enumeration
>>     
>
> There's quite a bit of code in the STM32 driver which addresses these
> issues within the existing framework.  Maybe the thing to do would be to
> factor it out into a device driver utility library which can be used
> alongside the existing framework.
>   
Agreed that this is actually more realistic.

And, keep in mind, there are a few additional tricky issues to which the 
driver writer is exposed, which can be delegated out to a common 
package. I don't think any of the drivers properly deal with the state 
change callback - most appear to emit a "current/new state" enumerated 
value (USBS_STATE_xxx) rather than a state change value 
(USBS_STATE_CHANGE_xxx).

 And the way in which transfers for bulk and interrupt endpoints need to 
be ended - in regard to short and zero packets - can get a little messy, 
but is common to all devices. With a more complete, common endpoint 
structure, this decision making could be handed off to a single, common 
set of routines.

>> - provide a very specific callbacks structure (like read/write an
>> endpoint, respond to a bus reset, set the chips' address, etc)
>> - handle more of the buffering
>>     
>
> While the existing callback setup may not be the easiest to use, it does
> provide all the required information.  As for buffering, this is
> something which I think should be a matter for the class driver writer.
>  Again, this could all be made easier by better documentation and a
> possible class driver utility library.
>   

True, though I worry that even the existing drivers have a number of 
bugs and deficiencies, especially since they're left to handle some 
common control messages on their own. And, since each new driver is 
written using an old one as a template, the bugs are perpetuated. But no 
one - my self included - wants to fix the old drivers since they're 
mostly for chips that are obsolete or no longer viable.

Frank


  reply	other threads:[~2009-05-20 14:54 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <4A11CAAA.8040900@intefo.ch>
     [not found] ` <4A11D861.8090206@zynaptic.com>
     [not found]   ` <4A11E5DF.2000403@intefo.ch>
2009-05-19 11:47     ` Chris Holgate
2009-05-19 12:00       ` Andrew Lunn
2009-05-19 15:17         ` Simon Kallweit
2009-05-19 16:28           ` Chris Holgate
2009-05-20  8:20             ` Simon Kallweit
2009-05-19 15:44         ` Chris Holgate
2009-05-20  3:09           ` Frank Pagliughi
2009-05-20 10:19             ` Chris Holgate
2009-05-20 14:54               ` Frank Pagliughi [this message]
2009-05-20 16:06                 ` Chris Holgate
2009-05-20 22:31                   ` Frank Pagliughi
2009-05-19 13:33       ` John Dallaway
2009-05-20 21:22         ` Chris Holgate
2009-05-21  7:27           ` John Dallaway
2009-05-31 15:01             ` Chris Holgate
2009-05-31 15:46               ` John Dallaway

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4A1419A0.3010806@mindspring.com \
    --to=fpagliughi@mindspring.com \
    --cc=andrew@lunn.ch \
    --cc=chris@zynaptic.com \
    --cc=ecos-devel@sourceware.org \
    --cc=simon.kallweit@intefo.ch \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).