|
typedef struct {
union {
uint64_t _dmac_ll; /* 64 bit DMA address */
uint32_t _dmac_la[2]; /* 2 x 32 bit address */
} _dmu;
size_t dmac_size; /* DMA cookie size */
uint_t dmac_type; /* bus specific 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.
|