zx_msi_create

摘要

从 Messaged-Signaled Interrupt (MSI) 分配创建中断对象。

声明

#include <zircon/syscalls.h>

zx_status_t zx_msi_create(zx_handle_t handle,
                          uint32_t options,
                          uint32_t msi_id,
                          zx_handle_t vmo,
                          size_t vmo_offset,
                          zx_handle_t* out_interrupt);

说明

zx_msi_create() 会创建与给定 MSI 对应的中断对象 zx_msi_allocate() 创建的 MSI 分配句柄中。这个 对象可与各种中断系统调用一起使用,就像 将使用 zx_interrupt_create() 返回的 Interrupt 对象。仅一个 一次只能根据 msi_id 创建中断对象,但相同的 vmovmo_offset 适用于通过同一 MSI 分配创建的多个 MSI 对象。这样一来,根资源的持有者就可以同时分配矢量 和 MSI 文件,并创建与 以便在设备驱动程序中使用这些矢量。

vmo 应是一个句柄,用于指代实体 vmo(通过 *zx_vmo_create_physical())与缓存政策搭配使用 *ZX_CACHE_POLICY_UNCACHED_DEVICE.出于测试目的, *可以使用 zx_vmo_create_contiguous() 个行动号召视频广告系列。

msi_id 与给定 MSI 分配中的矢量相对应,以创建中断 对象。msi_id 必须介于 0 和分配大小减 1 之间(含 0 和 1)。

vmo_offset 对应于 vmo 中 MSI 功能所在的偏移量 架构。有关此结构的详细信息,可以在 PCI 本地总线中找到。 规范 v3.0,第 6.8 节。

options 应为 0。

权限

handle 的类型必须为 ZX_OBJ_TYPE_MSI

vmo 的类型必须为 ZX_OBJ_TYPE_VMO

vmo 必须具有 ZX_RIGHT_MAP

返回值

如果成功,zx_msi_create() 会返回 ZX_OK。如果失败, 返回负数。

错误

ZX_ERR_BAD_HANDLE,表示标识名无效。

ZX_ERR_WRONG_TYPE handle 不是适当的类型。

ZX_ERR_INVALID_ARGS msi_id 不是分配范围内的有效 MSI ID 由 handle 引用,vmo 不是 ZX_PAGE_SIZE 的大小,vmo 是 非物理或连续的,vmo 没有将缓存政策设置为 ZX_CACHE_POLICY_UNCACHED_DEVICE、vmo 似乎未包含支持的 MSI/MSI-X 功能,vmo_offset 超出了 vmo 的边界,vmo_offset 超出了 对于找到的功能结构类型无效,options 不为 0,或 out_interrupt 为 NULL。

ZX_ERR_ALREADY_BOUND 已有一个与 msi_id 对应的中断对象 *存在。

另请参阅