摘要
根據訊息信號中斷 (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 建立中斷物件,但相同的 vmo 和
vmo_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,而非在分配作業中
稱為 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 的值為空值。
ZX_ERR_ALREADY_BOUND
已對應至 msi_id 的 Interrupt 物件
*已存在。
另請參閱
zx_interrupt_wait()
zx_msi_allocate()
zx_vmo_create_contiguous()
zx_vmo_create_physical()
zx_vmo_set_cache_policy()