总结
在内核中创建一个新的 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 的解释。请参阅下文,详细了解 type 的值。
操作成功后,系统将返回新 IOMMU 的句柄。此标识名将拥有 ZX_RIGHT_DUPLICATE
和 ZX_RIGHT_TRANSFER
权限。
类型 = ZX_IOMMU_TYPE_DUMMY
此类型表示空操作 IOMMU。它不提供任何硬件级保护来防止未经授权访问内存。它允许固定物理内存页面,以防止页面被重复使用,直到使用页面的驱动程序表明页面已完成操作。
desc 必须是指向 zx_iommu_desc_dummy_t
类型值的有效指针。
desc_size 必须是 sizeof(zx_iommu_desc_dummy_t)
。
权限
resource 必须具有资源种类 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
类型不是定义的值,或在此系统上不受支持。
ZX_ERR_INVALID_ARGS
desc_size 大于 ZX_IOMMU_MAX_DESC_LEN
,desc 是无效的指针,out 是无效的指针,或者 desc 的内容对给定的 type 无效。
ZX_ERR_NO_MEMORY
因内存不足而失败。
用户空间没有什么方法来处理此(不太可能)错误。在以后的 build 中,此错误不会再发生。