int ddi_dma_nextseg( ddi_dma_win_t win, ddi_dma_seg_t seg, ddi_dma_seg_t *nseg);
Solaris DDI specific (Solaris DDI).
ddi_dma_nextseg() gets the next DMA segment within the specified window win. If the current segment is NULL , the first DMA segment within the window is returned.
A DMA segment is always required for a DMA window. A DMA segment is a contiguous portion of a DMA window (see ddi_dma_nextwin(9F) ) which is entirely addressable by the device for a data transfer operation.
An example where multiple DMA segments are allocated is where the system does not contain DVMA capabilities and the object may be non-contiguous. In this example the object will be broken into smaller contiguous DMA segments. Another example is where the device has an upper limit on its transfer size (for example an 8-bit address register) and has expressed this in the DMA limit structure (see ddi_dma_lim_sparc(9S) or ddi_dma_lim_x86(9S) ). In this example the object will be broken into smaller addressable DMA segments.
ddi_dma_nextseg() returns:
ddi_dma_nextseg() can be called from user or interrupt context.
For an example see ddi_dma_segtocookie(9F) .