Figure 10-12 shows a diagram of the overall Receive operation for a monolithic descriptor type.
The following sequence is a detailed summary of the Monolithic Packet Reception process:
- The Host initializes free Descriptors and places them on an Rx Free Descriptor Queue
- The UDMA-P fetches a single descriptor for the packet from the Ring Accelerator using the Monolithic Type Free Descriptor Queue Index that was initialized in the Rx Flow Table entry that is being used for the packet.
- If the RX_SOP_OFFSET field in the Rx Flow Table entry is nonzero, then the port will begin writing data after the offset number of bytes in the payload portion of the monolithic descriptor. The port will then continue filling the payload portion of the descriptor until the entire packet has been received.
The port performs the following operations when the entire packet has been received:
- Writes the packet descriptor to memory. This includes the following fields:
- Descriptor Type (set to Monolithic)
- Packet Length indicating the total number of bytes in this packet.
- Source Tag
- Destination Tag (application specific)
- Packet Type
- Any protocol specific flags for the given packet type
- Networking Stack Information (application specific and optional)
- Any protocol specific words that are required for the given packet type
- Writes the packet descriptor pointer to the appropriate Rx Queue. The absolute Queue that each packet to be forwarded to on completion of reception will either be the Queue which that was specified in the rx_dest_qnum fields in the Rx Flow Entry or can be overridden by the value in the PSI-L destination queue override field.
- Once the packet pointer is written to the Ring Accelerator it will send an up event to the Interrupt Aggregator
- The Interrupt Aggregator upon receiving the up event will set the appropriate bit in the Interrupt Status Register indicated by the interrupt mapping table which will cause an interrupt to be asserted to the Host
- The Host will pop the packet pointer from the Rx Queue
- If the pop causes the queue to become empty, the Ring Accelerator will send a down event to the Interrupt Aggregator thus causing the associated bit to be cleared and also potentially clearing the interrupt to the Host.
The Ring Accelerator is responsible for indicating the status of the Receive Queues to other ports/processors using out-of-band level sensitive status lines. These status lines are set anytime a queue is non-empty.