摘要
對應附加至 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_map 的 options 參數
vmar_offset 等同於 zx_vmar_map 的 vmar_offset 參數。
ep 是端點,其中包含要對應的區域,如建立
 zx_iob_create。
region_index 是要對應的記憶體區域索引。
region_offset 等同於 zx_vmar_map 的 vmo_offset 參數。
region_len 等同於 zx_vmar_map 的 len 參數。這項服務
 不得為零且頁面對齊
傳回值
zx_vmar_map_iob() 會傳回 ZX_OK,以及
繪製地圖 (透過 addr_out)基本地址會以頁面對齊
和非零如果失敗,系統會傳回負的錯誤值。
錯誤
ZX_ERR_BAD_HANDLE  handle 或 iob_ep 不是有效的帳號代碼。
ZX_ERR_WRONG_TYPE  handle 或 iob_ep 分別不是 VMAR 或 IOB 控制代碼。
ZX_ERR_BAD_STATE  帳號代碼是指已刪除的 VMAR。
ZX_ERR_INVALID_ARGS 適用於下列任一項目:
 - mapped_addr 或 options 無效。
 - vmar_offset如果 ZX_VM_SPECIFIC、ZX_VM_SPECIFIC_OVERWRITE 或
   已指定 ZX_VM_OFFSET_IS_UPPER_LIMIT。
 - ZX_VM_SPECIFIC_OVERWRITE 和 ZX_VM_MAP_RANGE 皆已指定。
 - ZX_VM_OFFSET_IS_UPPER_LIMIT 與 ZX_VM_SPECIFIC 同時指定
   或 ZX_VM_SPECIFIC_OVERWRITE。
 - vmar_offset 和 len 說明由於超過區域邊界而導致的分配情形有誤。
 - vmar_offset 或 region_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_protect。
zx_vmar_op_range,zx_vmar_destroy。一個區域的存取準則可能會
或限制這類作業