![Intel IXP45X Скачать руководство пользователя страница 430](http://html1.mh-extra.com/html/intel/ixp45x/ixp45x_developers-manual_2073092430.webp)
Intel
®
IXP45X and Intel
®
IXP46X Product Line of Network Processors—USB 2.0 Host Controller
Intel
®
IXP45X and Intel
®
IXP46X Product Line of Network Processors
Developer’s Manual
August 2006
430
Order Number: 306262-004US
The iTD and siTD data structures each describe 8 micro-frames worth of transactions.
The host controller is allowed to cache one (or more) of these data structures in order
to reduce memory traffic. There are three basic caching models that account for the
fact the isochronous data structures span 8 micro-frames. The three caching models
are: no caching, micro-frame caching and frame caching.
When software is adding new isochronous transactions to the schedule, it always
performs a read of the FRINDEX register to determine the current frame and micro-
frame the host controller is currently executing. Of course, there is no information
about where in the micro-frame the host controller is, so a constant uncertainty-factor
of one micro-frame has to be assumed. Combining the knowledge of where the host
controller is executing with the knowledge of the caching model allows the definition of
simple algorithms for how closely software can reliably work to the executing host
controller.
No caching is indicated with a value of zero in the Isochronous Scheduling Threshold
field. The host controller may pre-fetch data structures during a periodic schedule
traversal (per micro-frame) but will always dump any accumulated schedule state at
the end of the micro-frame. At the appropriate time relative to the beginning of every
micro-frame, the host controller always begins schedule traversal from the frame list.
Software can use the value of the FRINDEX register (plus the constant 1 uncertainty-
factor) to determine the approximate position of the executing host controller. When no
caching is selected, software can add an isochronous transaction as near as 2 micro-
frames in front of the current executing position of the host controller.
Frame caching is indicated with a non-zero value in bit [7] of the Isochronous
Scheduling Threshold field. In the frame-caching model, system software assumes that
the host controller caches one (or more) isochronous data structures for an entire
frame (8 micro-frames). Software uses the value of the FRINDEX register (plus the
constant 1 uncertainty) to determine the current micro-frame/frame (assume modulo 8
arithmetic in adding the constant 1 to the micro-frame number). For any current frame
N, if the current micro-frame is 0 to 6, then software can safely add isochronous
transactions to Frame N + 1. If the current micro-frame is 7, then software can add
isochronous transactions to Frame N + 2.
Micro-frame caching is indicated with a non-zero value in the least-significant 3 bits of
the Isochronous Scheduling Threshold field. System software assumes the host
controller caches one or more periodic data structures for the number of micro-frames
indicated in the Isochronous Scheduling Threshold field. For example, if the count value
were 2, then the host controller keeps a window of 2 micro-frames worth of state
(current micro-frame, plus the next) on-chip. On each micro-frame boundary, the host
controller releases the current micro-frame state and begins accumulating the next
micro-frame state.
9.14.8
Asynchronous Schedule
The Asynchronous schedule traversal is enabled or disabled via the Asynchronous
Schedule Enable bit in the USBCMD register. If the Asynchronous Schedule Enable bit is
set to a zero, then the host controller simply does not try to access the asynchronous
schedule via the ASYNCLISTADDR register. Likewise, when the Asynchronous Schedule
Enable bit is a one, then the host controller does use the ASYNCLISTADDR register to
traverse the asynchronous schedule. Modifications to the Asynchronous Schedule
Enable bit are not necessarily immediate. Rather the new value of the bit will only be
taken into consideration the next time the host controller needs to use the value of the
ASYNCLISTADDR register to get the next queue head.
The Asynchronous Schedule Status bit in the USBSTS register indicates status of the
asynchronous schedule. System software enables (or disables) the asynchronous
schedule by writing a one (or zero) to the Asynchronous Schedule Enable bit in the
USBCMD register. Software then can poll the Asynchronous Schedule Status bit to