libnvme(2)
๐ธ NAME ๐ธ
okay bestie, welcome to libnvme(2) โ the API Manual page for struct nvme_id_ctrl, aka the Identify Controller data structure. This is the big identity struct for an NVMe controller, and we're going through every single field, no skips, no crumbs. ๐
โจ SYNOPSIS โจ
here's the whole struct, copied exactly, no edits, no vibe-based rewriting inside the code block:
struct nvme_id_ctrl {
__le16 vid;
__le16 ssvid;
char sn[20];
char mn[40];
char fr[8];
__u8 rab;
__u8 ieee[3];
__u8 cmic;
__u8 mdts;
__le16 cntlid;
__le32 ver;
__le32 rtd3r;
__le32 rtd3e;
__le32 oaes;
__le32 ctratt;
__le16 rrls;
__u8 bpcap;
__u8 rsvd103;
__le32 nssl;
__u8 rsvd108[2];
__u8 plsi;
__u8 cntrltype;
__u8 fguid[16];
__le16 crdt1;
__le16 crdt2;
__le16 crdt3;
__u8 crcap;
__u8 rsvd135[118];
__u8 nvmsr;
__u8 vwci;
__u8 mec;
__le16 oacs;
__u8 acl;
__u8 aerl;
__u8 frmw;
__u8 lpa;
__u8 elpe;
__u8 npss;
__u8 avscc;
__u8 apsta;
__le16 wctemp;
__le16 cctemp;
__le16 mtfa;
__le32 hmpre;
__le32 hmmin;
__u8 tnvmcap[16];
__u8 unvmcap[16];
__le32 rpmbs;
__le16 edstt;
__u8 dsto;
__u8 fwug;
__le16 kas;
__le16 hctma;
__le16 mntmt;
__le16 mxtmt;
__le32 sanicap;
__le32 hmminds;
__le16 hmmaxd;
__le16 nsetidmax;
__le16 endgidmax;
__u8 anatt;
__u8 anacap;
__le32 anagrpmax;
__le32 nanagrpid;
__le32 pels;
__le16 domainid;
__u8 kpioc;
__u8 rsvd359;
__le16 mptfawr;
__u8 rsvd362[6];
__u8 megcap[16];
__u8 tmpthha;
__u8 rsvd385;
__le16 cqt;
__u8 rsvd388[124];
__u8 sqes;
__u8 cqes;
__le16 maxcmd;
__le32 nn;
__le16 oncs;
__le16 fuses;
__u8 fna;
__u8 vwc;
__le16 awun;
__le16 awupf;
__u8 icsvscc;
__u8 nwpc;
__le16 acwu;
__le16 ocfs;
__le32 sgls;
__le32 mnan;
__u8 maxdna[16];
__le32 maxcna;
__le32 oaqd;
__u8 rhiri;
__u8 hirt;
__le16 cmmrtd;
__le16 nmmrtd;
__u8 minmrtg;
__u8 maxmrtg;
__u8 trattr;
__u8 rsvd577;
__le16 mcudmq;
__le16 mnsudmq;
__le16 mcmr;
__le16 nmcmr;
__le16 mcdqpc;
__u8 rsvd588[180];
char subnqn[NVME_NQN_LENGTH];
__u8 rsvd1024[768];
__le32 ioccsz;
__le32 iorcsz;
__le16 icdoff;
__u8 fcatt;
__u8 msdbd;
__le16 ofcs;
__u8 dctype;
__u8 rsvd1807[241];
struct nvme_id_psd psd[32];
__u8 vs[1024];
};
๐ Members ๐
okay so every field gets its own moment. I'm listing them all, fr fr, with the exact meaning from the page. ๐ซถ
vidโ PCI Vendor ID, the company vendor identifier that is assigned by the PCI SIG.ssvidโ PCI Subsystem Vendor ID, the company vendor identifier that is assigned by the PCI SIG for the subsystem.snโ Serial Number in ASCII.mnโ Model Number in ASCII.frโ Firmware Revision in ASCII, the currently active firmware revision for the NVM subsystem.rabโ Recommended Arbitration Burst, reported as a power of two.ieeeโ IEEE assigned Organization Unique Identifier.cmicโ Controller Multipath IO and Namespace Sharing Capabilities of the controller and NVM subsystem. See enumnvme_id_ctrl_cmic.mdtsโ Max Data Transfer Size is the largest data transfer size. The host should not submit a command that exceeds this maximum data transfer size. The value is in units of the minimum memory page size (CAP.MPSMIN) and is reported as a power of two.cntlidโ Controller ID, the NVM subsystem unique controller identifier associated with the controller.verโ Version, this field contains the value reported in the Version register, or property (see enumnvme_registersNVME_REG_VS).rtd3rโ RTD3 Resume Latency, the expected latency in microseconds to resume from Runtime D3.rtd3eโ RTD3 Exit Latency, the typical latency in microseconds to enter Runtime D3.oaesโ Optional Async Events Supported, see enumnvme_id_ctrl_oaes.ctrattโ Controller Attributes, see enumnvme_id_ctrl_ctratt.rrlsโ Read Recovery Levels. If a bit is set, then the corresponding Read Recovery Level is supported. If a bit is cleared, then the corresponding Read Recovery Level is not supported.bpcapโ Boot Partition Capabilities, see enumnvme_id_ctrl_bpcap.rsvd103โ Reserved.nsslโ NVM Subsystem Shutdown Latency (NSSL). This field indicates the typical latency in microseconds for an NVM Subsystem Shutdown to complete.rsvd108โ Reserved.plsiโ Power Loss Signaling Information (PLSI), see enumnvme_id_ctrl_plsi.cntrltypeโ Controller Type, see enumnvme_id_ctrl_cntrltype.fguidโ FRU GUID, a 128-bit value that is globally unique for a given Field Replaceable Unit.crdt1โ Controller Retry Delay time in 100 millisecond units if CQE CRD field is 1.crdt2โ Controller Retry Delay time in 100 millisecond units if CQE CRD field is 2.crdt3โ Controller Retry Delay time in 100 millisecond units if CQE CRD field is 3.crcapโ Controller Reachability Capabilities (CRCAP), see enumnvme_id_ctrl_crcap.rsvd135โ Reserved.nvmsrโ NVM Subsystem Report, see enumnvme_id_ctrl_nvmsr.vwciโ VPD Write Cycle Information, see enumnvme_id_ctrl_vwci.mecโ Management Endpoint Capabilities, see enumnvme_id_ctrl_mec.oacsโ Optional Admin Command Support, the optional Admin commands and features supported by the controller, see enumnvme_id_ctrl_oacs.aclโ Abort Command Limit, the maximum number of concurrently executing Abort commands supported by the controller. This is a0's basedvalue.aerlโ Async Event Request Limit, the maximum number of concurrently outstanding Asynchronous Event Request commands supported by the controller. This is a0's basedvalue.frmwโ Firmware Updates indicates capabilities regarding firmware updates. See enumnvme_id_ctrl_frmw.lpaโ Log Page Attributes, see enumnvme_id_ctrl_lpa.elpeโ Error Log Page Entries, the maximum number of Error Information log entries that are stored by the controller. This field is a0's basedvalue.npssโ Number of Power States Supported, the number of NVM Express power states supported by the controller, indicating the number of valid entries instruct nvme_id_ctrl.psd. This is a0's basedvalue.avsccโ Admin Vendor Specific Command Configuration, see enumnvme_id_ctrl_avscc.apstaโ Autonomous Power State Transition Attributes, see enumnvme_id_ctrl_apsta.wctempโ Warning Composite Temperature Threshold indicates the minimum Composite Temperature field value (seestruct nvme_smart_log.critical_comp_time) that indicates an overheating condition during which controller operation continues.cctempโ Critical Composite Temperature Threshold, field indicates the minimum Composite Temperature field value (seestruct nvme_smart_log.critical_comp_time) that indicates a critical overheating condition.mtfaโ Maximum Time for Firmware Activation indicates the maximum time the controller temporarily stops processing commands to activate the firmware image, specified in 100 millisecond units. This field is always valid if the controller supports firmware activation without a reset.hmpreโ Host Memory Buffer Preferred Size indicates the preferred size that the host is requested to allocate for the Host Memory Buffer feature in 4 KiB units.hmminโ Host Memory Buffer Minimum Size indicates the minimum size that the host is requested to allocate for the Host Memory Buffer feature in 4 KiB units.tnvmcapโ Total NVM Capacity, the total NVM capacity in the NVM subsystem. The value is in bytes.unvmcapโ Unallocated NVM Capacity, the unallocated NVM capacity in the NVM subsystem. The value is in bytes.rpmbsโ Replay Protected Memory Block Support, see enumnvme_id_ctrl_rpmbs.edsttโ Extended Device Self-test Time, if Device Self-test command is supported (seestruct nvme_id_ctrl.oacs,NVME_CTRL_OACS_SELF_TEST), then this field indicates the nominal amount of time in one minute units that the controller takes to complete an extended device self-test operation when in power state 0.dstoโ Device Self-test Options, see enumnvme_id_ctrl_dsto.fwugโ Firmware Update Granularity indicates the granularity and alignment requirement of the firmware image being updated by the Firmware Image Download command. The value is reported in 4 KiB units. A value of0hindicates no information on granularity is provided. A value ofFFhindicates no restriction.kasโ Keep Alive Support indicates the granularity of the Keep Alive Timer in 100 millisecond units.hctmaโ Host Controlled Thermal Management Attributes, see enumnvme_id_ctrl_hctm.mntmtโ Minimum Thermal Management Temperature indicates the minimum temperature, in degrees Kelvin, that the host may request in the Thermal Management Temperature 1 field and Thermal Management Temperature 2 field of a Set Features command with the Feature Identifier field set toNVME_FEAT_FID_HCTM.mxtmtโ Maximum Thermal Management Temperature indicates the maximum temperature, in degrees Kelvin, that the host may request in the Thermal Management Temperature 1 field and Thermal Management Temperature 2 field of the Set Features command with the Feature Identifier set toNVME_FEAT_FID_HCTM.sanicapโ Sanitize Capabilities, see enumnvme_id_ctrl_sanicap.hmmindsโ Host Memory Buffer Minimum Descriptor Entry Size, and it's literally telling you the minimum usable size of a Host Memory Buffer Descriptor Entry ๐ measured in 4 KiB units, so do the math in 4 KiB chunks bestie.hmmaxdโ Host Memory Maximum Descriptors Entries, aka the number of usable Host Memory Buffer Descriptor Entries you actually get to play with.nsetidmaxโ NVM Set Identifier Maximum: defines the maximum value of a valid NVM Set Identifier for any controller in the NVM subsystem โจendgidmaxโ Endurance Group Identifier Maximum: defines the maximum value of a valid Endurance Group Identifier for any controller in the NVM subsystem. same energy, different identifier ๐anattโ ANA Transition Time. It indicates the maximum amount of time, in seconds, for a transition between ANA states, or the maximum amount of time, in seconds, that the controller reports the ANA change state โณanacapโ Asymmetric Namespace Access Capabilities. go look at enumnvme_id_ctrl_anacapfor the deets ๐anagrpmaxโ ANA Group Identifier Maximum: indicates the maximum value of a valid ANA Group Identifier for any controller in the NVM subsystem.nanagrpidโ Number of ANA Group Identifiers: indicates the number of ANA groups supported by this controller ๐pelsโ Persistent Event Log Size: indicates the maximum reportable size for the Persistent Event Log ๐domainidโ Domain Identifier: indicates the identifier of the domain that contains this controller.kpiocโ Key Per I/O Capabilities (KPIOC). see enumnvme_id_ctrl_kpioc๐rsvd359โ Reserved ๐ (it's reserved, nothing to see here, move along)mptfawrโ Maximum Processing Time for Firmware Activation Without Reset (MPTFAWR). This field shall indicate the estimated maximum time in 100 ms units required by the controller to process a Firmware Commit command that specifies a value of011bin the Commit Action field. yes it's a mouthful, it ate ๐rsvd362โ Reserved ๐megcapโ Max Endurance Group Capacity: indicates the maximum capacity of a single Endurance Group.tmpthhaโ Temperature Threshold Hysteresis Attributes ๐ก๏ธrsvd385โ Reserved ๐cqtโ Command Quiesce Time (CQT). This field indicates the expected worst-case time in 1 millisecond units for the controller to quiesce all outstanding commands after a Keep Alive Timeout or other communication loss. the way it just... waits, then quiesces ๐ญrsvd388โ Reserved ๐sqesโ Submission Queue Entry Size. see enumnvme_id_ctrl_sqesโจcqesโ Completion Queue Entry Size. see enumnvme_id_ctrl_cqesโจmaxcmdโ Maximum Outstanding Commands: indicates the maximum number of commands that the controller processes at one time for a particular queue. one at a time per queue, we love a focused icon ๐ซถnnโ Number of Namespaces: indicates the maximum value of a validnsidfor the NVM subsystem. If the MNAN (structnvme_id_ctrl.mnan) field is cleared to0h, then this field also indicates the maximum number of namespaces supported by the NVM subsystem. two answers for the price of one, no cap.oncsโ Optional NVM Command Support. see enumnvme_id_ctrl_oncs๐fusesโ Fused Operation Support. see enumnvme_id_ctrl_fuses๐ฅ (fuses, fire, coincidence? maybe)fnaโ Format NVM Attributes. see enumnvme_id_ctrl_fna.vwcโ Volatile Write Cache. see enumnvme_id_ctrl_vwc. it's giving volatile, as in don't-trust-it-with-your-life ๐awunโ Atomic Write Unit Normal: 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.awupfโ Atomic Write Unit Power Fail: 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. same guarantees, but the lights just went out โกicsvsccโ NVM Vendor Specific Command Configuration. see enumnvme_id_ctrl_nvscc.nwpcโ Namespace Write Protection Capabilities. see enumnvme_id_ctrl_nwpc๐ก๏ธacwuโ Atomic Compare & Write Unit: 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. This field is specified in logical blocks and is a 0's based value.ocfsโ Optional Copy Formats Supported: each bit n means the controller supports Copy Format n โจ bit by bit, we love an index.sglsโ SGL Support. see enumnvme_id_ctrl_sgls๐ฆmnanโ Maximum Number of Allowed Namespaces: indicates the maximum number of namespaces supported by the NVM subsystem.maxdnaโ Maximum Domain Namespace Attachments: indicates the maximum of the sum of the number of namespaces attached to each I/O controller in the Domain. yes, it's a sum โ read it twice bestie ๐งฎmaxcnaโ Maximum I/O Controller Namespace Attachments: indicates the maximum number of namespaces that are allowed to be attached to this I/O controller.oaqdโ Optimal Aggregated Queue Depth: indicates the recommended maximum total number of outstanding I/O commands across all I/O queues on the controller for optimal operation ๐ (recommended, bestie, not enforced โ it's a vibe check, not a rule)rhiriโ Recommended Host-Initiated Refresh Interval (RHIRI). If the Host-Initiated Refresh capability is supported, then this field indicates the recommended time interval in days from last power down to the time at which the host should initiate the Host-Initiated Refresh operation. If this field is cleared to0h, then this field is not reported.hirtโ Host-Initiated Refresh Time (HIRT). If the Host-Initiated Refresh capability is supported, then this field indicates the nominal amount of time in minutes that the controller takes to complete the Host-Initiated Refresh operation. If this field is cleared to0h, then this field is not reported. โจcmmrtdโ Controller Maximum Memory Range Tracking Descriptors: indicates the maximum number of Memory Range Tracking Descriptors the controller supports ๐nmmrtdโ NVM Subsystem Maximum Memory Range Tracking Descriptors: indicates the maximum number of Memory Range Tracking Descriptors the NVM subsystem supports. subsystem-wide edition ๐minmrtgโ Minimum Memory Range Tracking Granularity: indicates the minimum value supported in the Requested Memory Range Tracking Granularity (RMRTG) field of the Track Memory Ranges data structure.maxmrtgโ Maximum Memory Range Tracking Granularity: indicates the maximum value supported in the Requested Memory Range Tracking Granularity (RMRTG) field of the Track Memory Ranges data structure. min's twin, max's moment ๐trattrโ Tracking Attributes: indicates supported attributes for the Track Send command and Track Receive command. see enumnvme_id_ctrl_trattr๐rsvd577โ Reserved ๐mcudmqโ Maximum Controller User Data Migration Queues: indicates the maximum number of User Data Migration Queues supported by the controller.mnsudmqโ Maximum NVM Subsystem User Data Migration Queues: indicates the maximum number of User Data Migration Queues supported by the NVM subsystem ๐mcmrโ Maximum CDQ Memory Ranges: indicates the maximum number of memory ranges allowed to be specified by thePRP1field of a Controller Data Queue command.nmcmrโ NVM Subsystem Maximum CDQ Memory Ranges: indicates the maximum number of memory ranges for all Controller Data Queues in the NVM subsystem.mcdqpcโ Maximum Controller Data Queue PRP Count: indicates the maximum number of PRPs allowed to be specified in the PRP list in the Controller Data Queue command ๐งฎrsvd588โ Reserved ๐subnqnโ NVM Subsystem NVMe Qualified Name. UTF-8 null terminated string ๐ธ (yes, it's a string, null terminated, iconic)rsvd1024โ Reserved ๐ioccszโ I/O Queue Command Capsule Supported Size: defines the maximum I/O command capsule size in 16 byte units ๐ฆiorcszโ I/O Queue Response Capsule Supported Size: defines the maximum I/O response capsule size in 16 byte units ๐ฆicdoffโ In Capsule Data Offset: defines the offset where data starts within a capsule. This value is applicable to I/O Queues only ๐ซถfcattโ Fabrics Controller Attributes. see enumnvme_id_ctrl_fcatt.msdbdโ Maximum SGL Data Block Descriptors: indicates the maximum number of SGL Data Block or Keyed SGL Data Block descriptors that a host is allowed to place in a capsule. A value of0hindicates no limit ๐ฅ (0h = go wild, bestie)ofcsโ Optional Fabric Commands Support. see enumnvme_id_ctrl_ofcs.dctypeโ Discovery Controller Type (DCTYPE). This field indicates what type of Discovery controller the controller is (see enumnvme_id_ctrl_dctype) ๐ฆrsvd1807โ Reserved ๐psdโ Power State Descriptors. see structnvme_id_psdโกvsโ Vendor Specific โจ
and that's the whole member list, bestie โ we made it ๐ this page lives in the struct nvme_id_ctrl chapter of libnvme(2), stamped July 2026. go forth and read your controller registers, mwah ๐๐
๐ฆ where this page comes from
- ubuntu stonking: libnvme-dev 1.16.2-1build1 ยท LGPL-2.1-or-later
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms