void ddi_dma_nextcookie(ddi_dma_handle_t handle, ddi_dma_cookie_t *cookiep);
The DMA cookie count returned by ddi_dma_buf_bind_handle(9F) , ddi_dma_addr_bind_handle(9F) , or ddi_dma_getwin(9F) indicates the number of DMA cookies a DMA object consists of. If the resulting cookie count, N, is larger than 1, ddi_dma_nextcookie() must be called N-1 times to retrieve all DMA cookies.
This example demonstrates the use of ddi_dma_nextcookie() to process a scatter-gather list of I/O requests.
/* setup scatter-gather list with multiple DMA cookies */ ddi_dma_cookie_t dmacookie; uint_t ccount; ... status = ddi_dma_buf_bind_handle(handle, bp, DDI_DMA_READ, NULL, NULL, &dmacookie, &ccount); if (status == DDI_DMA_MAPPED) { /* program DMA engine with first cookie */ while (--ccount > 0) { ddi_dma_nextcookie(handle, &dmacookie); /* program DMA engine with next cookie */ } } ...