NVME_IDENTIFY_CONTROLLER_DATA structure (nvme.h)

Contains values that indicate controller capabilities, features, command set attributes, and power state descriptors.

Syntax

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;

Members

VID

Contains the company vendor identifier that is assigned by the Peripheral Component Interconnect - Special Interest Group (PCI-SIG).

SSVID

Contains the company vendor identifier that is assigned by the PCI-SIG for the subsystem.

SN[20]

Contains the serial number for the NVM subsystem that is assigned by the vendor as an ASCII string.

MN[40]

Contains the model number for the NVM subsystem that is assigned by the vendor as an ASCII string.

FR[8]

Contains the currently active firmware revision for the NVM subsystem.

This is the same firmware revision information in the NVME_FIRMWARE_SLOT_INFO_LOG that can be retrieved with the Get Log Page command.

RAB

Contains the recommended Arbitration Burst size.

IEEE[3]

Contains the Organization Unique Identifier (OUI) for the controller vendor.

The OUI is a valid IEEE/RAC assigned identifier that can be registered at http://standards.ieee.org/develop/regauth/oui/public.html.

CMIC

A Controller Multi-Path I/O and Namespace Sharing Capabilities (CMIC) structure that specifies the multi-path I/O and namespace sharing capabilities of the controller and NVM subsystem.

CMIC.MultiPCIePorts

Bit 0 of the CMIC structure.

When this value is set to 1, the NVM subsystem may contain two or more physical PCI Express ports. When the value is cleared to 0, the NVM subsystem contains a single PCI Express port.

CMIC.MultiControllers

Bit 1 of the CMIC structure.

When this value is set to 1, the NVM subsystem may contain two or more controllers. When the value is cleared to 0, the NVM subsystem contains a single controller.

CMIC.SRIOV

Bit 2 of the CMIC structure.

When this value is set to 1, the controller is associated with an Single-root I/O virtualization (SR-IOV) Virtual Function. When the value is cleared to 0, the controller is associated with a PCI Function.

CMIC.ANAR

CMIC.Reserved

Bits 3:7 of the CMIC structure are reserved.

MDTS

Indicates the maximum data transfer size between the host and the controller.

The host should not submit a command that exceeds this transfer size. If a command is submitted that exceeds the transfer size, the command is aborted with a status of NVME_STATUS_INVALID_FIELD_IN_COMMAND.

The value of this field is in units of the minimum memory page size specified in the MPSMIN field of the Controller Capabilities structure, and is reported as a power of two (2^n). A value of 0h indicates no restrictions on transfer size. The restriction includes metadata if it is interleaved with the logical block data.

If SGL Bit Bucket descriptors are supported, their lengths are included in determining if a command exceeds the Maximum Data Transfer Size for destination data buffers. Their length in a source data buffer is not included for a Maximum Data Transfer Size calculation.

CNTLID

Contains the NVM subsystem unique controller identifier associated with the controller.

VER

Contains the value reported in the Version register, defined in the VS field of the NVME_CONTROLLER_REGISTERS structure.

Implementations that are compliant with NVMe specification version 1.2 or later, will report a non-zero value in this field.

RTD3R

Indicates the typical latency in microseconds when resuming from Runtime D3 (RTD3).

Implementations that are compliant with NVMe specification version 1.2 or later, will report a non-zero value in this field.

RTD3E

Indicates the typical latency in microseconds to enter Runtime D3 (RTD3).

Implementations that are compliant with NVMe specification version 1.2 or later, will report a non-zero value in this field.

OAES

An Optional Asynchronous Events Supported (OAES) structure containing fields that indicate whether optional asynchronous events are supported by the controller.

A controller should not send optional asynchronous events before they are enabled by host software.

OAES.Reserved0

Bits 10:31 of the OAES structure are reserved.

OAES.NamespaceAttributeChanged

Bit 8 of the OAES structure.

When this value is set to 1, the controller supports sending the Namespace Attribute Changed event. When this value is cleared to 0, the controller does not support the Namespace Attribute Changed event.

OAES.FirmwareActivation

