NVMe 控制器设备驱动程序
用途
支持 Non-Volatile Memory Express (NVMe) 控制器。
语法
<#include /usr/include/sys/nvme.h>
<#include /usr/include/sys/devinfo.h>
描述
/dev/nvmen 特殊文件提供 NVMe 控制器设备驱动程序的接口。
与设备相关的子例程
NVMe 控制器设备驱动程序仅支持 open, close和 ioctl 子例程。 NVMe 控制器特殊文件不支持 read 和 write 子例程。
ioctl 子例程
除了 IOCINFO 操作之外, NVMe 控制器设备驱动程序还定义 NVMe 控制器设备的操作。
ioctl 子例程的设备驱动程序定义 IOCINFO 操作,如下所示:- IOCINFO 操作返回
devinfo结构。devinfo结构在 /usr/include/sys/devinfo.h 头文件中定义。 此结构中的设备类型为 DD_BUS ,子类型为 DS_NVME。 未使用flags字段,并且该字段设置为 0。 devinfo结构包含唯一数据,例如版本信息以及在最大发起方方式下允许的数据传输大小。 以字节为单位指定传输大小。
NVMe 控制器 ioctl 操作
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 控制器设备驱动程序支持的控制操作类型。