zx_interrupt_create


英文原文快照


名称

interrupt_create —— 创建中断对象

概要

  1. #include <zircon/syscalls.h>
  2. zx_status_t zx_interrupt_create(zx_handle_t src_obj, uint32_t src_num,
  3. uint32_t options, zx_handle_t* out_handle);

描述

interrupt_create() 创建一个表示物理或虚拟中断的中断对象。

如果options的值是ZX_INTERRUPT_VIRTUAL,则忽略src_objsrc_num并返回虚拟中断。

否则src_obj必须是用于创建平台中断或PCI对象的合适资源,并且src_num是相关的中断号。 这限定了DDK(驱动程序开发工具包)内部的中断创建过程。 驱动程序可通过各种DDK相关的API获取物理中断。

物理中断可使用的选项包括ZX_INTERRUPT_EDGE_LOWZX_INTERRUPT_EDGE_HIGHZX_INTERRUPT_LEVEL_LOWZX_INTERRUPT_LEVEL_HIGHZX_INTERRUPT_REMAP_IRQ

返回句柄将具有ZX_RIGHT_INSPECTZX_RIGHT_DUPLICATEZX_RIGHT_TRANSFER(允许它们通过通道发送到另一个进程),ZX_RIGHT_READZX_RIGHT_WRITEinterrupt_ack() 所需),ZX_RIGHT_WAITinterrupt_wait() 所需)和ZX_RIGHT_SIGNALinterrupt_trigger() 所需)权限。

当底层的物理中断发生或在虚拟中断上调用interrupt_trigger() 时,中断被称为“触发(triggered)”。 当被触发的中断通过interrupt_bind() 绑定到某端口时,会导致数据包传递到该端口。

如果未绑定到任何端口,则可以使用interrupt_wait() 等待中断对象。

中断对象无法使用objectwait 系列调用来进行等待。

权限

TODO(ZX-2399)

返回值

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

错误码

ZX_ERR_BAD_HANDLEsrc_obj是无效句柄(,如果不是创建虚拟中断的调用)。

ZX_ERR_WRONG_TYPEsrc_obj句柄不适合用于创建中断。

ZX_ERR_ACCESS_DENIEDsrc_obj句柄不允许此操作。

ZX_ERR_INVALID_ARGSoptions包含无效标志或out_handle参数是无效指针。

ZX_ERR_NO_MEMORY:由于内存不足导致的失败。而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。

另见

interrupt_ack, interrupt_bind, interrupt_destroy, interrupt_wait, port_wait, handle_close.