ddi_dma_movwin() shifts the current DMA window. If a DMA request allows the sytem to allocate resources for less
than the entire object by setting the DDI_DMA_PARTIAL flag in the ddi_dma_req(9S) structure, the current DMA window can be shifted by a call to ddi_dma_movwin().
The caller must first determine the current DMA window size by a call to ddi_dma_curwin(9F). Using the current offset and size of the window thus retrieved, the caller of ddi_dma_movwin() may change the window onto the object by
changing the offset by a value which is some multiple of the size of the DMA window.
ddi_dma_movwin() takes care of underlying resource synchronizations required to shift the window. However, if you want to access the data
prior to or after moving the window, further synchronizations using ddi_dma_sync(9F)
are required.
This function is normally called from an interrupt routine. The first invocation of the DMA engine is done from the driver. All subsequent invocations of the DMA engine are done from the interrupt routine. The interrupt routine checks to see if the request has been completed. If it has, it returns without invoking another DMA transfer. Otherwise it calls ddi_dma_movwin() to shift the current window and starts another DMA transfer.
|