Intel
®
81341 and 81342—Messaging Unit
Intel
®
81341 and 81342 I/O Processors
Developer’s Manual
December 2007
416
Order Number: 315037-002US
4.5.3
Outbound Post Queue
The Outbound Post Queue holds outbound posted messages placed there by the Intel
XScale
®
processor for other processors to process. 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-
or
Chapter 3.0, “Address Translation Unit (PCI Express)”
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 Outbound Queue Port, the
MU attempts to read the data at the local memory address in the Outbound Post Tail
Pointer Register. 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
14
), the data is returned. When the queue is empty (head and tail pointers are
equal and the tail pointer was last updated by hardware
15
), 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
Outbound Post 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 Outbound Post Queue. The MU hardware
prefetches the data at the tail of the Outbound Post 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 Outbound Post Head Pointer Register is written.
The Intel XScale
®
processor needs to update the Outbound Post 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 Outbound Post Queue
is signalled a Retry until the prefetch is completed.
A host I/O interface interrupt may be generated when data in the prefetch buffer is
valid. When the prefetch queue is clear, no interrupt is generated. The Outbound Post
Queue Interrupt bit in the Outbound Interrupt Status Register shall indicate the status
of the prefetch buffer data and therefore the interrupt status. The interrupt is cleared
when any prefetched data has been read from the Outbound Queue Port. The interrupt
can be masked by the Outbound Interrupt Mask Register.
The Intel XScale
®
processor may place messages in the Outbound Post Queue by
writing the data to the local memory address in the Outbound Post Head Pointer
Register. The processor must then increment the Outbound Post Head Pointer Register.
14.The Outbound Post Queue Head Pointer is only managed by
software
using the
Head Pointer Register - OPHPR”
during normal operation and initialization.
15.During normal operation, the Outbound Post Queue Tail Pointer is only managed by
hardware
.
Software
can also update the Tail Pointer using the
“Outbound Post Tail Pointer Register - OPTPR”
during initialization. However, the Outbound Post Queue logic does not make a distinction on
whether the Tail Pointer is updated using hardware or software.