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),
sbus(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 September 30, 1996
DDI_DMA_COOKIE(9S)