zx_interrupt_bind
名称
interrupt_bind —— 将中断对象绑定到端口上
概要
#include <zircon/syscalls.h>
zx_status_t zx_interrupt_bind(zx_handle_t inth, zx_handle_t porth,
uint64_t key, uint32_t options);
描述
interrupt_bind() 的功能是将中断对象绑定到端口。
中断对象只能绑定到单个端口上,并且只能绑定一次。
当绑定的中断对象触发时,ZX_PKT_TYPE_INTERRUPT数据包将被传送到它所绑定的端口,并在zx_packet_interrupt_t
中存入中触发中断的时间戳(相对于ZX_CLOCK_MONOTONIC)。
绑定中断时使用的key也将出现在zx_port_packet_t
的key
字段中。
在传送另一个数据包之前,必须使用interrupt_ack() 系统调用重新绑定该中断。 在中断数据包被完全处理完毕后,这(在所有情况下几乎)是最好的情况。 特别是在多个线程从同一端口读取数据包的情况下,如果处理线程重新启动中断并且它已经触发,则数据包将立即被传递到等待线程。 中断数据包通过端口上的专用队列进行传递,其优先级高于非中断数据包。
权限
TODO(ZX-2399)
返回值
interrupt_bind() 调用成功返回ZX_OK。如果调用失败,则返回负的错误码。
错误码
ZX_ERR_BAD_HANDLE: inth或porth是无效句柄。
ZX_ERR_WRONG_TYPE:inth不是中断类型对象或porth不是端口类型对象。
ZX_ERR_CANCELED:已在inth上调用zx_interrupt_destroy()。
ZX_ERR_BAD_STATE:线程正在使用interrupt_wait() 等待中断。
ZX_ERR_ACCESS_DENIED:inth句柄缺少ZX_RIGHT_READ权限或porth句柄缺少ZX_RIGHT_WRITE权限。
ZX_ERR_ALREADY_BOUND:该中断对象已绑定端口。
ZX_ERR_INVALID_ARGS:options包含非零值。
另见
interrupt_ack, interrupt_create, interrupt_destroy, interrupt_trigger, interrupt_wait, port_wait, handle_close.