Types of Device DMA
Devices perform one of the following three types of DMA:
The driver should program the device's DMA registers directly in cases where the
device acts like a true bus master. For example, a device acts
like a bus master when the DMA engine resides on the
device board. The transfer address and count are obtained from the DMA cookie
to be passed on to the device.
Third-party DMA uses a system DMA engine resident on the main system board,
which has several DMA channels that are available for use by devices. The
device relies on the system's DMA engine to perform the data transfers between
the device and memory. The driver uses DMA engine routines (see the ddi_dmae(9F)
function) to initialize and program the DMA engine. For each DMA data transfer,
the driver programs the DMA engine and then gives the device a command
to initiate the transfer in cooperation with that engine.
Under first-party DMA, the device uses a channel from the system's DMA
engine to drive that device's DMA bus cycles. Use the ddi_dmae_1stparty(9F) function to
configure this channel in a cascade mode so that the DMA engine does
not interfere with the transfer.