摘要
建立中斷物件。
宣告
#include <zircon/syscalls.h>
zx_status_t zx_interrupt_create(zx_handle_t src_obj,
uint32_t src_num,
uint32_t options,
zx_handle_t* out_handle);
說明
zx_interrupt_create()
會建立代表實體或虛擬中斷的中斷物件。
如果 options 為 ZX_INTERRUPT_VIRTUAL
,系統會忽略 src_obj 和 src_num,並傳回虛擬中斷。
否則,src_obj 必須是建立平台中斷或 PCI 物件的適當資源,而 src_num 則是相關的中斷號碼。這項限制會將中斷的建立限制在 DDK (驅動程式庫開發套件) 的內部。驅動程式會透過各種 DDK API 取得實體中斷。
實體中斷會採用 ZX_INTERRUPT_EDGE_LOW
、ZX_INTERRUPT_EDGE_HIGH
、ZX_INTERRUPT_LEVEL_LOW
、ZX_INTERRUPT_LEVEL_HIGH
和 ZX_INTERRUPT_REMAP_IRQ
的選項。
實體和虛擬中斷都會遵循 ZX_INTERRUPT_TIMESTAMP_MONO
選項。使用這個選項建立的中斷會傳回 zx_interrupt_wait()
的單調時間戳記,並假設傳遞至 zx_interrupt_trigger()
的時間戳記位於單調時間軸上。根據預設,這些時間戳記會在啟動時間表上運作。
句柄將包含 ZX_RIGHT_INSPECT
、ZX_RIGHT_DUPLICATE
、ZX_RIGHT_TRANSFER
(可透過 zx_channel_write()
傳送至其他程序)、ZX_RIGHT_READ
、ZX_RIGHT_WRITE
(適用於 zx_interrupt_ack()
)、ZX_RIGHT_WAIT
(適用於 zx_interrupt_wait()
) 和 ZX_RIGHT_SIGNAL
(適用於 zx_interrupt_trigger()
)。
當底層實體中斷發生,或是在虛擬中斷上呼叫 zx_interrupt_trigger()
時,中斷就會「觸發」。當觸發中斷事件與 zx_interrupt_bind()
繫結至通訊埠時,就會將封包傳送至該通訊埠。
如果未繫結至連接埠,則可使用 zx_interrupt_wait()
等待中斷物件。
您無法使用 zx_object_wait_
系列呼叫等待中斷。
權限
src_obj 必須具有資源類型 ZX_RSRC_KIND_IRQ
。
傳回值
zx_interrupt_create()
會在成功時傳回 ZX_OK
。如果失敗,系統會傳回負值錯誤值。
錯誤
ZX_ERR_BAD_HANDLE
src_obj 句柄無效 (如果這不是虛擬中斷)
ZX_ERR_WRONG_TYPE
src_obj 句柄不是建立中斷的適當類型。
ZX_ERR_ACCESS_DENIED
src_obj 句柄不允許這項作業。
ZX_ERR_INVALID_ARGS
options 包含無效的標記,或是 out_handle 參數為無效的指標。
ZX_ERR_NO_MEMORY
記憶體不足導致失敗。使用者空間沒有適當的方式來處理這個 (不太可能發生的) 錯誤。日後的版本將不會再發生這個錯誤。
另請參閱
zx_handle_close()
zx_interrupt_ack()
zx_interrupt_bind()
zx_interrupt_destroy()
zx_interrupt_wait()
zx_port_wait()