Bit 9 of the OAES structure.

When this value is set to 1, the controller supports sending the Firmware Activation event. When this value is cleared to 0, the controller does not support the Firmware Activation event.

OAES.Reserved1

Bits 0:7 of the OAES structure are reserved.

OAES.AsymmetricAccessChanged

OAES.PredictableLatencyAggregateLogChanged

OAES.LbaStatusChanged

OAES.EnduranceGroupAggregateLogChanged

OAES.Reserved2

OAES.ZoneInformation

OAES.Reserved3

CTRATT

A Controller Attributes (CTRATT) structure containing controller attribute information.

CTRATT.HostIdentifier128Bit

Bit 32 of the CTRATT structure containing a 128bit host identifier.

CTRATT.NOPSPMode

Bit 31 of the CTRATT structure containing information about the Non-Operational Power State (NOPS).

CTRATT.NVMSets

Bit 30 of the CTRATT structure containing information about NVM command sets.

CTRATT.ReadRecoveryLevels

Bit 29 of the CTRATT structure containing information about Read recovery levels.

CTRATT.EnduranceGroups

Bit 28 of the CTRATT structure containing information about endurance groups levels.

CTRATT.PredictableLatencyMode

CTRATT.TBKAS

CTRATT.NamespaceGranularity

CTRATT.SQAssociations

CTRATT.UUIDList

CTRATT.Reserved0

Bits 0:27 of the CTRATT structure are reserved.

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]

A reserved field of 140 bytes.

CNTRLTYPE

FGUID[16]

CRDT1

CRDT2

CRDT3

Reserved0_1[106]

ReservedForManagement[16]

Reserved for NVMe Management.

OACS

An Optional Admin Command Support (OACS) structure containing fields that indicate the optional Admin Commands supported by the controller.

OACS.SecurityCommands

Bit 0 of the OACS structure indicates whether the controller supports the Security Send and Security Receive commands.

When this value is set to 1, the controller supports the Security Send and Security Receive commands. When this value is cleared to 0, the controller does not support the Security Send and Security Receive commands.

OACS.FormatNVM

Bit 1 of the OACS structure indicates whether the controller supports the Format NVM command.

When this value is set to 1, the controller supports the Format NVM command. When this value is cleared to 0, the controller does not support the Format NVM command.

OACS.FirmwareCommands

Bit 2 of the OACS structure indicates whether the controller supports the Firmware Commit and Firmware Image Download commands.

When this value is set to 1, the controller supports the Firmware Commit and Firmware Image Download commands. When this value is cleared to 0, the controller does not support the Firmware Commit and Firmware Image Download commands.

OACS.NamespaceCommands

Bit 3 of the OACS structure indicates whether the controller supports the Namespace Management and Namespace Attachment commands.

When this value is set to 1, the controller supports the Namespace Management and Namespace Attachment commands. When this value is cleared to 0, the controller does not support the Namespace Management and Namespace Attachment commands.

OACS.DeviceSelfTest

Bit 4 of the OACS structure indicates whether the controller supports the Device Self Test command.

OACS.Directives

Bit 5 of the OACS structure indicates whether the controller supports the Directive Send and Directive Receive commands.

OACS.NVMeMICommands

OACS.VirtualizationMgmt

OACS.DoorBellBufferConfig

OACS.GetLBAStatus

OACS.Reserved

Bits 6:15: are reserved.

ACL

Indicates the maximum number of concurrently outstanding Abort commands supported by the controller.

This is a 0’s based value. Implementations should support a minimum of four outstanding Abort commands simultaneously.

AERL

Indicates the maximum number of concurrently outstanding Asynchronous Event Request commands supported by the controller.

This is a 0’s based value. Implementations should support a minimum of four outstanding Asynchronous Event Request commands simultaneously.

FRMW

A Firmware Updates (FRMW) structure containing fields that indicate capabilities regarding firmware updates.

FRMW.Slot1ReadOnly

Bit 0 of the FRMW structure indicates whether the first firmware slot (slot 1) is read only.

