Intel
®
81341 and 81342 I/O Processors
December 2007
Developer’s Manual
Order Number: 315037-002US
825
Inter-Processor Messaging Unit—Intel
®
81341 and 81342
13.3.1
Circular Queue Operation
A Circular Queue is a queue of messages. With the facilities in the IMU, the processor
can derive message pointers to the queue of messages which reside in local memory.
As detailed in
, Processor 0 and Processor 1 each have four Receive Queues
and four Send Queues. A given processor’s Send queues are mapped to the other
processor’s Receive queues, and a given processor’s Receive queues are mapped to the
other processor’s Send queues.
With this mapping, the IMU can provide an identical programming model for all eight
queues to both processors. The registers provided for the management of a Send
Queue are:
• Send Queue Get/Put Pointer Register
This register provides an interface for a processor to send message pointers to the
other processor by reading the Get pointer and by writing the Put pointer. The Get
and Put pointer values represent an Index that in conjunction with the Send Queue
Upper/Lower Base Address Registers can be used to derive the message pointers.
The Put and Get pointers are 16-bits wide which mean that each Circular queue
may contain up to (2
16
-1) message pointers or 65535 message pointers.
• Send Queue Control Register
This register contains three fields, Size, Send Queue Reset Request, and a Send
Queue Reset. The processor writes the Size field
to set the last 16-bit Index in the
Circular effectively fixing the size of the queue to the value of the Size field. The
Send Queue Reset Request field is a request from the other processor to reinitialize
the Put/Get Pointers for the Send Queue. Setting the Send Queue Reset field will
reinitialize the Put/Get Pointers when the other processor is requesting that they be
reinitialized.
• Send Queue Upper/Lower Base Address Registers
The processor writes these registers to set the location of the queue of messages
for the Send Queue in the 36-bit local memory address space.
The registers provided for the management of a Receive Queue are:
• Receive Queue Get/Put Pointer Register
This register provides an interface for a processor to receive message pointers from
the other processor by reading the Put pointer and by writing the Get pointer. The
Get and Put pointer values represent an Index that in conjunction with the Receive
Queue Upper/Lower Base Address Registers can be used to derive the message
pointers. The Put and Get pointers are 16-bits wide which means that each Circular
queue may contain up to (2
16
-1) message pointers or 65535 message pointers.
• Receive Queue Control Register
This register contains three fields, Size, Receive Queue Reset Request, and a
Receive Queue Reset. The processor reads the Size field to obtain the last 16-bit
Index in the Circular Queue. The Receive Queue Reset Request field is a request
from the other processor to reinitialize the Put/Get Pointers for the Receive Queue.
Setting the Receive Queue Reset field will reinitialize the Put/Get Pointers when the
other processor is requesting that they be reinitialized.
• Receive Queue Upper/Lower Base Address Registers
The processor reads these registers to obtain the location of the queue of messages
for the Receive Queue in the 36-bit local memory address space.