#include <sys/types.h> #include <sys/dma.h> #include <sys/ddi.h>
int dma_swsetup(struct dma_cb *dmacbptr, int chan, uchar_t mode);
dma_swsetup does not initiate the DMA transfer. Instead, the transfer will be initiated by a subsequent request initiated via software by dma_swstart(D3). If dma_swsetup programs the operation successfully, it then calls the procedure specified by the proc field of the dma_cb(D4) structure. It passes as an argument the value in the ``procparms'' field. If proc is set to NULL, then no routine is called.
To program the operation, dma_swsetup requires exclusive use of the specified DMA channel. The caller may specify, via the mode argument, whether dma_swsetup should sleep waiting for a busy channel to become available. If the specified channel is in use and mode is set to DMA_SLEEP, then dma_swsetup will sleep until the channel becomes available for its use. Otherwise, if DMA_NOSLEEP is specified and the requested channel is not immediately available, dma_swsetup will not program the channel, but will simply return a value of FALSE.
If mode is set to DMA_SLEEP, user context. The driver must be in a legal context for the callback function being passed in with the dmacbptr argument.
``DMA'' in HDK Technical Reference