When this value is set to 1, the first firmware slot (slot 1) is read only. When this value is cleared to 0, the first firmware slot (slot 1) is read/write. Implementations may choose to have a baseline read only firmware image.

FRMW.SlotCount

Bits 1:3 of the FRMW structure indicate the number of firmware slots that the controller supports.

This field specifies a value between one and seven, indicating that at least one firmware slot is supported and up to seven maximum. This corresponds to firmware slots 1 through 7.

FRMW.ActivationWithoutReset

Bit 4 of the FRMW structure indicates whether the controller supports firmware activation without a reset.

When this value is set to 1, the controller supports firmware activation without a reset. When this value is cleared to 0, the controller requires a reset for firmware to be activated.

FRMW.Reserved

Bits 5:7 of the FRMW structure are reserved.

LPA

A Log Page Attributes (LPA) structure containing fields that indicate optional attributes for log pages that are accessed by using the Get Log Page command.

LPA.SmartPagePerNamespace

Bit 0 of the LPA structure indicates whether the controller supports the SMART / Health information log page on a per namespace basis.

When this value is set to 1, the controller supports the SMART / Health information log page on a per namespace basis. When this value is cleared to 0, the controller does not support the SMART / Health information log page on a per namespace basis.

LPA.CommandEffectsLog

Bit 1 of the LPA structure indicates whether the controller supports the Command Effects log page.

When this value is set to 1, the controller supports the Command Effects log page. When this value is cleared to 0, the controller does not support the Command Effects log page.

LPA.LogPageExtendedData

Bit 2 of the LPA structure indicates whether the controller supports Log Page Extended Data.

LPA.TelemetrySupport

Bit 3 of the LPA structure indicates whether the controller supports Telemetry Support.

LPA.PersistentEventLog

LPA.Reserved0

LPA.TelemetryDataArea4

LPA.Reserved1

ELPE

Indicates the number of Error Information log entries that are stored by the controller. This field is a 0’s based value.

NPSS

Indicates the number of NVM Express power states supported by the controller. This is a 0’s based value.

Power states are numbered sequentially starting at power state 0. A controller must support at least one power state (for example, power state 0), and may support up to 31 additional power states, for a total of 32.

AVSCC

An Admin Vendor Specific Command Configuration (AVSCC) structure containing fields that indicate the configuration settings for Admin Vendor Specific command handling.

AVSCC.CommandFormatInSpec

Bit 0 of the AVSCC structure indicates whether all Admin Vendor Specific Commands use the command format defined in the NVME_COMMAND structure.

When this value is cleared to 0, it indicates that the format of all Admin Vendor Specific Commands are vendor specific. When this value is set to 1, it indicates that all Admin Vendor Specific Commands will use the NVME_COMMAND structure.

AVSCC.Reserved

Bits 1:7 of the AVSCC structure are reserved.

APSTA

An Autonomous Power State Transition Attributes (APSTA) structure containing fields that indicate the attributes of the autonomous power state transition feature.

APSTA.Supported

Bit 0 of the APSTA structure indicates whether the controller supports autonomous power state transitions.

When this value is set to 1, the controller supports autonomous power state transitions. When this value is cleared to 0, the controller does not support autonomous power state transitions.

APSTA.Reserved

Bits 1:7 of the APSTA structure are reserved.

WCTEMP

