摘要
在核心中建立新的 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)
。
權限
資源必須具備資源類型 ZX_RSRC_KIND_SYSTEM
和資源基礎 ZX_RSRC_SYSTEM_IOMMU_BASE
。
傳回值
zx_iommu_create()
會在成功後回傳 ZX_OK
和新 IOMMU (透過輸出) 的控制代碼。如果失敗,系統會傳回負值的錯誤值。
錯誤
ZX_ERR_BAD_HANDLE
資源並非有效的帳號代碼。
ZX_ERR_WRONG_TYPE
資源並非資源控制代碼。
ZX_ERR_ACCESS_DENIED
資源控制代碼沒有足夠權限。
ZX_ERR_NOT_SUPPORTED
type 不是定義的值,或不受這個系統支援。
ZX_ERR_INVALID_ARGS
desc_size 大於 ZX_IOMMU_MAX_DESC_LEN
,desc 是無效的指標、out 是無效的指標,或者 desc 的內容對指定的類型無效。
ZX_ERR_NO_MEMORY
由於記憶體不足而失敗。使用者空間無法妥善處理這項 (不太可能) 錯誤。日後的建構作業就不會再發生這個錯誤。