Packet transmission in Monolithic mode involves the following steps:
- The Host allocates and populates a monolithic packet descriptor. The host will initialize the following fields within the packet descriptor:
- Descriptor Type (set to Monolithic)
- Packet Length indicating the total number of bytes in the packet
- Source Tag
- Destination Tag (application specific)
- Packet Type
- Any protocol specific flags for the given packet type
- Offset to payload data
- Descriptor reclamation policy fields indicating the mode and queue number for recycling the packet after transmission is complete.
- Networking Stack Information (application specific and optional)
- Any protocol specific words that are required for the given packet type
- The Host queues the packet onto one of the Transmit Queues for the desired DMA channel. Channels may provide more than one Tx Queue and may provide a particular prioritization policy between the queues. This behavior is application specific and is controlled by the DMA controller/scheduler implementation.
- The Ring Accelerator provides a level sensitive status signal for the queue which indicates if any packets are currently pending. This level sensitive status line is sent to the hardware block which is responsible for scheduling DMA operations.
- The DMA controller is eventually brought into context for the corresponding channel and begins to process the packet.
- The DMA controller reads the packet descriptor pointer from the Ring Accelerator.
- The DMA controller reads the packet descriptor from memory
- The DMA controller empties the data region in the descriptor by transmitting the contents in one or more block data moves. The size of these blocks is application specific. The DMA controller module specification is intended to document the block size used by a given implementation.
- When all data for the packet has been transmitted as specified in the packet size field, the DMA will write the pointer to the packet descriptor to the queue specified in the return queue number fields of the packet descriptor.
- After the Packet Descriptor pointer has been written, the Ring Accelerator indicates the status of the Tx Completion Queues to other ports/processors/prefetcher blocks using out-of-band level sensitive status lines. These status lines are set anytime a queue is non-empty.
Whether or not any further processing is required on the packet at this point depends on the nature of the queue that the packet was returned to. The most common case is that the monolithic descriptor will be returned to the Rx Free Descriptor queue that it was allocated from originally. If this is the case, the Tx processing is complete at this point. Alternatively, the queue may also be a Tx Completion Queue in which case, the following optional steps may also be performed:
- While most types of peer entities and embedded processors are able to directly and efficiently use these level sensitive status lines, cached processors may require a hardware block to convert the level status into pulsed interrupts and to perform some level of aggregation of the descriptor pointers from the completion queues into lists.
- Host responds to status change from Ring Accelerator and performs garbage collection as necessary for packet.
- Ring Accelerator sends down event when ring is empty