5 rx_thread_freelist_timeout, 6 receive operation summary, Rx_thread_freelist_timeout – Intel NETWORK PROCESSOR IXP2800 User Manual

Page 256: Receive operation summary, Has been signaled.) see, Section 8.2.6, For more inf

Advertising
background image

256

Hardware Reference Manual

Intel

®

IXP2800 Network Processor

Media and Switch Fabric Interface

8.2.5

Rx_Thread_Freelist_Timeout_#

Each Rx_Thread_Freelist_# has an associated countdown timer. If the timer expires and no new

receive data is available yet, the receive logic will autopush a Null Receive Status Word to the next

thread on the Rx_Thread_Freelist_#. A Null Receive Status Word has the “Null” bit set, and does
not have any data or RBUF entry associated with it.

The Rx_Thread_Freelist_# timer is useful for certain applications. Its primary purpose is to keep

the receive processing pipeline (implemented as microcode running on the Microengine) moving

even when the line has gone idle. It is especially useful if the pipeline is structured to handle
mpackets in groups, i.e., eight mpackets at a time.

If seven mpackets are received, the line goes idle, and the timeout triggers the autopush of a null

Receive Status Word, filling the eighth slot and allowing the pipeline to advance. Another example

is if one valid mpacket is received before the line goes idle for a long period; seven null Receive
Status Words will be autopushed, allowing the pipeline to proceed.

Typically, the timeout interval is programmed to be slightly larger than the minimum arrival time

of the incoming cells or packets. The timer is controlled by using the

Rx_Thread_Freelist_Timeout_# CSR. The timer may be enabled or disabled, and the timeout
value specified using this CSR.

The following rules define the operation of the Rx_Thread_Freelist timer.

1. Writing a non-zero value to the Rx_Thread_Freelist_Timeout_# CSR both resets the timer

and enables it. Writing a zero value to this CSR resets the timer and disables it.

2. If the timer is disabled, then only valid (non-null) Receive Status Words are autopushed to the

receive threads; null Receive Status Words are never pushed.

3. If the timer expires and the Rx_Thread_Freelist_# is non-empty, but there is no mpacket

available, this will trigger the autopush of a null Receive Status Word.

4. If the timer expires and the Rx_Thread_Freelist_# is empty, the timer stays in the EXPIRED

state and is not restarted. A null Receive Status Word cannot be autopushed, since the logic has
no destination to push anything to.

5. An expired timer is reset and restarted if and only if an autopush, null or non-null, is

performed.

6. Whenever there is a choice, the autopush of a non-null Receive Status Word takes precedence

over a null Receive Status Word.

8.2.6

Receive Operation Summary

During receive processing, received CFrames, cells, and packets (which in this context are all

called mpackets) are placed into the RBUF, and then, when marked valid, are immediately handed
off to a Microengine for processing. Normally, by application design, some number of

Microengine Contexts will be assigned to receive processing. Those Contexts will have their

number added to the proper Rx_Thread_Freelist_# (via

msf[write]

or

msf[fast_write]

),

and then will go to sleep to wait for arrival of an mpacket (or alternatively poll waiting for arrival

of an mpacket).

Advertising