NVMe 控制器设备驱动程序

用途

支持 Non-Volatile Memory Express (NVMe) 控制器。

语法

<#include /usr/include/sys/nvme.h>
<#include /usr/include/sys/devinfo.h>

描述

/dev/nvmen 特殊文件提供 NVMe 控制器设备驱动程序的接口。

与设备相关的子例程

NVMe 控制器设备驱动程序仅支持 opencloseioctl 子例程。 NVMe 控制器特殊文件不支持 readwrite 子例程。

ioctl 子例程

除了 IOCINFO 操作之外, NVMe 控制器设备驱动程序还定义 NVMe 控制器设备的操作。

为所有使用 ioctl 子例程的设备驱动程序定义 IOCINFO 操作,如下所示:
  • IOCINFO 操作返回 devinfo 结构。 devinfo 结构在 /usr/include/sys/devinfo.h 头文件中定义。 此结构中的设备类型为 DD_BUS ,子类型为 DS_NVME。 未使用 flags 字段,并且该字段设置为 0。
  • devinfo 结构包含唯一数据,例如版本信息以及在最大发起方方式下允许的数据传输大小。 以字节为单位指定传输大小。

NVMe 控制器 ioctl 操作

NVMe 控制器设备支持以下 ioctl 操作:
NVME_PASSTHRU
提供用于将 passthru 命令发送到 NVMe 控制器设备的选项。 NVME_PASSTHRU 操作的 arg 参数是 /usr/include/sys/nvme.h 头文件中定义的 NVME_PASSTHRU 结构的地址。
注: 只能向适配器设备发送 admin 命令,向存储器 (hdisk) 设备发送 NVM 命令。 否则,这些命令可能会导致未定义的行为,例如数据损坏。 所有 NVMe 命令的操作码仅在命令集内唯一,并且操作码值可用于不同命令集中的不同操作。

向 NVMe 控制器设备发出 NVMe passthru 命令时,可以指定特定的 path_id 。 如果要将特定 path_id 用于 passthru 命令,那么需要在 flags 字段中配置 NVME_PASS_PASSTHRU 标志,并在 path_id 字段中配置要使用的 path_id

您可以将 dword_10 写入主机使用的尾数法格式的 dword_15 数据,以便根据 NVMe 规范, (最左侧) 位 31 是最有效的位, (最右侧) 位 0 是最不有效的位。 例如,要读取 0xAC 块并设置 FUA ,请将 passthru 结构中的 dword_10 设置为 0x400000AB。

必须 byte reverse 使用 passthru 命令传输的数据中的任何字段。 例如,要从标识名称空间返回的数据中读取名称空间大小 (NSZE) ,数据缓冲区 0 的 7 数 0-7 必须为 字节已反转

如果 ioctl 子程序返回 -1 ,则 passthru 命令不成功。 -1 返回值表示驱动程序未能向控制器发送命令,或者控制器在超时发生前没有响应。 如果 errno 标志设置为 EINVAL 值,那么 resp.status 参数包含指示无效字段的代码。

如果 ioctl 子例程返回 0 并且 resp.status 参数包含 0 ,那么 passthru 命令成功。 passthru 命令与其他用户通过运行读或写操作启动的命令并行运行。

NVME_CNTL
提供选项以将控制请求提交到 NVMe 控制器设备驱动程序。 NVME_CNTL 操作的 arg 参数是 /usr/include/sys/nvme.h 头文件中定义的 nvme_cntl 结构的地址。 nvme_cntl 结构中记录了 NVMe 控制器设备驱动程序支持的控制操作类型。