zx_interrupt_bind


英文原文快照


名称

interrupt_bind —— 将中断对象绑定到端口上

概要

  1. #include <zircon/syscalls.h>
  2. zx_status_t zx_interrupt_bind(zx_handle_t inth, zx_handle_t porth,
  3. uint64_t key, uint32_t options);

描述

interrupt_bind() 的功能是将中断对象绑定到端口。

中断对象只能绑定到单个端口上,并且只能绑定一次。

当绑定的中断对象触发时,ZX_PKT_TYPE_INTERRUPT数据包将被传送到它所绑定的端口,并在zx_packet_interrupt_t中存入中触发中断的时间戳(相对于ZX_CLOCK_MONOTONIC)。 绑定中断时使用的key也将出现在zx_port_packet_tkey字段中。

在传送另一个数据包之前,必须使用interrupt_ack() 系统调用重新绑定该中断。 在中断数据包被完全处理完毕后,这(在所有情况下几乎)是最好的情况。 特别是在多个线程从同一端口读取数据包的情况下,如果处理线程重新启动中断并且它已经触发,则数据包将立即被传递到等待线程。 中断数据包通过端口上的专用队列进行传递,其优先级高于非中断数据包。

权限

TODO(ZX-2399)

返回值

interrupt_bind() 调用成功返回ZX_OK。如果调用失败,则返回负的错误码。

错误码

ZX_ERR_BAD_HANDLEinthporth是无效句柄。

ZX_ERR_WRONG_TYPEinth不是中断类型对象或porth不是端口类型对象。

ZX_ERR_CANCELED:已在inth上调用zx_interrupt_destroy()

ZX_ERR_BAD_STATE:线程正在使用interrupt_wait() 等待中断。

ZX_ERR_ACCESS_DENIEDinth句柄缺少ZX_RIGHT_READ权限或porth句柄缺少ZX_RIGHT_WRITE权限。

ZX_ERR_ALREADY_BOUND:该中断对象已绑定端口。

ZX_ERR_INVALID_ARGSoptions包含非零值。

另见

interrupt_ack, interrupt_create, interrupt_destroy, interrupt_trigger, interrupt_wait, port_wait, handle_close.