zx_interrupt_create
名称
interrupt_create —— 创建中断对象
概要
#include <zircon/syscalls.h>
zx_status_t zx_interrupt_create(zx_handle_t src_obj, uint32_t src_num,
uint32_t options, zx_handle_t* out_handle);
描述
interrupt_create() 创建一个表示物理或虚拟中断的中断对象。
如果options的值是ZX_INTERRUPT_VIRTUAL,则忽略src_obj和src_num并返回虚拟中断。
否则src_obj必须是用于创建平台中断或PCI对象的合适资源,并且src_num是相关的中断号。 这限定了DDK(驱动程序开发工具包)内部的中断创建过程。 驱动程序可通过各种DDK相关的API获取物理中断。
物理中断可使用的选项包括ZX_INTERRUPT_EDGE_LOW,ZX_INTERRUPT_EDGE_HIGH, ZX_INTERRUPT_LEVEL_LOW,ZX_INTERRUPT_LEVEL_HIGH和ZX_INTERRUPT_REMAP_IRQ。
返回句柄将具有ZX_RIGHT_INSPECT,ZX_RIGHT_DUPLICATE,ZX_RIGHT_TRANSFER(允许它们通过通道发送到另一个进程),ZX_RIGHT_READ,ZX_RIGHT_WRITE(interrupt_ack() 所需),ZX_RIGHT_WAIT(interrupt_wait() 所需)和ZX_RIGHT_SIGNAL(interrupt_trigger() 所需)权限。
当底层的物理中断发生或在虚拟中断上调用interrupt_trigger() 时,中断被称为“触发(triggered)”。 当被触发的中断通过interrupt_bind() 绑定到某端口时,会导致数据包传递到该端口。
如果未绑定到任何端口,则可以使用interrupt_wait() 等待中断对象。
中断对象无法使用objectwait 系列调用来进行等待。
权限
TODO(ZX-2399)
返回值
interrupt_create() 调用成功返回ZX_OK。如果调用失败,则返回负的错误码。
错误码
ZX_ERR_BAD_HANDLE:src_obj是无效句柄(,如果不是创建虚拟中断的调用)。
ZX_ERR_WRONG_TYPE:src_obj句柄不适合用于创建中断。
ZX_ERR_ACCESS_DENIED:src_obj句柄不允许此操作。
ZX_ERR_INVALID_ARGS:options包含无效标志或out_handle参数是无效指针。
ZX_ERR_NO_MEMORY:由于内存不足导致的失败。而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。
另见
interrupt_ack, interrupt_bind, interrupt_destroy, interrupt_wait, port_wait, handle_close.