ddi_dma_nextcookie(9F)




NAME

     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);


PARAMETERS

     handle
           The  handle  previously  allocated  by   a   call   to
           ddi_dma_alloc_handle(9F).

     cookiep
           A pointer to a  ddi_dma_cookie(9S) structure.


INTERFACE LEVEL

     Solaris DDI specific (Solaris DDI).


DESCRIPTION

     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 cal-
     ling  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.


CONTEXT

     ddi_dma_nextcookie() can be called  from  user,  kernel,  or
     interrupt context.


EXAMPLES

     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 */
          }
     }
     ...


SEE ALSO

     ddi_dma_addr_bind_handle(9F),      ddi_dma_alloc_handle(9F),
     ddi_dma_buf_bind_handle(9F),      ddi_dma_unbind_handle(9F),
     ddi_dma_cookie(9S)

     Writing Device Drivers


Man(1) output converted with man2html