92 rbuf element state diagram – Intel NETWORK PROCESSOR IXP2800 User Manual

Page 257

Advertising
background image

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

Advertising