Indicates the minimum Composite Temperature field value (reported in the SMART / Health Information log that indicates an overheating condition during which controller operation continues.

Immediate remediation is recommended (for example, additional cooling or workload reduction). The platform should strive to maintain a composite temperature below this value.

A value of 0h in this field indicates that no warning temperature threshold value is reported by the controller. Implementations compliant to NVMe Spec version 1.2 or later should report a non-zero value in this field. It is recommended that implementations report a value of 0157h in this field.

CCTEMP

Indicates the minimum Composite Temperature field value (reported in the [SMART / Health Information](ns-nvme-nvme_health_info_log.md log) that indicates a critical overheating condition. For example, a condition that may prevent continued normal operation, possibility of data loss, automatic device shutdown, extreme performance throttling, or permanent damage.

A value of 0h in this field indicates that no critical temperature threshold value is reported by the controller. Implementations compliant to NVMe Spec version 1.2 or later should report a non-zero value in this field.

MTFA

Indicates the maximum time the controller temporarily stops processing commands to activate the firmware image.

This field is valid if the controller supports firmware activation without a reset. The MFTA value is specified in 100 millisecond units. A value of 0h indicates that the maximum time is undefined.

HMPRE

Indicates the preferred size that the host should allocate for the Host Memory Buffer feature in 4KB units.

This value must be larger than or equal to the Host Memory Buffer Minimum Size (HMMIN).

If this field is non-zero, then the Host Memory Buffer feature is supported. When this value is cleared to 0h, the Host Memory Buffer feature is not supported.

HMMIN

Indicates the minimum size that the host should allocate for the Host Memory Buffer feature in 4KB units.

When this value is cleared to 0, the host is requested to allocate any amount of host memory possible up to the HMPRE value.

TNVMCAP[16]

Indicates the total NVM capacity, in bytes, of the NVM subsystem.

This field is supported if the Namespace Management and Namespace Attachment commands are supported.

UNVMCAP[16]

Indicates the unallocated NVM capacity, in bytes, of the NVM subsystem.

This field is supported if the Namespace Management and Namespace Attachment commands are supported.

RPMBS

A Replay Protected Memory Block Support (RPMBS) structure containing fields that indicate whether the controller supports one or more Replay Protected Memory Blocks (RPMBs) and the associated capabilities.

RPMBS.RPMBUnitCount

Indicates the number of RPMB targets the controller supports.

All supported (Protected Memory Block) PMB targets have the same capabilities as defined in the RPMBS field. A value of 0h indicates the controller does not support RPMBs. If this value is non-zero, then the controller supports the Security Send and Security Receive commands.

RPMBS.AuthenticationMethod

Indicates the authentication method used to access all Replay Protected Memory Blocks (RPMBs) in the controller. The values for this field are:

Value Definition
000b HMAC SHA-256
001b-111b Reserved

RPMBS.Reserved0

A reserved field.

RPMBS.TotalSize

Indicates the total size of each RPMB supported in the controller in 128KB units. This is a 0’s based value. A value of 0h indicates a size of 128KB.

RPMBS.AccessSize

Indicates the size that may be read or written per RPMB access by the Security Send or Security Receive commands for this controller in 512B units.

This is a 0’s based value. A value of 0h indicates a size of 512B.

EDSTT

Indicates the Extended Device Self-test Time (EDSTT).

DSTO

Indicates the Device Self-test Options (DSTO).

FWUG

Indicates the Firmware Update Granularity (FWUG).

KAS

Indicates the Keep Alive Support (KAS).

HCTMA

A Host Controlled Thermal Management Attributes (HCTMA) structure.

HCTMA.Supported

Indicates whether Host Controlled Thermal Management attributes are supported.

HCTMA.Reserved

This HCTMA structure field is reserved.

MNTMT

Minimum Thermal Management Temperature (MNTMT)

MXTMT

Maximum Thermal Management Temperature (MXTMT)

SANICAP

Sanitize Capabilities (SANICAP)

SANICAP.CryptoErase

Controller supports Crypto Erase Sanitize

SANICAP.BlockErase

Controller supports Block Erase Sanitize

SANICAP.Overwrite

Controller supports Overwrite Santize

SANICAP.Reserved

SANICAP.NDI

SANICAP.NODMMAS

HMMINDS

HMMAXD

NSETIDMAX

NVM Set Identifier Maximum

ENDGIDMAX

ANATT

ANACAP

ANACAP.OptimizedState

ANACAP.NonOptimizedState

ANACAP.InaccessibleState

ANACAP.PersistentLossState

ANACAP.ChangeState

ANACAP.Reserved

ANACAP.StaticANAGRPID

ANACAP.SupportNonZeroANAGRPID

ANAGRPMAX

NANAGRPID

PELS

Reserved1[156]

A reserved field.

SQES

A Submission Queue Entry Size (SQES) structure containing fields that indicate the required and maximum Submission Queue entry size when using the NVM Command Set.

SQES.RequiredEntrySize

Bits 0:3 of the SQES structure indicate the required Submission Queue Entry size when using the NVM Command Set.

This is the minimum entry size that can be used. The value is in bytes and is reported as a power of two (2^n). The required value is 6, which corresponds to 64 bytes.

SQES.MaxEntrySize

Bits 4:7 of the SQES structure indicate the maximum Submission Queue entry size when using the NVM Command Set.

This value is larger than or equal to the SQES.RequiredEntrySize value. The value is in bytes and is reported as a power of two (2^n). The recommended value is 6, corresponding to a standard NVM Command Set SQ entry size of 64 bytes. Controllers that implement proprietary extensions may support a larger value.

CQES

A Completion Queue Entry Size (CQES) structure containing fields that indicate the required and maximum Completion Queue entry size when using the NVM Command Set.

CQES.RequiredEntrySize

Bits 0:3 of the CQES structure indicate the required Completion Queue entry size when using the NVM Command Set.

This is the minimum entry size that can be used. The value is in bytes and is reported as a power of two (2^n). The required value is 4, which corresponds to 16 bytes.

CQES.MaxEntrySize

Bits 4:7 of the CQES structure indicate the maximum Completion Queue entry size when using the NVM Command Set.

This value is larger than or equal to the required CQ entry size. The value is in bytes and is reported as a power of two (2^n). The recommended value is 4, corresponding to a standard NVM Command Set CQ entry size of 16 bytes. Controllers that implement proprietary extensions may support a larger value.

MAXCMD

NN

Indicates the number of valid namespaces present for the controller.

ONCS

An Optional NVM Command Support (ONCS) structure containing fields that indicate the optional NVM commands and features supported by the controller.

ONCS.Compare

Bit 0 of the ONCS structure indicates whether the controller supports the Compare command.

When this value is set to 1, the controller supports the Compare command. When this value is cleared to 0, the controller does not support the Compare command.

ONCS.WriteUncorrectable

Bit 1 of the ONCS structure indicates whether the controller supports the Write Uncorrectable command.

When this value is set to 1, the controller supports the Write Uncorrectable command. When this value is cleared to 0, the controller does not support the Write Uncorrectable command.

ONCS.DatasetManagement

Bit 2 of the ONCS structure indicates whether the controller supports the Dataset Management command.

When this value is set to 1, the controller supports the Dataset Management command. When this value is cleared to 0, the controller does not support the Dataset Management command.

ONCS.WriteZeroes

Bit 3 of the ONCS structure indicates whether the controller supports the Write Zeroes command.

When this value is set to 1, the controller supports the Write Zeroes command. When this value is cleared to 0, the controller does not support the Write Zeroes command.

ONCS.FeatureField

Bit 4 of the ONCS structure indicates whether the controller supports the Save field in the Set Features command and the Select field in the Get Features command.

When this value is set to 1, the controller supports the Save field in the Set Features command and the Select field in the Get Features command. When this value is cleared to 0, the controller does not support the Save field in the Set Features command and the Select field in the Get Features command.

ONCS.Reservations

Bit 5 of the ONCS structure indicates whether the controller supports reservations.

When this value is set to 1, the controller supports reservations and also supports the following commands associated with reservations:

  • Reservation Report
  • Reservation Register
  • Reservation Acquire
  • Reservation Release

When this value is cleared to 0, the controller does not support reservations.

ONCS.Timestamp

Bit 6 of the ONCS structure indicates whether the controller supports the Timestamp (NVME_FEATURE_TIMESTAMP) feature.

ONCS.Verify

ONCS.Reserved

Bits 7:15 of the ONCS structure are reserved.

FUSES

A Fused Operation Support (FUSES) structure containing fields that indicate the fused operations that the controller supports.

FUSES.CompareAndWrite

Bit 0 of the FUSES structure indicates whether the controller supports the Compare and Write fused operation.

When this value is cleared to 0, the controller does not support the Compare and Write fused operation. Compare will be the first command in the sequence.

FUSES.Reserved

Bits 15:1 of the FUSES structure are reserved.

FNA

A Format NVM Attributes (FNA) structure containing fields that indicate attributes for the Format NVM command.

FNA.FormatApplyToAll

Bit 0 of the FNA structure indicates whether the format operation applies to all namespaces or is specific to a particular namespace.

When this value is set to 1, all namespaces are configured with the same attributes and a format of any namespace results in a format of all namespaces. When this value is cleared to 0, the controller supports format on a per namespace basis.

FNA.SecureEraseApplyToAll

Bit 1 of the FNA structure indicates whether cryptographic erase and user data erase functionality apply to all namespaces or is specific to a particular namespace.

When this value is set to 1, a cryptographic erase of a particular namespace as part of a format results in a cryptographic erase of all namespaces, and a user data erase of a particular namespace as part of a format results in a user data erase of all namespaces. When this value is cleared to 0, a cryptographic erase or user data erase as part of a format is performed on a per namespace basis.

FNA.CryptographicEraseSupported

Bit 2 of the FNA structure indicates whether cryptographic erase is supported as part of the secure erase functionality.

When this value is set to 1, cryptographic erase is supported. When this value is cleared to 0, cryptographic erase is not supported.

FNA.FormatSupportNSIDAllF

FNA.Reserved

Bits 7:3 of the FNA structure are reserved.

VWC

A Volatile Write Cache (VWC) structure containing fields that indicate attributes related to the presence of a volatile write cache in the implementation.

VWC.Present

Bit 0 of the VWC structure indicates that a volatile write cache is present.

When this value is set to 1, a volatile write cache is present and the host may issue Flush commands, and control whether the volatile write cache is enabled with the Set Features command specifying the NVME_FEATURE_VOLATILE_WRITE_CACHE feature identifier.

When this value is cleared to 0, a volatile write cache is not present.

When a volatile write cache is not present, Flush commands complete successfully and have no effect, and the Set Features command with the NVME_FEATURE_VOLATILE_WRITE_CACHE identifier set will fail with a status of NVME_STATUS_INVALID_FIELD_IN_COMMAND, and Get Features with the NVME_FEATURE_VOLATILE_WRITE_CACHE identifier set will fail with a status of NVME_STATUS_INVALID_FIELD_IN_COMMAND.

VWC.FlushBehavior

VWC.Reserved

Bits 1:7 of the VWC structure are reserved.

AWUN

Indicates the size of the write operation guaranteed to be written atomically to the NVM across all namespaces with any supported namespace format during normal operation. This field is specified in logical blocks and is a 0’s based value.

If a specific namespace guarantees a larger size than is reported in this field, then this namespace specific size is reported in the NAWUN field of the Identify Namespace data structure.

If a write command is submitted with size less than or equal to the AWUN value, the host is guaranteed that the write command is atomic to the NVM with respect to other read or write commands. If a write command is submitted with size greater than the AWUN value, then there is no guarantee of command atomicity.

The AWUN value does not have any applicability to write errors caused by power failure. For more information, see the Atomic Write Unit Power Fail (AWUPF) field.

A value of FFFFh indicates all commands are atomic as this is the largest command size. Implementations should support a minimum of 128KB, appropriately scaled based on the Logical Block Access (LBA) size.

AWUPF

Indicates the size of the write operation guaranteed to be written atomically to the NVM across all namespaces with any supported namespace format during a power fail or error condition. This field is specified in logical blocks and is a 0’s based value.

If a specific namespace guarantees a larger size than is reported in this field, then this namespace specific size is reported in the NAWUPF field in the Identify Namespace data structure. The AWUPF value must be less than or equal to the AWUN value.

If a write command is submitted with size less than or equal to the AWUPF value, the host is guaranteed that the write is atomic to the NVM with respect to other read or write commands. If a write command is submitted that is greater than this size, there is no guarantee of command atomicity. If the write size is less than or equal to the AWUPF value and the write command fails, then subsequent read commands for the associated logical blocks will return data from the previous successful write command.

If a write command is submitted with size greater than the AWUPF value, then there is no guarantee of data returned on subsequent reads of the associated logical blocks.

NVSCC

A NVM Vendor Specific Command Configuration (NVSCC) structure containing fields that indicate the configuration settings for NVM Vendor Specific command handling.

NVSCC.CommandFormatInSpec

Bit 0 of the NVSCC structure indicates whether all NVM Vendor Specific Commands use the format defined in Figure 13.

When this value is set to 1, all NVM Vendor Specific Commands use the format defined in Figure 13. When this value is cleared to 0, it indicates that the format of all NVM Vendor Specific Commands are vendor specific.

NVSCC.Reserved

Bits 1:7 of the NVSCC structure are reserved.

NWPC

NWPC.WriteProtect

NWPC.UntilPowerCycle

NWPC.Permanent

NWPC.Reserved

ACWU

Indicates the size of the write operation guaranteed to be written atomically to the NVM across all namespaces with any supported namespace format for a Compare and Write fused operation.

If a specific namespace guarantees a larger size than is reported in this field, then this namespace specific size is reported in the NACWU field in the Identify Namespace data structure.

This field will be supported if the Compare and Write fused command is supported. This field is specified in logical blocks and is a 0’s based value. If a Compare and Write is submitted that requests a transfer size larger than this value, the controller may fail the command with a status of NVME_STATUS_INVALID_FIELD_IN_COMMAND.

If Compare and Write is not a supported fused command, the value of this field will be 0h.

Reserved4[2]

A reserved field.

SGLS

A SGL Support (SGLS) structure containing fields that specify whether Scatter Gather Lists (SGL) are supported for the NVM Command Set and the supported SGL types.

SGLS.SGLSupported

When this value is set to 1, the controller supports SGLs for the NVM Command Set including the SGL Data Block, SGL Segment, and SGL Last Segment descriptor types. When this value is cleared to 0, the controller does not support SGLs for the NVM Command Set and all other bits in this field will be cleared to 0.

SGLS.KeyedSGLData

SGLS.Reserved0

A reserved field.

SGLS.BitBucketDescrSupported

When this value is set to 1, the SGL Bit Bucket descriptor is supported. When this value is cleared to 0, the SGL Bit Bucket descriptor is not supported.

SGLS.ByteAlignedContiguousPhysicalBuffer

When this value is set to 1, the use of a byte aligned contiguous physical buffer of metadata (the Metadata Pointer field in Figure 12) is supported. When this value is cleared to 0, the use of a byte aligned contiguous physical buffer of metadata is not supported.

SGLS.SGLLengthLargerThanDataLength

When this value is set to 1, the controller supports commands that contain a data or metadata SGL of a length larger than the amount of data to be transferred. When this value is cleared to 0, the SGL length will be equal to the amount of data to be transferred.

SGLS.MPTRSGLDescriptor

SGLS.AddressFieldSGLDataBlock

SGLS.TransportSGLData

SGLS.Reserved1

A reserved field.

MNAN

Reserved6[224]

Bytes 704:2047 are reserved for I/O Command Set Attributes.

SUBNQN[256]

Reserved7[768]

Reserved8[256]

PDS[32]

Contains an array of 32 Power State Descriptors. Each member of the array is a 32 bit field that indicates the characteristics of a Power State Descriptor. The format of this field is defined in the NVME_POWER_STATE_DESC structure.

The zero-based position of a structure in the array corresponds to the name of the Power State Descriptor, such that Power State 0 Descriptor (PSD0) is in position 0, Power State 1 Descriptor (PSD1) is in position 1, and so on, up to Power State 31 Descriptor (PSD31) in position 31.

VS[1024]

Bytes 3072:4095 are allocated for vendor specific usage.

Remarks

The values of the VID, SN, and MN fields may be combined to form a globally unique value that identifies the NVM subsystem.

Requirements

Requirement Value
Minimum supported client Windows 10
Header nvme.h