HBA 驱动程序必须通过正确初始化 ddi_dma_attr_t 结构来描述其 DMA 引擎的属性。
static ddi_dma_attr_t isp_dma_attr = {
DMA_ATTR_V0, /* ddi_dma_attr version */
0, /* low address */
0xffffffff, /* high address */
0x00ffffff, /* counter upper bound */
1, /* alignment requirements */
0x3f, /* burst sizes */
1, /* minimum DMA access */
0xffffffff, /* maximum DMA access */
(1<<24)-1, /* segment boundary restrictions */
1, /* scatter-gather list length */
512, /* device granularity */
0 /* DMA flags */
};
如果该驱动程序提供 DMA,则还应检查其硬件是否已安装在支持 DMA 的槽中:
if (ddi_slaveonly(dip) == DDI_SUCCESS) {
return (DDI_FAILURE);
}