![Intel IXP45X Developer'S Manual Download Page 433](http://html1.mh-extra.com/html/intel/ixp45x/ixp45x_developers-manual_2073092433.webp)
Intel
®
IXP45X and Intel
®
IXP46X Product Line of Network Processors
August 2006
Developer’s Manual
Order Number: 306262--, Revision: 004US
433
USB 2.0 Host Controller—Intel
®
IXP45X and Intel
®
IXP46X Product Line of Network Processors
If software removes the queue head with the H-bit set to a one, it must select another
queue head still linked into the schedule and set its H-bit to a one. This should be
completed before removing the queue head. The requirement is that software keep one
queue head in the asynchronous schedule, with its H-bit set to a one. At the point
software has removed one or more queue heads from the asynchronous schedule, it is
unknown whether the host controller has a cached pointer to them. Similarly, it is
unknown how long the host controller might retain the cached information, as it is
implementation dependent and may be affected by the actual dynamics of the schedule
load. Therefore, once software has removed a queue head from the asynchronous list,
it must retain the coherency of the queue head (link pointers, etc.). It cannot disturb
the removed queue heads until it knows that the host controller does not have a local
copy of a pointer to any of the removed data structures.
The method software uses to determine when it is safe to modify a removed queue
head is to handshake with the host controller. The handshake mechanism allows
software to remove items from the asynchronous schedule, then execute a simple,
UnlinkQueueHead
(pQHeadPrevious, pQueueHeadToUnlink, pQHeadNext)
--
--
Requirement
: all inputs must be properly initialized.
--
-- pQHeadPrevious is a pointer to a queue head that
-- references the queue head to remove
-- pQHeadToUnlink is a pointer to the queue head to be
-- removed
-- pQheadNext is a pointer to a queue head still in the
-- schedule. Software provides this pointer with the
-- following strict rules:
-- if the host software is one queue head, then
--
pQHeadNext must be the same as
--
QueueheadToUnlink.HorizontalPointer. If the host
--
software is unlinking a consecutive series of
--
queue heads, QHeadNext must be set by software to
--
the queue head remaining in the schedule.
--
-- This algorithm unlinks a queue head from a circular list
--
pQueueHeadPrevious.HorizontalPointer = pQueueHeadToUnlink.HorizontalPointer
pQueueHeadToUnlink.HorizontalPointer = pQHeadNext
End UnlinkQueueHead