zx_iob_create

摘要

使用一組選項建立 IOBuffer。

宣告

#include <zircon/syscalls.h>

zx_status_t zx_iob_create(uint64_t options,
                          const zx_iob_region_t* regions,
                          uint32_t region_count,
                          zx_handle_t* ep0_out,
                          zx_handle_t* ep1_out);

說明

zx_iob_create() 會建立 IOBuffer,這個記憶體物件專為 實現高效率的點對點通訊可思考的為何是 IOBuffer 可做為支援特定容器的共用緩衝區的抽象化機制 附帶資料讀取和寫入作業 以及執行權限

IOBuffer 可能包含多個區域 (透過 region_count 指定)。 每個區域都可以設定成支援不同的存取模式或權限 區域設定網路。

如果已為存取中介服務設定區域,系統會建立區域 相關容器初始化

區域說明

區域的幾何圖形和設定由 zx_iob_region_t 指定 區域的說明結構基本結構包含 並套用至所有區域類型

struct zx_iob_region_t {
  zx_iob_region_type_t type;
  zx_iob_access_t access;
  uint64_t size;
  zx_iob_discipline_t discipline;
  union {
    zx_iob_region_private_t private_region;
    uint8_t max_extension[4 * 8];
  };
};

type 會指定支援該區域的地區與記憶體物件類型。 有效的類型如下: - ZX_IOB_REGION_TYPE_PRIVATE:受私人記憶體支援的區域 專屬擁有者。

access 會指定每個端點的存取權控管修飾符。這項服務 應由下列一個或多個項目組成:

  • ZX_IOB_ACCESS_EP0_CAN_MAP_READ:用來授予端點 0 功能,以便將區域對應到可讀取的區域
  • ZX_IOB_ACCESS_EP0_CAN_MAP_WRITE:授予端點 0 將區域對應為可寫入的功能
  • ZX_IOB_ACCESS_EP1_CAN_MAP_READ:授權端點 1 將區域對應至可讀取的區域
  • ZX_IOB_ACCESS_EP1_CAN_MAP_WRITE:授予端點 1 將區域對應為可寫入的權限

「size」是要求的區域大小,以位元組為單位。廣告素材的大小 會四捨五入至下一個系統頁面大小邊界,如 zx_system_get_page_size().使用「zx_object_get_info」搭配主題 ZX_INFO_IOB_REGIONS 用來決定區域的實際大小。

discipline 會指定要使用的記憶體存取規範 核心中介作業有效的紀律如下: - ZX_IOB_DISCIPLINE_TYPE_NONE:不具有核心中介作業的任意形式區域。

區域類型

ZX_IOB_REGION_TYPE_PRIVATE

指定由 IOB 擁有的私人記憶體物件支援的區域。 這個記憶體物件只能透過對下列項目執行、 和自有的 IOB

struct zx_iob_region_private_t {
  uint64_t options;
};

options 須為 0

學科類型

詳情請參閱 zx_iob_discipline_type_t

傳回值

zx_iob_create() 會在成功時傳回 ZX_OK。萬一發生錯誤 傳回的錯誤值

錯誤

ZX_ERR_INVALID_ARGS ep_out0ep_out1 是無效的指標,或 NULL、options 為 0 以外的任何值,或區域設定 無效 (例如,如果無法存取區域, 地圖寫入或設定用於中介服務存取 無效)。

ZX_ERR_NO_MEMORY 失敗,因為分配到 所要求緩衝區。