A DMA handle is an opaque object that is used as a reference to subsequently allocated DMA resources. It is usually allocated in the driver's attach entry point using ddi_dma_alloc_handle(9F). ddi_dma_alloc_handle(9F) takes the device information referred to by dip and the device's DMA attributes described by a ddi_dma_attr(9S) structure as parameters.
int ddi_dma_alloc_handle(dev_info_t *dip, ddi_dma_attr_t *attr, int (*callback)(void *), void *arg, ddi_dma_handle_t *handlep);
dip is a pointer to the device's dev_info structure.
attr is a pointer to a ddi_dma_attr(9S) structure as described in "DMA Attributes".
waitfp is the address of the callback function for handling resource allocation failures.
arg is the argument to pass to the callback function.
handlep is a pointer to a DMA handle to store the returned handle.
The resource-allocation routines provide the driver with several options when handling allocation failures. The waitfp argument indicates whether the allocation routines will block, return immediately, or schedule a callback, as shown in Table 7-1.
Table 7-1 Resource Allocation Handling
waitfp |
Indicated Action |
---|---|
DDI_DMA_DONTWAIT |
Driver does not need to wait for resources to become available. |
DDI_DMA_SLEEP |
Driver is willing to wait indefinitely for resources to become available. |
Other values |
The address of a function to be called when resources are likely to be available. |