zx_vmar_map_iob

摘要

對應附加至 IOBuffer 的記憶體區域。這場通話有 類似於 zx_vmar_map,但對應部分區域子集 不支援。

宣告

#include <zircon/syscalls.h>

zx_status_t zx_vmar_map_iob(zx_handle_t handle,
                             zx_vm_option_t options,
                             size_t vmar_offset,
                             zx_handle_t iob_ep,
                             uint32_t region_index,
                             size_t region_len,
                             zx_vaddr_t* addr_out);

說明

將指定的 IOBuffer 區域對應至指定的虛擬記憶體 位址區域對應區域會保留對對應資料的參照 這代表關閉對應區域的端點 移除此函式新增的對應。

options 等同於 zx_vmar_mapoptions 參數

vmar_offset 等同於 zx_vmar_mapvmar_offset 參數。

ep 是端點,其中包含要對應的區域,如建立 zx_iob_create

region_index 是要對應的記憶體區域索引。

region_offset 等同於 zx_vmar_mapvmo_offset 參數。

region_len 等同於 zx_vmar_maplen 參數。這項服務 不得為零且頁面對齊

傳回值

zx_vmar_map_iob() 會傳回 ZX_OK,以及 繪製地圖 (透過 addr_out)基本地址會以頁面對齊 和非零如果失敗,系統會傳回負的錯誤值。

錯誤

ZX_ERR_BAD_HANDLE handleiob_ep 不是有效的帳號代碼。

ZX_ERR_WRONG_TYPE handleiob_ep 分別不是 VMAR 或 IOB 控制代碼。

ZX_ERR_BAD_STATE 帳號代碼是指已刪除的 VMAR。

ZX_ERR_INVALID_ARGS 適用於下列任一項目: - mapped_addroptions 無效。 - vmar_offset如果 ZX_VM_SPECIFICZX_VM_SPECIFIC_OVERWRITE 或 已指定 ZX_VM_OFFSET_IS_UPPER_LIMIT。 - ZX_VM_SPECIFIC_OVERWRITEZX_VM_MAP_RANGE 皆已指定。 - ZX_VM_OFFSET_IS_UPPER_LIMITZX_VM_SPECIFIC 同時指定 或 ZX_VM_SPECIFIC_OVERWRITE。 - vmar_offsetlen 說明由於超過區域邊界而導致的分配情形有誤。 - vmar_offsetregion_offset 未對齊頁面。 - region_len 等於 0 或網頁未對齊。

ZX_ERR_ALREADY_EXISTS ZX_VM_SPECIFIC 已指定但沒有 ZX_VM_SPECIFIC_OVERWRITE,要求的範圍與其他對應重疊。

ZX_ERR_NO_RESOURCES 如果在 VMAR 中找不到某個點來建立對應。

ZX_ERR_ACCESS_DENIED 權限不足,無法進行要求的對應。

ZX_ERR_NOT_SUPPORTED 如果區域可調整大小、捨棄,或是由分頁器支援, 未設定ZX_VM_ALLOW_FAULTS

ZX_ERR_BUFFER_TOO_SMALL,您無法調整區域大小,且對應內容延伸到結束為止 但 ZX_VM_ALLOW_FAULTS 並未設定

ZX_ERR_NO_MEMORY 因記憶體不足而失敗。 使用者空間無法妥善處理這種 (異常) 錯誤。 在日後的版本中不會再發生這個錯誤。

ZX_ERR_OUT_OF_RANGE 適用於下列任一項目: - region_offset + ROUNDUP(len, PAGE_SIZE) 溢位。 - region_index 不適用於所提供的 IOB

附註

VMAR 作業

對應區域通常支援 VMAR 作業,例如 zx_vmar_protectzx_vmar_op_rangezx_vmar_destroy。一個區域的存取準則可能會 或限制這類作業

另請參閱