dma_params
if (pnp->get_attr_uint32(node, B_DMA_ALIGNMENT, &bus->dma_params.alignment,
bus->dma_params.alignment = 0;
&bus->dma_params.max_blocks, true) != B_OK)
bus->dma_params.max_blocks = UINT32_MAX;
&bus->dma_params.dma_boundary, true) != B_OK)
bus->dma_params.dma_boundary = UINT32_MAX;
&bus->dma_params.max_sg_block_size, true) != B_OK)
bus->dma_params.max_sg_block_size = UINT32_MAX;
&bus->dma_params.max_sg_blocks, true) != B_OK)
bus->dma_params.max_sg_blocks = UINT32_MAX;
&bus->dma_params.high_address, true) != B_OK)
bus->dma_params.high_address = UINT64_MAX;
bus->dma_params.max_sg_block_size &= ~bus->dma_params.alignment;
if (bus->dma_params.alignment > B_PAGE_SIZE) {
"B_PAGE_SIZE", bus->dma_params.alignment);
if (bus->dma_params.max_sg_block_size < 1) {
bus->dma_params.max_sg_block_size);
if (bus->dma_params.dma_boundary < B_PAGE_SIZE - 1) {
"B_PAGE_SIZE", bus->dma_params.dma_boundary);
if (bus->dma_params.max_blocks < 1 || bus->dma_params.max_sg_blocks < 1) {
B_PRIu32 ") must be at least 1", bus->dma_params.max_blocks,
bus->dma_params.max_sg_blocks);
scsi_alloc_dma_buffer(dma_buffer *buffer, dma_params *dma_params, uint32 size)
size = (size + dma_params->alignment) & ~dma_params->alignment;
if (size / B_PAGE_SIZE > dma_params->max_sg_blocks
uint32 boundary = dma_params->dma_boundary;
if (dma_params->alignment != ~(uint32)0)
physicalRestrictions.alignment = dma_params->alignment + 1;
if (!scsi_alloc_dma_buffer(buffer, &device->bus->dma_params,
const uint32 dma_boundary = bus->dma_params.dma_boundary;
const uint32 alignment = bus->dma_params.alignment;
const uint32 max_sg_block_size = bus->dma_params.max_sg_block_size;
const uint64 high_address = bus->dma_params.high_address;
if (sg_count > bus->dma_params.max_sg_blocks) {
uint32 dma_boundary = bus->dma_params.dma_boundary;
uint32 max_sg_block_size = bus->dma_params.max_sg_block_size;
uint32 max_sg_blocks = min_c(bus->dma_params.max_sg_blocks,
struct dma_params dma_params; // dma restrictions of controller