zx_break_bind

摘要

將中斷物件繫結至通訊埠。

宣告

#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_CLOCK_MONOTONIC) 在 zx_packet_interrupt_t 中觸發了中斷的時間。繫結中斷時使用的會顯示在 zx_port_packet_tkey 欄位中。

如果繫結的中斷狀態處於觸發狀態,系統會將 ZX_PKT_TYPE_INTERRUPT 封包傳送至受中斷事件繫結的通訊埠,其中包含觸發中斷的時間戳記。這個封包必須經過正常的處理。

如何在選項中繫結至通訊埠傳遞 ZX_INTERRUPT_BIND

如要在選項中解除先前繫結的通訊埠傳遞 ZX_INTERRUPT_UNBIND,如要解除繫結,必須使用 port_handle,但系統會忽略 key。取消繫結通訊埠後,系統會移除先前排入佇列的封包至該通訊埠。

傳送其他封包之前,您必須使用 zx_interrupt_ack() 系統呼叫重新告知繫結中斷。這 (在幾乎所有情況下) 最適合在中斷封包處理完畢後完成。特別是針對多個從通訊埠讀取封包的執行緒,如果處理執行緒重新觸發中斷,並且觸發了中斷,封包會立即傳送至等候中的執行緒。

中斷封包是透過通訊埠上的專屬佇列傳送,且優先順序高於非中斷封包。

權限

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 handleport_handle 不是有效的控制代碼。

ZX_ERR_WRONG_TYPE 處理常式不是中斷物件,或者 port_handle 不是通訊埠物件。

ZX_ERR_CANCELED zx_interrupt_destroy() 已在帳號代碼上呼叫。

ZX_ERR_BAD_STATE 執行緒正使用 zx_interrupt_wait() 在等待中斷

ZX_ERR_ACCESS_DENIED 處理常式控點缺少 ZX_RIGHT_READport_handle 控制點 ZX_RIGHT_WRITE

ZX_ERR_ALREADY_BOUND這個中斷物件已繫結。

ZX_ERR_INVALID_ARGS 選項不是 ZX_INTERRUPT_BINDZX_INTERRUPT_UNBIND

ZX_ERR_NOT_FOUND 通訊埠與繫結通訊埠不符。

另請參閱