2 csix and rbuf, 2 full element list, 3 rx_thread_freelist – Intel NETWORK PROCESSOR IXP2800 User Manual

Page 63: Full element list, Rx_thread_freelist

Advertising
background image

Hardware Reference Manual

63

Intel

®

IXP2800 Network Processor

Technical Description

2.7.3.1.2

CSIX and RBUF

CSIX CFrames are placed into either RBUF with each CFrame allocating an element. Unlike

SPI-4, a single CFrame must not spill over into another element. Since CSIX spec specifies a

maximum CFrame size of 256 bytes, this can be done by programming the element size to 256
bytes. However, if the Switch Fabric uses a smaller CFrame size, then a smaller RBUF element

size can be used.

Flow Control CFrames are put into the FCEFIFO, to be sent to the Ingress IXP2800 Network

Processor where a Microengine will read them to manage flow control information to the Switch
Fabric.

The status information for the element contains the following information:

The definitions of the fields are shown in

Table 91, “RBUF CSIX Status Definition” on page 254

.

2.7.3.2

Full Element List

Receive control hardware maintains the FULL_ELEMENT_LIST to hold the status of valid RBUF
elements, in the order in which they were received. When an RBUF element is filled, its status is

added to the tail of the FULL_ELEMENT_LIST. When a Microengine is notified of element

arrival (by having the status written to its S_Transfer register), it is removed from the head of the
FULL_ELEMENT_LIST.

2.7.3.3

RX_THREAD_FREELIST

RX_THREAD_FREELIST is a FIFO that indicates Microengine Contexts that are awaiting an

RBUF element to process. This allows the Contexts to indicate their ready status prior to the

reception of the data, as a way to eliminate latency. Each entry added to a Freelist also has an
associated S_TRANSFER register and signal number. There are three RX_THREAD_FREELISTS

that correspond to the RBUF partitions.

To be added as ready to receive an element, a Microengine does an

msf[write]

or an

msf[fast_write]

to the RX_THREAD_FREELIST address; the write data is the Microengine/

CONTEXT/S_TRANSFER register number to add to the Freelist.

When there is valid status at the head of the Full Element List, it will be pushed to a Microengine.

The receive control logic pushes the status information (which includes the element number) to the

Microengine in the head entry of RX_THREAD_FREELIST, and sends an Event Signal to the
Microengine. It then removes that entry from the RX_THREAD_FREELIST, and removes the

status from Full Element List.

3
1

3
0

2
9

2
8

2
7

2
6

2
5

2
4

2
3

2
2

2
1

2
0

1
9

1
8

1
7

1
6

1
5

1
4

1
3

1
2

1
1

1
0

9

8

7

6

5

4

3

2

1

0

RPROT

Element

Payload Length

CR

P

Err

L

en Err

HP Err

VP
E

rr

Null

Reserved

Type

6
3

6
2

6
1

6
0

5
9

5
8

5
7

5
6

5
5

5
4

5
3

5
2

5
1

5
0

4
9

4
8

4
7

4
6

4
5

4
4

4
3

4
2

4
1

4
0

3
9

3
8

3
7

3
6

3
5

3
4

3
3

3
2

Extension Header

Advertising