|
Kernel Functions for Drivers | ddi_dma_nextcookie(9F) |
| ddi_dma_nextcookie - retrieve subsequent DMA cookie |
SYNOPSIS
|
#include <sys/ddi.h>
#include <sys/sunddi.h>
void ddi_dma_nextcookie(ddi_dma_handle_t handle, ddi_dma_cookie_t *cookiep); |
|
Solaris DDI specific (Solaris DDI).
|
|
ddi_dma_nextcookie() retrieves subsequent DMA cookies for a DMA object. ddi_dma_nextcookie()
fills in the ddi_dma_cookie(9S) structure pointed to
by cookiep. The ddi_dma_cookie(9S)
structure must be allocated prior to calling ddi_dma_nextcookie().
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.
|
|
ddi_dma_nextcookie() can be called from user, kernel, or interrupt context.
|
| Example 1. process a scatter-gather list of I/O requests
|
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 */
}
}
...
|
|
|
| |