ddi_dma_alloc_handle(9F)




NAME

     ddi_dma_alloc_handle - allocate DMA handle


SYNOPSIS

     #include <sys/ddi.h>
     #include <sys/sunddi.h>

     int  ddi_dma_alloc_handle(dev_info_t  *dip,   ddi_dma_attr_t
     *attr,    int     (*callback)    (caddr_t),   caddr_t   arg,
     ddi_dma_handle_t *handlep);


INTERFACE LEVEL

     Solaris DDI specific (Solaris DDI).


PARAMETERS

     dip   Pointer to the device's  dev_info structure.

     attr  Pointer to a  DMA attribute structure for this  device
           (see  ddi_dma_attr(9S)).

     callback
           The address of  a  function  to  call  back  later  if
           resources aren't available now.  The following special
           function addresses may also be used.

           DDI_DMA_SLEEP
                 Wait until resources are available.

           DDI_DMA_DONTWAIT
                 Do not wait until resources are available and do
                 not schedule a callback.

     arg   Argument to be passed to a callback function, if  such
           a function is specified.

     handlep
           Pointer to the  DMA handle to be initialized.


DESCRIPTION

     ddi_dma_alloc_handle() allocates a new  DMA handle.  A   DMA
     handle  is  an  opaque  object used as a reference to subse-
     quently allocated  DMA  resources.    ddi_dma_alloc_handle()
     accepts  as parameters the device information referred to by
     dip and the device's
      DMA attributes described by a ddi_dma_attr(9S) structure. A
     successful call to ddi_dma_alloc_handle() fills in the value
     pointed to by  handlep. A  DMA handle must only be  used  by
     the  device for which it was allocated and is only valid for
     one  I/O transaction at a time.

     The callback function,  callback,  indicates  how  a  caller
     wants  to  handle  the  possibility  of  resources not being
     available. If  callback is set to DDI_DMA_DONTWAIT, then the
     caller does not care if the allocation fails, and can handle
     an allocation failure appropriately. If  callback is set  to
     DDI_DMA_SLEEP,  then the caller wishes to have the the allo-
     cation routines wait for resources to become  available.  If
     any other value is set, and a DMA resource allocation fails,
     this value is assumed to be a function to call  at  a  later
     time when resources may become available. When the specified
     function is called, it is passed arg  as  an  argument.  The
     specified    callback    function    must    return   either
     DDI_DMA_CALLBACK_RUNOUT      or       DDI_DMA_CALLBACK_DONE.
     DDI_DMA_CALLBACK_RUNOUT  indicates that the callback routine
     attempted to allocate DMA resources but failed to do so,  in
     which case the callback function is put back on a list to be
     called again later.  DDI_DMA_CALLBACK_DONE indicates  either
     success  at allocating DMA resources or the driver no longer
     wishes to retry.

     The callback function is called in interrupt context. There-
     fore,  only system functions that are accessible from inter-
     rupt context  is available. The callback function must  take
     whatever  steps necessary to protect its critical resources,
     data structures, queues, and so forth.

     When    a     DMA    handle    is    no    longer    needed,
     ddi_dma_free_handle(9F) must be called to free the handle.


RETURN VALUES

     ddi_dma_alloc_handle() returns:

     DDI_SUCCESS
           Successfully allocated a new DMA handle.

     DDI_DMA_BADATTR
           The  attributes  specified  in  the   ddi_dma_attr(9S)
           structure  make  it impossible for the system to allo-
           cate potential  DMA resources.

     DDI_DMA_NORESOURCES
           No resources are available.


CONTEXT

     ddi_dma_alloc_handle() can be called from user,  kernel,  or
     interrupt   context,   except   when   callback  is  set  to
     DDI_DMA_SLEEP, in which case it can be called from  user  or
     kernel context only.


SEE ALSO

     ddi_dma_addr_bind_handle(9F),   ddi_dma_buf_bind_handle(9F),
     ddi_dma_burstsizes(9F),             ddi_dma_free_handle(9F),
     ddi_dma_unbind_handle(9F), ddi_dma_attr(9S)

     Writing Device Drivers


Man(1) output converted with man2html