指定控制器的寄存器映射。
语法
typedef struct {
NVME_CONTROLLER_CAPABILITIES CAP;
NVME_VERSION VS;
ULONG INTMS;
ULONG INTMC;
NVME_CONTROLLER_CONFIGURATION CC;
ULONG Reserved0;
NVME_CONTROLLER_STATUS CSTS;
NVME_NVM_SUBSYSTEM_RESET NSSR;
NVME_ADMIN_QUEUE_ATTRIBUTES AQA;
NVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS ASQ;
NVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS ACQ;
NVME_CONTROLLER_MEMORY_BUFFER_LOCATION CMBLOC;
NVME_CONTROLLER_MEMORY_BUFFER_SIZE CMBSZ;
ULONG Reserved2[944];
ULONG Reserved3[64];
ULONG Doorbells[0];
} NVME_CONTROLLER_REGISTERS, *PNVME_CONTROLLER_REGISTERS;
成员
CAP
一个 NVME_CONTROLLER_CAPABILITIES 结构,指示用于托管软件的控制器的基本功能。
控制器功能 CAP 寄存器从 Offset 00h 开始。
VS
一个 NVME_VERSION 结构,指示控制器实现支持的 NVM Express 规范的主要版本和次要版本。 规范的有效版本为:1.0、1.1 和 1.2。
版本 VS 寄存器从 Offset 08h 开始。
INTMS
指示中断向量是屏蔽的,是生成中断,还是报告 MSI 功能结构中的挂起中断。
当 1
的值写入字段中的某个位时,相应的中断向量将被屏蔽,从而在 MSI 功能结构中生成中断或报告挂起的中断。 将 0
写入某个位不起作用。
读取时,此字段返回控制器中的当前中断掩码值(而不是此寄存器的值)。 如果位的值为 1
,则会屏蔽相应的中断向量。 如果位的值为 0
,则不会屏蔽相应的中断向量。
此寄存器用于在使用基于引脚的中断、单条消息 MSI 或多个消息 MSI 时屏蔽中断。 使用 MSI-X 时,应使用定义为 MSI-X 一部分的中断掩码表来屏蔽中断。 为 MSI-X 配置主机软件时,不应访问此寄存器;未定义为 MSI-X 配置的任何访问。
中断掩码集 INTMS 寄存器从 Offset 0Ch 开始。
INTMC
指示是否屏蔽中断向量。
将 1
的值写入字段中的某个位时,将取消屏蔽相应的中断向量。 将 0
写入某个位不起作用。
读取时,此字段返回控制器中的当前中断掩码值(而不是此寄存器的值)。 如果位的值为 1
,则会屏蔽相应的中断向量,如果某个位的值为 0
,则不会屏蔽相应的中断向量。
使用基于引脚的中断、单消息 MSI 或多个消息 MSI 时,此寄存器用于取消屏蔽中断。 使用 MSI-X 时,定义为 MSI-X 一部分的中断掩码表应用于取消屏蔽中断。 为 MSI-X 配置主机软件时,不应访问此寄存器;未定义为 MSI-X 配置的任何访问。
中断掩码清除 INTMS 寄存器从 Offset 10h 开始。
CC
包含控制器的读/写配置设置的 NVME_CONTROLLER_CONFIGURATION 结构。
主机软件必须先将仲裁机制(AMS)、内存页大小(MPS)和命令集(CSS) NVME_CONTROLLER_CONFIGURATION 字段设置为有效值,然后再将“启用”(EN)字段设置为 1
。
控制器配置 CC 寄存器从 Offset 14h 开始。
Reserved0
保留偏移量 18 小时。
所有保留寄存器和寄存器中的所有保留位都是只读的,在读取时返回 0h
,但是,软件不应依赖于返回 0h
。
CSTS
指示控制器状态的 NVME_CONTROLLER_STATUS 结构。
控制器状态 CSTS 寄存器从 Offset 1Ch 开始。
NSSR
一种 NVME_NVM_SUBSYSTEM_RESET 结构,它为主机软件提供启动 NVM 子系统重置的功能。
此可选寄存器的支持由 控制器功能中 NVM 子系统重置支持(NSSRS)字段的状态指示。 如果不支持寄存器,则保留寄存器占用的地址范围。
NVM 子系统重置寄存器从 Offset 20h 开始。
AQA
一个 NVME_ADMIN_QUEUE_ATTRIBUTES 结构,指定管理员提交队列和管理员完成队列的管理员队列属性。
AQA 寄存器 管理员队列属性从 Offset 24h 开始。
ASQ
指定管理员提交队列的基本内存地址的 NVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS 结构。
管理员提交队列基址注册从 Offset 28h 开始。
ACQ
一个 NVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS 结构,指定管理员完成队列的基本内存地址。
管理员完成队列基址注册从 Offset 30h 开始。
CMBLOC
指定控制器内存缓冲区位置的 NVME_CONTROLLER_MEMORY_BUFFER_LOCATION 结构。
如果 0
CMBSZ 的值,则保留此寄存器。
控制器内存缓冲区位置寄存器从 Offset 38h 开始。
CMBSZ
指定控制器内存缓冲区大小的 NVME_CONTROLLER_MEMORY_BUFFER_SIZE 结构。
如果控制器不支持控制器内存缓冲区功能,则会清除此寄存器以 0h
。
控制器内存缓冲区大小寄存器从偏移量 3Ch 开始。
Reserved2[944]
保留 40h 到 EFFh 的偏移量。
所有保留寄存器和寄存器中的所有保留位都是只读的,在读取时返回 0h
,但是,软件不应依赖于返回 0h
。
Reserved3[64]
为特定于命令集的寄存器保留偏移 F00h 到 FFFh。
所有保留寄存器和寄存器中的所有保留位都是只读的,在读取时返回 0h
,但是,软件不应依赖于返回 0h
。
Doorbells[0]
指定第一个 Doorbell 寄存器的开始。 管理员 提交队列 Tail Doorbell。
言论
控制器寄存器位于内存寄存器下基地址(MLBAR)/内存寄存器上部基址(MUBAR)寄存器(PCI BAR0 和 BAR1)中,这些寄存器映射到支持有序访问和可变访问宽度的内存空间。 对于许多计算机体系结构,将内存空间指定为不可缓存会产生此行为。
主机不得颁发锁定的访问,并且必须访问其本机宽度或对齐的 32 位访问中的寄存器。 违反其中任一主机要求会导致未定义的行为。
供应商特定的地址范围在控制器支持的最后一个门铃之后开始,并继续到 BAR0/1 支持的范围的末尾。 特定于供应商的地址范围的开始位置位于同一位置,不依赖于分配的门铃数。
不支持面向两个或多个寄存器的任何部分的访问。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 10 |
标头 | nvme.h |