On Monday 08 January 2007 7:19 pm, YunChuan Qin wrote:
> spue35.pdf says the dm6446 usb controller Supports 4 simultaneous RX and TX
> endpoints, more can be supported by dynamically switching, Does the USB host
> driver support endpoint more than 4?

Within limits, yes -- the endpoint FIFOs get recycled.

 - Control transfers always use ep0, no matter which device they go to.

 - Bulk TX and RX use dedicated endpoints; the code in the MontaVists
   kernels uses ep1 and ep2 in unidirectional mode, the code in the
   GIT tree uses ep1 in bidirectional mode.

 - Periodic transfers (only interrupt mode supported for now, no ISO
   yet) use the remaining endpoints (two in the 2.6.10 MVL code, and
   three in the GIT tree).

So clearly any number of endpoints can be addressed, but that "switching"
is not arbitrary.  Once a hardware endpoint is assigned to a transfer,
it's not reassigned until that transfer is complete.

That produces two limitations of note:  (1) control and bulk transfers
can starve others in that same direction, if the target device is NAKing
That's the normal operational mode for e.g. USB network adapters:  post a
read, eventually it succeeds with packet in hand.  (2) since periodic
transfers normaly re-issue, those endpoints get tied down for longer than
is strictly necessary ... e.g. a keyboard, mouse, and hub could be polled
sequentially on one FIFO, given fancier code, but instead each one now
consumes its own endpoint.  Removing those two limitations isn't what
I'd call straightforward, especially since the CPPI DMA documentation
is extremely vague about aborting transfers.

- Dave


_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to