If the rings are configured in pass by value mode individual Transfer Request and Response records can be passed between software and hardware without any higher level data structures. This mode allows for the UDMA to be prompted to do a transfer by just writing memory mapped locations with a source address, destination address and byte count (in the simplest case). Direct TR is accomplished as follows:
- The Host writes a valid Transfer Request record to the Rx TR Queue of the desired UDMA channel.
- 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 Transfer Request record from the ring via the RA in a single nominal TR sized block data move. These contents are then transmitted to an internal UTC (in the case of a UDMA-P).
- All of the data transfers specified in a TR will be completed as a series of writes (for single ended transfers) and a Transfer Response will be returned indicating the completion and status of the transfer.
- When a Transfer Response is returned for the Transfer Request record the UDMA will write the response into the next entry in the Transmit Completion Ring. Since the Transfer Responses come back from the UTC strongly ordered each response will be written into the ring strongly ordered as well.
- After the Transfer Response has been written, the Ring Accelerator indicates the status of the Rx Completion Queues to other ports/processors/prefetcher blocks using events sent to the Interrupt Aggregator. These events are then converted into standard K3 interrupts.