nvme.h) (NVME_IDENTIFY_CONTROLLER_DATA 结构

包含指示控制器功能、功能、命令集属性和电源状态描述符的值。

语法

typedef struct {
  USHORT                VID;
  USHORT                SSVID;
  UCHAR                 SN[20];
  UCHAR                 MN[40];
  UCHAR                 FR[8];
  UCHAR                 RAB;
  UCHAR                 IEEE[3];
  struct {
    UCHAR MultiPCIePorts : 1;
    UCHAR MultiControllers : 1;
    UCHAR SRIOV : 1;
    UCHAR ANAR : 1;
    UCHAR Reserved : 4;
  } CMIC;
  UCHAR                 MDTS;
  USHORT                CNTLID;
  ULONG                 VER;
  ULONG                 RTD3R;
  ULONG                 RTD3E;
  struct {
    ULONG Reserved0 : 8;
    ULONG NamespaceAttributeChanged : 1;
    ULONG FirmwareActivation : 1;
    ULONG Reserved1 : 1;
    ULONG AsymmetricAccessChanged : 1;
    ULONG PredictableLatencyAggregateLogChanged : 1;
    ULONG LbaStatusChanged : 1;
    ULONG EnduranceGroupAggregateLogChanged : 1;
    ULONG Reserved2 : 12;
    ULONG ZoneInformation : 1;
    ULONG Reserved3 : 4;
  } OAES;
  struct {
    ULONG HostIdentifier128Bit : 1;
    ULONG NOPSPMode : 1;
    ULONG NVMSets : 1;
    ULONG ReadRecoveryLevels : 1;
    ULONG EnduranceGroups : 1;
    ULONG PredictableLatencyMode : 1;
    ULONG TBKAS : 1;
    ULONG NamespaceGranularity : 1;
    ULONG SQAssociations : 1;
    ULONG UUIDList : 1;
    ULONG Reserved0 : 22;
  } CTRATT;
  struct {
    USHORT ReadRecoveryLevel0 : 1;
    USHORT ReadRecoveryLevel1 : 1;
    USHORT ReadRecoveryLevel2 : 1;
    USHORT ReadRecoveryLevel3 : 1;
    USHORT ReadRecoveryLevel4 : 1;
    USHORT ReadRecoveryLevel5 : 1;
    USHORT ReadRecoveryLevel6 : 1;
    USHORT ReadRecoveryLevel7 : 1;
    USHORT ReadRecoveryLevel8 : 1;
    USHORT ReadRecoveryLevel9 : 1;
    USHORT ReadRecoveryLevel10 : 1;
    USHORT ReadRecoveryLevel11 : 1;
    USHORT ReadRecoveryLevel12 : 1;
    USHORT ReadRecoveryLevel13 : 1;
    USHORT ReadRecoveryLevel14 : 1;
    USHORT ReadRecoveryLevel15 : 1;
  } RRLS;
  UCHAR                 Reserved0[9];
  UCHAR                 CNTRLTYPE;
  UCHAR                 FGUID[16];
  USHORT                CRDT1;
  USHORT                CRDT2;
  USHORT                CRDT3;
  UCHAR                 Reserved0_1[106];
  UCHAR                 ReservedForManagement[16];
  struct {
    USHORT SecurityCommands : 1;
    USHORT FormatNVM : 1;
    USHORT FirmwareCommands : 1;
    USHORT NamespaceCommands : 1;
    USHORT DeviceSelfTest : 1;
    USHORT Directives : 1;
    USHORT NVMeMICommands : 1;
    USHORT VirtualizationMgmt : 1;
    USHORT DoorBellBufferConfig : 1;
    USHORT GetLBAStatus : 1;
    USHORT Reserved : 6;
  } OACS;
  UCHAR                 ACL;
  UCHAR                 AERL;
  struct {
    UCHAR Slot1ReadOnly : 1;
    UCHAR SlotCount : 3;
    UCHAR ActivationWithoutReset : 1;
    UCHAR Reserved : 3;
  } FRMW;
  struct {
    UCHAR SmartPagePerNamespace : 1;
    UCHAR CommandEffectsLog : 1;
    UCHAR LogPageExtendedData : 1;
    UCHAR TelemetrySupport : 1;
    UCHAR PersistentEventLog : 1;
    UCHAR Reserved0 : 1;
    UCHAR TelemetryDataArea4 : 1;
    UCHAR Reserved1 : 1;
  } LPA;
  UCHAR                 ELPE;
  UCHAR                 NPSS;
  struct {
    UCHAR CommandFormatInSpec : 1;
    UCHAR Reserved : 7;
  } AVSCC;
  struct {
    UCHAR Supported : 1;
    UCHAR Reserved : 7;
  } APSTA;
  USHORT                WCTEMP;
  USHORT                CCTEMP;
  USHORT                MTFA;
  ULONG                 HMPRE;
  ULONG                 HMMIN;
  UCHAR                 TNVMCAP[16];
  UCHAR                 UNVMCAP[16];
  struct {
    ULONG RPMBUnitCount : 3;
    ULONG AuthenticationMethod : 3;
    ULONG Reserved0 : 10;
    ULONG TotalSize : 8;
    ULONG AccessSize : 8;
  } RPMBS;
  USHORT                EDSTT;
  UCHAR                 DSTO;
  UCHAR                 FWUG;
  USHORT                KAS;
  struct {
    USHORT Supported : 1;
    USHORT Reserved : 15;
  } HCTMA;
  USHORT                MNTMT;
  USHORT                MXTMT;
  struct {
    ULONG CryptoErase : 1;
    ULONG BlockErase : 1;
    ULONG Overwrite : 1;
    ULONG Reserved : 26;
    ULONG NDI : 1;
    ULONG NODMMAS : 2;
  } SANICAP;
  ULONG                 HMMINDS;
  USHORT                HMMAXD;
  USHORT                NSETIDMAX;
  USHORT                ENDGIDMAX;
  UCHAR                 ANATT;
  struct {
    UCHAR OptimizedState : 1;
    UCHAR NonOptimizedState : 1;
    UCHAR InaccessibleState : 1;
    UCHAR PersistentLossState : 1;
    UCHAR ChangeState : 1;
    UCHAR Reserved : 1;
    UCHAR StaticANAGRPID : 1;
    UCHAR SupportNonZeroANAGRPID : 1;
  } ANACAP;
  ULONG                 ANAGRPMAX;
  ULONG                 NANAGRPID;
  ULONG                 PELS;
  UCHAR                 Reserved1[156];
  struct {
    UCHAR RequiredEntrySize : 4;
    UCHAR MaxEntrySize : 4;
  } SQES;
  struct {
    UCHAR RequiredEntrySize : 4;
    UCHAR MaxEntrySize : 4;
  } CQES;
  USHORT                MAXCMD;
  ULONG                 NN;
  struct {
    USHORT Compare : 1;
    USHORT WriteUncorrectable : 1;
    USHORT DatasetManagement : 1;
    USHORT WriteZeroes : 1;
    USHORT FeatureField : 1;
    USHORT Reservations : 1;
    USHORT Timestamp : 1;
    USHORT Verify : 1;
    USHORT Reserved : 8;
  } ONCS;
  struct {
    USHORT CompareAndWrite : 1;
    USHORT Reserved : 15;
  } FUSES;
  struct {
    UCHAR FormatApplyToAll : 1;
    UCHAR SecureEraseApplyToAll : 1;
    UCHAR CryptographicEraseSupported : 1;
    UCHAR FormatSupportNSIDAllF : 1;
    UCHAR Reserved : 4;
  } FNA;
  struct {
    UCHAR Present : 1;
    UCHAR FlushBehavior : 2;
    UCHAR Reserved : 5;
  } VWC;
  USHORT                AWUN;
  USHORT                AWUPF;
  struct {
    UCHAR CommandFormatInSpec : 1;
    UCHAR Reserved : 7;
  } NVSCC;
  struct {
    UCHAR WriteProtect : 1;
    UCHAR UntilPowerCycle : 1;
    UCHAR Permanent : 1;
    UCHAR Reserved : 5;
  } NWPC;
  USHORT                ACWU;
  UCHAR                 Reserved4[2];
  struct {
    ULONG SGLSupported : 2;
    ULONG KeyedSGLData : 1;
    ULONG Reserved0 : 13;
    ULONG BitBucketDescrSupported : 1;
    ULONG ByteAlignedContiguousPhysicalBuffer : 1;
    ULONG SGLLengthLargerThanDataLength : 1;
    ULONG MPTRSGLDescriptor : 1;
    ULONG AddressFieldSGLDataBlock : 1;
    ULONG TransportSGLData : 1;
    ULONG Reserved1 : 10;
  } SGLS;
  ULONG                 MNAN;
  UCHAR                 Reserved6[224];
  UCHAR                 SUBNQN[256];
  UCHAR                 Reserved7[768];
  UCHAR                 Reserved8[256];
  NVME_POWER_STATE_DESC PDS[32];
  UCHAR                 VS[1024];
} NVME_IDENTIFY_CONTROLLER_DATA, *PNVME_IDENTIFY_CONTROLLER_DATA;

成员

VID

包含由 外围组件互连 - 特殊兴趣组 (PCI-SIG) 分配的公司供应商标识符。

SSVID

包含由 PCI-SIG 为子系统分配的公司供应商标识符。

SN[20]

包含供应商分配为 ASCII 字符串的 NVM 子系统的序列号。

MN[40]

包含供应商作为 ASCII 字符串分配的 NVM 子系统的型号。

FR[8]

包含 NVM 子系统的当前活动固件修订版。

这是 NVME_FIRMWARE_SLOT_INFO_LOG 中可以使用“获取日志页”命令检索的相同固件修订信息。

RAB

包含建议的仲裁突发大小。

IEEE[3]

包含控制器供应商的组织唯一标识符 (OUI) 。

OUI 是有效的 IEEE/RAC 分配标识符,可在 注册 http://standards.ieee.org/develop/regauth/oui/public.html

CMIC

控制器多路径 I/O 和命名空间共享功能 (CMIC) 结构,用于指定控制器和 NVM 子系统的多路径 I/O 和命名空间共享功能。

CMIC.MultiPCIePorts

CMIC 结构的位 0。

当此值设置为 1时,NVM 子系统可能包含两个或更多个物理 PCI Express 端口。 将 值清除为 0时,NVM 子系统包含单个 PCI Express 端口。

CMIC.MultiControllers

CMIC 结构的位 1。

当此值设置为 1时,NVM 子系统可能包含两个或多个控制器。 将 值清除为 0时,NVM 子系统包含单个控制器。

CMIC.SRIOV

CMIC 结构的位 2。

当此值设置为 1时,控制器与单根 I/O 虚拟化 (SR-IOV) Virtual Function 相关联。 将 值清除为 0时,控制器与 PCI 函数相关联。

CMIC.ANAR

CMIC.Reserved

保留 CMIC 结构的位 3:7。

MDTS

指示主机和控制器之间的最大数据传输大小。

主机不应提交超过此传输大小的命令。 如果提交的命令超过传输大小,则该命令将中止,状态为 “NVME_STATUS_INVALID_FIELD_IN_COMMAND”。

此字段的值以控制器功能结构的 MPSMIN 字段中指定的最小内存页大小的单位为单位,并报告为 2 (2^n) 的幂。 值为 0h 表示对传输大小没有限制。 如果元数据与逻辑块数据交错,则限制包括元数据。

如果支持 SGL 位存储桶描述符,则确定命令是否超过目标数据缓冲区的最大数据传输大小时会包含其长度。 最大数据传输大小计算不包括源数据缓冲区中的长度。

CNTLID

包含与控制器关联的 NVM 子系统唯一控制器标识符。

VER

包含在版本寄存器中报告的值,在NVME_CONTROLLER_REGISTERS结构的 VS 字段中定义。

符合 NVMe 规范版本 1.2 或更高版本的实现将在此字段中报告非零值。

RTD3R

指示从 Runtime D3 (RTD3) 恢复时的典型延迟(以微秒为单位)。

符合 NVMe 规范版本 1.2 或更高版本的实现将在此字段中报告非零值。

RTD3E

指示进入 Runtime D3 (RTD3) 的典型延迟(以微秒为单位)。

符合 NVMe 规范版本 1.2 或更高版本的实现将在此字段中报告非零值。

OAES

支持的可选异步事件 (OAES) 结构,其中包含指示控制器是否支持可选异步事件的字段。

控制器不应在主机软件启用可选异步事件之前发送这些事件。

OAES.Reserved0

保留 OAES 结构的位 10:31。

OAES.NamespaceAttributeChanged

OAES 结构的位 8。

当此值设置为 1时,控制器支持发送命名空间属性已更改事件。 将此值清除为 0时,控制器不支持命名空间属性已更改事件。

OAES.FirmwareActivation

OAES 结构的位 9。

当此值设置为 1时,控制器支持发送固件激活事件。 将此值清除为 0时,控制器不支持固件激活事件。

OAES.Reserved1

保留 OAES 结构的位 0:7。

OAES.AsymmetricAccessChanged

OAES.PredictableLatencyAggregateLogChanged

OAES.LbaStatusChanged

OAES.EnduranceGroupAggregateLogChanged

OAES.Reserved2

OAES.ZoneInformation

OAES.Reserved3

CTRATT

控制器属性 (包含控制器属性信息的 CTRATT) 结构。

CTRATT.HostIdentifier128Bit

CTRATT 结构的位 32,包含 128 位主机标识符。

CTRATT.NOPSPMode

CTRATT 结构的位 31,包含有关非工作电源状态 (NOPS) 的信息。

CTRATT.NVMSets

CTRATT 结构的位 30,包含有关 NVM 命令集的信息。

CTRATT.ReadRecoveryLevels

CTRATT 结构的位 29,包含有关读取恢复级别的信息。

CTRATT.EnduranceGroups

CTRATT 结构的位 28,包含有关耐力组级别的信息。

CTRATT.PredictableLatencyMode

CTRATT.TBKAS

CTRATT.NamespaceGranularity

CTRATT.SQAssociations

CTRATT.UUIDList

CTRATT.Reserved0

保留 CTRATT 结构的位 0:27。

RRLS

RRLS.ReadRecoveryLevel0

RRLS.ReadRecoveryLevel1

RRLS.ReadRecoveryLevel2

RRLS.ReadRecoveryLevel3

RRLS.ReadRecoveryLevel4

RRLS.ReadRecoveryLevel5

RRLS.ReadRecoveryLevel6

RRLS.ReadRecoveryLevel7

RRLS.ReadRecoveryLevel8

RRLS.ReadRecoveryLevel9

RRLS.ReadRecoveryLevel10

RRLS.ReadRecoveryLevel11

RRLS.ReadRecoveryLevel12

RRLS.ReadRecoveryLevel13

RRLS.ReadRecoveryLevel14

RRLS.ReadRecoveryLevel15

Reserved0[9]

140 字节的保留字段。

CNTRLTYPE

FGUID[16]

CRDT1

CRDT2

CRDT3

Reserved0_1[106]

ReservedForManagement[16]

为 NVMe 管理保留。

OACS

可选的 管理员 命令支持 (OACS) 结构,其中包含指示控制器支持的可选管理员命令的字段。

OACS.SecurityCommands

OACS 结构的位 0 指示控制器是否支持安全发送和安全接收命令。

当此值设置为 1时,控制器支持安全发送和安全接收命令。 将此值清除为 0时,控制器不支持“安全发送”和“安全接收”命令。

OACS.FormatNVM

OACS 结构的位 1 指示控制器是否支持 Format NVM 命令。

当此值设置为 1时,控制器支持 Format NVM 命令。 将此值清除为 0时,控制器不支持 Format NVM 命令。

OACS.FirmwareCommands

OACS 结构的位 2 指示控制器是否支持固件提交和固件映像下载命令。

当此值设置为 1时,控制器支持固件提交和固件映像下载命令。 将此值清除为 0时,控制器不支持固件提交和固件映像下载命令。

OACS.NamespaceCommands

OACS 结构的位 3 指示控制器是否支持命名空间管理和命名空间附件命令。

当此值设置为 1时,控制器支持命名空间管理和命名空间附件命令。 将此值清除为 0时,控制器不支持命名空间管理和命名空间附件命令。

OACS.DeviceSelfTest

OACS 结构的位 4 指示控制器是否支持设备自测试命令。

OACS.Directives

OACS 结构的位 5 指示控制器是否支持指令发送和指令接收命令。

OACS.NVMeMICommands

OACS.VirtualizationMgmt

OACS.DoorBellBufferConfig

OACS.GetLBAStatus

OACS.Reserved

位 6:15: 是保留的。

ACL

指示控制器支持的并发未完成 的 Abort 命令的最大数目。

这是基于 0 的值。 实现应同时支持至少四个未完成的 Abort 命令。

AERL

指示控制器支持的并发未完成 异步事件请求 命令的最大数目。

这是基于 0 的值。 实现应同时支持至少四个未完成的异步事件请求命令。

FRMW

固件汇报 (FRMW) 结构,其中包含指示固件更新相关功能的字段。

FRMW.Slot1ReadOnly

FRMW 结构的位 0 指示第一个固件槽 (槽 1) 是否为只读。

当此值设置为 1时,第一个固件槽 (槽 1) 为只读。 将此值清除为 0时,第一个固件槽 (槽 1) 为可读/写。 实现可以选择具有基线只读固件映像。

FRMW.SlotCount

FRMW 结构的位 1:3 表示控制器支持的固件槽数。

此字段指定一个介于 1 到 7 之间的值,指示至少支持一个固件槽,最多支持 7 个。 这对应于固件槽 1 到 7。

FRMW.ActivationWithoutReset

FRMW 结构的位 4 指示控制器是否支持在不重置的情况下激活固件。

当此值设置为 1时,控制器支持固件激活,而无需重置。 将此值清除为 0时,控制器需要重置固件才能激活。

FRMW.Reserved

保留 FRMW 结构的位 5:7。

LPA

日志页属性 (LPA) 结构,其中包含指示使用 “获取日志页 ”命令访问的日志页的可选属性的字段。

LPA.SmartPagePerNamespace

LPA 结构的位 0 指示控制器是否支持基于命名空间的 SMART/Health 信息日志页。

当此值设置为 1时,控制器基于命名空间支持 SMART/Health 信息日志页。 将此值清除为 0时,控制器不支持基于命名空间的 SMART/Health 信息日志页。

LPA.CommandEffectsLog

LPA 结构的位 1 指示控制器是否支持命令效果日志页。

当此值设置为 1时,控制器支持命令效果日志页。 将此值清除为 0时,控制器不支持命令效果日志页。

LPA.LogPageExtendedData

LPA 结构的位 2 指示控制器是否支持日志页扩展数据。

LPA.TelemetrySupport

LPA 结构的位 3 指示控制器是否支持遥测支持。

LPA.PersistentEventLog

LPA.Reserved0

LPA.TelemetryDataArea4

LPA.Reserved1

ELPE

指示控制器存储的错误信息日志条目数。 此字段是基于 0 的值。

NPSS

指示控制器支持的 NVM Express 电源状态数。 这是基于 0 的值。

电源状态从电源状态 0 开始按顺序编号。 控制器必须支持至少一个电源状态 (例如电源状态 0) ,并且最多可以支持 31 个额外的电源状态,总共 32 个。

AVSCC

管理员供应商特定的命令配置 (AVSCC) 结构,其中包含指示管理员特定于供应商的命令处理的配置设置的字段。

AVSCC.CommandFormatInSpec

AVSCC 结构的位 0 指示是否所有管理员特定于供应商的命令都使用NVME_COMMAND结构中定义的命令格式。

当此值被清除为 0时,它指示所有管理员供应商特定的命令的格式是供应商特定的。 如果此值设置为 1,则表示所有管理员供应商特定命令都将使用 NVME_COMMAND 结构。

AVSCC.Reserved

保留 AVSCC 结构的位 1:7。

APSTA

自治电源状态转换属性 (APSTA) 结构,其中包含指示 自治电源状态转换功能属性的字段。

APSTA.Supported

APSTA 结构的位 0 指示控制器是否支持自主电源状态转换。

当此值设置为 1时,控制器支持自主电源状态转换。 将此值清除为 0时,控制器不支持自主电源状态转换。

APSTA.Reserved

保留 APSTA 结构的位 1:7。

WCTEMP

指示 SMART/Health Information 日志中报告 (的最小复合温度字段值,该值指示控制器操作继续处于过热状态。

建议立即修正 (例如,) 额外冷却或减少工作负载。 平台应尽量将复合温度维持在此值以下。

此字段中的 0h 值为 表示控制器未报告任何警告温度阈值。 符合 NVMe 规范版本 1.2 或更高版本的实现应在此字段中报告非零值。 建议实现在此字段中报告 值 0157h

CCTEMP

指示 [SMART / Health Information] (ns-nvme-nvme_health_info_log.md 日志) 中报告 (的最小复合温度字段值,该值指示严重过热情况。 例如,可能阻止继续正常操作、数据丢失的可能性、自动设备关闭、极端性能限制或永久损坏的情况。

此字段中的 0h 值为 表示控制器未报告任何临界温度阈值。 符合 NVMe 规范版本 1.2 或更高版本的实现应在此字段中报告非零值。

MTFA

指示控制器暂时停止处理命令以激活固件映像的最长时间。

如果控制器支持固件激活而无需重置,则此字段有效。 MFTA 值以 100 毫秒为单位指定。 值 指示 0h 未定义最大时间。

HMPRE

指示主机应为 主机内存缓冲区 功能分配的首选大小(以 4KB 为单位)。

此值必须大于或等于 HMMIN) (主机内存缓冲区最小大小。

如果此字段不为零,则支持主机内存缓冲区功能。 将此值清除为 0h时,不支持主机内存缓冲区功能。

HMMIN

指示主机应为主机内存缓冲区功能分配的最小大小(以 4KB 为单位)。

将此值清除为 0时,将请求主机分配可能达到 HMPRE 值的任意主机内存量。

TNVMCAP[16]

指示 NVM 子系统的总 NVM 容量(以字节为单位)。

如果支持命名空间管理和命名空间附件命令,则支持此字段。

UNVMCAP[16]

指示 NVM 子系统的未分配 NVM 容量(以字节为单位)。

如果支持命名空间管理和命名空间附件命令,则支持此字段。

RPMBS

重播受保护的内存块支持 (RPMBS) 结构,其中包含指示控制器是否支持一个或多个重播受保护内存块 (RPMB) 和相关功能的字段。

RPMBS.RPMBUnitCount

指示控制器支持的 RPMB 目标数。

) PMB 目标支持的所有 (受保护的内存块都具有在 RPMBS 字段中定义的相同功能。 值 0h 指示控制器不支持 RPMB。 如果此值不为零,则控制器支持“安全发送”和“安全接收”命令。

RPMBS.AuthenticationMethod

指示用于访问控制器中所有重播受保护内存块 (RPMB) 的身份验证方法。 此字段的值为:

定义
000b HMAC SHA-256
001b-111b 预留

RPMBS.Reserved0

保留字段。

RPMBS.TotalSize

指示控制器中支持的每个 RPMB 的总大小(以 128KB 为单位)。 这是基于 0 的值。 值 0h 指示大小为 128KB。

RPMBS.AccessSize

指示此控制器的安全发送或安全接收命令按 RPMB 访问可以读取或写入的大小,单位为 512B。

这是基于 0 的值。 值 0h 指示大小为 512B。

EDSTT

指示扩展设备自测试时间 (EDSTT) 。

DSTO

指示设备自测试选项 (DSTO) 。

FWUG

指示固件更新粒度 (FWUG) 。

KAS

指示 KAS) (Keep Alive 支持。

HCTMA

主机控制的热管理属性 (HCTMA) 结构。

HCTMA.Supported

指示是否支持主机控制的热管理属性。

HCTMA.Reserved

HCTMA 结构字段是保留字段。

MNTMT

最低热管理温度 (MNTMT)

MXTMT

最高热管理温度 (MXTMT)

SANICAP

sanICAP) (清理功能

SANICAP.CryptoErase

控制器支持加密擦除清理

SANICAP.BlockErase

控制器支持块擦除清理

SANICAP.Overwrite

控制器支持覆盖桑特化

SANICAP.Reserved

SANICAP.NDI

SANICAP.NODMMAS

HMMINDS

HMMAXD

NSETIDMAX

NVM 集标识符最大值

ENDGIDMAX

ANATT

ANACAP

ANACAP.OptimizedState

ANACAP.NonOptimizedState

ANACAP.InaccessibleState

ANACAP.PersistentLossState

ANACAP.ChangeState

ANACAP.Reserved

ANACAP.StaticANAGRPID

ANACAP.SupportNonZeroANAGRPID

ANAGRPMAX

NANAGRPID

PELS

Reserved1[156]

保留字段。

SQES

提交队列条目大小 (SQES) 结构,其中包含指示使用 NVM 命令集时所需和最大提交队列条目大小的字段。

SQES.RequiredEntrySize

SQES 结构的位 0:3 表示使用 NVM 命令集时所需的提交队列条目大小。

这是可以使用的最小条目大小。 该值以字节为单位,报告为 2 (2^n) 的幂。 所需值为 6,对应于 64 个字节。

SQES.MaxEntrySize

SQES 结构的位 4:7 指示使用 NVM 命令集时的最大提交队列条目大小。

此值大于或等于 SQES。RequiredEntrySize 值。 该值以字节为单位,报告为 2 (2^n) 的幂。 建议的值为 6,对应于标准 NVM 命令集 SQ 条目大小 64 字节。 实现专有扩展的控制器可能支持更大的值。

CQES

完成队列条目大小 (CQES) 结构,其中包含指示使用 NVM 命令集时所需和最大完成队列条目大小的字段。

CQES.RequiredEntrySize

CQES 结构的位 0:3 指示使用 NVM 命令集时所需的完成队列条目大小。

这是可以使用的最小条目大小。 该值以字节为单位,报告为 2 (2^n) 的幂。 所需值为 4,对应于 16 个字节。

CQES.MaxEntrySize

CQES 结构的位 4:7 表示使用 NVM 命令集时的最大完成队列条目大小。

此值大于或等于所需的 CQ 条目大小。 该值以字节为单位,报告为 2 (2^n) 的幂。 建议的值为 4,对应于 16 字节的标准 NVM 命令集 CQ 条目大小。 实现专有扩展的控制器可能支持更大的值。

MAXCMD

NN

指示控制器存在的有效命名空间数。

ONCS

可选 NVM 命令支持 (ONCS) 结构,其中包含指示控制器支持的可选 NVM 命令 和功能的字段。

ONCS.Compare

ONCS 结构的位 0 指示控制器是否支持 Compare 命令。

当此值设置为 1时,控制器支持 Compare 命令。 将此值清除为 0时,控制器不支持 Compare 命令。

ONCS.WriteUncorrectable

ONCS 结构的位 1 指示控制器是否支持 Write Uncorrectable 命令。

当此值设置为 1时,控制器支持 Write Uncorrectable 命令。 将此值清除为 0时,控制器不支持 Write Uncorrectable 命令。

ONCS.DatasetManagement

ONCS 结构的位 2 指示控制器是否支持数据集管理命令。

当此值设置为 1时,控制器支持数据集管理命令。 将此值清除为 0时,控制器不支持数据集管理命令。

ONCS.WriteZeroes

ONCS 结构的位 3 指示控制器是否支持写入零命令。

当此值设置为 1时,控制器支持写入零命令。 将此值清除为 0时,控制器不支持写入零命令。

ONCS.FeatureField

ONCS 结构的位 4 指示控制器是否支持“设置功能”命令中的“保存”字段和“获取功能”命令中的“选择”字段。

当此值设置为 1时,控制器支持“设置功能”命令中的“保存”字段和“获取功能”命令中的“选择”字段。 将此值清除为 0时,控制器不支持“设置功能”命令中的“保存”字段和“获取功能”命令中的“选择”字段。

ONCS.Reservations

ONCS 结构的位 5 指示控制器是否支持预留。

当此值设置为 1时,控制器支持预留,还支持与预留关联的以下命令:

  • 预留报表
  • 预留寄存器
  • 预留获取
  • 预留版本

将此值清除为 0时,控制器不支持预留。

ONCS.Timestamp

ONCS 结构的位 6 指示控制器是否支持时间戳 (NVME_FEATURE_TIMESTAMP) 功能。

ONCS.Verify

ONCS.Reserved

保留 ONCS 结构的位 7:15。

FUSES

融合操作支持 (FUSES) 结构,其中包含指示控制器支持的融合操作的字段。

FUSES.CompareAndWrite

FUSES 结构的位 0 指示控制器是否支持比较和写入融合操作。

将此值清除为 0时,控制器不支持比较和写入融合操作。 比较将是 序列中的第一个命令

FUSES.Reserved

保留 FUSES 结构的位 15:1。

FNA

格式化 NVM 属性 (FNA) 结构,其中包含指示 Format NVM 命令属性的字段。

FNA.FormatApplyToAll

FNA 结构的位 0 指示格式操作是适用于所有命名空间,还是特定于特定命名空间。

当此值设置为 1时,所有命名空间都使用相同的属性进行配置,任何命名空间的格式都会导致所有命名空间的格式。 将此值清除为 0时,控制器支持基于每个命名空间的格式。

FNA.SecureEraseApplyToAll

FNA 结构的位 1 指示加密擦除和用户数据擦除功能是适用于所有命名空间,还是特定于特定命名空间。

当此值设置为 1时,将特定命名空间作为格式的一部分进行加密擦除会导致所有命名空间的加密擦除,而用户数据擦除特定命名空间作为格式的一部分会导致用户数据擦除所有命名空间。 将此值清除为 0时,将按命名空间执行加密擦除或用户数据擦除(作为格式的一部分)。

FNA.CryptographicEraseSupported

FNA 结构的位 2 指示是否支持加密擦除作为安全擦除功能的一部分。

如果此值设置为 1,则支持加密擦除。 将此值清除为 0时,不支持加密擦除。

FNA.FormatSupportNSIDAllF

FNA.Reserved

保留 FNA 结构的位 7:3。

VWC

可变写入缓存 (VWC) 结构,其中包含指示与实现中是否存在易失性写入缓存相关的属性的字段。

VWC.Present

VWC 结构的位 0 指示存在易失性写入缓存。

如果此值设置为 1,则存在易失性写入缓存,主机可能会发出 Flush 命令,并控制是否使用指定NVME_FEATURE_VOLATILE_WRITE_CACHE功能标识符的 Set Features 命令启用易失写入缓存。

将此值清除为 0时,不存在易失性写入缓存。

如果不存在易失性写入缓存,刷新命令会成功完成且不起作用,并且设置NVME_FEATURE_VOLATILE_WRITE_CACHE标识符的“设置功能”命令将失败,状态为“NVME_STATUS_INVALID_FIELD_IN_COMMAND”,并且“获取具有NVME_FEATURE_VOLATILE_WRITE_CACHE标识符集的功能”将失败,状态为NVME_STATUS_INVALID_FIELD_IN_COMMAND

VWC.FlushBehavior

VWC.Reserved

保留 VWC 结构的 1:7 位。

AWUN

指示在正常操作期间保证以原子方式写入 NVM 的所有命名空间的写入操作的大小。 此字段在逻辑块中指定,并且是基于 0 的值。

如果特定命名空间保证大于此字段中报告的大小,则会在标识命名空间数据结构的 NAWUN 字段中报告此 命名空间 特定大小。

如果提交的大小小于或等于 AWUN 值的写入命令,则主机可以保证,对于其他读取或写入命令,写入命令对 NVM 是原子的。 如果提交的写入命令的大小大于 AWUN 值,则无法保证命令原子性。

AWUN 值对电源故障导致的写入错误没有任何适用性。 有关详细信息,请参阅 Atomic Write Unit Power Fail (AWUPF) 字段。

值 指示 FFFFh 所有命令都是原子命令,因为这是最大的命令大小。 实现应至少支持 128KB,并根据逻辑块访问 (LBA) 大小适当缩放。

AWUPF

指示在电源失败或错误情况下,保证在所有命名空间中以原子方式写入 NVM 的写入操作的大小,这些命名空间包含任何受支持的命名空间格式。 此字段在逻辑块中指定,并且是基于 0 的值。

如果特定命名空间保证大于此字段中报告的大小,则会在“标识命名空间”数据结构中的 NAWUPF 字段中报告此命名空间特定大小。 AWUPF 值必须小于或等于 AWUN 值。

如果提交的大小小于或等于 AWUPF 值的写入命令,则主机可以保证,对于其他读取或写入命令,该写入操作对 NVM 是原子的。 如果提交的写入命令大于此大小,则无法保证命令原子性。 如果写入大小小于或等于 AWUPF 值,并且写入命令失败,则关联逻辑块的后续读取命令将从上一个成功的写入命令返回数据。

如果提交的写入命令的大小大于 AWUPF 值,则不能保证在后续读取关联逻辑块时返回数据。

NVSCC

NVM 供应商特定命令配置 (NVSCC) 结构,其中包含指示 NVM 供应商特定命令处理配置设置的字段。

NVSCC.CommandFormatInSpec

NVSCC 结构的位 0 指示是否所有 NVM 供应商特定命令都使用图 13 中定义的格式。

当此值设置为 1时,所有 NVM 供应商特定命令都使用图 13 中定义的格式。 当此值被清除为 0时,它指示所有 NVM 供应商特定命令的格式都是特定于供应商的。

NVSCC.Reserved

保留 NVSCC 结构的 1:7 位。

NWPC

NWPC.WriteProtect

NWPC.UntilPowerCycle

NWPC.Permanent

NWPC.Reserved

ACWU

指示使用比较和写入融合操作支持的任何命名空间格式跨所有命名空间以原子方式写入 NVM 的写入操作的大小。

如果特定命名空间保证大于此字段中报告的大小,则会在“标识命名空间”数据结构中的 NACWU 字段中报告此命名空间特定大小。

如果支持 Compare and Write 融合命令,则支持此字段。 此字段在逻辑块中指定,并且是基于 0 的值。 如果提交的“比较和写入”请求的传输大小大于此值,则控制器可能会使命令失败,状态为 “NVME_STATUS_INVALID_FIELD_IN_COMMAND”。

如果 Compare and Write 不是受支持的融合命令,则此字段的值将为 0h

Reserved4[2]

保留字段。

SGLS

SGL 支持 (SGLS) 结构,其中包含指定 NVM 命令集和支持的 SGL 类型是否支持散点收集Lists (SGL) 的字段。

SGLS.SGLSupported

当此值设置为 1时,控制器支持 NVM 命令集的 SGL,包括 SGL 数据块、SGL 段和 SGL 最后段描述符类型。 将此值清除为 0时,控制器不支持 NVM 命令集的 SDL,并且此字段中的所有其他位都将清除为 0

SGLS.KeyedSGLData

SGLS.Reserved0

保留字段。

SGLS.BitBucketDescrSupported

如果此值设置为 1,则支持 SGL 位存储桶描述符。 将此值清除为 0时,不支持 SGL 位存储桶描述符。

SGLS.ByteAlignedContiguousPhysicalBuffer

如果此值设置为 1,则支持使用元数据的字节对齐连续物理缓冲区 (图 12 中的“元数据指针”字段) 。 将此值清除为 0时,不支持使用元数据的字节对齐连续物理缓冲区。

SGLS.SGLLengthLargerThanDataLength

当此值设置为 1时,控制器支持包含长度大于要传输的数据量的数据或元数据 SGL 的命令。 将此值清除为 0时,SGL 长度将等于要传输的数据量。

SGLS.MPTRSGLDescriptor

SGLS.AddressFieldSGLDataBlock

SGLS.TransportSGLData

SGLS.Reserved1

保留字段。

MNAN

Reserved6[224]

为 I/O 命令集属性保留字节 704:2047。

SUBNQN[256]

Reserved7[768]

Reserved8[256]

PDS[32]

包含包含 32 个 Power State 描述符的数组。 数组的每个成员都是一个 32 位字段,用于指示 Power State 描述符的特征。 此字段的格式在 NVME_POWER_STATE_DESC 结构中定义。

数组中结构从零开始的位置对应于 Power State 描述符的名称,因此 Power State 0 描述符 (PSD0) 位于位置 0,Power State 1 描述符 (PSD1) 位于位置 1,依此类举,最高为 Power State 31 描述符 (PSD31) 位置 31。

VS[1024]

为供应商特定的使用情况分配字节 3072:4095。

注解

可以将 VIDSNMN 字段的值组合在一起,形成标识 NVM 子系统的全局唯一值。

要求

要求
最低受支持的客户端 Windows 10
标头 nvme.h