摘要
將中斷物件繫結至埠。
宣告
#include <zircon/syscalls.h>
zx_status_t zx_interrupt_bind(zx_handle_t handle,
zx_handle_t port_handle,
uint64_t key,
uint32_t options);
說明
zx_interrupt_bind() 會將中斷物件繫結至連接埠,或從連接埠取消繫結。
中斷物件只能繫結至單一通訊埠,且只能繫結一次。中斷只能繫結至以 ZX_PORT_BIND_TO_INTERRUPT 選項建立的通訊埠。
觸發繫結的中斷物件時,系統會將 ZX_PKT_TYPE_INTERRUPT 封包傳送到繫結的通訊埠,並在 zx_packet_interrupt_t 中加入中斷觸發時間的時間戳記 (相對於 ZX_CLOCK_BOOT)。繫結中斷時使用的 key 會出現在 zx_port_packet_t 的 key 欄位中。
如果繫結的中斷處於觸發狀態,系統會將 ZX_PKT_TYPE_INTERRUPT 封包傳送至中斷繫結的通訊埠,並附上中斷觸發的時間戳記。這個封包必須正常處理。
如要繫結至通訊埠,請在「options」中傳遞 ZX_INTERRUPT_BIND。
如要取消繫結先前繫結的通訊埠憑證 ZX_INTERRUPT_UNBIND,請前往「選項」。如要取消繫結,必須提供 port_handle,但系統會忽略 key。解除繫結通訊埠會移除先前排入該通訊埠佇列的封包。
中斷已繫結至通訊埠,且中斷封包已傳送至通訊埠並由使用者讀取時,必須先確認中斷,才能傳送另一個封包。系統會呼叫 zx_interrupt_ack() 系統呼叫,確認已收到與連接埠相關的中斷。如要瞭解如何在使用繫結至連接埠的中斷物件時接收及確認中斷,請參閱「(這裡)Interrupts#asynchronous-waiting-and-acknowledgement」。
中斷封包會透過通訊埠的專用佇列傳送,優先順序高於非中斷封包。
權限
handle 必須是 ZX_OBJ_TYPE_INTERRUPT 類型,且具有 ZX_RIGHT_READ。
port_handle 必須為 ZX_OBJ_TYPE_PORT 類型,且具有 ZX_RIGHT_WRITE。
傳回值
zx_interrupt_bind() 會在成功時傳回 ZX_OK。如果失敗,系統會傳回負數錯誤值。
錯誤
ZX_ERR_BAD_HANDLE handle 或 port_handle 不是有效的控制代碼。
ZX_ERR_WRONG_TYPE 控制代碼不是中斷物件,或 port_handle 不是連接埠物件。
ZX_ERR_CANCELED zx_interrupt_destroy() 在 handle 上遭到呼叫。
ZX_ERR_BAD_STATE 執行緒正在使用 zx_interrupt_wait() 等待中斷
ZX_ERR_ACCESS_DENIED handle 控制代碼缺少 ZX_RIGHT_READ 或 port_handle 控制代碼缺少 ZX_RIGHT_WRITE
ZX_ERR_ALREADY_BOUND 這個中斷物件已繫結。
ZX_ERR_INVALID_ARGS options 不是 ZX_INTERRUPT_BIND 或 ZX_INTERRUPT_UNBIND。
ZX_ERR_NOT_FOUND 通訊埠與繫結通訊埠不符。