zx_msi_create

摘要

從訊息訊號中斷 (MSI) 分配作業建立 Interrupt 物件。

宣告

#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() 會在 zx_msi_allocate() 建立的 MSI 分配 控制代碼 中,建立對應指定 MSI 的 Interrupt 物件。這個物件可與各種中斷系統呼叫搭配使用,方式與使用 zx_interrupt_create() 傳回的 Interrupt 物件相同。每個 msi_id 一次只能建立一個 Interrupt 物件,但相同的 vmovmo_offset 可用於從相同 MSI 分配物件建立的多個 MSI。這可讓根資源的持有者從系統分配向量和 MSI,並建立與這些向量對應的 Interrupt 物件,以供裝置驅動程式使用。

vmo 應為參照實體 VMO 的控制代碼 (透過 *zx_vmo_create_physical() 建立),且具有快取政策 *ZX_CACHE_POLICY_UNCACHED_DEVICE。如要進行測試,可以使用連續 *zx_vmo_create_contiguous() vmo。

msi_id 對應於指定 MSI 分配中的向量,用於建立 Interrupt 物件。msi_id 必須介於 0 和分配大小減 1 之間 (含上下限)。

vmo_offset 對應於 vmo 內的位移,MSI 能力結構會從該處開始。如要瞭解這個結構的詳細資料,請參閱 PCI Local Bus Specification v3.0 的 6.8 節。

選項應為 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,handle 所參照的 vmo 大小不是 ZX_PAGE_SIZE,vmo 不是實體或連續,vmo 的快取政策未設為 ZX_CACHE_POLICY_UNCACHED_DEVICE,vmo 似乎未包含支援的 MSI/MSI-X 功能,vmo_offset 超出 vmo 的範圍,vmo_offset 對於找到的能力結構類型無效,options 不是 0,或 out_interrupt 為 NULL。

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

另請參閱