![Intel IXP45X Developer'S Manual Download Page 464](http://html1.mh-extra.com/html/intel/ixp45x/ixp45x_developers-manual_2073092464.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
464
Order Number: 306262-004US
If the result is non-zero, then the host controller will issue a start-split transaction. If
the PIDCode field indicates an IN transaction, the host controller must zero-out the
QH.S-bytes field. After the split-transaction has been executed, the host controller sets
up state in the queue head to track the progress of the complete-split phase of the split
transaction. Specifically, it records the expected frame number into QH.FrameTag field
“Managing QH.FrameTag Field” on page 467
), set C-prog-mask to zero (00h), and
exits this state. Note that the host controller must not adjust the value of CErr as a
result of completion of a start-split transaction.
Periodic Interrupt - Do Complete Split
This state is entered unconditionally from the Do Start Split state after a start-split
transaction is executed on the bus. Each time the host controller visits a queue head in
this state (once within the Execute Transaction state), it checks to determine
whether a complete-split transaction should be executed now.
There are four tests to determine whether a complete-split transaction should be
executed.
• Test A. cMicroFrameBit is bit-wise anded with QH.C-mask field. A non-zero result
indicates that software scheduled a complete-split for this endpoint, during this
micro-frame.
• Test B. QH.FrameTag is compared with the current contents of FRINDEX[7:3]. An
equal indicates a match.
• Test C. The complete-split progress bit vector is checked to determine whether the
previous bit is set, indicating that the previous complete-split was appropriately
executed. An example algorithm for this test is provided below:
Algorithm Boolean CheckPreviousBi
t
(QH.C-prog-mask, QH.C-mask, cMicroFrameBit)
Begin
-- Return values:
-- TRUE - no error
-- FALSE - error
--
Boolean rvalue = TRUE;
previousBit = cMicroframeBit logical-rotate-right(1)
-- Bit-wise anding previousBit with C-mask indicates
-- whether there was an intent
-- to send a complete split in the previous micro-frame. So,
-- if the
-- 'previous bit' is set in C-mask, check C-prog-mask to
-- make sure it
-- happened.
If (previousBit
bitAND
QH.C-mask)then
If
no
t(previousBit
bitAND
QH.C-prog-mask) then
rvalue = FALSE;