Intel
®
81341 and 81342—Messaging Unit
Intel
®
81341 and 81342 I/O Processors
Developer’s Manual
December 2007
414
Order Number: 315037-002US
4.5.1
Inbound Free Queue
The Inbound Free Queue holds free inbound messages placed there by the Intel
XScale
®
processor for other processors to use. This queue is read from the queue tail
by external host I/O interface agents on the 81341 and 81342’s internal bus through
the Address Translation Unit (See
Chapter 2.0, “Address Translation Unit (PCI-X)”
Chapter 3.0, “Address Translation Unit (PCI Express)”
for more details on inbound ATU
addressing and the ATU). It is written to the queue head by the Intel XScale
®
processor. The tail pointer is maintained by the MU hardware. The head pointer is
maintained by the Intel XScale
®
processor.
For a host I/O interface read transaction that accesses the Inbound Queue Port, the MU
attempts to read the data at the local memory address in the Inbound Free Tail Pointer.
When the queue is not empty (head and tail pointers are not equal) or full (head and
tail pointers are equal but the head pointer was last written by software
10
), the data is
returned. When the queue is empty (head and tail pointers are equal and the tail
pointer was last updated by hardware
11
), the value of -1 (FFFF.FFFFH) is returned.
When the queue was not empty and the MU succeeded in returning the data at the tail,
the MU hardware must increment the value in the Inbound Free Tail Pointer Register.
To reduce latency for the host I/O interface read access, the MU implements a prefetch
mechanism to anticipate accesses to the Inbound Free Queue. The MU hardware
prefetches the data at the tail of the Inbound Free Queue and load it into an internal
prefetch register. When the internal bus read access occurs, the data is read directly
from the prefetch register.
The prefetch mechanism loads a value of -1 (FFFF.FFFFH) into the prefetch register
when the head and tail pointers are equal and the queue is empty. In order to update
the prefetch register when messages are added to the queue and it becomes non-
empty, the prefetch mechanism automatically starts a prefetch when the prefetch
register contains FFFF.FFFFH and the Inbound Free Head Pointer Register is written.
The Intel XScale
®
processor needs to update the Inbound Free Head Pointer Register
when it adds messages to the queue.
A prefetch must appear atomic from the perspective of the ATU. When a prefetch is
started, any internal bus transaction that attempts to access the Inbound Free Queue is
signalled a Retry until the prefetch is completed.
The Intel XScale
®
processor may place messages in the Inbound Free Queue by writing
the data to the local memory location pointed to by the Inbound Free Head Pointer
Register. The processor must then increment the Inbound Free Head Pointer Register.
10.The Inbound Free Queue Head Pointer is only managed by
software
using the
Head Pointer Register - IFHPR”
during normal operation and initialization.
11.During normal operation, the Inbound Free Queue Tail Pointer is only managed by
hardware
.
Software
can also update the Tail Pointer using the
“Inbound Free Tail Pointer Register - IFTPR”
during initialization. However, the Inbound Free Queue logic does not make a distinction on
whether the Tail Pointer is updated using hardware or software.