zx_msi_create

摘要

根據訊息信號中斷 (MSI) 分配作業建立「中斷」物件。

宣告

#include <zircon/syscalls.h>

zx_status_t zx_msi_create(zx_handle_t handle,
                          uint32_t options,
                          uint32_t msi_id,
                          zx_handle_t vmo,
                          size_t vmo_offset,
                          zx_handle_t* out_interrupt);

說明

zx_msi_create() 會建立與指定 MSI 相對應的「中斷」物件 zx_msi_allocate() 建立的 MSI 配置控制代碼內。這個 物件可與各種中斷系統呼叫搭配使用 會使用 zx_interrupt_create() 傳回的中斷物件。僅限 1 個 系統一次可以為每個 msi_id 建立中斷物件,但相同的 vmovmo_offset 適用於從相同 MSI 分配範圍建立的多個 MSI 物件。如此一來,根資源的擁有者就能同時分配向量 並建立「Interrupt」物件 以便用於裝置驅動程式

vmo 應為參照實體 Vmo 的控制代碼 (透過 *zx_vmo_create_physical()) 含有快取政策 *ZX_CACHE_POLICY_UNCACHED_DEVICE.如要測試用途, *可使用 zx_vmo_create_contiguous() Vmo。

msi_id 會對應至指定 MSI 分配範圍中的向量,藉此建立「中斷」 物件msi_id 必須介於 0 至 0 之間,且分配大小減去 1 (含 1)。

vmo_offset 與 MSI 能力位於 vmo 中的偏移對應 一開始您可以在 PCI 當地匯流排找到此結構的詳細資訊 規格 v3.0,第 6.8 節。

options 應為 0。

權限

handle 必須是 ZX_OBJ_TYPE_MSI 類型。

vmo 必須是 ZX_OBJ_TYPE_VMO 類型。

vmo 必須具有 ZX_RIGHT_MAP

傳回值

zx_msi_create() 會在成功時傳回 ZX_OK。故障時, 會傳回負錯誤值。

錯誤

ZX_ERR_BAD_HANDLE 帳號代碼無效。

ZX_ERR_WRONG_TYPE 帳號代碼不是適當的類型。

ZX_ERR_INVALID_ARGS msi_id 不是有效的 MSI ID,而非在分配作業中 稱為 handlevmo 不是 ZX_PAGE_SIZE 的大小,vmo 則是 沒有實體或連續,vmo 並未將快取政策設為 ZX_CACHE_POLICY_UNCACHED_DEVICE,vmo 似乎未包含支援的 MSI/MSI-X 能力,vmo_offset 超出 vmo 的範圍,vmo_offset 是 對找到的能力結構類型無效,options 不是 0,或 out_interrupt 的值為空值。

ZX_ERR_ALREADY_BOUND 已對應至 msi_id 的 Interrupt 物件 *已存在。

另請參閱