The Solaris Device Driver Interface/Driver-Kernel Interface (DDI/DKI) provides a high-level, architecture-independent model for
DMA. This model enables the framework, that is, the DMA routines, to hide
architecture-specific details such as the following:
Several abstractions are used in the DDI/DKI to describe aspects of a
DMA object – Memory that is the source or destination of a DMA transfer.
DMA handle – An opaque object returned from a successful ddi_dma_alloc_handle(9F) call. The DMA handle can be used in subsequent DMA subroutine calls to refer to such DMA objects.
DMA cookie – A ddi_dma_cookie(9S) structure (ddi_dma_cookie_t) describes a contiguous portion of a DMA object that is entirely addressable by the device. The cookie contains DMA addressing information that is required to program the DMA engine.
Rather than map an object directly into memory, device drivers allocate DMA resources
for a memory object. The DMA routines then perform any platform-specific operations that
are needed to set up the object for DMA access. The driver receives
a DMA handle to identify the DMA resources that are allocated for the
object. This handle is opaque to the device driver. The driver must save
the handle and pass the handle in subsequent calls to DMA routines. The
driver should not interpret the handle in any way.
Operations that provide the following services are defined on a DMA handle:
Manipulating DMA resources
Synchronizing DMA objects
Retrieving attributes of the allocated resources