Hardware Reference Manual 257
Intel
®
IXP2800 Network Processor
Media and Switch Fabric Interface
When an mpacket becomes valid as described in Section 8.2.2.1 for SPI-4 and Section 8.2.2.2 for
CSIX, receive control logic will autopush eight bytes of information for the element to the
Microengine/Context/S_Transfer registers at the head of Rx_Thread_Freelist_#. The information
pushed is (see Table 90 and Table 91 for detailed definitions):
• Status Word (SPI-4) or Header Status (CSIX) to Transfer register n (n is the Transfer register
programmed to the Rx_Thread _Freelist_#)
• Checksum (SPI-4) or Extension Header (CSIX) to Transfer register n+1
To handle the case where the receive Contexts temporarily fall behind and Rx_Thread_Freelist_#
is empty, all received element numbers are held in the Full Element List. In that case, as soon as an
Rx_Thread_Freelist_# entry is entered, the status of the head element of Full Element List will be
pushed to it.
The Microengine may read part of (or the entire) RBUF element to their S_Transfer registers (via
msf[read] instruction) for header processing, etc., and may also move the element data to DRAM
(via
dram[rbuf_rd] instruction).
When a Context is done with an element, it does an
msf[write]or msf[fast_write] to the
RBUF_Element_Done address; the write data is the element number. This marks the element as
free and available to be re-used. There is no restriction on the order in which elements are freed;
Contexts can do different amounts of processing per element based on the contents of the element
— therefore, elements can be returned in a different order than they were handed to Contexts.
The states that an RBUF element goes through are shown in Figure 92.
Figure 92. RBUF Element State Diagram
A9340-01
Free. Element is empty
and available to be
allocated to received
information from the rx
pins
Allocated. Element is
being filled with data
from rx pins.
Allocate new element
(Done by Rx control logic)
Set valid (done by
Rx control logic)
msf[write]or
msf[fast_write]to
RBUF_Element_Done
Processing. Element
status has been pushed
to an ME context. ME
is processing the data.
Valid. Element has
been set valid. Status
has not yet been pushed
to an ME context.
Autopush Status to ME
Reset