Hi, and thank you for the kind words.
You are right, the OHCI, UHCI, and EHCI, all have periodical schedules that allow you to place TDs in specified Queues to be executed at a specific interval.
However, with xHCI, that last word, "interval" is the key. I give a small description on page 10-12, but after looking, you are absolutely right, I don't give as much detail as I did for the other three controllers. I will make a note and make sure to add information in the next edition.
With that being said, the Interval field (in the Endpoint's Context Structure) defines "the period between consecutive requests to a USB endpoint to send or receive data, expressed in 125 μs. increments." (quoted from the specs)
Imagine simply having to place an interval in a field in a context structure and the hardware does the rest... :-) Kind of makes my comment about the xHCI finally getting it right, shine a bit. :-)
This interval field is ignored by Super-speed bulk and control endpoints, but is used by all other types and speeds.
The interval field allows the hardware to have a "schedule" from 4.096 seconds (interval = 15) to almost zero seconds (interval = 0) expressed in 125uS units. However, not all devices (endpoints) support interval values of zero. "The legal range of values is 3 to 11 for Full- or Low-speed Interrupt endpoints (1 to 256 ms.) and 0 to 15 for all other endpoint types (125 μs. to 4096 ms.)", again quoted from the specs.
For more information, see Section 6.2.3.6 (page 339), in the xHCI specification (v1.00.11.117).
Again, thank you for the kind words. I appreciate them.
If you have any more questions, please feel free to post here.
Ben
-
https://www.fysnet.net/osdesign_book_series.htm