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
