NVME_CONTROLLER_REGISTERS结构 (nvme.h)

指定控制器的寄存器映射。

语法

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)和命令集(CSSNVME_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 结构。

如果 0CMBSZ 的值,则保留此寄存器。

控制器内存缓冲区位置寄存器从 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

另请参阅