DDI_DMA_COOKIE(9S)       Data Structures for Drivers      DDI_DMA_COOKIE(9S)
NAME
       ddi_dma_cookie - DMA address cookie
SYNOPSIS
       #include <sys/sunddi.h>
INTERFACE LEVEL
       illumos DDI specific (illumos DDI).
DESCRIPTION
       The 
ddi_dma_cookie_t structure contains 
DMA address information
       required to program a 
DMA engine. The structure is filled in by a
       call to 
ddi_dma_getwin(9F), 
ddi_dma_addr_bind_handle(9F), or       
ddi_dma_buf_bind_handle(9F), to get device-specific 
DMA transfer
       information for a 
DMA request or a 
DMA window.
STRUCTURE MEMBERS
         typedef struct {
             union {
                     uint64_t        _dmac_ll;    /* 64 bit DMA add. */
                     uint32_t        _dmac_la[2]; /* 2 x 32 bit add. */
             } _dmu;
             size_t          dmac_size;   /* DMA cookie size */
             uint_t          dmac_type;   /* bus spec. type bits */
         } ddi_dma_cookie_t;
       You can access the DMA address through the 
#defines: 
dmac_address for
       32-bit addresses and 
dmac_laddress for 64-bit addresses. These macros
       are defined as follows:
         #define dmac_laddress   _dmu._dmac_ll
         #ifdef _LONG_LONG_HTOL
         #define dmac_notused    _dmu._dmac_la[0]
         #define dmac_address    _dmu._dmac_la[1]
         #else
         #define dmac_address    _dmu._dmac_la[0]
         #define dmac_notused    _dmu._dmac_la[1]
         #endif       
dmac_laddress specifies a 64-bit 
I/O address appropriate for
       programming the device's 
DMA engine. If a device has a 64-bit 
DMA       address register a driver should use this field to program the 
DMA       engine. 
dmac_address specifies a 32-bit 
I/O address. It should be
       used for devices that have a 32-bit 
DMA address register. The 
I/O       address range that the device can address and other 
DMA attributes
       have to be specified in a 
ddi_dma_attr(9S) structure.       
dmac_size describes the length of the transfer in bytes.       
dmac_type contains bus-specific type bits, if appropriate. For
       example, a device on a 
PCI bus has 
PCI address modifier bits placed
       here.
SEE ALSO
       pci(5), 
sysbus(5), 
ddi_dma_addr_bind_handle(9F),       
ddi_dma_buf_bind_handle(9F), 
ddi_dma_getwin(9F),       
ddi_dma_nextcookie(9F), 
ddi_dma_attr(9S)       Writing Device Drivers                                March 6, 2023             DDI_DMA_COOKIE(9S)