/* vim:set ft=c: */
/*
 * Copyright (C) 2021-2022, 2024 Kernkonzept GmbH.
 *
 * License: see LICENSE.spdx (in this directory or the directories above)
 */

/**
 * \defgroup l4_kernel_object_dmar_space DMA space
 * \ingroup l4_kernel_object_api
 *
 * A DMA space represents a device memory address space managed by an IOMMU.
 * That is, it manages the translation of virtual addresses used by devices to
 * physical addresses. It is accessed via the L4::Task interface, but with the
 * following caveats:
 * - No threads can be bound to it.
 * - No objects (and IO ports on IA32) can be mapped to it.
 * - No kernel-user memory can be added to it.
 * - It must be constructed by passing the L4_PROTO_DMA_SPACE protocol constant
 *   to the kernel factory's L4::Factory.create() call.
 *
 * A DMA space must be bound to an L4::Iommu to enable the address translation
 * for specific devices.
 *
 * The kernel factory allows to create DMA spaces only if the kernel has been
 * configured with IOMMU support and if an IOMMU was detected.
 */
