摘要
创建中断对象。
声明
#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);
说明
zx_interrupt_create()
会创建一个中断对象,代表物理设备的
或虚拟中断。
如果 options 为 ZX_INTERRUPT_VIRTUAL
,src_obj 和 src_num 会被忽略,并且
就会返回虚拟中断
否则,src_obj 必须是用于创建平台中断的合适资源 或 PCI 对象,src_num 是相关的中断编号。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_channel_write()
将其发送到其他进程)、ZX_RIGHT_READ
、
ZX_RIGHT_WRITE
(对于 zx_interrupt_ack()
为必需),ZX_RIGHT_WAIT
(对于
zx_interrupt_wait()
和 ZX_RIGHT_SIGNAL
(对于 zx_interrupt_trigger()
为必需)。
中断被称为“触发”当底层物理中断发生时
或者对虚拟中断调用 zx_interrupt_trigger()
时。触发的中断
当使用 zx_interrupt_bind()
绑定到某个端口时,会导致数据包传送到该端口。
如果未绑定到端口,可以使用 zx_interrupt_wait()
等待中断对象。
在使用 zx_object_wait_
系列调用时不能等待中断。
权限
src_obj 必须具有资源种类 ZX_RSRC_KIND_IRQ
。
返回值
如果成功,zx_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
因内存不足而失败。
用户空间没有好办法处理这种(不太可能)错误。
在将来的版本中,此错误不会再发生。
另请参阅
zx_handle_close()
zx_interrupt_ack()
zx_interrupt_bind()
zx_interrupt_destroy()
zx_interrupt_wait()
zx_port_wait()