The total DMA size in DriverKit cannot exceed 2G?

We are developing a DriverKit driver on Apple M1. We use the following code to prepare DMA buffer:

IODMACommandSpecification dmaSpecification;
	bzero(&dmaSpecification, sizeof(dmaSpecification));
	dmaSpecification.options = kIODMACommandSpecificationNoOptions;
	dmaSpecification.maxAddressBits = p_dma_mgr->maxAddressBits;
	kret = IODMACommand::Create(p_dma_mgr->device,
								kIODMACommandCreateNoOptions,
								&dmaSpecification,
								&impl->dma_cmd
								);
	if (kret != kIOReturnSuccess) {
		os_log(OS_LOG_DEFAULT, "Error: IODMACommand::Create failed! ret=0x%x\n", kret); 
		impl->user_mem.reset();
		IOFree(impl, sizeof(*impl));
		return ret;
	}

	uint64_t flags = 0;
	uint32_t segmentsCount = 32;
	IOAddressSegment segments[32];
	kret = impl->dma_cmd->PrepareForDMA(kIODMACommandPrepareForDMANoOptions,
										impl->user_mem.get(),
										0,
										0, // 0 for entire memory
										&flags,
										&segmentsCount,
										segments
										);
	if (kret != kIOReturnSuccess) {
		OSSafeReleaseNULL(impl->dma_cmd);
		impl->user_mem.reset();
		IOFree(impl, sizeof(*impl));
		os_log(OS_LOG_DEFAULT, "Error: PrepareForDMA failed! ret=0x%x\n", kret);
		return kret;
	}

I allocated several 8K BGRA video frames, each with a size of 141557760 bytes, and prepared the DMA according to the method mentioned above. The process was successful when the number of frames was 15 or fewer. However, issues arose when allocating 16 frames:

Error: PrepareForDMA failed! ret=0xe00002bd

By calculating, I found that the total size of 16 video frames exceeds 2GB. Is there such a limitation in DriverKit that the total DMA size cannot exceed 2GB? Are there any methods that would allow me to bypass this restriction so I can use more video frame buffers?

The total DMA size in DriverKit cannot exceed 2G?
 
 
Q