USB 2.0 Host Controller—Intel
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:
--
--
--
--
--
--
--
-- This algorithm unlinks a queue head from a circular list
--
pQueueHeadPrevious.HorizontalPointer = pQueueHeadToUnlink.HorizontalPointer
pQueueHeadToUnlink.HorizontalPointer = pQHeadNext
End UnlinkQueueHead
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,
August 2006
Order Number: 306262--, Revision: 004US
®
®
IXP45X and Intel
IXP46X Product Line of Network Processors
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.
®
®
Intel
IXP45X and Intel
IXP46X Product Line of Network Processors
Developer's Manual
433
Need help?
Do you have a question about the IXP45X and is the answer not in the manual?
Questions and answers