摘要
在内核中创建新的 IOMMU 对象。
声明
#include <zircon/syscalls.h>
zx_status_t zx_iommu_create(zx_handle_t resource,
uint32_t type,
const void* desc,
size_t desc_size,
zx_handle_t* out);
说明
zx_iommu_create() 在内核中创建一个表示 IOMMU 设备的新对象。
type 的值决定了对 desc 的解读。如需详细了解类型的值,请参阅下文。
成功后,系统会返回新 IOMMU 的句柄。此标识名将拥有 ZX_RIGHT_DUPLICATE 和 ZX_RIGHT_TRANSFER 权限。
type = ZX_IOMMU_TYPE_STUB
此类型表示空操作 IOMMU。它不提供任何硬件级保护,以防止未经授权的内存访问。它确实允许固定物理内存页,以防止在使用该页的驱动程序表示已完成使用之前重复使用该页。
desc 必须是指向 zx_iommu_desc_stub_t 类型值的有效指针。desc_size 必须为 sizeof(zx_iommu_desc_stub_t)。
权限
资源必须具有资源种类 ZX_RSRC_KIND_SYSTEM 和资源库 ZX_RSRC_SYSTEM_IOMMU_BASE。
返回值
成功时,zx_iommu_create() 会返回 ZX_OK 和新 IOMMU 的句柄(通过 out)。如果失败,则返回负错误值。
错误
ZX_ERR_BAD_HANDLE 资源不是有效的句柄。
ZX_ERR_WRONG_TYPE resource 不是资源句柄。
ZX_ERR_ACCESS_DENIED 资源句柄的权限不足。
ZX_ERR_NOT_SUPPORTED type 不是已定义的值,或者此系统不支持该值。
ZX_ERR_INVALID_ARGS desc_size 大于 ZX_IOMMU_MAX_DESC_LEN、desc 是无效指针、out 是无效指针,或者 desc 的内容对于给定的 type 无效。
ZX_ERR_NO_MEMORY 因内存不足而导致的失败。
用户空间无法妥善处理此(不太可能发生的)错误。
在未来的 build 中,此错误将不再发生。