摘要
透過訊息信號中斷 (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()
會在 zx_msi_allocate()
建立的 MSI 配置處理常式中,建立與指定 MSI 相對應的中斷物件。這個物件可以與各種中斷系統呼叫搭配使用,就像使用 zx_interrupt_create()
傳回的 Interrupt 物件的方式一樣。每個 msi_id 一次只能建立一個中斷物件,但同一個 vmo 和 vmo_offset 可用於透過同一個 MSI 分配物件建立的多個 MSI。這麼做可讓根資源的持有人從系統分配向量和 MSI,並建立與這些向量相對應的中斷物件,供裝置驅動程式使用。
vmo 應是指稱含有快取政策「*ZX_CACHE_POLICY_UNCACHED_DEVICE」的實體虛擬機器 (透過 *zx_vmo_create_physical()
建立)。如果是測試目的,請使用連續 *zx_vmo_create_contiguous()
vmo。
msi_id 會對應特定的 MSI 分配配置中的向量,以便建立中斷物件。msi_id 必須介於 0 至分配大小減 1 (含) 之間。
vmo_offset 是指 MSI 能力結構開始處的 vmo 中的偏移值。您可在 PCI 本機匯流排規格 3.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,vmo 並非 ZX_PAGE_SIZE,vmo 並非實體或連續,vmo 的快取政策並非設為 ZX_CACHE_POLICY_UNCACHED_DEVICE,
ZX_ERR_ALREADY_BOUND
與 msi_id 對應的中斷物件*已存在。
另請參閱
zx_interrupt_wait()
zx_msi_allocate()
zx_vmo_create_contiguous()
zx_vmo_create_physical()
zx_vmo_set_cache_policy()