9. Register blocks

The NIC register space is constructed from a linked list of register blocks. Each block starts with a header that contains type, version, and next header fields. Blocks must be DWORD aligned in the register space. All fields must be naturally aligned. All pointers in the register blocks are relative to the start of the region. The list is terminated with a next pointer of 0x00000000. See Table 9.1 for a list of all currently-defined register blocks.

Address

Field

31..24

23..16

15..8

7..0

Reset value

RBB+0x00

Type

Vendor ID

Type

RO -

RBB+0x04

Version

Major

Minor

Patch

Meta

RO -

RBB+0x08

Next pointer

Pointer to next register block

RO -

Type

The type field consists of a vendor ID in the upper 16 bits, and the sub type in the lower 16 bits. Vendor ID 0x0000 is used for all standard register blocks used by Corundum. See Table 9.1 for a list of all currently-defined register blocks.

Address

31..24

23..16

15..8

7..0

Reset value

RBB+0x00

Vendor ID

Type

RO -

Version

The version field consists of four fields, major, minor, patch, and meta. Version numbers must be changed when backwards-incompatible changes are made to register blocks. See Table 9.1 for a list of all currently-defined register blocks.

Address

31..24

23..16

15..8

7..0

Reset value

RBB+0x04

Major

Minor

Patch

Meta

RO -

Next pointer

The next pointer field contains a block-relative offset to the start of the header of the next register block in the chain. A next pointer of 0x00000000 indicates the end of the chain.

Address

31..24

23..16

15..8

7..0

Reset value

RBB+0x08

Pointer to next register block

RO -

Table 9.1 List of all currently-defined register blocks

Type

Version

Block

0x00000000

-

Null register block

0xFFFFFFFF

0x00000100

Firmware ID register block

0x0000C000

0x00000100

Interface register block

0x0000C001

0x00000400

Interface control register block

0x0000C002

0x00000200

Port register block

0x0000C003

0x00000200

Port control register block

0x0000C004

0x00000300

Scheduler block register block

0x0000C005

0x00000200

App info register block

0x0000C006

0x00000100

stats

0x0000C007

0x00000100

IRQ config

0x0000C008

0x00000100

Clock info register block

0x0000C010

0x00000400

Event queue manager register block

0x0000C020

0x00000400

Completion queue manager register block

0x0000C030

0x00000400

Transmit queue manager register block

0x0000C031

0x00000400

Receive queue manager register block

0x0000C040

0x00000100

Round-robin scheduler register block

0x0000C050

0x00000100

TDMA scheduler controller register block

0x0000C060

0x00000100

TDMA scheduler register block

0x0000C080

0x00000100

PTP hardware clock register block

0x0000C081

0x00000100

PTP period output register block

0x0000C090

0x00000200

RX queue map register block

0x0000C100

0x00000100

GPIO register block

0x0000C110

0x00000100

I2C register block

0x0000C120

0x00000200

SPI flash register block

0x0000C121

0x00000200

BPI flash register block

0x0000C140

0x00000100

Alveo BMC register block

0x0000C141

0x00000100

Gecko BMC register block

0x0000C150

0x00000100

DRP register block