#include <sys/ddi.h> #include <sys/sunddi.h> int ddi_dma_nextseg(ddi_dma_win_t win, ddi_dma_seg_t seg, ddi_dma_seg_t *nseg);
This interface is obsolete. ddi_dma_nextcookie(9F) should be used instead.
A DMA window.
The current DMA segment or NULL.
A pointer to the next DMA segment to be filled in. If seg is NULL, a pointer to the first segment within the specified window is returned.
The ddi_dma_nextseg() function 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.
The ddi_dma_nextseg() function returns:
Successfully filled in the next segment pointer.
There is no next segment. The current segment is the final segment within the specified window.
win does not refer to the currently active window.
The ddi_dma_nextseg() function can be called from user, interrupt, or kernel context.
For an example, see ddi_dma_segtocookie(9F).
See attributes(5) for a description of the following attributes:
attributes(5), ddi_dma_addr_setup(9F), ddi_dma_buf_setup(9F), ddi_dma_nextcookie(9F), ddi_dma_nextwin(9F), ddi_dma_segtocookie(9F), ddi_dma_sync(9F), ddi_dma_lim_sparc(9S), ddi_dma_lim_x86(9S) , ddi_dma_req(9S)