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_packet_interrupt_t 中斷觸發時的時間戳記 (相對於 ZX_CLOCK_BOOT)。繫結中斷時使用的會顯示在 zx_port_packet_tkey 欄位中。

如果所繫結的中斷處於觸發狀態,系統會將 ZX_PKT_TYPE_INTERRUPT 封包傳送至所繫結中斷的通訊埠,並附上觸發中斷的時間戳記。這個封包需要正常處理。

如要繫結至通訊埠,請在 options 中傳遞 ZX_INTERRUPT_BIND

如要解除先前繫結的通訊埠,請在 options 中傳遞 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 不是有效的 handle。

ZX_ERR_WRONG_TYPE handle 不是中斷物件,或是 port_handle 不是 port 物件。

ZX_ERR_CANCELEDhandle 上呼叫 zx_interrupt_destroy()

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 選項不是 ZX_INTERRUPT_BINDZX_INTERRUPT_UNBIND

ZX_ERR_NOT_FOUND port 與繫結的 port 不符。

另請參閱