摘要
在核心中建立新的 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權限。
type = ZX_IOMMU_TYPE_STUB
這個型別代表無作業的 IOMMU。無法提供硬體層級的防護,防止未經授權存取記憶體。但允許釘選實體記憶體頁面,防止重複使用頁面,直到使用該頁面的驅動程式庫表示已完成作業為止。
desc 必須是 zx_iommu_desc_stub_t 型別值的有效指標。desc_size 必須為 sizeof(zx_iommu_desc_stub_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 resource 控制代碼的權限不足。
「ZX_ERR_NOT_SUPPORTED」type 不是已定義的值,或這個系統不支援該值。
ZX_ERR_INVALID_ARGS desc_size 大於 ZX_IOMMU_MAX_DESC_LEN、desc 是無效指標、out 是無效指標,或 desc 的內容不適用於指定的 type。
ZX_ERR_NO_MEMORY 記憶體不足,導致失敗。
使用者空間無法妥善處理這個 (不太可能發生的) 錯誤。
日後建構版本將不會再發生這個錯誤。