API

This part of the documentation lists the full API reference of all public classes and functions.

types.h

NVMe standard definitions

NVME_GET

NVME_GET (value, name)

extract field from complex value

Parameters

value

The original value of a complex field

name

The name of the sub-field within an nvme value

Description

By convention, this library defines _SHIFT and _MASK such that mask can be applied after the shift to isolate a specific set of bits that decode to a sub-field.

Return

The ‘name’ field from ‘value’

NVME_SET

NVME_SET (value, name)

set field into complex value

Parameters

value

The value to be set in its completed position

name

The name of the sub-field within an nvme value

Return

The ‘name’ field from ‘value’

enum nvme_constants

A place to stash various constant nvme values

Constants

NVME_NSID_ALL

A broadcast value that is used to specify all namespaces

NVME_NSID_NONE

The invalid namespace id, for when the nsid parameter is not used in a command

NVME_UUID_NONE

Use to omit a uuid command parameter

NVME_CNTLID_NONE

Use to omit a cntlid command parameter

NVME_CNSSPECID_NONE

Use to omit a cns_specific_id command parameter

NVME_LOG_LSP_NONE

Use to omit a log lsp command parameter

NVME_LOG_LSI_NONE

Use to omit a log lsi command parameter

NVME_LOG_LPO_NONE

Use to omit a log lpo command parameter

NVME_IDENTIFY_DATA_SIZE

The transfer size for nvme identify commands

NVME_LOG_SUPPORTED_LOG_PAGES_MAX

The largest possible index in the supported log pages log.

NVME_ID_NVMSET_LIST_MAX

The largest possible nvmset index in identify nvmeset

NVME_ID_UUID_LIST_MAX

The largest possible uuid index in identify uuid list

NVME_ID_CTRL_LIST_MAX

The largest possible controller index in identify controller list

NVME_ID_NS_LIST_MAX

The largest possible namespace index in identify namespace list

NVME_ID_SECONDARY_CTRL_MAX

The largest possible secondary controller index in identify secondary controller

NVME_ID_DOMAIN_LIST_MAX

The largest possible domain index in the in domain list

NVME_ID_ENDURANCE_GROUP_LIST_MAX

The largest possible endurance group index in the endurance group list

NVME_ID_ND_DESCRIPTOR_MAX

The largest possible namespace granularity index in the namespace granularity descriptor list

NVME_FEAT_LBA_RANGE_MAX

The largest possible LBA range index in feature lba range type

NVME_LOG_ST_MAX_RESULTS

The largest possible self test result index in the device self test log

NVME_LOG_TELEM_BLOCK_SIZE

Specification defined size of Telemetry Data Blocks

NVME_LOG_FID_SUPPORTED_EFFECTS_MAX

The largest possible FID index in the feature identifiers effects log.

NVME_LOG_MI_CMD_SUPPORTED_EFFECTS_MAX

The largest possible MI Command index in the MI Command effects log.

NVME_LOG_MI_CMD_SUPPORTED_EFFECTS_RESERVED

The reserved space in the MI Command effects log.

NVME_DSM_MAX_RANGES

The largest possible range index in a data-set management command

NVME_NQN_LENGTH

Max length for NVMe Qualified Name

NVMF_TRADDR_SIZE

Max Transport Address size

NVMF_TSAS_SIZE

Max Transport Specific Address Subtype size

NVME_ZNS_CHANGED_ZONES_MAX

Max number of zones in the changed zones log page

enum nvme_csi

Defined command set indicators

Constants

NVME_CSI_NVM

NVM Command Set Indicator

NVME_CSI_KV

Key Value Command Set

NVME_CSI_ZNS

Zoned Namespace Command Set

enum nvme_register_offsets

controller registers for all transports. This is the layout of BAR0/1 for PCIe, and properties for fabrics.

Constants

NVME_REG_CAP

Controller Capabilities

NVME_REG_VS

Version

NVME_REG_INTMS

Interrupt Mask Set

NVME_REG_INTMC

Interrupt Mask Clear

NVME_REG_CC

Controller Configuration

NVME_REG_CSTS

Controller Status

NVME_REG_NSSR

NVM Subsystem Reset

NVME_REG_AQA

Admin Queue Attributes

NVME_REG_ASQ

Admin SQ Base Address

NVME_REG_ACQ

Admin CQ Base Address

NVME_REG_CMBLOC

Controller Memory Buffer Location

NVME_REG_CMBSZ

Controller Memory Buffer Size

NVME_REG_BPINFO

Boot Partition Information

NVME_REG_BPRSEL

Boot Partition Read Select

NVME_REG_BPMBL

Boot Partition Memory Buffer Location

NVME_REG_CMBMSC

Controller Memory Buffer Memory Space Control

NVME_REG_CMBSTS

Controller Memory Buffer Status

NVME_REG_CMBEBS

Controller Memory Buffer Elasticity Buffer Size

NVME_REG_CMBSWTP

Controller Memory Buffer Sustained Write Throughput

NVME_REG_NSSD

NVM Subsystem Shutdown

NVME_REG_CRTO

Controller Ready Timeouts

NVME_REG_PMRCAP

Persistent Memory Capabilities

NVME_REG_PMRCTL

Persistent Memory Region Control

NVME_REG_PMRSTS

Persistent Memory Region Status

NVME_REG_PMREBS

Persistent Memory Region Elasticity Buffer Size

NVME_REG_PMRSWTP

Memory Region Sustained Write Throughput

NVME_REG_PMRMSCL

Persistent Memory Region Controller Memory Space Control Lower

NVME_REG_PMRMSCU

Persistent Memory Region Controller Memory Space Control Upper

bool nvme_is_64bit_reg(__u32 offset)

Checks if offset of the controller register is a know 64bit value.

Parameters

__u32 offset

Offset of controller register field in bytes

Description

This function does not care about transport so that the offset is not going to be checked inside of this function for the unsupported fields in a specific transport. For example, BPMBL(Boot Partition Memory Buffer Location) register is not supported by fabrics, but it can be checked here.

Return

true if given offset is 64bit register, otherwise it returns false.

enum nvme_cap

This field indicates the controller capabilities register

Constants

NVME_CAP_MQES_SHIFT

Shift amount to get the maximum queue entries supported

NVME_CAP_CQR_SHIFT

Shift amount to get the contiguous queues required

NVME_CAP_AMS_SHIFT

Shift amount to get the arbitration mechanism supported

NVME_CAP_TO_SHIFT

Shift amount to get the timeout

NVME_CAP_DSTRD_SHIFT

Shift amount to get the doorbell stride

NVME_CAP_NSSRC_SHIFT

Shift amount to get the NVM subsystem reset supported

NVME_CAP_CSS_SHIFT

Shift amount to get the command sets supported

NVME_CAP_BPS_SHIFT

Shift amount to get the boot partition support

NVME_CAP_CPS_SHIFT

Shift amount to get the controller power scope

NVME_CAP_MPSMIN_SHIFT

Shift amount to get the memory page size minimum

NVME_CAP_MPSMAX_SHIFT

Shift amount to get the memory page size maximum

NVME_CAP_PMRS_SHIFT

Shift amount to get the persistent memory region supported

NVME_CAP_CMBS_SHIFT

Shift amount to get the controller memory buffer supported

NVME_CAP_NSSS_SHIFT

Shift amount to get the NVM subsystem shutdown supported

NVME_CAP_CRMS_SHIFT

Shift amount to get the controller ready modes supported

NVME_CAP_MQES_MASK

Mask to get the maximum queue entries supported

NVME_CAP_CQR_MASK

Mask to get the contiguous queues required

NVME_CAP_AMS_MASK

Mask to get the arbitration mechanism supported

NVME_CAP_TO_MASK

Mask to get the timeout

NVME_CAP_DSTRD_MASK

Mask to get the doorbell stride

NVME_CAP_NSSRC_MASK

Mask to get the NVM subsystem reset supported

NVME_CAP_CSS_MASK

Mask to get the command sets supported

NVME_CAP_BPS_MASK

Mask to get the boot partition support

NVME_CAP_CPS_MASK

Mask to get the controller power scope

NVME_CAP_MPSMIN_MASK

Mask to get the memory page size minimum

NVME_CAP_MPSMAX_MASK

Mask to get the memory page size maximum

NVME_CAP_PMRS_MASK

Mask to get the persistent memory region supported

NVME_CAP_CMBS_MASK

Mask to get the controller memory buffer supported

NVME_CAP_NSSS_MASK

Mask to get the NVM subsystem shutdown supported

NVME_CAP_CRMS_MASK

Mask to get the controller ready modes supported

NVME_CAP_AMS_WRR

Weighted round robin with urgent priority class

NVME_CAP_AMS_VS

Vendor specific

NVME_CAP_CSS_NVM

NVM command set or a discovery controller

NVME_CAP_CSS_CSI

Controller supports one or more I/O command sets

NVME_CAP_CSS_ADMIN

No I/O command set is supported

NVME_CAP_CPS_NONE

Not reported

NVME_CAP_CPS_CTRL

Controller scope

NVME_CAP_CPS_DOMAIN

Domain scope

NVME_CAP_CPS_NVMS

NVM subsystem scope

NVME_CAP_CRWMS

Controller ready with media support

NVME_CAP_CRIMS

Controller ready independent of media support

enum nvme_vs

This field indicates the version

Constants

NVME_VS_TER_SHIFT

Shift amount to get the tertiary version

NVME_VS_MNR_SHIFT

Shift amount to get the minor version

NVME_VS_MJR_SHIFT

Shift amount to get the major version

NVME_VS_TER_MASK

Mask to get the tertiary version

NVME_VS_MNR_MASK

Mask to get the minor version

NVME_VS_MJR_MASK

Mask to get the major version

enum nvme_cc

This field indicates the controller configuration

Constants

NVME_CC_EN_SHIFT

Shift amount to get the enable

NVME_CC_CSS_SHIFT

Shift amount to get the I/O command set selected

NVME_CC_MPS_SHIFT

Shift amount to get the memory page size

NVME_CC_AMS_SHIFT

Shift amount to get the arbitration mechanism selected

NVME_CC_SHN_SHIFT

Shift amount to get the shutdown notification

NVME_CC_IOSQES_SHIFT

Shift amount to get the I/O submission queue entry size

NVME_CC_IOCQES_SHIFT

Shift amount to get the I/O completion queue entry size

NVME_CC_CRIME_SHIFT

Shift amount to get the controller ready independent of media enable

NVME_CC_EN_MASK

Mask to get the enable

NVME_CC_CSS_MASK

Mask to get the I/O command set selected

NVME_CC_MPS_MASK

Mask to get the memory page size

NVME_CC_AMS_MASK

Mask to get the arbitration mechanism selected

NVME_CC_SHN_MASK

Mask to get the shutdown notification

NVME_CC_CRIME_MASK

Mask to get the I/O submission queue entry size

NVME_CC_IOSQES_MASK

Mask to get the I/O completion queue entry size

NVME_CC_IOCQES_MASK

Mask to get the controller ready independent of media enable

NVME_CC_CSS_NVM

NVM command set

NVME_CC_CSS_CSI

All supported I/O command sets

NVME_CC_CSS_ADMIN

Admin command set only

NVME_CC_AMS_RR

Round robin

NVME_CC_AMS_WRRU

Weighted round robin with urgent priority class

NVME_CC_AMS_VS

Vendor specific

NVME_CC_SHN_NONE

No notification; no effect

NVME_CC_SHN_NORMAL

Normal shutdown notification

NVME_CC_SHN_ABRUPT

Abrupt shutdown notification

NVME_CC_CRWME

Controller ready with media enable

NVME_CC_CRIME

Controller ready independent of media enable

enum nvme_csts

This field indicates the controller status register

Constants

NVME_CSTS_RDY_SHIFT

Shift amount to get the ready

NVME_CSTS_CFS_SHIFT

Shift amount to get the controller fatal status

NVME_CSTS_SHST_SHIFT

Shift amount to get the shutdown status

NVME_CSTS_NSSRO_SHIFT

Shift amount to get the NVM subsystem reset occurred

NVME_CSTS_PP_SHIFT

Shift amount to get the processing paused

NVME_CSTS_ST_SHIFT

Shift amount to get the shutdown type

NVME_CSTS_RDY_MASK

Mask to get the ready

NVME_CSTS_CFS_MASK

Mask to get the controller fatal status

NVME_CSTS_SHST_MASK

Mask to get the shutdown status

NVME_CSTS_NSSRO_MASK

Mask to get the NVM subsystem reset occurred

NVME_CSTS_PP_MASK

Mask to get the processing paused

NVME_CSTS_ST_MASK

Mask to get the shutdown type

NVME_CSTS_SHST_NORMAL

Normal operation

NVME_CSTS_SHST_OCCUR

Shutdown processing occurring

NVME_CSTS_SHST_CMPLT

Shutdown processing complete

NVME_CSTS_SHN_MASK

Deprecated mask to get the shutdown status

enum nvme_aqa

This field indicates the admin queue attributes

Constants

NVME_AQA_ASQS_SHIFT

Shift amount to get the admin submission queue size

NVME_AQA_ACQS_SHIFT

Shift amount to get the admin completion queue size

NVME_AQA_ASQS_MASK

Mask to get the admin submission queue size

NVME_AQA_ACQS_MASK

Mask to get the admin completion queue size

enum nvme_asq

This field indicates the admin submission queue base address

Constants

NVME_ASQ_ASQB_SHIFT

Shift amount to get the admin submission queue base

enum nvme_acq

This field indicates the admin completion queue base address

Constants

NVME_ACQ_ACQB_SHIFT

Shift amount to get the admin completion queue base

enum nvme_cmbloc

This field indicates the controller memory buffer location

Constants

NVME_CMBLOC_BIR_SHIFT

Shift amount to get the base indicator register

NVME_CMBLOC_CQMMS_SHIFT

Shift amount to get the CMB queue mixed memory support

NVME_CMBLOC_CQPDS_SHIFT

Shift amount to get the CMB queue physically discontiguous support

NVME_CMBLOC_CDPLMS_SHIFT

Shift amount to get the CMB data pointer mixed locations support

NVME_CMBLOC_CDPCILS_SHIFT

Shift amount to get the CMB data pointer and command independent locations support

NVME_CMBLOC_CDMMMS_SHIFT

Shift amount to get the CMB data metadata mixed memory support

NVME_CMBLOC_CQDA_SHIFT

Shift amount to get the CMB queue dword alignment

NVME_CMBLOC_OFST_SHIFT

Shift amount to get the offset

NVME_CMBLOC_BIR_MASK

Mask to get the base indicator register

NVME_CMBLOC_CQMMS_MASK

Mask to get the CMB queue mixed memory support

NVME_CMBLOC_CQPDS_MASK

Mask to get the CMB queue physically discontiguous support

NVME_CMBLOC_CDPLMS_MASK

Mask to get the CMB data pointer mixed locations support

NVME_CMBLOC_CDPCILS_MASK

Mask to get the CMB data pointer and command independent locations support

NVME_CMBLOC_CDMMMS_MASK

Mask to get the CMB data metadata mixed memory support

NVME_CMBLOC_CQDA_MASK

Mask to get the CMB queue dword alignment

NVME_CMBLOC_OFST_MASK

Mask to get the offset

enum nvme_cmbsz

This field indicates the controller memory buffer size

Constants

NVME_CMBSZ_SQS_SHIFT

Shift amount to get the submission queue support

NVME_CMBSZ_CQS_SHIFT

Shift amount to get the completion queue support

NVME_CMBSZ_LISTS_SHIFT

Shift amount to get the PLP SGL list support

NVME_CMBSZ_RDS_SHIFT

Shift amount to get the read data support

NVME_CMBSZ_WDS_SHIFT

Shift amount to get the write data support

NVME_CMBSZ_SZU_SHIFT

Shift amount to get the size units

NVME_CMBSZ_SZ_SHIFT

Shift amount to get the size

NVME_CMBSZ_SQS_MASK

Mask to get the submission queue support

NVME_CMBSZ_CQS_MASK

Mask to get the completion queue support

NVME_CMBSZ_LISTS_MASK

Mask to get the PLP SGL list support

NVME_CMBSZ_RDS_MASK

Mask to get the read data support

NVME_CMBSZ_WDS_MASK

Mask to get the write data support

NVME_CMBSZ_SZU_MASK

Mask to get the size units

NVME_CMBSZ_SZ_MASK

Mask to get the size

NVME_CMBSZ_SZU_4K

4 KiB

NVME_CMBSZ_SZU_64K

64 KiB

NVME_CMBSZ_SZU_1M

1 MiB

NVME_CMBSZ_SZU_16M

16 MiB

NVME_CMBSZ_SZU_256M

256 MiB

NVME_CMBSZ_SZU_4G

4 GiB

NVME_CMBSZ_SZU_64G

64 GiB

__u64 nvme_cmb_size(__u32 cmbsz)

Calculate size of the controller memory buffer

Parameters

__u32 cmbsz

Value from controller register NVME_REG_CMBSZ

Return

size of controller memory buffer in bytes

enum nvme_bpinfo

This field indicates the boot partition information

Constants

NVME_BPINFO_BPSZ_SHIFT

Shift amount to get the boot partition size

NVME_BPINFO_BRS_SHIFT

Shift amount to get the boot read status

NVME_BPINFO_ABPID_SHIFT

Shift amount to get the active boot partition ID

NVME_BPINFO_BPSZ_MASK

Mask to get the boot partition size

NVME_BPINFO_BRS_MASK

Mask to get the boot read status

NVME_BPINFO_ABPID_MASK

Mask to get the active boot partition ID

NVME_BPINFO_BRS_NONE

No boot partition read operation requested

NVME_BPINFO_BRS_READ_IN_PROGRESS

Boot partition read in progress

NVME_BPINFO_BRS_READ_SUCCESS

Boot partition read completed successfully

NVME_BPINFO_BRS_READ_ERROR

Error completing boot partition read

enum nvme_bprsel

This field indicates the boot partition read select

Constants

NVME_BPRSEL_BPRSZ_SHIFT

Shift amount to get the boot partition read size

NVME_BPRSEL_BPROF_SHIFT

Shift amount to get the boot partition read offset

NVME_BPRSEL_BPID_SHIFT

Shift amount to get the boot partition identifier

NVME_BPRSEL_BPRSZ_MASK

Mask to get the boot partition read size

NVME_BPRSEL_BPROF_MASK

Mask to get the boot partition read offset

NVME_BPRSEL_BPID_MASK

Mask to get the boot partition identifier

enum nvme_bpmbl

This field indicates the boot partition memory buffer location

Constants

NVME_BPMBL_BMBBA_SHIFT

Shift amount to get the boot partition memory buffer base address

enum nvme_cmbmsc

This field indicates the controller memory buffer memory space control

Constants

NVME_CMBMSC_CRE_SHIFT

Shift amount to get the capabilities registers enabled

NVME_CMBMSC_CMSE_SHIFT

Shift amount to get the controller memory space enable

NVME_CMBMSC_CBA_SHIFT

Shift amount to get the controller base address

NVME_CMBMSC_CRE_MASK

Mask to get the capabilities registers enabled

NVME_CMBMSC_CMSE_MASK

Mask to get the controller memory space enable

enum nvme_cmbsts

This field indicates the controller memory buffer status

Constants

NVME_CMBSTS_CBAI_SHIFT

Shift amount to get the controller base address invalid

NVME_CMBSTS_CBAI_MASK

Mask to get the controller base address invalid

enum nvme_unit

Defined buffer size and write throughput granularity units

Constants

NVME_UNIT_B

Bytes or Bytes/second

NVME_UNIT_1K

1 KiB or 1 KiB/second

NVME_UNIT_1M

1 MiB or 1 MiB/second

NVME_UNIT_1G

1 GiB or 1 GiB/second

enum nvme_cmbebs

This field indicates the controller memory buffer elasticity buffer size

Constants

NVME_CMBEBS_CMBSZU_SHIFT

Shift amount to get the CMB elasticity buffer size units

NVME_CMBEBS_RBB_SHIFT

Shift amount to get the read bypass behavior

NVME_CMBEBS_CMBWBZ_SHIFT

Shift amount to get the CMB elasiticity buffer size base

NVME_CMBEBS_CMBSZU_MASK

Mask to get the CMB elasticity buffer size units

NVME_CMBEBS_RBB_MASK

Mask to get the read bypass behavior

NVME_CMBEBS_CMBWBZ_MASK

Mask to get the CMB elasiticity buffer size base

NVME_CMBEBS_CMBSZU_B

Bytes granularity

NVME_CMBEBS_CMBSZU_1K

1 KiB granularity

NVME_CMBEBS_CMBSZU_1M

1 MiB granularity

NVME_CMBEBS_CMBSZU_1G

1 GiB granularity

enum nvme_cmbswtp

This field indicates the controller memory buffer sustained write throughput

Constants

NVME_CMBSWTP_CMBSWTU_SHIFT

Shift amount to get the CMB sustained write throughput units

NVME_CMBSWTP_CMBSWTV_SHIFT

Shift amount to get the CMB sustained write throughput

NVME_CMBSWTP_CMBSWTU_MASK

Mask to get the CMB sustained write throughput units

NVME_CMBSWTP_CMBSWTV_MASK

Mask to get the CMB sustained write throughput

NVME_CMBSWTP_CMBSWTU_B

Bytes/second granularity

NVME_CMBSWTP_CMBSWTU_1K

1 KiB/second granularity

NVME_CMBSWTP_CMBSWTU_1M

1 MiB/second granularity

NVME_CMBSWTP_CMBSWTU_1G

1 GiB/second granularity

enum nvme_crto

This field indicates the controller ready timeouts

Constants

NVME_CRTO_CRWMT_SHIFT

Shift amount to get the controller ready with media timeout

NVME_CRTO_CRIMT_SHIFT

Shift amount to get the controller ready independent of media timeout

NVME_CRTO_CRWMT_MASK

Mask to get the controller ready with media timeout

NVME_CRTO_CRIMT_MASK

Mask to get the controller ready independent of media timeout

enum nvme_pmrcap

This field indicates the persistent memory region capabilities

Constants

NVME_PMRCAP_RDS_SHIFT

Shift amount to get the read data support

NVME_PMRCAP_WDS_SHIFT

Shift amount to get the write data support

NVME_PMRCAP_BIR_SHIFT

Shift amount to get the base indicator register

NVME_PMRCAP_PMRTU_SHIFT

Shift amount to get the persistent memory region time units

NVME_PMRCAP_PMRWBM_SHIFT

Shift amount to get the persistent memory region write barrier mechanisms

NVME_PMRCAP_PMRTO_SHIFT

Shift amount to get the persistent memory region timeout

NVME_PMRCAP_CMSS_SHIFT

Shift amount to get the controller memory space supported

NVME_PMRCAP_PMRWMB_SHIFT

Deprecated shift amount to get the persistent memory region write barrier mechanisms

NVME_PMRCAP_RDS_MASK

Mask to get the read data support

NVME_PMRCAP_WDS_MASK

Mask to get the write data support

NVME_PMRCAP_BIR_MASK

Mask to get the base indicator register

NVME_PMRCAP_PMRTU_MASK

Mask to get the persistent memory region time units

NVME_PMRCAP_PMRWBM_MASK

Mask to get the persistent memory region write barrier mechanisms

NVME_PMRCAP_PMRTO_MASK

Mask to get the persistent memory region timeout

NVME_PMRCAP_CMSS_MASK

Mask to get the controller memory space supported

NVME_PMRCAP_PMRWMB_MASK

Deprecated mask to get the persistent memory region write barrier mechanisms

NVME_PMRCAP_PMRTU_500MS

500 milliseconds

NVME_PMRCAP_PMRTU_60S

minutes

enum nvme_pmrctl

This field indicates the persistent memory region control

Constants

NVME_PMRCTL_EN_SHIFT

Shift amount to get the enable

NVME_PMRCTL_EN_MASK

Mask to get the enable

enum nvme_pmrsts

This field indicates the persistent memory region status

Constants

NVME_PMRSTS_ERR_SHIFT

Shift amount to get the error

NVME_PMRSTS_NRDY_SHIFT

Shift amount to get the not ready

NVME_PMRSTS_HSTS_SHIFT

Shift amount to get the health status

NVME_PMRSTS_CBAI_SHIFT

Shift amount to get the controller base address invalid

NVME_PMRSTS_ERR_MASK

Mask to get the error

NVME_PMRSTS_NRDY_MASK

Mask to get the not ready

NVME_PMRSTS_HSTS_MASK

Mask to get the health status

NVME_PMRSTS_CBAI_MASK

Mask to get the controller base address invalid

enum nvme_pmrebs

This field indicates the persistent memory region elasticity buffer size

Constants

NVME_PMREBS_PMRSZU_SHIFT

Shift amount to get the PMR elasticity buffer size units

NVME_PMREBS_RBB_SHIFT

Shift amount to get the read bypass behavior

NVME_PMREBS_PMRWBZ_SHIFT

Shift amount to get the PMR elasticity buffer size base

NVME_PMREBS_PMRSZU_MASK

Mask to get the PMR elasticity buffer size units

NVME_PMREBS_RBB_MASK

Mask to get the read bypass behavior

NVME_PMREBS_PMRWBZ_MASK

Mask to get the PMR elasticity buffer size base

NVME_PMREBS_PMRSZU_B

Bytes

NVME_PMREBS_PMRSZU_1K

1 KiB

NVME_PMREBS_PMRSZU_1M

1 MiB

NVME_PMREBS_PMRSZU_1G

1 GiB

__u64 nvme_pmr_size(__u32 pmrebs)

Calculate size of persistent memory region elasticity buffer

Parameters

__u32 pmrebs

Value from controller register NVME_REG_PMREBS

Return

size of controller persistent memory buffer in bytes

enum nvme_pmrswtp

This field indicates the persistent memory region sustained write throughput

Constants

NVME_PMRSWTP_PMRSWTU_SHIFT

Shift amount to get the PMR sustained write throughput units

NVME_PMRSWTP_PMRSWTV_SHIFT

Shift amount to get the PMR sustained write throughput

NVME_PMRSWTP_PMRSWTU_MASK

Mask to get the PMR sustained write throughput units

NVME_PMRSWTP_PMRSWTV_MASK

Mask to get the PMR sustained write throughput

NVME_PMRSWTP_PMRSWTU_BPS

Bytes per second

NVME_PMRSWTP_PMRSWTU_KBPS

1 KiB / s

NVME_PMRSWTP_PMRSWTU_MBPS

1 MiB / s

NVME_PMRSWTP_PMRSWTU_GBPS

1 GiB / s

__u64 nvme_pmr_throughput(__u32 pmrswtp)

Calculate throughput of persistent memory buffer

Parameters

__u32 pmrswtp

Value from controller register NVME_REG_PMRSWTP

Return

throughput of controller persistent memory buffer in bytes/second

enum nvme_pmrmsc

This field indicates the persistent memory region memory space control

Constants

NVME_PMRMSC_CMSE_SHIFT

Shift amount to get the controller memory space enable

NVME_PMRMSC_CBA_SHIFT

Shift amount to get the controller base address

NVME_PMRMSC_CMSE_MASK

Mask to get the controller memory space enable

enum nvme_flbas

This field indicates the formatted LBA size

Constants

NVME_FLBAS_LOWER_SHIFT

Shift amount to get the format index least significant 4 bits

NVME_FLBAS_META_EXT_SHIFT

Shift amount to get the metadata transferred

NVME_FLBAS_HIGHER_SHIFT

Shift amount to get the format index most significant 2 bits

NVME_FLBAS_LOWER_MASK

Mask to get the format index least significant 4 bits

NVME_FLBAS_META_EXT_MASK

Mask to get the metadata transferred

NVME_FLBAS_HIGHER_MASK

Mask to get the format index most significant 2 bits

enum nvme_psd_flags

Possible flag values in nvme power state descriptor

Constants

NVME_PSD_FLAGS_MXPS

Indicates the scale for the Maximum Power field. If this bit is cleared, then the scale of the Maximum Power field is in 0.01 Watts. If this bit is set, then the scale of the Maximum Power field is in 0.0001 Watts.

NVME_PSD_FLAGS_NOPS

Indicates whether the controller processes I/O commands in this power state. If this bit is cleared, then the controller processes I/O commands in this power state. If this bit is set, then the controller does not process I/O commands in this power state.

enum nvme_psd_ps

Known values for struct nvme_psd ips and aps. Use with nvme_psd_power_scale() to extract the power scale field to match this enum.

Constants

NVME_PSD_PS_NOT_REPORTED

Not reported

NVME_PSD_PS_100_MICRO_WATT

0.0001 watt scale

NVME_PSD_PS_10_MILLI_WATT

0.01 watt scale

unsigned int nvme_psd_power_scale(__u8 ps)

power scale occupies the upper 3 bits

Parameters

__u8 ps

power scale value

Return

power scale value

enum nvme_psd_workload

Specifies a workload hint in the Power Management Feature (see struct nvme_psd.apw) to inform the NVM subsystem or indicate the conditions for the active power level.

Constants

NVME_PSD_WORKLOAD_NP

The workload is unknown or not provided.

NVME_PSD_WORKLOAD_1

Extended Idle Period with a Burst of Random Write consists of five minutes of idle followed by thirty-two random write commands of size 1 MiB submitted to a single controller while all other controllers in the NVM subsystem are idle, and then thirty (30) seconds of idle.

NVME_PSD_WORKLOAD_2

Heavy Sequential Writes consists of 80,000 sequential write commands of size 128 KiB submitted to a single controller while all other controllers in the NVM subsystem are idle. The submission queue(s) should be sufficiently large allowing the host to ensure there are multiple commands pending at all times during the workload.

struct nvme_id_psd

Power Management data structure

Definition

struct nvme_id_psd {
  __le16 mp;
  __u8 rsvd2;
  __u8 flags;
  __le32 enlat;
  __le32 exlat;
  __u8 rrt;
  __u8 rrl;
  __u8 rwt;
  __u8 rwl;
  __le16 idlp;
  __u8 ips;
  __u8 rsvd19;
  __le16 actp;
  __u8 apws;
  __u8 rsvd23[9];
};

Members

mp

Maximum Power indicates the sustained maximum power consumed by the NVM subsystem in this power state. The power in Watts is equal to the value in this field multiplied by the scale specified in the Max Power Scale bit (see enum nvme_psd_flags). A value of 0 indicates Maximum Power is not reported.

rsvd2

Reserved

flags

Additional decoding flags, see enum nvme_psd_flags.

enlat

Entry Latency indicates the maximum latency in microseconds associated with entering this power state. A value of 0 indicates Entry Latency is not reported.

exlat

Exit Latency indicates the maximum latency in microseconds associated with exiting this power state. A value of 0 indicates Exit Latency is not reported.

rrt

Relative Read Throughput indicates the read throughput rank associated with this power state relative to others. The value in this is less than the number of supported power states.

rrl

Relative Read Latency indicates the read latency rank associated with this power state relative to others. The value in this field is less than the number of supported power states.

rwt

Relative Write Throughput indicates write throughput rank associated with this power state relative to others. The value in this field is less than the number of supported power states

rwl

Relative Write Latency indicates the write latency rank associated with this power state relative to others. The value in this field is less than the number of supported power states

idlp

Idle Power indicates the typical power consumed by the NVM subsystem over 30 seconds in this power state when idle.

ips

Idle Power Scale indicates the scale for struct nvme_id_psd.idlp, see enum nvme_psd_ps for decoding this field.

rsvd19

Reserved

actp

Active Power indicates the largest average power consumed by the NVM subsystem over a 10 second period in this power state with the workload indicated in the Active Power Workload field.

apws

Bits 7-6: Active Power Scale(APS) indicates the scale for the struct nvme_id_psd.actp, see enum nvme_psd_ps for decoding this value. Bits 2-0: Active Power Workload(APW) indicates the workload used to calculate maximum power for this power state. See enum nvme_psd_workload for decoding this field.

rsvd23

Reserved

struct nvme_id_ctrl

Identify Controller data structure

Definition

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 rsvd102[9];
  __u8 cntrltype;
  __u8 fguid[16];
  __le16 crdt1;
  __le16 crdt2;
  __le16 crdt3;
  __u8 rsvd134[119];
  __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 rsvd358[10];
  __u8 megcap[16];
  __u8 rsvd384[128];
  __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 rsvd568[200];
  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

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 enum nvme_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 enum nvme_registers NVME_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 enum nvme_id_ctrl_oaes.

ctratt

Controller Attributes, see enum nvme_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.

rsvd102

Reserved

cntrltype

Controller Type, see enum nvme_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

rsvd134

Reserved

nvmsr

NVM Subsystem Report, see enum nvme_id_ctrl_nvmsr

vwci

VPD Write Cycle Information, see enum nvme_id_ctrl_vwci

mec

Management Endpoint Capabilities, see enum nvme_id_ctrl_mec

oacs

Optional Admin Command Support,the optional Admin commands and features supported by the controller, see enum nvme_id_ctrl_oacs.

acl

Abort Command Limit, the maximum number of concurrently executing Abort commands supported by the controller. This is a 0’s based value.

aerl

Async Event Request Limit, the maximum number of concurrently outstanding Asynchronous Event Request commands supported by the controller This is a 0’s based value.

frmw

Firmware Updates indicates capabilities regarding firmware updates. See enum nvme_id_ctrl_frmw.

lpa

Log Page Attributes, see enum nvme_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 a 0’s based value.

npss

Number of Power States Supported, the number of NVM Express power states supported by the controller, indicating the number of valid entries in struct nvme_id_ctrl.psd. This is a 0’s based value.

avscc

Admin Vendor Specific Command Configuration, see enum nvme_id_ctrl_avscc.

apsta

Autonomous Power State Transition Attributes, see enum nvme_id_ctrl_apsta.

wctemp

Warning Composite Temperature Threshold indicates the minimum Composite Temperature field value (see struct 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 (see struct 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 enum nvme_id_ctrl_rpmbs.

edstt

Extended Device Self-test Time, if Device Self-test command is supported (see struct 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 enum nvme_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 of 0h indicates no information on granularity is provided. A value of FFh indicates 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 enum nvme_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 to NVME_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 to NVME_FEAT_FID_HCTM.

sanicap

Sanitize Capabilities, see enum nvme_id_ctrl_sanicap

hmminds

Host Memory Buffer Minimum Descriptor Entry Size indicates the minimum usable size of a Host Memory Buffer Descriptor Entry in 4 KiB units.

hmmaxd

Host Memory Maximum Descriptors Entries indicates the number of usable Host Memory Buffer Descriptor Entries.

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.

anatt

ANA Transition Time 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, see enum nvme_id_ctrl_anacap.

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.

rsvd358

Reserved

megcap

Max Endurance Group Capacity indicates the maximum capacity of a single Endurance Group.

rsvd384

Reserved

sqes

Submission Queue Entry Size, see enum nvme_id_ctrl_sqes.

cqes

Completion Queue Entry Size, see enum nvme_id_ctrl_cqes.

maxcmd

Maximum Outstanding Commands indicates the maximum number of commands that the controller processes at one time for a particular queue.

nn

Number of Namespaces indicates the maximum value of a valid nsid for the NVM subsystem. If the MNAN (struct nvme_id_ctrl.mnan field is cleared to 0h, then this field also indicates the maximum number of namespaces supported by the NVM subsystem.

oncs

Optional NVM Command Support, see enum nvme_id_ctrl_oncs.

fuses

Fused Operation Support, see enum nvme_id_ctrl_fuses.

fna

Format NVM Attributes, see enum nvme_id_ctrl_fna.

vwc

Volatile Write Cache, see enum nvme_id_ctrl_vwc.

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.

icsvscc

NVM Vendor Specific Command Configuration, see enum nvme_id_ctrl_nvscc.

nwpc

Namespace Write Protection Capabilities, see enum nvme_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 controller supports Copy Format n.

sgls

SGL Support, see enum nvme_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.

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.

rsvd568

Reserved

subnqn

NVM Subsystem NVMe Qualified Name, UTF-8 null terminated string

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 enum nvme_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 of 0h indicates no limit.

ofcs

Optional Fabric Commands Support, see enum nvme_id_ctrl_ofcs.

dctype

Discovery Controller Type (DCTYPE). This field indicates what type of Discovery controller the controller is (see enum nvme_id_ctrl_dctype)

rsvd1807

Reserved

psd

Power State Descriptors, see struct nvme_id_psd.

vs

Vendor Specific

enum nvme_cmic

This field indicates the controller multi-path I/O and NS sharing capabilities

Constants

NVME_CMIC_MULTI_PORT_SHIFT

Shift amount to get the NVM subsystem port

NVME_CMIC_MULTI_CTRL_SHIFT

Shift amount to get the controllers

NVME_CMIC_MULTI_SRIOV_SHIFT

Shift amount to get the SR-IOV virtual function

NVME_CMIC_MULTI_ANA_SHIFT

Shift amount to get the asymmetric namespace access reporting

NVME_CMIC_MULTI_RSVD_SHIFT

Shift amount to get the reserved

NVME_CMIC_MULTI_PORT_MASK

Mask to get the NVM subsystem port

NVME_CMIC_MULTI_CTRL_MASK

Mask to get the controllers

NVME_CMIC_MULTI_SRIOV_MASK

Mask to get the SR-IOV virtual function

NVME_CMIC_MULTI_ANA_MASK

Mask to get the asymmetric namespace access reporting

NVME_CMIC_MULTI_RSVD_MASK

Mask to get the reserved

enum nvme_id_ctrl_cmic

Controller Multipath IO and Namespace Sharing Capabilities of the controller and NVM subsystem.

Constants

NVME_CTRL_CMIC_MULTI_PORT

If set, then the NVM subsystem may contain more than one NVM subsystem port, otherwise the NVM subsystem contains only a single NVM subsystem port.

NVME_CTRL_CMIC_MULTI_CTRL

If set, then the NVM subsystem may contain two or more controllers, otherwise the NVM subsystem contains only a single controller. An NVM subsystem that contains multiple controllers may be used by multiple hosts, or may provide multiple paths for a single host.

NVME_CTRL_CMIC_MULTI_SRIOV

If set, then the controller is associated with an SR-IOV Virtual Function, otherwise it is associated with a PCI Function or a Fabrics connection.

NVME_CTRL_CMIC_MULTI_ANA_REPORTING

If set, then the NVM subsystem supports Asymmetric Namespace Access Reporting.

enum nvme_id_ctrl_oaes

Optional Asynchronous Events Supported

Constants

NVME_CTRL_OAES_NA

Namespace Attribute Notices event supported

NVME_CTRL_OAES_FA

Firmware Activation Notices event supported

NVME_CTRL_OAES_ANA

ANA Change Notices supported

NVME_CTRL_OAES_PLEA

Predictable Latency Event Aggregate Log Change Notices event supported

NVME_CTRL_OAES_LBAS

LBA Status Information Notices event supported

NVME_CTRL_OAES_EGE

Endurance Group Events Aggregate Log Change Notices event supported

NVME_CTRL_OAES_NS

Normal NVM Subsystem Shutdown event supported

NVME_CTRL_OAES_ZD

Zone Descriptor Change Notifications supported

NVME_CTRL_OAES_DL

Discover Log Page Change Notifications supported

enum nvme_id_ctrl_ctratt

Controller attributes

Constants

NVME_CTRL_CTRATT_128_ID

128-bit Host Identifier supported

NVME_CTRL_CTRATT_NON_OP_PSP

Non-Operational Poser State Permissive Mode supported

NVME_CTRL_CTRATT_NVM_SETS

NVM Sets supported

NVME_CTRL_CTRATT_READ_RECV_LVLS

Read Recovery Levels supported

NVME_CTRL_CTRATT_ENDURANCE_GROUPS

Endurance Groups supported

NVME_CTRL_CTRATT_PREDICTABLE_LAT

Predictable Latency Mode supported

NVME_CTRL_CTRATT_TBKAS

Traffic Based Keep Alive Support

NVME_CTRL_CTRATT_NAMESPACE_GRANULARITY

Namespace Granularity reporting supported

NVME_CTRL_CTRATT_SQ_ASSOCIATIONS

SQ Associations supported

NVME_CTRL_CTRATT_UUID_LIST

UUID List reporting supported

NVME_CTRL_CTRATT_MDS

Multi-Domain Subsystem supported

NVME_CTRL_CTRATT_FIXED_CAP

Fixed Capacity Management supported

NVME_CTRL_CTRATT_VARIABLE_CAP

Variable Capacity Management supported

NVME_CTRL_CTRATT_DEL_ENDURANCE_GROUPS

Delete Endurance Groups supported

NVME_CTRL_CTRATT_DEL_NVM_SETS

Delete NVM Sets supported

NVME_CTRL_CTRATT_ELBAS

Extended LBA Formats supported

NVME_CTRL_CTRATT_FDPS

Flexible Data Placement supported

enum nvme_id_ctrl_cntrltype

Controller types

Constants

NVME_CTRL_CNTRLTYPE_IO

NVM I/O controller

NVME_CTRL_CNTRLTYPE_DISCOVERY

Discovery controller

NVME_CTRL_CNTRLTYPE_ADMIN

Admin controller

enum nvme_id_ctrl_dctype

Discovery Controller types

Constants

NVME_CTRL_DCTYPE_NOT_REPORTED

Not reported (I/O, Admin, and pre-TP8010)

NVME_CTRL_DCTYPE_DDC

Direct Discovery controller

NVME_CTRL_DCTYPE_CDC

Central Discovery controller

enum nvme_id_ctrl_nvmsr

This field reports information associated with the NVM Subsystem, see struct nvme_id_ctrl.nvmsr.

Constants

NVME_CTRL_NVMSR_NVMESD

If set, then the NVM Subsystem is part of an NVMe Storage Device; if cleared, then the NVM Subsystem is not part of an NVMe Storage Device.

NVME_CTRL_NVMSR_NVMEE

If set’, then the NVM Subsystem is part of an NVMe Enclosure; if cleared, then the NVM Subsystem is not part of an NVMe Enclosure.

enum nvme_id_ctrl_vwci

This field indicates information about remaining number of times that VPD contents are able to be updated using the VPD Write command, see struct nvme_id_ctrl.vwci.

Constants

NVME_CTRL_VWCI_VWCR

Mask to get value of VPD Write Cycles Remaining. If the VPD Write Cycle Remaining Valid bit is set, then this field contains a value indicating the remaining number of times that VPD contents are able to be updated using the VPD Write command. If this field is set to 7Fh, then the remaining number of times that VPD contents are able to be updated using the VPD Write command is greater than or equal to 7Fh.

NVME_CTRL_VWCI_VWCRV

VPD Write Cycle Remaining Valid. If this bit is set, then the VPD Write Cycle Remaining field is valid. If this bit is cleared, then the VPD Write Cycles Remaining field is invalid and cleared to 0h.

enum nvme_id_ctrl_mec

Flags indicating the capabilities of the Management Endpoint in the Controller, struct nvme_id_ctrl.mec.

Constants

NVME_CTRL_MEC_SMBUSME

If set, then the NVM Subsystem contains a Management Endpoint on an SMBus/I2C port.

NVME_CTRL_MEC_PCIEME

If set, then the NVM Subsystem contains a Management Endpoint on a PCIe port.

enum nvme_id_ctrl_oacs

Flags indicating the optional Admin commands and features supported by the controller, see struct nvme_id_ctrl.oacs.

Constants

NVME_CTRL_OACS_SECURITY

If set, then the controller supports the Security Send and Security Receive commands.

NVME_CTRL_OACS_FORMAT

If set then the controller supports the Format NVM command.

NVME_CTRL_OACS_FW

If set, then the controller supports the Firmware Commit and Firmware Image Download commands.

NVME_CTRL_OACS_NS_MGMT

If set, then the controller supports the Namespace Management capability

NVME_CTRL_OACS_SELF_TEST

If set, then the controller supports the Device Self-test command.

NVME_CTRL_OACS_DIRECTIVES

If set, then the controller supports Directives and the Directive Send and Directive Receive commands.

NVME_CTRL_OACS_NVME_MI

If set, then the controller supports the NVMe-MI Send and NVMe-MI Receive commands.

NVME_CTRL_OACS_VIRT_MGMT

If set, then the controller supports the Virtualization Management command.

NVME_CTRL_OACS_DBBUF_CFG

If set, then the controller supports the Doorbell Buffer Config command.

NVME_CTRL_OACS_LBA_STATUS

If set, then the controller supports the Get LBA Status capability.

NVME_CTRL_OACS_CMD_FEAT_LD

If set, then the controller supports the command and feature lockdown capability.

enum nvme_id_ctrl_frmw

Flags and values indicates capabilities regarding firmware updates from struct nvme_id_ctrl.frmw.

Constants

NVME_CTRL_FRMW_1ST_RO

If set, the first firmware slot is readonly

NVME_CTRL_FRMW_NR_SLOTS

Mask to get the value of the number of firmware slots that the controller supports.

NVME_CTRL_FRMW_FW_ACT_NO_RESET

If set, the controller supports firmware activation without a reset.

NVME_CTRL_FRMW_MP_UP_DETECTION

If set, the controller is able to detect overlapping firmware/boot partition image update.

enum nvme_id_ctrl_lpa

Flags indicating optional attributes for log pages that are accessed via the Get Log Page command.

Constants

NVME_CTRL_LPA_SMART_PER_NS

If set, controller supports SMART/Health log page on a per namespace basis.

NVME_CTRL_LPA_CMD_EFFECTS

If Set, the controller supports the commands supported and effects log page.

NVME_CTRL_LPA_EXTENDED

If set, the controller supports extended data for log page command including extended number of dwords and log page offset fields.

NVME_CTRL_LPA_TELEMETRY

If set, the controller supports the telemetry host-initiated and telemetry controller-initiated log pages and sending telemetry log notices.

NVME_CTRL_LPA_PERSETENT_EVENT

If set, the controller supports persistent event log.

NVME_CTRL_LPA_LI0_LI5_LI12_LI13

If set, the controller supports - log pages log page. - returning scope of each command in

commands supported and effects log page.

  • feature identifiers supported and effects log page.

  • NVMe-MI commands supported and effects log page.

NVME_CTRL_LPA_DA4_TELEMETRY

If set, the controller supports data area 4 for telemetry host-initiated and telemetry.

enum nvme_id_ctrl_avscc

Flags indicating the configuration settings for Admin Vendor Specific command handling.

Constants

NVME_CTRL_AVSCC_AVS

If set, all Admin Vendor Specific Commands use the optional vendor specific command format with NDT and NDM fields.

enum nvme_id_ctrl_apsta

Flags indicating the attributes of the autonomous power state transition feature.

Constants

NVME_CTRL_APSTA_APST

If set, then the controller supports autonomous power state transitions.

enum nvme_id_ctrl_rpmbs

This field indicates if the controller supports one or more Replay Protected Memory Blocks, from struct nvme_id_ctrl.rpmbs.

Constants

NVME_CTRL_RPMBS_NR_UNITS

Mask to get the value of the Number of RPMB Units

NVME_CTRL_RPMBS_AUTH_METHOD

Mask to get the value of the Authentication Method

NVME_CTRL_RPMBS_TOTAL_SIZE

Mask to get the value of Total Size

NVME_CTRL_RPMBS_ACCESS_SIZE

Mask to get the value of Access Size

enum nvme_id_ctrl_dsto

Flags indicating the optional Device Self-test command or operation behaviors supported by the controller or NVM subsystem.

Constants

NVME_CTRL_DSTO_ONE_DST

If set, then the NVM subsystem supports only one device self-test operation in progress at a time.

enum nvme_id_ctrl_hctm

Flags indicate the attributes of the host controlled thermal management feature

Constants

NVME_CTRL_HCTMA_HCTM

then the controller supports host controlled thermal management, and the Set Features command and Get Features command with the Feature Identifier field set to NVME_FEAT_FID_HCTM.

enum nvme_id_ctrl_sanicap

Indicates attributes for sanitize operations.

Constants

NVME_CTRL_SANICAP_CES

Crypto Erase Support. If set, then the controller supports the Crypto Erase sanitize operation.

NVME_CTRL_SANICAP_BES

Block Erase Support. If set, then the controller supports the Block Erase sanitize operation.

NVME_CTRL_SANICAP_OWS

Overwrite Support. If set, then the controller supports the Overwrite sanitize operation.

NVME_CTRL_SANICAP_NDI

No-Deallocate Inhibited. If set and the No- Deallocate Response Mode bit is set, then the controller deallocates after the sanitize operation even if the No-Deallocate After Sanitize bit is set in a Sanitize command.

NVME_CTRL_SANICAP_NODMMAS

No-Deallocate Modifies Media After Sanitize, mask to extract value.

enum nvme_id_ctrl_anacap

This field indicates the capabilities associated with Asymmetric Namespace Access Reporting.

Constants

NVME_CTRL_ANACAP_OPT

If set, then the controller is able to report ANA Optimized state.

NVME_CTRL_ANACAP_NON_OPT

If set, then the controller is able to report ANA Non-Optimized state.

NVME_CTRL_ANACAP_INACCESSIBLE

If set, then the controller is able to report ANA Inaccessible state.

NVME_CTRL_ANACAP_PERSISTENT_LOSS

If set, then the controller is able to report ANA Persistent Loss state.

NVME_CTRL_ANACAP_CHANGE

If set, then the controller is able to report ANA Change state.

NVME_CTRL_ANACAP_GRPID_NO_CHG

If set, then the ANAGRPID field in the Identify Namespace data structure (struct nvme_id_ns.anagrpid), does not change while the namespace is attached to any controller.

NVME_CTRL_ANACAP_GRPID_MGMT

If set, then the controller supports a non-zero value in the ANAGRPID field of the Namespace Management command.

enum nvme_id_ctrl_sqes

Defines the required and maximum Submission Queue entry size when using the NVM Command Set.

Constants

NVME_CTRL_SQES_MIN

Mask to get the value of the required Submission Queue Entry size when using the NVM Command Set.

NVME_CTRL_SQES_MAX

Mask to get the value of the maximum Submission Queue entry size when using the NVM Command Set.

enum nvme_id_ctrl_cqes

Defines the required and maximum Completion Queue entry size when using the NVM Command Set.

Constants

NVME_CTRL_CQES_MIN

Mask to get the value of the required Completion Queue Entry size when using the NVM Command Set.

NVME_CTRL_CQES_MAX

Mask to get the value of the maximum Completion Queue entry size when using the NVM Command Set.

enum nvme_id_ctrl_oncs

This field indicates the optional NVM commands and features supported by the controller.

Constants

NVME_CTRL_ONCS_COMPARE

If set, then the controller supports the Compare command.

NVME_CTRL_ONCS_WRITE_UNCORRECTABLE

If set, then the controller supports the Write Uncorrectable command.

NVME_CTRL_ONCS_DSM

If set, then the controller supports the Dataset Management command.

NVME_CTRL_ONCS_WRITE_ZEROES

If set, then the controller supports the Write Zeroes command.

NVME_CTRL_ONCS_SAVE_FEATURES

If set, then the controller supports the Save field set to a non-zero value in the Set Features command and the Select field set to a non-zero value in the Get Features command.

NVME_CTRL_ONCS_RESERVATIONS

If set, then the controller supports reservations.

NVME_CTRL_ONCS_TIMESTAMP

If set, then the controller supports the Timestamp feature.

NVME_CTRL_ONCS_VERIFY

If set, then the controller supports the Verify command.

NVME_CTRL_ONCS_COPY

If set, then the controller supports the copy command.

NVME_CTRL_ONCS_COPY_SINGLE_ATOMICITY

If set, then the write portion of a Copy command is performed as a single write command to which the same atomicity requirements that apply to a write command apply.

NVME_CTRL_ONCS_ALL_FAST_COPY

If set, then all copy operations for the Copy command are fast copy operations.

enum nvme_id_ctrl_fuses

This field indicates the fused operations that the controller supports.

Constants

NVME_CTRL_FUSES_COMPARE_AND_WRITE

If set, then the controller supports the Compare and Write fused operation.

enum nvme_id_ctrl_fna

This field indicates attributes for the Format NVM command.

Constants

NVME_CTRL_FNA_FMT_ALL_NAMESPACES

If set, then all namespaces in an NVM subsystem shall be configured with the same attributes and a format (excluding secure erase) of any namespace results in a format of all namespaces in an NVM subsystem. If cleared, then the controller supports format on a per namespace basis.

NVME_CTRL_FNA_SEC_ALL_NAMESPACES

If set, then any secure erase performed as part of a format operation results in a secure erase of all namespaces in the NVM subsystem. If cleared, then any secure erase performed as part of a format results in a secure erase of the particular namespace specified.

NVME_CTRL_FNA_CRYPTO_ERASE

If set, then cryptographic erase is supported. If cleared, then cryptographic erase is not supported.

NVME_CTRL_FNA_NSID_FFFFFFFF

If set, then format does not support nsid value set to FFFFFFFFh. If cleared, format supports nsid value set to FFFFFFFFh.

enum nvme_id_ctrl_vwc

Volatile write cache

Constants

NVME_CTRL_VWC_PRESENT

If set, indicates a volatile write cache is present. If a volatile write cache is present, then the host controls whether the volatile write cache is enabled with a Set Features command specifying the value NVME_FEAT_FID_VOLATILE_WC.

NVME_CTRL_VWC_FLUSH

Mask to get the value of the flush command behavior.

enum nvme_id_ctrl_nvscc

This field indicates the configuration settings for NVM Vendor Specific command handling.

Constants

NVME_CTRL_NVSCC_FMT

If set, all NVM Vendor Specific Commands use the format with NDT and NDM fields.

enum nvme_id_ctrl_nwpc

This field indicates the optional namespace write protection capabilities supported by the controller.

Constants

NVME_CTRL_NWPC_WRITE_PROTECT

If set, then the controller shall support the No Write Protect and Write Protect namespace write protection states and may support the Write Protect Until Power Cycle state and Permanent Write Protect namespace write protection states.

NVME_CTRL_NWPC_WRITE_PROTECT_POWER_CYCLE

If set, then the controller supports the Write Protect Until Power Cycle state.

NVME_CTRL_NWPC_WRITE_PROTECT_PERMANENT

If set, then the controller supports the Permanent Write Protect state.

enum nvme_id_ctrl_sgls

This field indicates if SGLs are supported for the NVM Command Set and the particular SGL types supported.

Constants

NVME_CTRL_SGLS_SUPPORTED

NVME_CTRL_SGLS_KEYED

NVME_CTRL_SGLS_BIT_BUCKET

NVME_CTRL_SGLS_MPTR_BYTE_ALIGNED

NVME_CTRL_SGLS_OVERSIZE

NVME_CTRL_SGLS_MPTR_SGL

NVME_CTRL_SGLS_OFFSET

NVME_CTRL_SGLS_TPORT

enum nvme_id_ctrl_fcatt

This field indicates attributes of the controller that are specific to NVMe over Fabrics.

Constants

NVME_CTRL_FCATT_DYNAMIC

If cleared, then the NVM subsystem uses a dynamic controller model. If set, then the NVM subsystem uses a static controller model.

enum nvme_id_ctrl_ofcs

Indicate whether the controller supports optional fabric commands.

Constants

NVME_CTRL_OFCS_DISCONNECT

If set, then the controller supports the Disconnect command and deletion of individual I/O Queues.

struct nvme_lbaf

LBA Format Data Structure

Definition

struct nvme_lbaf {
  __le16 ms;
  __u8 ds;
  __u8 rp;
};

Members

ms

Metadata Size indicates the number of metadata bytes provided per LBA based on the LBA Data Size indicated.

ds

LBA Data Size indicates the LBA data size supported, reported as a power of two.

rp

Relative Performance, see enum nvme_lbaf_rp.

enum nvme_lbaf_rp

This field indicates the relative performance of the LBA format indicated relative to other LBA formats supported by the controller.

Constants

NVME_LBAF_RP_BEST

Best performance

NVME_LBAF_RP_BETTER

Better performance

NVME_LBAF_RP_GOOD

Good performance

NVME_LBAF_RP_DEGRADED

Degraded performance

NVME_LBAF_RP_MASK

Mask to get the relative performance value from the field

struct nvme_id_ns

Identify Namespace data structure

Definition

struct nvme_id_ns {
  __le64 nsze;
  __le64 ncap;
  __le64 nuse;
  __u8 nsfeat;
  __u8 nlbaf;
  __u8 flbas;
  __u8 mc;
  __u8 dpc;
  __u8 dps;
  __u8 nmic;
  __u8 rescap;
  __u8 fpi;
  __u8 dlfeat;
  __le16 nawun;
  __le16 nawupf;
  __le16 nacwu;
  __le16 nabsn;
  __le16 nabo;
  __le16 nabspf;
  __le16 noiob;
  __u8 nvmcap[16];
  __le16 npwg;
  __le16 npwa;
  __le16 npdg;
  __le16 npda;
  __le16 nows;
  __le16 mssrl;
  __le32 mcl;
  __u8 msrc;
  __u8 rsvd81;
  __u8 nulbaf;
  __u8 rsvd83[9];
  __le32 anagrpid;
  __u8 rsvd96[3];
  __u8 nsattr;
  __le16 nvmsetid;
  __le16 endgid;
  __u8 nguid[16];
  __u8 eui64[8];
  struct nvme_lbaf        lbaf[64];
  __u8 vs[3712];
};

Members

nsze

Namespace Size indicates the total size of the namespace in logical blocks. The number of logical blocks is based on the formatted LBA size.

ncap

Namespace Capacity indicates the maximum number of logical blocks that may be allocated in the namespace at any point in time. The number of logical blocks is based on the formatted LBA size.

nuse

Namespace Utilization indicates the current number of logical blocks allocated in the namespace. This field is smaller than or equal to the Namespace Capacity. The number of logical blocks is based on the formatted LBA size.

nsfeat

Namespace Features, see enum nvme_id_nsfeat.

nlbaf

Number of LBA Formats defines the number of supported LBA data size and metadata size combinations supported by the namespace and the highest possible index to struct nvme_id_ns.lbaf.

flbas

Formatted LBA Size, see enum nvme_id_ns_flbas.

mc

Metadata Capabilities, see enum nvme_id_ns_mc.

dpc

End-to-end Data Protection Capabilities, see enum nvme_id_ns_dpc.

dps

End-to-end Data Protection Type Settings, see enum nvme_id_ns_dps.

nmic

Namespace Multi-path I/O and Namespace Sharing Capabilities, see enum nvme_id_ns_nmic.

rescap

Reservation Capabilities, see enum nvme_id_ns_rescap.

fpi

Format Progress Indicator, see enum nvme_nd_ns_fpi.

dlfeat

Deallocate Logical Block Features, see enum nvme_id_ns_dlfeat.

nawun

Namespace Atomic Write Unit Normal indicates the namespace specific size of the write operation guaranteed to be written atomically to the NVM during normal operation.

nawupf

Namespace Atomic Write Unit Power Fail indicates the namespace specific size of the write operation guaranteed to be written atomically to the NVM during a power fail or error condition.

nacwu

Namespace Atomic Compare & Write Unit indicates the namespace specific size of the write operation guaranteed to be written atomically to the NVM for a Compare and Write fused command.

nabsn

Namespace Atomic Boundary Size Normal indicates the atomic boundary size for this namespace for the NAWUN value. This field is specified in logical blocks.

nabo

Namespace Atomic Boundary Offset indicates the LBA on this namespace where the first atomic boundary starts.

nabspf

Namespace Atomic Boundary Size Power Fail indicates the atomic boundary size for this namespace specific to the Namespace Atomic Write Unit Power Fail value. This field is specified in logical blocks.

noiob

Namespace Optimal I/O Boundary indicates the optimal I/O boundary for this namespace. This field is specified in logical blocks. The host should construct Read and Write commands that do not cross the I/O boundary to achieve optimal performance.

nvmcap

NVM Capacity indicates the total size of the NVM allocated to this namespace. The value is in bytes.

npwg

Namespace Preferred Write Granularity indicates the smallest recommended write granularity in logical blocks for this namespace. This is a 0’s based value.

npwa

Namespace Preferred Write Alignment indicates the recommended write alignment in logical blocks for this namespace. This is a 0’s based value.

npdg

Namespace Preferred Deallocate Granularity indicates the recommended granularity in logical blocks for the Dataset Management command with the Attribute - Deallocate bit.

npda

Namespace Preferred Deallocate Alignment indicates the recommended alignment in logical blocks for the Dataset Management command with the Attribute - Deallocate bit

nows

Namespace Optimal Write Size indicates the size in logical blocks for optimal write performance for this namespace. This is a 0’s based value.

mssrl

Maximum Single Source Range Length indicates the maximum number of logical blocks that may be specified in each valid Source Range field of a Copy command.

mcl

Maximum Copy Length indicates the maximum number of logical blocks that may be specified in a Copy command.

msrc

Maximum Source Range Count indicates the maximum number of Source Range entries that may be used to specify source data in a Copy command. This is a 0’s based value.

rsvd81

Reserved

nulbaf

Number of Unique Capability LBA Formats defines the number of supported user data size and metadata size combinations supported by the namespace that may not share the same capabilities. LBA formats shall be allocated in order and packed sequentially.

rsvd83

Reserved

anagrpid

ANA Group Identifier indicates the ANA Group Identifier of the ANA group of which the namespace is a member.

rsvd96

Reserved

nsattr

Namespace Attributes, see enum nvme_id_ns_attr.

nvmsetid

NVM Set Identifier indicates the NVM Set with which this namespace is associated.

endgid

Endurance Group Identifier indicates the Endurance Group with which this namespace is associated.

nguid

Namespace Globally Unique Identifier contains a 128-bit value that is globally unique and assigned to the namespace when the namespace is created. This field remains fixed throughout the life of the namespace and is preserved across namespace and controller operations

eui64

IEEE Extended Unique Identifier contains a 64-bit IEEE Extended Unique Identifier (EUI-64) that is globally unique and assigned to the namespace when the namespace is created. This field remains fixed throughout the life of the namespace and is preserved across namespace and controller operations

lbaf

LBA Format, see struct nvme_lbaf.

vs

Vendor Specific

enum nvme_id_nsfeat

This field defines features of the namespace.

Constants

NVME_NS_FEAT_THIN

If set, indicates that the namespace supports thin provisioning. Specifically, the Namespace Capacity reported may be less than the Namespace Size.

NVME_NS_FEAT_NATOMIC

If set, indicates that the fields NAWUN, NAWUPF, and NACWU are defined for this namespace and should be used by the host for this namespace instead of the AWUN, AWUPF, and ACWU fields in the Identify Controller data structure.

NVME_NS_FEAT_DULBE

If set, indicates that the controller supports the Deallocated or Unwritten Logical Block error for this namespace.

NVME_NS_FEAT_ID_REUSE

If set, indicates that the value in the NGUID field for this namespace, if non- zero, is never reused by the controller and that the value in the EUI64 field for this namespace, if non-zero, is never reused by the controller.

NVME_NS_FEAT_IO_OPT

If set, indicates that the fields NPWG, NPWA, NPDG, NPDA, and NOWS are defined for this namespace and should be used by the host for I/O optimization

enum nvme_id_ns_flbas

This field indicates the LBA data size & metadata size combination that the namespace has been formatted with

Constants

NVME_NS_FLBAS_LOWER_MASK

Mask to get the index of one of the supported LBA Formats’s least significant 4bits indicated in struct nvme_id_ns.lbaf.

NVME_NS_FLBAS_META_EXT

Applicable only if format contains metadata. If this bit is set, indicates that the metadata is transferred at the end of the data LBA, creating an extended data LBA. If cleared, indicates that all of the metadata for a command is transferred as a separate contiguous buffer of data.

NVME_NS_FLBAS_HIGHER_MASK

Mask to get the index of one of the supported LBA Formats’s most significant 2bits indicated in struct nvme_id_ns.lbaf.

enum nvme_nvm_id_ns_elbaf

This field indicates the extended LBA format

Constants

NVME_NVM_ELBAF_STS_MASK

Mask to get the storage tag size used to determine the variable-sized storage tag/reference tag fields

NVME_NVM_ELBAF_PIF_MASK

Mask to get the protection information format for the extended LBA format.

enum nvme_id_ns_mc

This field indicates the capabilities for metadata.

Constants

NVME_NS_MC_EXTENDED

If set, indicates the namespace supports the metadata being transferred as part of a separate buffer that is specified in the Metadata Pointer.

NVME_NS_MC_SEPARATE

If set, indicates that the namespace supports the metadata being transferred as part of an extended data LBA.

enum nvme_id_ns_dpc

This field indicates the capabilities for the end-to-end data protection feature.

Constants

NVME_NS_DPC_PI_TYPE1

If set, indicates that the namespace supports Protection Information Type 1.

NVME_NS_DPC_PI_TYPE2

If set, indicates that the namespace supports Protection Information Type 2.

NVME_NS_DPC_PI_TYPE3

If set, indicates that the namespace supports Protection Information Type 3.

NVME_NS_DPC_PI_FIRST

If set, indicates that the namespace supports protection information transferred as the first eight bytes of metadata.

NVME_NS_DPC_PI_LAST

If set, indicates that the namespace supports protection information transferred as the last eight bytes of metadata.

enum nvme_id_ns_dps

This field indicates the Type settings for the end-to-end data protection feature.

Constants

NVME_NS_DPS_PI_NONE

Protection information is not enabled

NVME_NS_DPS_PI_TYPE1

Protection information is enabled, Type 1

NVME_NS_DPS_PI_TYPE2

Protection information is enabled, Type 2

NVME_NS_DPS_PI_TYPE3

Protection information is enabled, Type 3

NVME_NS_DPS_PI_MASK

Mask to get the value of the PI type

NVME_NS_DPS_PI_FIRST

If set, indicates that the protection information, if enabled, is transferred as the first eight bytes of metadata.

enum nvme_id_ns_nmic

This field specifies multi-path I/O and namespace sharing capabilities of the namespace.

Constants

NVME_NS_NMIC_SHARED

If set, then the namespace may be attached to two or more controllers in the NVM subsystem concurrently

enum nvme_id_ns_rescap

This field indicates the reservation capabilities of the namespace.

Constants

NVME_NS_RESCAP_PTPL

If set, indicates that the namespace supports the Persist Through Power Loss capability.

NVME_NS_RESCAP_WE

If set, indicates that the namespace supports the Write Exclusive reservation type.

NVME_NS_RESCAP_EA

If set, indicates that the namespace supports the Exclusive Access reservation type.

NVME_NS_RESCAP_WERO

If set, indicates that the namespace supports the Write Exclusive - Registrants Only reservation type.

NVME_NS_RESCAP_EARO

If set, indicates that the namespace supports the Exclusive Access - Registrants Only reservation type.

NVME_NS_RESCAP_WEAR

If set, indicates that the namespace supports the Write Exclusive - All Registrants reservation type.

NVME_NS_RESCAP_EAAR

If set, indicates that the namespace supports the Exclusive Access - All Registrants reservation type.

NVME_NS_RESCAP_IEK_13

If set, indicates that Ignore Existing Key is used as defined in revision 1.3 or later of this specification.

enum nvme_nd_ns_fpi

If a format operation is in progress, this field indicates the percentage of the namespace that remains to be formatted.

Constants

NVME_NS_FPI_REMAINING

Mask to get the format percent remaining value

NVME_NS_FPI_SUPPORTED

If set, indicates that the namespace supports the Format Progress Indicator defined for the field.

enum nvme_id_ns_dlfeat

This field indicates information about features that affect deallocating logical blocks for this namespace.

Constants

NVME_NS_DLFEAT_RB

Mask to get the value of the read behavior

NVME_NS_DLFEAT_RB_NR

Read behvaior is not reported

NVME_NS_DLFEAT_RB_ALL_0S

A deallocated logical block returns all bytes cleared to 0h.

NVME_NS_DLFEAT_RB_ALL_FS

A deallocated logical block returns all bytes set to FFh.

NVME_NS_DLFEAT_WRITE_ZEROES

If set, indicates that the controller supports the Deallocate bit in the Write Zeroes command for this namespace.

NVME_NS_DLFEAT_CRC_GUARD

If set, indicates that the Guard field for deallocated logical blocks that contain protection information is set to the CRC for the value read from the deallocated logical block and its metadata

enum nvme_id_ns_attr

Specifies attributes of the namespace.

Constants

NVME_NS_NSATTR_WRITE_PROTECTED

If set, then the namespace is currently write protected and all write access to the namespace shall fail.

struct nvme_ns_id_desc

Namespace identifier type descriptor

Definition

struct nvme_ns_id_desc {
  __u8 nidt;
  __u8 nidl;
  __le16 rsvd;
  __u8 nid[];
};

Members

nidt

Namespace Identifier Type, see enum nvme_ns_id_desc_nidt

nidl

Namespace Identifier Length contains the length in bytes of the struct nvme_id_ns.nid.

rsvd

Reserved

nid

Namespace Identifier contains a value that is globally unique and assigned to the namespace when the namespace is created. The length is defined in struct nvme_id_ns.nidl.

enum nvme_ns_id_desc_nidt

Known namespace identifier types

Constants

NVME_NIDT_EUI64

IEEE Extended Unique Identifier, the NID field contains a copy of the EUI64 field in the struct nvme_id_ns.eui64.

NVME_NIDT_NGUID

Namespace Globally Unique Identifier, the NID field contains a copy of the NGUID field in struct nvme_id_ns.nguid.

NVME_NIDT_UUID

The NID field contains a 128-bit Universally Unique Identifier (UUID) as specified in RFC 4122.

NVME_NIDT_CSI

The NID field contains the command set identifier.

struct nvme_nvmset_attr

NVM Set Attributes Entry

Definition

struct nvme_nvmset_attr {
  __le16 nvmsetid;
  __le16 endgid;
  __u8 rsvd4[4];
  __le32 rr4kt;
  __le32 ows;
  __u8 tnvmsetcap[16];
  __u8 unvmsetcap[16];
  __u8 rsvd48[80];
};

Members

nvmsetid

NVM Set Identifier

endgid

Endurance Group Identifier

rsvd4

Reserved

rr4kt

Random 4 KiB Read Typical indicates the typical time to complete a 4 KiB random read in 100 nanosecond units when the NVM Set is in a Predictable Latency Mode Deterministic Window and there is 1 outstanding command per NVM Set.

ows

Optimal Write Size

tnvmsetcap

Total NVM Set Capacity

unvmsetcap

Unallocated NVM Set Capacity

rsvd48

Reserved

struct nvme_id_nvmset_list

NVM set list

Definition

struct nvme_id_nvmset_list {
  __u8 nid;
  __u8 rsvd1[127];
  struct nvme_nvmset_attr ent[NVME_ID_NVMSET_LIST_MAX];
};

Members

nid

Nvmset id

rsvd1

Reserved

ent

nvmset id list

struct nvme_id_independent_id_ns

Identify - I/O Command Set Independent Identify Namespace Data Structure

Definition

struct nvme_id_independent_id_ns {
  __u8 nsfeat;
  __u8 nmic;
  __u8 rescap;
  __u8 fpi;
  __le32 anagrpid;
  __u8 nsattr;
  __u8 rsvd9;
  __le16 nvmsetid;
  __le16 endgid;
  __u8 nstat;
  __u8 rsvd15[4081];
};

Members

nsfeat

common namespace features

nmic

Namespace Multi-path I/O and Namespace Sharing Capabilities

rescap

Reservation Capabilities

fpi

Format Progress Indicator

anagrpid

ANA Group Identifier

nsattr

Namespace Attributes

rsvd9

reserved

nvmsetid

NVM Set Identifier

endgid

Endurance Group Identifier

nstat

Namespace Status

rsvd15

reserved

struct nvme_id_ns_granularity_desc

Namespace Granularity Descriptor

Definition

struct nvme_id_ns_granularity_desc {
  __le64 nszegran;
  __le64 ncapgran;
};

Members

nszegran

Namespace Size Granularity

ncapgran

Namespace Capacity Granularity

struct nvme_id_ns_granularity_list

Namespace Granularity List

Definition

struct nvme_id_ns_granularity_list {
  __le32 attributes;
  __u8 num_descriptors;
  __u8 rsvd5[27];
  struct nvme_id_ns_granularity_desc entry[NVME_ID_ND_DESCRIPTOR_MAX];
  __u8 rsvd288[3808];
};

Members

attributes

Namespace Granularity Attributes

num_descriptors

Number of Descriptors

rsvd5

reserved

entry

Namespace Granularity Descriptor

rsvd288

reserved

struct nvme_id_uuid_list_entry

UUID List Entry

Definition

struct nvme_id_uuid_list_entry {
  __u8 header;
  __u8 rsvd1[15];
  __u8 uuid[16];
};

Members

header

UUID Lists Entry Header

rsvd1

reserved

uuid

128-bit Universally Unique Identifier

enum nvme_id_uuid

Identifier Association

Constants

NVME_ID_UUID_HDR_ASSOCIATION_MASK

NVME_ID_UUID_ASSOCIATION_NONE

NVME_ID_UUID_ASSOCIATION_VENDOR

NVME_ID_UUID_ASSOCIATION_SUBSYSTEM_VENDOR

struct nvme_id_uuid_list

UUID list

Definition

struct nvme_id_uuid_list {
  __u8 rsvd0[32];
  struct nvme_id_uuid_list_entry entry[NVME_ID_UUID_LIST_MAX];
};

Members

rsvd0

reserved

entry

UUID list entry

struct nvme_ctrl_list

Controller List

Definition

struct nvme_ctrl_list {
  __le16 num;
  __le16 identifier[NVME_ID_CTRL_LIST_MAX];
};

Members

num

Number of Identifiers

identifier

NVM subsystem unique controller identifier

struct nvme_ns_list

Namespace List

Definition

struct nvme_ns_list {
  __le32 ns[NVME_ID_NS_LIST_MAX];
};

Members

ns

Namespace Identifier

struct nvme_id_ctrl_nvm

I/O Command Set Specific Identify Controller data structure

Definition

struct nvme_id_ctrl_nvm {
  __u8 vsl;
  __u8 wzsl;
  __u8 wusl;
  __u8 dmrl;
  __le32 dmrsl;
  __le64 dmsl;
  __u8 rsvd16[4080];
};

Members

vsl

Verify Size Limit

wzsl

Write Zeroes Size Limit

wusl

Write Uncorrectable Size Limit

dmrl

Dataset Management Ranges Limit

dmrsl

Dataset Management Range Size Limit

dmsl

Dataset Management Size Limit

rsvd16

reserved

struct nvme_nvm_id_ns

NVME Command Set I/O Command Set Specific Identify Namespace Data Structure

Definition

struct nvme_nvm_id_ns {
  __le64 lbstm;
  __u8 pic;
  __u8 rsvd9[3];
  __le32 elbaf[64];
  __u8 rsvd268[3828];
};

Members

lbstm

Logical Block Storage Tag Mask

pic

Protection Information Capabilities

rsvd9

Reserved

elbaf

List of Extended LBA Format Support

rsvd268

Reserved

struct nvme_zns_lbafe

LBA Format Extension Data Structure

Definition

struct nvme_zns_lbafe {
  __le64 zsze;
  __u8 zdes;
  __u8 rsvd9[7];
};

Members

zsze

Zone Size

zdes

Zone Descriptor Extension Size

rsvd9

reserved

struct nvme_zns_id_ns

Zoned Namespace Command Set Specific Identify Namespace Data Structure

Definition

struct nvme_zns_id_ns {
  __le16 zoc;
  __le16 ozcs;
  __le32 mar;
  __le32 mor;
  __le32 rrl;
  __le32 frl;
  __le32 rrl1;
  __le32 rrl2;
  __le32 rrl3;
  __le32 frl1;
  __le32 frl2;
  __le32 frl3;
  __le32 numzrwa;
  __le16 zrwafg;
  __le16 zrwasz;
  __u8 zrwacap;
  __u8 rsvd53[2763];
  struct nvme_zns_lbafe   lbafe[64];
  __u8 vs[256];
};

Members

zoc

Zone Operation Characteristics

ozcs

Optional Zoned Command Support

mar

Maximum Active Resources

mor

Maximum Open Resources

rrl

Reset Recommended Limit

frl

Finish Recommended Limit

rrl1

Reset Recommended Limit 1

rrl2

Reset Recommended Limit 2

rrl3

Reset Recommended Limit 3

frl1

Finish Recommended Limit 1

frl2

Finish Recommended Limit 2

frl3

Finish Recommended Limit 3

numzrwa

Number of ZRWA Resources

zrwafg

ZRWA Flush Granularity

zrwasz

ZRWA Size

zrwacap

ZRWA Capability

rsvd53

Reserved

lbafe

LBA Format Extension

vs

Vendor Specific

struct nvme_zns_id_ctrl

I/O Command Set Specific Identify Controller Data Structure for the Zoned Namespace Command Set

Definition

struct nvme_zns_id_ctrl {
  __u8 zasl;
  __u8 rsvd1[4095];
};

Members

zasl

Zone Append Size Limit

rsvd1

Reserved

struct nvme_primary_ctrl_cap

Identify - Controller Capabilities Structure

Definition

struct nvme_primary_ctrl_cap {
  __le16 cntlid;
  __le16 portid;
  __u8 crt;
  __u8 rsvd5[27];
  __le32 vqfrt;
  __le32 vqrfa;
  __le16 vqrfap;
  __le16 vqprt;
  __le16 vqfrsm;
  __le16 vqgran;
  __u8 rsvd48[16];
  __le32 vifrt;
  __le32 virfa;
  __le16 virfap;
  __le16 viprt;
  __le16 vifrsm;
  __le16 vigran;
  __u8 rsvd80[4016];
};

Members

cntlid

Controller Identifier

portid

Port Identifier

crt

Controller Resource Types

rsvd5

reserved

vqfrt

VQ Resources Flexible Total

vqrfa

VQ Resources Flexible Assigned

vqrfap

VQ Resources Flexible Allocated to Primary

vqprt

VQ Resources Private Total

vqfrsm

VQ Resources Flexible Secondary Maximum

vqgran

VQ Flexible Resource Preferred Granularity

rsvd48

reserved

vifrt

VI Resources Flexible Total

virfa

VI Resources Flexible Assigned

virfap

VI Resources Flexible Allocated to Primary

viprt

VI Resources Private Total

vifrsm

VI Resources Flexible Secondary Maximum

vigran

VI Flexible Resource Preferred Granularity

rsvd80

reserved

struct nvme_secondary_ctrl

Secondary Controller Entry

Definition

struct nvme_secondary_ctrl {
  __le16 scid;
  __le16 pcid;
  __u8 scs;
  __u8 rsvd5[3];
  __le16 vfn;
  __le16 nvq;
  __le16 nvi;
  __u8 rsvd14[18];
};

Members

scid

Secondary Controller Identifier

pcid

Primary Controller Identifier

scs

Secondary Controller State

rsvd5

Reserved

vfn

Virtual Function Number

nvq

Number of VQ Flexible Resources Assigned

nvi

Number of VI Flexible Resources Assigned

rsvd14

Reserved

struct nvme_secondary_ctrl_list

Secondary Controller List

Definition

struct nvme_secondary_ctrl_list {
  __u8 num;
  __u8 rsvd[31];
  struct nvme_secondary_ctrl sc_entry[NVME_ID_SECONDARY_CTRL_MAX];
};

Members

num

Number of Identifiers

rsvd

Reserved

sc_entry

Secondary Controller Entry

struct nvme_id_iocs

NVMe Identify IO Command Set data structure

Definition

struct nvme_id_iocs {
  __le64 iocsc[512];
};

Members

iocsc

List of supported IO Command Set Combination vectors

struct nvme_id_domain_attr

Domain Attributes Entry

Definition

struct nvme_id_domain_attr {
  __le16 dom_id;
  __u8 rsvd2[14];
  __u8 dom_cap[16];
  __u8 unalloc_dom_cap[16];
  __u8 max_egrp_dom_cap[16];
  __u8 rsvd64[64];
};

Members

dom_id

Domain Identifier

rsvd2

Reserved

dom_cap

Total Domain Capacity

unalloc_dom_cap

Unallocated Domain Capacity

max_egrp_dom_cap

Max Endurance Group Domain Capacity

rsvd64

Reserved

struct nvme_id_domain_list

Domain List

Definition

struct nvme_id_domain_list {
  __u8 num;
  __u8 rsvd[127];
  struct nvme_id_domain_attr domain_attr[NVME_ID_DOMAIN_LIST_MAX];
};

Members

num

Number of domain attributes

rsvd

Reserved

domain_attr

List of domain attributes

struct nvme_id_endurance_group_list

Endurance Group List

Definition

struct nvme_id_endurance_group_list {
  __le16 num;
  __le16 identifier[NVME_ID_ENDURANCE_GROUP_LIST_MAX];
};

Members

num

Number of Identifiers

identifier

Endurance Group Identifier

struct nvme_supported_log_pages

Supported Log Pages - Log

Definition

struct nvme_supported_log_pages {
  __le32 lid_support[NVME_LOG_SUPPORTED_LOG_PAGES_MAX];
};

Members

lid_support

Log Page Identifier Supported

Description

Supported Log Pages (Log Identifier 00h)

struct nvme_error_log_page

Error Information Log Entry (Log Identifier 01h)

Definition

struct nvme_error_log_page {
  __le64 error_count;
  __le16 sqid;
  __le16 cmdid;
  __le16 status_field;
  __le16 parm_error_location;
  __le64 lba;
  __le32 nsid;
  __u8 vs;
  __u8 trtype;
  __u8 csi;
  __u8 opcode;
  __le64 cs;
  __le16 trtype_spec_info;
  __u8 rsvd[21];
  __u8 log_page_version;
};

Members

error_count

Error Count: a 64-bit incrementing error count, indicating a unique identifier for this error. The error count starts at 1h, is incremented for each unique error log entry, and is retained across power off conditions. A value of 0h indicates an invalid entry; this value is used when there are lost entries or when there are fewer errors than the maximum number of entries the controller supports. If the value of this field is FFFFFFFFh, then the field shall be set to 1h when incremented (i.e., rolls over to 1h). Prior to NVMe 1.4, processing of incrementing beyond FFFFFFFFh is unspecified.

sqid

Submission Queue ID: indicates the Submission Queue Identifier of the command that the error information is associated with. If the error is not specific to a particular command, then this field shall be set to FFFFh.

cmdid

Command ID: indicates the Command Identifier of the command that the error is associated with. If the error is not specific to a particular command, then this field shall be set to FFFFh.

status_field

Bits 15-1: Status Field: indicates the Status Field for the command that completed. If the error is not specific to a particular command, then this field reports the most applicable status value. Bit 0: Phase Tag: may indicate the Phase Tag posted for the command.

parm_error_location

Parameter Error Location: indicates the byte and bit of the command parameter that the error is associated with, if applicable. If the parameter spans multiple bytes or bits, then the location indicates the first byte and bit of the parameter. Bits 10-8: Bit in command that contained the error. Valid values are 0 to 7. Bits 7-0: Byte in command that contained the error. Valid values are 0 to 63.

lba

LBA: This field indicates the first LBA that experienced the error condition, if applicable.

nsid

Namespace: This field indicates the NSID of the namespace that the error is associated with, if applicable.

vs

Vendor Specific Information Available: If there is additional vendor specific error information available, this field provides the log page identifier associated with that page. A value of 0h indicates that no additional information is available. Valid values are in the range of 80h to FFh.

trtype

Transport Type (TRTYPE): indicates the Transport Type of the transport associated with the error. The values in this field are the same as the TRTYPE values in the Discovery Log Page Entry. If the error is not transport related, this field shall be cleared to 0h. If the error is transport related, this field shall be set to the type of the transport - see enum nvme_trtype.

csi

Command Set Indicator: This field contains command set indicator for the command that the error is associated with.

opcode

Opcode: This field contains opcode for the command that the error is associated with.

cs

Command Specific Information: This field contains command specific information. If used, the command definition specifies the information returned.

trtype_spec_info

Transport Type Specific Information

rsvd

Reserved: [62:42]

log_page_version

This field shall be set to 1h. If set, csi and opcode will have valid values.

struct nvme_smart_log

SMART / Health Information Log (Log Identifier 02h)

Definition

struct nvme_smart_log {
  __u8 critical_warning;
  __u8 temperature[2];
  __u8 avail_spare;
  __u8 spare_thresh;
  __u8 percent_used;
  __u8 endu_grp_crit_warn_sumry;
  __u8 rsvd7[25];
  __u8 data_units_read[16];
  __u8 data_units_written[16];
  __u8 host_reads[16];
  __u8 host_writes[16];
  __u8 ctrl_busy_time[16];
  __u8 power_cycles[16];
  __u8 power_on_hours[16];
  __u8 unsafe_shutdowns[16];
  __u8 media_errors[16];
  __u8 num_err_log_entries[16];
  __le32 warning_temp_time;
  __le32 critical_comp_time;
  __le16 temp_sensor[8];
  __le32 thm_temp1_trans_count;
  __le32 thm_temp2_trans_count;
  __le32 thm_temp1_total_time;
  __le32 thm_temp2_total_time;
  __u8 rsvd232[280];
};

Members

critical_warning

This field indicates critical warnings for the state of the controller. Critical warnings may result in an asynchronous event notification to the host. Bits in this field represent the current associated state and are not persistent (see enum nvme_smart_crit).

temperature

Composite Temperature: Contains a value corresponding to a temperature in Kelvins that represents the current composite temperature of the controller and namespace(s) associated with that controller. The manner in which this value is computed is implementation specific and may not represent the actual temperature of any physical point in the NVM subsystem. Warning and critical overheating composite temperature threshold values are reported by the WCTEMP and CCTEMP fields in the Identify Controller data structure.

avail_spare

Available Spare: Contains a normalized percentage (0% to 100%) of the remaining spare capacity available.

spare_thresh

Available Spare Threshold: When the Available Spare falls below the threshold indicated in this field, an asynchronous event completion may occur. The value is indicated as a normalized percentage (0% to 100%). The values 101 to 255 are reserved.

percent_used

Percentage Used: Contains a vendor specific estimate of the percentage of NVM subsystem life used based on the actual usage and the manufacturer’s prediction of NVM life. A value of 100 indicates that the estimated endurance of the NVM in the NVM subsystem has been consumed, but may not indicate an NVM subsystem failure. The value is allowed to exceed 100. Percentages greater than 254 shall be represented as 255. This value shall be updated once per power-on hour (when the controller is not in a sleep state).

endu_grp_crit_warn_sumry

Endurance Group Critical Warning Summary: This field indicates critical warnings for the state of Endurance Groups. Bits in this field represent the current associated state and are not persistent (see enum nvme_smart_egcw).

rsvd7

Reserved

data_units_read

Data Units Read: Contains the number of 512 byte data units the host has read from the controller; this value does not include metadata. This value is reported in thousands (i.e., a value of 1 corresponds to 1000 units of 512 bytes read) and is rounded up (e.g., one indicates the that number of 512 byte data units read is from 1 to 1000, three indicates that the number of 512 byte data units read is from 2001 to 3000). When the LBA size is a value other than 512 bytes, the controller shall convert the amount of data read to 512 byte units. For the NVM command set, logical blocks read as part of Compare, Read, and Verify operations shall be included in this value. A value of 0h in this field indicates that the number of Data Units Read is not reported.

data_units_written

Data Units Written: Contains the number of 512 byte data units the host has written to the controller; this value does not include metadata. This value is reported in thousands (i.e., a value of 1 corresponds to 1000 units of 512 bytes written) and is rounded up (e.g., one indicates that the number of 512 byte data units written is from 1 to 1,000, three indicates that the number of 512 byte data units written is from 2001 to 3000). When the LBA size is a value other than 512 bytes, the controller shall convert the amount of data written to 512 byte units. For the NVM command set, logical blocks written as part of Write operations shall be included in this value. Write Uncorrectable commands and Write Zeroes commands shall not impact this value. A value of 0h in this field indicates that the number of Data Units Written is not reported.

host_reads

Host Read Commands: Contains the number of read commands completed by the controller. For the NVM command set, this value is the sum of the number of Compare commands and the number of Read commands.

host_writes

Host Write Commands: Contains the number of write commands completed by the controller. For the NVM command set, this is the number of Write commands.

ctrl_busy_time

Controller Busy Time: Contains the amount of time the controller is busy with I/O commands. The controller is busy when there is a command outstanding to an I/O Queue (specifically, a command was issued via an I/O Submission Queue Tail doorbell write and the corresponding completion queue entry has not been posted yet to the associated I/O Completion Queue). This value is reported in minutes.

power_cycles

Power Cycles: Contains the number of power cycles.

power_on_hours

Power On Hours: Contains the number of power-on hours. This may not include time that the controller was powered and in a non-operational power state.

unsafe_shutdowns

Unsafe Shutdowns: Contains the number of unsafe shutdowns. This count is incremented when a Shutdown Notification (CC.SHN) is not received prior to loss of power.

media_errors

Media and Data Integrity Errors: Contains the number of occurrences where the controller detected an unrecovered data integrity error. Errors such as uncorrectable ECC, CRC checksum failure, or LBA tag mismatch are included in this field. Errors introduced as a result of a Write Uncorrectable command may or may not be included in this field.

num_err_log_entries

Number of Error Information Log Entries: Contains the number of Error Information log entries over the life of the controller.

warning_temp_time

Warning Composite Temperature Time: Contains the amount of time in minutes that the controller is operational and the Composite Temperature is greater than or equal to the Warning Composite Temperature Threshold (WCTEMP) field and less than the Critical Composite Temperature Threshold (CCTEMP) field in the Identify Controller data structure. If the value of the WCTEMP or CCTEMP field is 0h, then this field is always cleared to 0h regardless of the Composite Temperature value.

critical_comp_time

Critical Composite Temperature Time: Contains the amount of time in minutes that the controller is operational and the Composite Temperature is greater than or equal to the Critical Composite Temperature Threshold (CCTEMP) field in the Identify Controller data structure. If the value of the CCTEMP field is 0h, then this field is always cleared to 0h regardless of the Composite Temperature value.

temp_sensor

Temperature Sensor 1-8: Contains the current temperature in degrees Kelvin reported by temperature sensors 1-8. The physical point in the NVM subsystem whose temperature is reported by the temperature sensor and the temperature accuracy is implementation specific. An implementation that does not implement the temperature sensor reports a value of 0h.

thm_temp1_trans_count

Thermal Management Temperature 1 Transition Count: Contains the number of times the controller transitioned to lower power active power states or performed vendor specific thermal management actions while minimizing the impact on performance in order to attempt to reduce the Composite Temperature because of the host controlled thermal management feature (i.e., the Composite Temperature rose above the Thermal Management Temperature 1). This counter shall not wrap once the value FFFFFFFFh is reached. A value of 0h, indicates that this transition has never occurred or this field is not implemented.

thm_temp2_trans_count

Thermal Management Temperature 2 Transition Count

thm_temp1_total_time

Total Time For Thermal Management Temperature 1: Contains the number of seconds that the controller had transitioned to lower power active power states or performed vendor specific thermal management actions while minimizing the impact on performance in order to attempt to reduce the Composite Temperature because of the host controlled thermal management feature. This counter shall not wrap once the value FFFFFFFFh is reached. A value of 0h, indicates that this transition has never occurred or this field is not implemented.

thm_temp2_total_time

Total Time For Thermal Management Temperature 2

rsvd232

Reserved

enum nvme_smart_crit

Critical Warning

Constants

NVME_SMART_CRIT_SPARE

If set, then the available spare capacity has fallen below the threshold.

NVME_SMART_CRIT_TEMPERATURE

If set, then a temperature is either greater than or equal to an over temperature threshold; or less than or equal to an under temperature threshold.

NVME_SMART_CRIT_DEGRADED

If set, then the NVM subsystem reliability has been degraded due to significant media related errors or any internal error that degrades NVM subsystem reliability.

NVME_SMART_CRIT_MEDIA

If set, then all of the media has been placed in read only mode. The controller shall not set this bit if the read-only condition on the media is a result of a change in the write protection state of a namespace.

NVME_SMART_CRIT_VOLATILE_MEMORY

If set, then the volatile memory backup device has failed. This field is only valid if the controller has a volatile memory backup solution.

NVME_SMART_CRIT_PMR_RO

If set, then the Persistent Memory Region has become read-only or unreliable.

enum nvme_smart_egcw

Endurance Group Critical Warning Summary

Constants

NVME_SMART_EGCW_SPARE

If set, then the available spare capacity of one or more Endurance Groups has fallen below the threshold.

NVME_SMART_EGCW_DEGRADED

If set, then the reliability of one or more Endurance Groups has been degraded due to significant media related errors or any internal error that degrades NVM subsystem reliability.

NVME_SMART_EGCW_RO

If set, then the namespaces in one or more Endurance Groups have been placed in read only mode not as a result of a change in the write protection state of a namespace.

struct nvme_firmware_slot

Firmware Slot Information Log

Definition

struct nvme_firmware_slot {
  __u8 afi;
  __u8 rsvd1[7];
  char frs[7][8];
  __u8 rsvd2[448];
};

Members

afi

Active Firmware Info

rsvd1

Reserved

frs

Firmware Revision for Slot

rsvd2

Reserved

struct nvme_cmd_effects_log

Commands Supported and Effects Log

Definition

struct nvme_cmd_effects_log {
  __le32 acs[256];
  __le32 iocs[256];
  __u8 rsvd[2048];
};

Members

acs

Admin Command Supported

iocs

I/O Command Supported

rsvd

Reserved

enum nvme_cmd_effects

Commands Supported and Effects

Constants

NVME_CMD_EFFECTS_CSUPP

Command Supported

NVME_CMD_EFFECTS_LBCC

Logical Block Content Change

NVME_CMD_EFFECTS_NCC

Namespace Capability Change

NVME_CMD_EFFECTS_NIC

Namespace Inventory Change

NVME_CMD_EFFECTS_CCC

Controller Capability Change

NVME_CMD_EFFECTS_CSE_MASK

Command Submission and Execution

NVME_CMD_EFFECTS_UUID_SEL

UUID Selection Supported

struct nvme_st_result

Self-test Result

Definition

struct nvme_st_result {
  __u8 dsts;
  __u8 seg;
  __u8 vdi;
  __u8 rsvd;
  __le64 poh;
  __le32 nsid;
  __le64 flba;
  __u8 sct;
  __u8 sc;
  __u8 vs[2];
};

Members

dsts

Device Self-test Status: Indicates the device self-test code and the status of the operation (see enum nvme_status_result and enum nvme_st_code).

seg

Segment Number: Iindicates the segment number where the first self-test failure occurred. If Device Self-test Status (dsts) is not set to #NVME_ST_RESULT_KNOWN_SEG_FAIL, then this field should be ignored.

vdi

Valid Diagnostic Information: Indicates the diagnostic failure information that is reported. See enum nvme_st_valid_diag_info.

rsvd

Reserved

poh

Power On Hours (POH): Indicates the number of power-on hours at the time the device self-test operation was completed or aborted. This does not include time that the controller was powered and in a low power state condition.

nsid

Namespace Identifier (NSID): Indicates the namespace that the Failing LBA occurred on. Valid only when the NSID Valid bit (#NVME_ST_VALID_DIAG_INFO_NSID) is set in the Valid Diagnostic Information (vdi) field.

flba

Failing LBA: indicates the LBA of the logical block that caused the test to fail. If the device encountered more than one failed logical block during the test, then this field only indicates one of those failed logical blocks. Valid only when the NSID Valid bit (#NVME_ST_VALID_DIAG_INFO_FLBA) is set in the Valid Diagnostic Information (vdi) field.

sct

Status Code Type: This field may contain additional information related to errors or conditions. Bits 2:0 may contain additional information relating to errors or conditions that occurred during the device self-test operation represented in the same format used in the Status Code Type field of the completion queue entry (refer to enum nvme_status_field). Valid only when the NSID Valid bit (#NVME_ST_VALID_DIAG_INFO_SCT) is set in the Valid Diagnostic Information (vdi) field.

sc

Status Code: This field may contain additional information relating to errors or conditions that occurred during the device self-test operation represented in the same format used in the Status Code field of the completion queue entry. Valid only when the SCT Valid bit (#NVME_ST_VALID_DIAG_INFO_SC) is set in the Valid Diagnostic Information (vdi) field.

vs

Vendor Specific.

enum nvme_status_result

Result of the device self-test operation

Constants

NVME_ST_RESULT_NO_ERR

Operation completed without error.

NVME_ST_RESULT_ABORTED

Operation was aborted by a Device Self-test command.

NVME_ST_RESULT_CLR

Operation was aborted by a Controller Level Reset.

NVME_ST_RESULT_NS_REMOVED

Operation was aborted due to a removal of a namespace from the namespace inventory.

NVME_ST_RESULT_ABORTED_FORMAT

Operation was aborted due to the processing of a Format NVM command.

NVME_ST_RESULT_FATAL_ERR

A fatal error or unknown test error occurred while the controller was executing the device self-test operation and the operation did not complete.

NVME_ST_RESULT_UNKNOWN_SEG_FAIL

Operation completed with a segment that failed and the segment that failed is not known.

NVME_ST_RESULT_KNOWN_SEG_FAIL

Operation completed with one or more failed segments and the first segment that failed is indicated in the Segment Number field.

NVME_ST_RESULT_ABORTED_UNKNOWN

Operation was aborted for unknown reason.

NVME_ST_RESULT_ABORTED_SANITIZE

Operation was aborted due to a sanitize operation.

NVME_ST_RESULT_NOT_USED

Entry not used (does not contain a test result).

NVME_ST_RESULT_MASK

Mask to get the status result value from the struct nvme_st_result.dsts field.

enum nvme_st_code

Self-test Code value

Constants

NVME_ST_CODE_RESERVED

Reserved.

NVME_ST_CODE_SHORT

Short device self-test operation.

NVME_ST_CODE_EXTENDED

Extended device self-test operation.

NVME_ST_CODE_VS

Vendor specific.

NVME_ST_CODE_ABORT

Abort device self-test operation.

NVME_ST_CODE_SHIFT

Shift amount to get the code value from the struct nvme_st_result.dsts field.

enum nvme_st_curr_op

Current Device Self-Test Operation

Constants

NVME_ST_CURR_OP_NOT_RUNNING

No device self-test operation in progress.

NVME_ST_CURR_OP_SHORT

Short device self-test operation in progress.

NVME_ST_CURR_OP_EXTENDED

Extended device self-test operation in progress.

NVME_ST_CURR_OP_VS

Vendor specific.

NVME_ST_CURR_OP_RESERVED

Reserved.

NVME_ST_CURR_OP_MASK

Mask to get the current operation value from the struct nvme_self_test_log.current_operation field.

NVME_ST_CURR_OP_CMPL_MASK

Mask to get the current operation completion value from the struct nvme_self_test_log.completion field.

enum nvme_st_valid_diag_info

Valid Diagnostic Information

Constants

NVME_ST_VALID_DIAG_INFO_NSID

NSID Valid: if set, then the contents of the Namespace Identifier field are valid.

NVME_ST_VALID_DIAG_INFO_FLBA

FLBA Valid: if set, then the contents of the Failing LBA field are valid.

NVME_ST_VALID_DIAG_INFO_SCT

SCT Valid: if set, then the contents of the Status Code Type field are valid.

NVME_ST_VALID_DIAG_INFO_SC

SC Valid: if set, then the contents of the Status Code field are valid.

struct nvme_self_test_log

Device Self-test (Log Identifier 06h)

Definition

struct nvme_self_test_log {
  __u8 current_operation;
  __u8 completion;
  __u8 rsvd[2];
  struct nvme_st_result   result[NVME_LOG_ST_MAX_RESULTS];
};

Members

current_operation

Current Device Self-Test Operation: indicates the status of the current device self-test operation. If a device self-test operation is in process (i.e., this field is set to #NVME_ST_CURR_OP_SHORT or #NVME_ST_CURR_OP_EXTENDED), then the controller shall not set this field to #NVME_ST_CURR_OP_NOT_RUNNING until a new Self-test Result Data Structure is created (i.e., if a device self-test operation completes or is aborted, then the controller shall create a Self-test Result Data Structure prior to setting this field to #NVME_ST_CURR_OP_NOT_RUNNING). See enum nvme_st_curr_op.

completion

Current Device Self-Test Completion: indicates the percentage of the device self-test operation that is complete (e.g., a value of 25 indicates that 25% of the device self-test operation is complete and 75% remains to be tested). If the current_operation field is cleared to #NVME_ST_CURR_OP_NOT_RUNNING (indicating there is no device self-test operation in progress), then this field is ignored.

rsvd

Reserved

result

Self-test Result Data Structures, see struct nvme_st_result.

enum nvme_cmd_get_log_telemetry_host_lsp

Telemetry Host-Initiated log specific field

Constants

NVME_LOG_TELEM_HOST_LSP_RETAIN

Get Telemetry Data Blocks

NVME_LOG_TELEM_HOST_LSP_CREATE

Create Telemetry Data Blocks

struct nvme_telemetry_log

Retrieve internal data specific to the manufacturer.

Definition

struct nvme_telemetry_log {
  __u8 lpi;
  __u8 rsvd1[4];
  __u8 ieee[3];
  __le16 dalb1;
  __le16 dalb2;
  __le16 dalb3;
  __u8 rsvd14[2];
  __le32 dalb4;
  __u8 rsvd20[361];
  __u8 hostdgn;
  __u8 ctrlavail;
  __u8 ctrldgn;
  __u8 rsnident[128];
  __u8 data_area[];
};

Members

lpi

Log Identifier, either NVME_LOG_LID_TELEMETRY_HOST or NVME_LOG_LID_TELEMETRY_CTRL

rsvd1

Reserved

ieee

IEEE OUI Identifier is the Organization Unique Identifier (OUI) for the controller vendor that is able to interpret the data.

dalb1

Telemetry Controller-Initiated Data Area 1 Last Block is the value of the last block in this area.

dalb2

Telemetry Controller-Initiated Data Area 1 Last Block is the value of the last block in this area.

dalb3

Telemetry Controller-Initiated Data Area 1 Last Block is the value of the last block in this area.

rsvd14

Reserved

dalb4

Telemetry Controller-Initiated Data Area 4 Last Block is the value of the last block in this area.

rsvd20

Reserved

hostdgn

Telemetry Host-Initiated Data Generation Number is a value that is incremented each time the host initiates a capture of its internal controller state in the controller .

ctrlavail

Telemetry Controller-Initiated Data Available, if cleared, then the controller telemetry log does not contain saved internal controller state. If this field is set to 1h, the controller log contains saved internal controller state. If this field is set to 1h, the data will be latched until the host releases it by reading the log with RAE cleared.

ctrldgn

Telemetry Controller-Initiated Data Generation Number is a value that is incremented each time the controller initiates a capture of its internal controller state in the controller .

rsnident

Reason Identifiers a vendor specific identifier that describes the operating conditions of the controller at the time of capture.

data_area

Telemetry data blocks, vendor specific information data.

Description

This log consists of a header describing the log and zero or more Telemetry Data Blocks. All Telemetry Data Blocks are NVME_LOG_TELEM_BLOCK_SIZE, 512 bytes, in size. This log captures the controller’s internal state.

struct nvme_endurance_group_log

Endurance Group Information Log

Definition

struct nvme_endurance_group_log {
  __u8 critical_warning;
  __u8 endurance_group_features;
  __u8 rsvd2;
  __u8 avl_spare;
  __u8 avl_spare_threshold;
  __u8 percent_used;
  __le16 domain_identifier;
  __u8 rsvd8[24];
  __u8 endurance_estimate[16];
  __u8 data_units_read[16];
  __u8 data_units_written[16];
  __u8 media_units_written[16];
  __u8 host_read_cmds[16];
  __u8 host_write_cmds[16];
  __u8 media_data_integrity_err[16];
  __u8 num_err_info_log_entries[16];
  __u8 total_end_grp_cap[16];
  __u8 unalloc_end_grp_cap[16];
  __u8 rsvd192[320];
};

Members

critical_warning

Critical Warning

endurance_group_features

Endurance Group Features

rsvd2

Reserved

avl_spare

Available Spare

avl_spare_threshold

Available Spare Threshold

percent_used

Percentage Used

domain_identifier

Domain Identifier

rsvd8

Reserved

endurance_estimate

Endurance Estimate

data_units_read

Data Units Read

data_units_written

Data Units Written

media_units_written

Media Units Written

host_read_cmds

Host Read Commands

host_write_cmds

Host Write Commands

media_data_integrity_err

Media and Data Integrity Errors

num_err_info_log_entries

Number of Error Information Log Entries

total_end_grp_cap

Total Endurance Group Capacity

unalloc_end_grp_cap

Unallocated Endurance Group Capacity

rsvd192

Reserved

enum nvme_eg_critical_warning_flags

Endurance Group Information Log - Critical Warning

Constants

NVME_EG_CRITICAL_WARNING_SPARE

Available spare capacity of the Endurance Group has fallen below the threshold

NVME_EG_CRITICAL_WARNING_DEGRADED

Endurance Group reliability has been degraded

NVME_EG_CRITICAL_WARNING_READ_ONLY

Endurance Group have been placed in read only mode

struct nvme_aggregate_endurance_group_event

Endurance Group Event Aggregate

Definition

struct nvme_aggregate_endurance_group_event {
  __le64 num_entries;
  __le16 entries[];
};

Members

num_entries

Number or entries

entries

List of entries

struct nvme_nvmset_predictable_lat_log

Predictable Latency Mode - Deterministic Threshold Configuration Data

Definition

struct nvme_nvmset_predictable_lat_log {
  __u8 status;
  __u8 rsvd1;
  __le16 event_type;
  __u8 rsvd4[28];
  __le64 dtwin_rt;
  __le64 dtwin_wt;
  __le64 dtwin_tmax;
  __le64 ndwin_tmin_hi;
  __le64 ndwin_tmin_lo;
  __u8 rsvd72[56];
  __le64 dtwin_re;
  __le64 dtwin_we;
  __le64 dtwin_te;
  __u8 rsvd152[360];
};

Members

status

Status

rsvd1

Reserved

event_type

Event Type

rsvd4

Reserved

dtwin_rt

DTWIN Reads Typical

dtwin_wt

DTWIN Writes Typical

dtwin_tmax

DTWIN Time Maximum

ndwin_tmin_hi

NDWIN Time Minimum High

ndwin_tmin_lo

NDWIN Time Minimum Low

rsvd72

Reserved

dtwin_re

DTWIN Reads Estimate

dtwin_we

DTWIN Writes Estimate

dtwin_te

DTWIN Time Estimate

rsvd152

Reserved

enum nvme_nvmeset_pl_status

Predictable Latency Per NVM Set Log - Status

Constants

NVME_NVMSET_PL_STATUS_DISABLED

Not used (Predictable Latency Mode not enabled)

NVME_NVMSET_PL_STATUS_DTWIN

Deterministic Window (DTWIN)

NVME_NVMSET_PL_STATUS_NDWIN

Non-Deterministic Window (NDWIN)

enum nvme_nvmset_pl_events

Predictable Latency Per NVM Set Log - Event Type

Constants

NVME_NVMSET_PL_EVENT_DTWIN_READ_WARN

DTWIN Reads Warning

NVME_NVMSET_PL_EVENT_DTWIN_WRITE_WARN

DTWIN Writes Warning

NVME_NVMSET_PL_EVENT_DTWIN_TIME_WARN

DTWIN Time Warning

NVME_NVMSET_PL_EVENT_DTWIN_EXCEEDED

Autonomous transition from DTWIN to NDWIN due to typical or maximum value exceeded

NVME_NVMSET_PL_EVENT_DTWIN_EXCURSION

Autonomous transition from DTWIN to NDWIN due to Deterministic Excursion

struct nvme_aggregate_predictable_lat_event

Predictable Latency Event Aggregate Log Page

Definition

struct nvme_aggregate_predictable_lat_event {
  __le64 num_entries;
  __le16 entries[];
};

Members

num_entries

Number of entries

entries

Entry list

struct nvme_ana_group_desc

ANA Group Descriptor

Definition

struct nvme_ana_group_desc {
  __le32 grpid;
  __le32 nnsids;
  __le64 chgcnt;
  __u8 state;
  __u8 rsvd17[15];
  __le32 nsids[];
};

Members

grpid

ANA group id

nnsids

Number of namespaces in nsids

chgcnt

Change counter

state

ANA state

rsvd17

Reserved

nsids

List of namespaces

enum nvme_ana_state

ANA Group Descriptor - Asymmetric Namespace Access State

Constants

NVME_ANA_STATE_OPTIMIZED

ANA Optimized state

NVME_ANA_STATE_NONOPTIMIZED

ANA Non-Optimized state

NVME_ANA_STATE_INACCESSIBLE

ANA Inaccessible state

NVME_ANA_STATE_PERSISTENT_LOSS

ANA Persistent Loss state

NVME_ANA_STATE_CHANGE

ANA Change state

struct nvme_ana_log

Asymmetric Namespace Access Log

Definition

struct nvme_ana_log {
  __le64 chgcnt;
  __le16 ngrps;
  __u8 rsvd10[6];
  struct nvme_ana_group_desc descs[];
};

Members

chgcnt

Change Count

ngrps

Number of ANA Group Descriptors

rsvd10

Reserved

descs

ANA Group Descriptor

struct nvme_persistent_event_log

Persistent Event Log

Definition

struct nvme_persistent_event_log {
  __u8 lid;
  __u8 rsvd1[3];
  __le32 tnev;
  __le64 tll;
  __u8 rv;
  __u8 rsvd17;
  __le16 lhl;
  __le64 ts;
  __u8 poh[16];
  __le64 pcc;
  __le16 vid;
  __le16 ssvid;
  char sn[20];
  char mn[40];
  char subnqn[NVME_NQN_LENGTH];
  __le16 gen_number;
  __le32 rci;
  __u8 rsvd378[102];
  __u8 seb[32];
};

Members

lid

Log Identifier

rsvd1

Reserved

tnev

Total Number of Events

tll

Total Log Length

rv

Log Revision

rsvd17

Reserved

lhl

Log Header Length

ts

Timestamp

poh

Power on Hours

pcc

Power Cycle Count

vid

PCI Vendor ID

ssvid

PCI Subsystem Vendor ID

sn

Serial Number

mn

Model Number

subnqn

NVM Subsystem NVMe Qualified Name

gen_number

Generation Number

rci

Reporting Context Information

rsvd378

Reserved

seb

Supported Events Bitmap

enum nvme_pel_rci

This field indicates the persistent event log reporting context

Constants

NVME_PEL_RCI_RCPID_SHIFT

Shift amount to get the reporting context port identifier from the struct nvme_persistent_event_log.rci field.

NVME_PEL_RCI_RCPIT_SHIFT

Shift amount to get the reporting context port identifier type from the struct nvme_persistent_event_log.rci field.

NVME_PEL_RCI_RCE_SHIFT

Shift amount to get the reporting context exists from the struct nvme_persistent_event_log.rci field.

NVME_PEL_RCI_RSVD_SHIFT

Shift amount to get the reserved reporting context from the struct nvme_persistent_event_log.rci field.

NVME_PEL_RCI_RCPID_MASK

Mask to get the reporting context port identifier from the struct nvme_persistent_event_log.rci field.

NVME_PEL_RCI_RCPIT_MASK

Mask to get the reporting context port identifier type from the struct nvme_persistent_event_log.rci field.

NVME_PEL_RCI_RCE_MASK

Mask to get the reporting context exists from the struct nvme_persistent_event_log.rci field.

NVME_PEL_RCI_RSVD_MASK

Mask to get the reserved reporting context from the struct nvme_persistent_event_log.rci field.

enum nvme_pel_rci_rcpit

Persistent Event Log Reporting Context - Port Identifier Type

Constants

NVME_PEL_RCI_RCPIT_NOT_EXIST

Does not already exist

NVME_PEL_RCI_RCPIT_EST_PORT

Established by an NVM subsystem port

NVME_PEL_RCI_RCPIT_EST_ME

Established by a Management Endpoint

struct nvme_persistent_event_entry

Persistent Event

Definition

struct nvme_persistent_event_entry {
  __u8 etype;
  __u8 etype_rev;
  __u8 ehl;
  __u8 ehai;
  __le16 cntlid;
  __le64 ets;
  __le16 pelpid;
  __u8 rsvd16[4];
  __le16 vsil;
  __le16 el;
};

Members

etype

Event Type

etype_rev

Event Type Revision

ehl

Event Header Length

ehai

Event Header Additional Info

cntlid

Controller Identifier

ets

Event Timestamp

pelpid

Port Identifier

rsvd16

Reserved

vsil

Vendor Specific Information Length

el

Event Length

enum nvme_persistent_event_types

Persistent event log events

Constants

NVME_PEL_SMART_HEALTH_EVENT

SMART / Health Log Snapshot Event

NVME_PEL_FW_COMMIT_EVENT

Firmware Commit Event

NVME_PEL_TIMESTAMP_EVENT

Timestamp Change Event

NVME_PEL_POWER_ON_RESET_EVENT

Power-on or Reset Event

NVME_PEL_NSS_HW_ERROR_EVENT

NVM Subsystem Hardware Error Event

NVME_PEL_CHANGE_NS_EVENT

Change Namespace Event

NVME_PEL_FORMAT_START_EVENT

Format NVM Start Event

NVME_PEL_FORMAT_COMPLETION_EVENT

Format NVM Completion Event

NVME_PEL_SANITIZE_START_EVENT

Sanitize Start Event

NVME_PEL_SANITIZE_COMPLETION_EVENT

Sanitize Completion Event

NVME_PEL_SET_FEATURE_EVENT

Set Feature Event

NVME_PEL_TELEMETRY_CRT

Telemetry Log Create Event

NVME_PEL_THERMAL_EXCURSION_EVENT

Thermal Excursion Event

enum nvme_pel_ehai

This field indicates the persistent event header additional information

Constants

NVME_PEL_EHAI_PIT_SHIFT

Shift amount to get the reporting context port identifier from the struct nvme_persistent_event_log.rci field.

NVME_PEL_EHAI_RSVD_SHIFT

Shift amount to get the reserved reporting context from the struct nvme_persistent_event_log.rci field.

NVME_PEL_EHAI_PIT_MASK

Mask to get the reporting context port identifier from the struct nvme_st_result.dsts field.

NVME_PEL_EHAI_RSVD_MASK

Mask to get the reserved reporting context from the struct nvme_st_result.dsts field.

enum nvme_pel_ehai_pit

Persistent Event Header Additional Information - Port Identifier Type

Constants

NVME_PEL_EHAI_PIT_NOT_REPORTED

PIT not reported and PELPID does not apply

NVME_PEL_EHAI_PIT_NSS_PORT

NVM subsystem port

NVME_PEL_EHAI_PIT_NMI_PORT

NVMe-MI port

NVME_PEL_EHAI_PIT_NOT_ASSOCIATED

Event not associated with any port and PELPID does not apply

struct nvme_fw_commit_event

Firmware Commit Event Data

Definition

struct nvme_fw_commit_event {
  __le64 old_fw_rev;
  __le64 new_fw_rev;
  __u8 fw_commit_action;
  __u8 fw_slot;
  __u8 sct_fw;
  __u8 sc_fw;
  __le16 vndr_assign_fw_commit_rc;
};

Members

old_fw_rev

Old Firmware Revision

new_fw_rev

New Firmware Revision

fw_commit_action

Firmware Commit Action

fw_slot

Firmware Slot

sct_fw

Status Code Type for Firmware Commit Command

sc_fw

Status Returned for Firmware Commit Command

vndr_assign_fw_commit_rc

Vendor Assigned Firmware Commit Result Code

struct nvme_timestamp

Timestamp - Data Structure for Get Features

Definition

struct nvme_timestamp {
  __u8 timestamp[6];
  __u8 attr;
  __u8 rsvd;
};

Members

timestamp

Timestamp value based on origin and synch field

attr

Attribute

rsvd

Reserved

struct nvme_time_stamp_change_event

Timestamp Change Event

Definition

struct nvme_time_stamp_change_event {
  __le64 previous_timestamp;
  __le64 ml_secs_since_reset;
};

Members

previous_timestamp

Previous Timestamp

ml_secs_since_reset

Milliseconds Since Reset

struct nvme_power_on_reset_info_list

Controller Reset Information

Definition

struct nvme_power_on_reset_info_list {
  __le16 cid;
  __u8 fw_act;
  __u8 op_in_prog;
  __u8 rsvd4[12];
  __le32 ctrl_power_cycle;
  __le64 power_on_ml_seconds;
  __le64 ctrl_time_stamp;
};

Members

cid

Controller ID

fw_act

Firmware Activation

op_in_prog

Operation in Progress

rsvd4

Reserved

ctrl_power_cycle

Controller Power Cycle

power_on_ml_seconds

Power on milliseconds

ctrl_time_stamp

Controller Timestamp

struct nvme_nss_hw_err_event

NVM Subsystem Hardware Error Event

Definition

struct nvme_nss_hw_err_event {
  __le16 nss_hw_err_event_code;
  __u8 rsvd2[2];
  __u8 *add_hw_err_info;
};

Members

nss_hw_err_event_code

NVM Subsystem Hardware Error Event Code

rsvd2

Reserved

add_hw_err_info

Additional Hardware Error Information

struct nvme_change_ns_event

Change Namespace Event Data

Definition

struct nvme_change_ns_event {
  __le32 nsmgt_cdw10;
  __u8 rsvd4[4];
  __le64 nsze;
  __u8 rsvd16[8];
  __le64 nscap;
  __u8 flbas;
  __u8 dps;
  __u8 nmic;
  __u8 rsvd35;
  __le32 ana_grp_id;
  __le16 nvmset_id;
  __le16 rsvd42;
  __le32 nsid;
};

Members

nsmgt_cdw10

Namespace Management CDW10

rsvd4

Reserved

nsze

Namespace Size

rsvd16

Reserved

nscap

Namespace Capacity

flbas

Formatted LBA Size

dps

End-to-end Data Protection Type Settings

nmic

Namespace Multi-path I/O and Namespace Sharing Capabilities

rsvd35

Reserved

ana_grp_id

ANA Group Identifier

nvmset_id

NVM Set Identifier

rsvd42

Reserved

nsid

Namespace ID

struct nvme_format_nvm_start_event

Format NVM Start Event Data

Definition

struct nvme_format_nvm_start_event {
  __le32 nsid;
  __u8 fna;
  __u8 rsvd5[3];
  __le32 format_nvm_cdw10;
};

Members

nsid

Namespace Identifier

fna

Format NVM Attributes

rsvd5

Reserved

format_nvm_cdw10

Format NVM CDW10

struct nvme_format_nvm_compln_event

Format NVM Completion Event Data

Definition

struct nvme_format_nvm_compln_event {
  __le32 nsid;
  __u8 smallest_fpi;
  __u8 format_nvm_status;
  __le16 compln_info;
  __le32 status_field;
};

Members

nsid

Namespace Identifier

smallest_fpi

Smallest Format Progress Indicator

format_nvm_status

Format NVM Status

compln_info

Completion Information

status_field

Status Field

struct nvme_sanitize_start_event

Sanitize Start Event Data

Definition

struct nvme_sanitize_start_event {
  __le32 sani_cap;
  __le32 sani_cdw10;
  __le32 sani_cdw11;
};

Members

sani_cap

SANICAP

sani_cdw10

Sanitize CDW10

sani_cdw11

Sanitize CDW11

struct nvme_sanitize_compln_event

Sanitize Completion Event Data

Definition

struct nvme_sanitize_compln_event {
  __le16 sani_prog;
  __le16 sani_status;
  __le16 cmpln_info;
  __u8 rsvd6[2];
};

Members

sani_prog

Sanitize Progress

sani_status

Sanitize Status

cmpln_info

Completion Information

rsvd6

Reserved

struct nvme_set_feature_event

Set Feature Event Data

Definition

struct nvme_set_feature_event {
  __le32 layout;
  __le32 cdw_mem[0];
};

Members

layout

Set Feature Event Layout

cdw_mem

Command Dwords Memory buffer

enum nvme_set_feat_event_layout

This field indicates the set feature event layout

Constants

NVME_SET_FEAT_EVENT_DW_COUNT_SHIFT

Shift amount to get the Dword count from the struct nvme_set_feature_event.layout field.

NVME_SET_FEAT_EVENT_CC_DW0_SHIFT

Shift amount to get the logged command completion Dword 0 from the struct nvme_set_feature_event.layout field.

NVME_SET_FEAT_EVENT_MB_COUNT_SHIFT

Shift amount to get the memory buffer count from the struct nvme_set_feature_event.layout field.

NVME_SET_FEAT_EVENT_DW_COUNT_MASK

Mask to get the Dword count from the struct nvme_set_feature_event.layout field.

NVME_SET_FEAT_EVENT_CC_DW0_MASK

Mask to get the logged command completion Dword 0 from the struct nvme_set_feature_event.layout field.

NVME_SET_FEAT_EVENT_MB_COUNT_MASK

Mask to get the memory buffer count from the struct nvme_set_feature_event.layout field.

struct nvme_thermal_exc_event

Thermal Excursion Event Data

Definition

struct nvme_thermal_exc_event {
  __u8 over_temp;
  __u8 threshold;
};

Members

over_temp

Over Temperature

threshold

temperature threshold

struct nvme_lba_rd

LBA Range Descriptor

Definition

struct nvme_lba_rd {
  __le64 rslba;
  __le32 rnlb;
  __u8 rsvd12[4];
};

Members

rslba

Range Starting LBA

rnlb

Range Number of Logical Blocks

rsvd12

Reserved

struct nvme_lbas_ns_element

LBA Status Log Namespace Element

Definition

struct nvme_lbas_ns_element {
  __le32 neid;
  __le32 nlrd;
  __u8 ratype;
  __u8 rsvd8[7];
  struct nvme_lba_rd lba_rd[];
};

Members

neid

Namespace Element Identifier

nlrd

Number of LBA Range Descriptors

ratype

Recommended Action Type. see enum nvme_lba_status_atype

rsvd8

Reserved

lba_rd

LBA Range Descriptor

enum nvme_lba_status_atype

Potentially Unrecoverable LBAs

Constants

NVME_LBA_STATUS_ATYPE_SCAN_UNTRACKED

Potentially Unrecoverable LBAs

NVME_LBA_STATUS_ATYPE_SCAN_TRACKED

Potentially Unrecoverable LBAs associated with physical storage

struct nvme_lba_status_log

LBA Status Information Log

Definition

struct nvme_lba_status_log {
  __le32 lslplen;
  __le32 nlslne;
  __le32 estulb;
  __u8 rsvd12[2];
  __le16 lsgc;
  struct nvme_lbas_ns_element elements[];
};

Members

lslplen

LBA Status Log Page Length

nlslne

Number of LBA Status Log Namespace Elements

estulb

Estimate of Unrecoverable Logical Blocks

rsvd12

Reserved

lsgc

LBA Status Generation Counter

elements

LBA Status Log Namespace Element List

struct nvme_eg_event_aggregate_log

Endurance Group Event Aggregate

Definition

struct nvme_eg_event_aggregate_log {
  __le64 nr_entries;
  __le16 egids[];
};

Members

nr_entries

Number of Entries

egids

Endurance Group Identifier

enum nvme_fid_supported_effects

FID Supported and Effects Data Structure definitions

Constants

NVME_FID_SUPPORTED_EFFECTS_FSUPP

FID Supported

NVME_FID_SUPPORTED_EFFECTS_UDCC

User Data Content Change

NVME_FID_SUPPORTED_EFFECTS_NCC

Namespace Capability Change

NVME_FID_SUPPORTED_EFFECTS_NIC

Namespace Inventory Change

NVME_FID_SUPPORTED_EFFECTS_CCC

Controller Capability Change

NVME_FID_SUPPORTED_EFFECTS_UUID_SEL

UUID Selection Supported

NVME_FID_SUPPORTED_EFFECTS_SCOPE_SHIFT

FID Scope Shift

NVME_FID_SUPPORTED_EFFECTS_SCOPE_MASK

FID Scope Mask

NVME_FID_SUPPORTED_EFFECTS_SCOPE_NS

Namespace Scope

NVME_FID_SUPPORTED_EFFECTS_SCOPE_CTRL

Controller Scope

NVME_FID_SUPPORTED_EFFECTS_SCOPE_NVM_SET

NVM Set Scope

NVME_FID_SUPPORTED_EFFECTS_SCOPE_ENDGRP

Endurance Group Scope

NVME_FID_SUPPORTED_EFFECTS_SCOPE_DOMAIN

Domain Scope

NVME_FID_SUPPORTED_EFFECTS_SCOPE_NSS

NVM Subsystem Scope

struct nvme_fid_supported_effects_log

Feature Identifiers Supported and Effects

Definition

struct nvme_fid_supported_effects_log {
  __le32 fid_support[NVME_LOG_FID_SUPPORTED_EFFECTS_MAX];
};

Members

fid_support

Feature Identifier Supported

enum nvme_mi_cmd_supported_effects

MI Command Supported and Effects Data Structure

Constants

NVME_MI_CMD_SUPPORTED_EFFECTS_CSUPP

Command Supported

NVME_MI_CMD_SUPPORTED_EFFECTS_UDCC

User Data Content Change

NVME_MI_CMD_SUPPORTED_EFFECTS_NCC

Namespace Capability Change

NVME_MI_CMD_SUPPORTED_EFFECTS_NIC

Namespace Inventory Change

NVME_MI_CMD_SUPPORTED_EFFECTS_CCC

Controller Capability Change

NVME_MI_CMD_SUPPORTED_EFFECTS_SCOPE_SHIFT

20 bit shift

NVME_MI_CMD_SUPPORTED_EFFECTS_SCOPE_MASK

12 bit mask - 0xfff

NVME_MI_CMD_SUPPORTED_EFFECTS_SCOPE_NS

Namespace Scope

NVME_MI_CMD_SUPPORTED_EFFECTS_SCOPE_CTRL

Controller Scope

NVME_MI_CMD_SUPPORTED_EFFECTS_SCOPE_NVM_SET

NVM Set Scope

NVME_MI_CMD_SUPPORTED_EFFECTS_SCOPE_ENDGRP

Endurance Group Scope

NVME_MI_CMD_SUPPORTED_EFFECTS_SCOPE_DOMAIN

Domain Scope

NVME_MI_CMD_SUPPORTED_EFFECTS_SCOPE_NSS

NVM Subsystem Scope

struct nvme_mi_cmd_supported_effects_log

NVMe-MI Commands Supported and Effects Log

Definition

struct nvme_mi_cmd_supported_effects_log {
  __le32 mi_cmd_support[NVME_LOG_MI_CMD_SUPPORTED_EFFECTS_MAX];
  __le32 reserved1[NVME_LOG_MI_CMD_SUPPORTED_EFFECTS_RESERVED];
};

Members

mi_cmd_support

NVMe-MI Commands Supported

reserved1

Reserved

struct nvme_boot_partition

Boot Partition Log

Definition

struct nvme_boot_partition {
  __u8 lid;
  __u8 rsvd1[3];
  __le32 bpinfo;
  __u8 rsvd8[8];
  __u8 boot_partition_data[];
};

Members

lid

Boot Partition Identifier

rsvd1

Reserved

bpinfo

Boot Partition Information

rsvd8

Reserved

boot_partition_data

Contains the contents of the specified Boot Partition

enum nvme_boot_partition_info

This field indicates the boot partition information

Constants

NVME_BOOT_PARTITION_INFO_BPSZ_SHIFT

Shift amount to get the boot partition size from the struct nvme_boot_partition.bpinfo field.

NVME_BOOT_PARTITION_INFO_ABPID_SHIFT

Shift amount to get the active boot partition ID from the struct nvme_boot_partition.bpinfo field.

NVME_BOOT_PARTITION_INFO_BPSZ_MASK

Mask to get the boot partition size from the struct nvme_boot_partition.bpinfo field.

NVME_BOOT_PARTITION_INFO_ABPID_MASK

Mask to get the active boot partition ID from the struct nvme_boot_partition.bpinfo field.

struct nvme_eom_lane_desc

EOM Lane Descriptor

Definition

struct nvme_eom_lane_desc {
  __u8 rsvd0;
  __u8 mstatus;
  __u8 lane;
  __u8 eye;
  __le16 top;
  __le16 bottom;
  __le16 left;
  __le16 right;
  __le16 nrows;
  __le16 ncols;
  __le16 edlen;
  __u8 rsvd18[14];
  __u8 eye_desc[];
};

Members

rsvd0

Reserved

mstatus

Measurement Status

lane

Lane number

eye

Eye number

top

Absolute number of rows from center to top edge of eye

bottom

Absolute number of rows from center to bottom edge of eye

left

Absolute number of rows from center to left edge of eye

right

Absolute number of rows from center to right edge of eye

nrows

Number of Rows

ncols

Number of Columns

edlen

Eye Data Length

rsvd18

Reserved

eye_desc

Printable Eye, Eye Data, and any Padding

struct nvme_phy_rx_eom_log

Physical Interface Receiver Eye Opening Measurement Log

Definition

struct nvme_phy_rx_eom_log {
  __u8 lid;
  __u8 eomip;
  __le16 hsize;
  __le32 rsize;
  __u8 eomdgn;
  __u8 lr;
  __u8 odp;
  __u8 lanes;
  __u8 epl;
  __u8 lspfc;
  __u8 li;
  __u8 rsvd15[3];
  __le16 lsic;
  __le32 dsize;
  __le16 nd;
  __le16 maxtb;
  __le16 maxlr;
  __le16 etgood;
  __le16 etbetter;
  __le16 etbest;
  __u8 rsvd36[28];
  struct nvme_eom_lane_desc descs[];
};

Members

lid

Log Identifier

eomip

EOM In Progress

hsize

Header Size

rsize

Result Size

eomdgn

EOM Data Generation Number

lr

Log Revision

odp

Optional Data Present

lanes

Number of lanes configured for this port

epl

Eyes Per Lane

lspfc

Log Specific Parameter Field Copy

li

Link Information

rsvd15

Reserved

lsic

Log Specific Identifier Copy

dsize

Descriptor Size

nd

Number of Descriptors

maxtb

Maximum Top Bottom

maxlr

Maximum Left Right

etgood

Estimated Time for Good Quality

etbetter

Estimated Time for Better Quality

etbest

Estimated Time for Best Quality

rsvd36

Reserved

descs

EOM Lane Descriptors

enum nvme_eom_optional_data_present

EOM Optional Data Present Fields

Constants

NVME_EOM_ODP_PEFP_SHIFT

Shift amount to get the printable eye field present from the struct nvme_phy_rx_eom_log.odp field.

NVME_EOM_ODP_EDFP_SHIFT

Shift amount to get the eye data field present from the struct nvme_phy_rx_eom_log.odp field.

NVME_EOM_ODP_RSVD_SHIFT

Shift amount to get the reserved optional data present from the struct nvme_phy_rx_eom_log.odp field.

NVME_EOM_ODP_PEFP_MASK

Mask to get the printable eye field present from the struct nvme_phy_rx_eom_log.odp field.

NVME_EOM_ODP_EDFP_MASK

Mask to get the eye data field present from the struct nvme_phy_rx_eom_log.odp field.

NVME_EOM_ODP_RSVD_MASK

Mask to get the reserved data present from the struct nvme_phy_rx_eom_log.odp field.

enum nvme_eom_optional_data

EOM Optional Data Present Fields (Deprecated)

Constants

NVME_EOM_PRINTABLE_EYE_PRESENT

Printable Eye Present

NVME_EOM_EYE_DATA_PRESENT

Eye Data Present

enum nvme_phy_rx_eom_progress

EOM In Progress Values

Constants

NVME_PHY_RX_EOM_NOT_STARTED

EOM Not Started

NVME_PHY_RX_EOM_IN_PROGRESS

EOM In Progress

NVME_PHY_RX_EOM_COMPLETED

EOM Completed

struct nvme_media_unit_stat_desc

Media Unit Status Descriptor

Definition

struct nvme_media_unit_stat_desc {
  __le16 muid;
  __le16 domainid;
  __le16 endgid;
  __le16 nvmsetid;
  __le16 cap_adj_fctr;
  __u8 avl_spare;
  __u8 percent_used;
  __u8 mucs;
  __u8 cio;
};

Members

muid

Media Unit Identifier

domainid

Domain Identifier

endgid

Endurance Group Identifier

nvmsetid

NVM Set Identifier

cap_adj_fctr

Capacity Adjustment Factor

avl_spare

Available Spare

percent_used

Percentage Used

mucs

Number of Channels attached to media units

cio

Channel Identifiers Offset

struct nvme_media_unit_stat_log

Media Unit Status

Definition

struct nvme_media_unit_stat_log {
  __le16 nmu;
  __le16 cchans;
  __le16 sel_config;
  __u8 rsvd6[10];
  struct nvme_media_unit_stat_desc mus_desc[];
};

Members

nmu

Number unit status descriptor

cchans

Number of Channels

sel_config

Selected Configuration

rsvd6

Reserved

mus_desc

Media unit statistic descriptors

struct nvme_media_unit_config_desc

Media Unit Configuration Descriptor

Definition

struct nvme_media_unit_config_desc {
  __le16 muid;
  __u8 rsvd2[4];
  __le16 mudl;
};

Members

muid

Media Unit Identifier

rsvd2

Reserved

mudl

Media Unit Descriptor Length

struct nvme_channel_config_desc

Channel Configuration Descriptor

Definition

struct nvme_channel_config_desc {
  __le16 chanid;
  __le16 chmus;
  struct nvme_media_unit_config_desc mu_config_desc[];
};

Members

chanid

Channel Identifier

chmus

Number Channel Media Units

mu_config_desc

Channel Unit config descriptors. See struct nvme_media_unit_config_desc

struct nvme_end_grp_chan_desc

Endurance Group Channel Configuration Descriptor

Definition

struct nvme_end_grp_chan_desc {
  __le16 egchans;
  struct nvme_channel_config_desc chan_config_desc[];
};

Members

egchans

Number of Channels

chan_config_desc

Channel config descriptors. See struct nvme_channel_config_desc

struct nvme_end_grp_config_desc

Endurance Group Configuration Descriptor

Definition

struct nvme_end_grp_config_desc {
  __le16 endgid;
  __le16 cap_adj_factor;
  __u8 rsvd4[12];
  __u8 tegcap[16];
  __u8 segcap[16];
  __u8 end_est[16];
  __u8 rsvd64[16];
  __le16 egsets;
  __le16 nvmsetid[];
};

Members

endgid

Endurance Group Identifier

cap_adj_factor

Capacity Adjustment Factor

rsvd4

Reserved

tegcap

Total Endurance Group Capacity

segcap

Spare Endurance Group Capacity

end_est

Endurance Estimate

rsvd64

Reserved

egsets

Number of NVM Sets

nvmsetid

NVM Set Identifier

struct nvme_capacity_config_desc

Capacity Configuration structure definitions

Definition

struct nvme_capacity_config_desc {
  __le16 cap_config_id;
  __le16 domainid;
  __le16 egcn;
  __u8 rsvd6[26];
  struct nvme_end_grp_config_desc egcd[];
};

Members

cap_config_id

Capacity Configuration Identifier

domainid

Domain Identifier

egcn

Number Endurance Group Configuration Descriptors

rsvd6

Reserved

egcd

Endurance Group Config descriptors. See struct nvme_end_grp_config_desc

struct nvme_supported_cap_config_list_log

Supported Capacity Configuration list log page

Definition

struct nvme_supported_cap_config_list_log {
  __u8 sccn;
  __u8 rsvd1[15];
  struct nvme_capacity_config_desc cap_config_desc[];
};

Members

sccn

Number of capacity configuration

rsvd1

Reserved

cap_config_desc

Capacity configuration descriptor. See struct nvme_capacity_config_desc

struct nvme_resv_notification_log

Reservation Notification Log

Definition

struct nvme_resv_notification_log {
  __le64 lpc;
  __u8 rnlpt;
  __u8 nalp;
  __u8 rsvd9[2];
  __le32 nsid;
  __u8 rsvd16[48];
};

Members

lpc

Log Page Count

rnlpt

See enum nvme_resv_notify_rnlpt.

nalp

Number of Available Log Pages

rsvd9

Reserved

nsid

Namespace ID

rsvd16

Reserved

enum nvme_resv_notify_rnlpt

Reservation Notification Log - Reservation Notification Log Page Type

Constants

NVME_RESV_NOTIFY_RNLPT_EMPTY

Empty Log Page

NVME_RESV_NOTIFY_RNLPT_REGISTRATION_PREEMPTED

Registration Preempted

NVME_RESV_NOTIFY_RNLPT_RESERVATION_RELEASED

Reservation Released

NVME_RESV_NOTIFY_RNLPT_RESERVATION_PREEMPTED

Reservation Preempted

struct nvme_sanitize_log_page

Sanitize Status (Log Identifier 81h)

Definition

struct nvme_sanitize_log_page {
  __le16 sprog;
  __le16 sstat;
  __le32 scdw10;
  __le32 eto;
  __le32 etbe;
  __le32 etce;
  __le32 etond;
  __le32 etbend;
  __le32 etcend;
  __u8 rsvd32[480];
};

Members

sprog

Sanitize Progress (SPROG): indicates the fraction complete of the sanitize operation. The value is a numerator of the fraction complete that has 65,536 (10000h) as its denominator. This value shall be set to FFFFh if the sstat field is not set to NVME_SANITIZE_SSTAT_STATUS_IN_PROGESS.

sstat

Sanitize Status (SSTAT): indicates the status associated with the most recent sanitize operation. See enum nvme_sanitize_sstat.

scdw10

Sanitize Command Dword 10 Information (SCDW10): contains the value of the Command Dword 10 field of the Sanitize command that started the sanitize operation.

eto

Estimated Time For Overwrite: indicates the number of seconds required to complete an Overwrite sanitize operation with 16 passes in the background when the No-Deallocate Modifies Media After Sanitize field is not set to 10b. A value of 0h indicates that the sanitize operation is expected to be completed in the background when the Sanitize command that started that operation is completed. A value of FFFFFFFFh indicates that no time period is reported.

etbe

Estimated Time For Block Erase: indicates the number of seconds required to complete a Block Erase sanitize operation in the background when the No-Deallocate Modifies Media After Sanitize field is not set to 10b. A value of 0h indicates that the sanitize operation is expected to be completed in the background when the Sanitize command that started that operation is completed. A value of FFFFFFFFh indicates that no time period is reported.

etce

Estimated Time For Crypto Erase: indicates the number of seconds required to complete a Crypto Erase sanitize operation in the background when the No-Deallocate Modifies Media After Sanitize field is not set to 10b. A value of 0h indicates that the sanitize operation is expected to be completed in the background when the Sanitize command that started that operation is completed. A value of FFFFFFFFh indicates that no time period is reported.

etond

Estimated Time For Overwrite With No-Deallocate Media Modification: indicates the number of seconds required to complete an Overwrite sanitize operation and the associated additional media modification after the Overwrite sanitize operation in the background when the No-Deallocate After Sanitize bit was set to 1 in the Sanitize command that requested the Overwrite sanitize operation; and the No-Deallocate Modifies Media After Sanitize field is set to 10b. A value of 0h indicates that the sanitize operation is expected to be completed in the background when the Sanitize command that started that operation is completed. A value of FFFFFFFFh indicates that no time period is reported.

etbend

Estimated Time For Block Erase With No-Deallocate Media Modification: indicates the number of seconds required to complete a Block Erase sanitize operation and the associated additional media modification after the Block Erase sanitize operation in the background when the No-Deallocate After Sanitize bit was set to 1 in the Sanitize command that requested the Overwrite sanitize operation; and the No-Deallocate Modifies Media After Sanitize field is set to 10b. A value of 0h indicates that the sanitize operation is expected to be completed in the background when the Sanitize command that started that operation is completed. A value of FFFFFFFFh indicates that no time period is reported.

etcend

Estimated Time For Crypto Erase With No-Deallocate Media Modification: indicates the number of seconds required to complete a Crypto Erase sanitize operation and the associated additional media modification after the Crypto Erase sanitize operation in the background when the No-Deallocate After Sanitize bit was set to 1 in the Sanitize command that requested the Overwrite sanitize operation; and the No-Deallocate Modifies Media After Sanitize field is set to 10b. A value of 0h indicates that the sanitize operation is expected to be completed in the background when the Sanitize command that started that operation is completed. A value of FFFFFFFFh indicates that no time period is reported.

rsvd32

Reserved

enum nvme_sanitize_sstat

Sanitize Status (SSTAT)

Constants

NVME_SANITIZE_SSTAT_STATUS_SHIFT

Shift amount to get the status value of the most recent sanitize operation from the struct nvme_sanitize_log_page.sstat field.

NVME_SANITIZE_SSTAT_STATUS_MASK

Mask to get the status value of the most recent sanitize operation.

NVME_SANITIZE_SSTAT_STATUS_NEVER_SANITIZED

The NVM subsystem has never been sanitized.

NVME_SANITIZE_SSTAT_STATUS_COMPLETE_SUCCESS

The most recent sanitize operation completed successfully including any additional media modification.

NVME_SANITIZE_SSTAT_STATUS_IN_PROGESS

A sanitize operation is currently in progress.

NVME_SANITIZE_SSTAT_STATUS_COMPLETED_FAILED

The most recent sanitize operation failed.

NVME_SANITIZE_SSTAT_STATUS_ND_COMPLETE_SUCCESS

The most recent sanitize operation for which No-Deallocate After Sanitize was requested has completed successfully with deallocation of all user data.

NVME_SANITIZE_SSTAT_COMPLETED_PASSES_SHIFT

Shift amount to get the number of completed passes if the most recent sanitize operation was an Overwrite. This value shall be cleared to 0h if the most recent sanitize operation was not an Overwrite.

NVME_SANITIZE_SSTAT_COMPLETED_PASSES_MASK

Mask to get the number of completed passes.

NVME_SANITIZE_SSTAT_GLOBAL_DATA_ERASED_SHIFT

Shift amount to get the Global Data Erased value from the struct nvme_sanitize_log_page.sstat field.

NVME_SANITIZE_SSTAT_GLOBAL_DATA_ERASED_MASK

Mask to get the Global Data Erased value.

NVME_SANITIZE_SSTAT_GLOBAL_DATA_ERASED

Global Data Erased: if set, then no namespace user data in the NVM subsystem has been written to and no Persistent Memory Region in the NVM subsystem has been enabled since being manufactured and the NVM subsystem has never been sanitized; or since the most recent successful sanitize operation.

struct nvme_zns_changed_zone_log

ZNS Changed Zone List log

Definition

struct nvme_zns_changed_zone_log {
  __le16 nrzid;
  __u8 rsvd2[6];
  __le64 zid[NVME_ZNS_CHANGED_ZONES_MAX];
};

Members

nrzid

Number of Zone Identifiers

rsvd2

Reserved

zid

Zone Identifier

enum nvme_zns_zt

Zone Descriptor Data Structure - Zone Type

Constants

NVME_ZONE_TYPE_SEQWRITE_REQ

Sequential Write Required

enum nvme_zns_za

Zone Descriptor Data Structure

Constants

NVME_ZNS_ZA_ZFC

Zone Finished by Controller

NVME_ZNS_ZA_FZR

Finish Zone Recommended

NVME_ZNS_ZA_RZR

Reset Zone Recommended

NVME_ZNS_ZA_ZRWAV

NVME_ZNS_ZA_ZDEV

Zone Descriptor Extension Valid

enum nvme_zns_zs

Zone Descriptor Data Structure - Zone State

Constants

NVME_ZNS_ZS_EMPTY

Empty state

NVME_ZNS_ZS_IMPL_OPEN

Implicitly open state

NVME_ZNS_ZS_EXPL_OPEN

Explicitly open state

NVME_ZNS_ZS_CLOSED

Closed state

NVME_ZNS_ZS_READ_ONLY

Read only state

NVME_ZNS_ZS_FULL

Full state

NVME_ZNS_ZS_OFFLINE

Offline state

struct nvme_zns_desc

Zone Descriptor Data Structure

Definition

struct nvme_zns_desc {
  __u8 zt;
  __u8 zs;
  __u8 za;
  __u8 zai;
  __u8 rsvd4[4];
  __le64 zcap;
  __le64 zslba;
  __le64 wp;
  __u8 rsvd32[32];
};

Members

zt

Zone Type

zs

Zone State

za

Zone Attributes

zai

Zone Attributes Information

rsvd4

Reserved

zcap

Zone Capacity

zslba

Zone Start Logical Block Address

wp

Write Pointer

rsvd32

Reserved

struct nvme_zone_report

Report Zones Data Structure

Definition

struct nvme_zone_report {
  __le64 nr_zones;
  __u8 rsvd8[56];
  struct nvme_zns_desc    entries[];
};

Members

nr_zones

Number of descriptors in entries

rsvd8

Reserved

entries

Zoned namespace descriptors

enum nvme_fdp_ruh_type

Reclaim Unit Handle Type

Constants

NVME_FDP_RUHT_INITIALLY_ISOLATED

Initially Isolated

NVME_FDP_RUHT_PERSISTENTLY_ISOLATED

Persistently Isolated

struct nvme_fdp_ruh_desc

Reclaim Unit Handle Descriptor

Definition

struct nvme_fdp_ruh_desc {
  __u8 ruht;
  __u8 rsvd1[3];
};

Members

ruht

Reclaim Unit Handle Type

rsvd1

Reserved

enum nvme_fdp_config_fdpa

FDP Attributes

Constants

NVME_FDP_CONFIG_FDPA_RGIF_SHIFT

Reclaim Group Identifier Format Shift

NVME_FDP_CONFIG_FDPA_RGIF_MASK

Reclaim Group Identifier Format Mask

NVME_FDP_CONFIG_FDPA_FDPVWC_SHIFT

FDP Volatile Write Cache Shift

NVME_FDP_CONFIG_FDPA_FDPVWC_MASK

FDP Volatile Write Cache Mask

NVME_FDP_CONFIG_FDPA_VALID_SHIFT

FDP Configuration Valid Shift

NVME_FDP_CONFIG_FDPA_VALID_MASK

FDP Configuration Valid Mask

struct nvme_fdp_config_desc

FDP Configuration Descriptor

Definition

struct nvme_fdp_config_desc {
  __le16 size;
  __u8 fdpa;
  __u8 vss;
  __le32 nrg;
  __le16 nruh;
  __le16 maxpids;
  __le32 nnss;
  __le64 runs;
  __le32 erutl;
  __u8 rsvd28[36];
  struct nvme_fdp_ruh_desc ruhs[];
};

Members

size

Descriptor size

fdpa

FDP Attributes (enum nvme_fdp_config_fdpa)

vss

Vendor Specific Size

nrg

Number of Reclaim Groups

nruh

Number of Reclaim Unit Handles

maxpids

Max Placement Identifiers

nnss

Number of Namespaces Supported

runs

Reclaim Unit Nominal Size

erutl

Estimated Reclaim Unit Time Limit

rsvd28

Reserved

ruhs

Reclaim Unit Handle descriptors (struct nvme_fdp_ruh_desc)

struct nvme_fdp_config_log

FDP Configurations Log Page

Definition

struct nvme_fdp_config_log {
  __le16 n;
  __u8 version;
  __u8 rsvd3;
  __le32 size;
  __u8 rsvd8[8];
  struct nvme_fdp_config_desc configs[];
};

Members

n

Number of FDP Configurations

version

Log page version

rsvd3

Reserved

size

Log page size in bytes

rsvd8

Reserved

configs

FDP Configuration descriptors (struct nvme_fdp_config_desc)

enum nvme_fdp_ruha

Reclaim Unit Handle Attributes

Constants

NVME_FDP_RUHA_HOST_SHIFT

Host Specified Reclaim Unit Handle Shift

NVME_FDP_RUHA_HOST_MASK

Host Specified Reclaim Unit Handle Mask

NVME_FDP_RUHA_CTRL_SHIFT

Controller Specified Reclaim Unit Handle Shift

NVME_FDP_RUHA_CTRL_MASK

Controller Specified Reclaim Unit Handle Mask

struct nvme_fdp_ruhu_desc

Reclaim Unit Handle Usage Descriptor

Definition

struct nvme_fdp_ruhu_desc {
  __u8 ruha;
  __u8 rsvd1[7];
};

Members

ruha

Reclaim Unit Handle Attributes (enum nvme_fdp_ruha)

rsvd1

Reserved

struct nvme_fdp_ruhu_log

Reclaim Unit Handle Usage Log Page

Definition

struct nvme_fdp_ruhu_log {
  __le16 nruh;
  __u8 rsvd2[6];
  struct nvme_fdp_ruhu_desc ruhus[];
};

Members

nruh

Number of Reclaim Unit Handles

rsvd2

Reserved

ruhus

Reclaim Unit Handle Usage descriptors

struct nvme_fdp_stats_log

FDP Statistics Log Page

Definition

struct nvme_fdp_stats_log {
  __u8 hbmw[16];
  __u8 mbmw[16];
  __u8 mbe[16];
  __u8 rsvd48[16];
};

Members

hbmw

Host Bytes with Metadata Written

mbmw

Media Bytes with Metadata Written

mbe

Media Bytes Erased

rsvd48

Reserved

enum nvme_fdp_event_type

FDP Event Types

Constants

NVME_FDP_EVENT_RUNFW

Reclaim Unit Not Fully Written

NVME_FDP_EVENT_RUTLE

Reclaim Unit Time Limit Exceeded

NVME_FDP_EVENT_RESET

Controller Level Reset Modified Reclaim Unit Handles

NVME_FDP_EVENT_PID

Invalid Placement Identifier

NVME_FDP_EVENT_REALLOC

Media Reallocated

NVME_FDP_EVENT_MODIFY

Implicitly Modified Reclaim Unit Handle

enum nvme_fdp_event_realloc_flags

Media Reallocated Event Type Specific Flags

Constants

NVME_FDP_EVENT_REALLOC_F_LBAV

LBA Valid

struct nvme_fdp_event_realloc

Media Reallocated Event Type Specific Information

Definition

struct nvme_fdp_event_realloc {
  __u8 flags;
  __u8 rsvd1;
  __le16 nlbam;
  __le64 lba;
  __u8 rsvd12[4];
};

Members

flags

Event Type Specific flags (enum nvme_fdp_event_realloc_flags)

rsvd1

Reserved

nlbam

Number of LBAs Moved

lba

Logical Block Address

rsvd12

Reserved

enum nvme_fdp_event_flags

FDP Event Flags

Constants

NVME_FDP_EVENT_F_PIV

Placement Identifier Valid

NVME_FDP_EVENT_F_NSIDV

Namespace Identifier Valid

NVME_FDP_EVENT_F_LV

Location Valid

struct nvme_fdp_event

FDP Event

Definition

struct nvme_fdp_event {
  __u8 type;
  __u8 flags;
  __le16 pid;
  struct nvme_timestamp ts;
  __le32 nsid;
  __u8 type_specific[16];
  __le16 rgid;
  __u8 ruhid;
  __u8 rsvd35[5];
  __u8 vs[24];
};

Members

type

Event Type (enum nvme_fdp_event_type)

flags

Event Flags (enum nvme_fdp_event_flags)

pid

Placement Identifier

ts

Timestamp

nsid

Namespace Identifier

type_specific

Event Type Specific Information

rgid

Reclaim Group Identifier

ruhid

Reclaim Unit Handle Identifier

rsvd35

Reserved

vs

Vendor Specific

struct nvme_fdp_events_log

FDP Events Log Page

Definition

struct nvme_fdp_events_log {
  __le32 n;
  __u8 rsvd4[60];
  struct nvme_fdp_event events[63];
};

Members

n

Number of FDP Events

rsvd4

Reserved

events

FDP Events (struct nvme_fdp_event)

struct nvme_feat_fdp_events_cdw11

FDP Events Feature Command Dword 11

Definition

struct nvme_feat_fdp_events_cdw11 {
  __le16 phndl;
  __u8 noet;
  __u8 rsvd24;
};

Members

phndl

Placement Handle

noet

Number of FDP Event Types

rsvd24

Reserved

enum nvme_fdp_supported_event_attributes

Supported FDP Event Attributes

Constants

NVME_FDP_SUPP_EVENT_ENABLED_SHIFT

FDP Event Enable Shift

NVME_FDP_SUPP_EVENT_ENABLED_MASK

FDP Event Enable Mask

struct nvme_fdp_supported_event_desc

Supported FDP Event Descriptor

Definition

struct nvme_fdp_supported_event_desc {
  __u8 evt;
  __u8 evta;
};

Members

evt

FDP Event Type

evta

FDP Event Type Attributes (enum nvme_fdp_supported_event_attributes)

struct nvme_fdp_ruh_status_desc

Reclaim Unit Handle Status Descriptor

Definition

struct nvme_fdp_ruh_status_desc {
  __le16 pid;
  __le16 ruhid;
  __le32 earutr;
  __le64 ruamw;
  __u8 rsvd16[16];
};

Members

pid

Placement Identifier

ruhid

Reclaim Unit Handle Identifier

earutr

Estimated Active Reclaim Unit Time Remaining

ruamw

Reclaim Unit Available Media Writes

rsvd16

Reserved

struct nvme_fdp_ruh_status

Reclaim Unit Handle Status

Definition

struct nvme_fdp_ruh_status {
  __u8 rsvd0[14];
  __le16 nruhsd;
  struct nvme_fdp_ruh_status_desc ruhss[];
};

Members

rsvd0

Reserved

nruhsd

Number of Reclaim Unit Handle Status Descriptors

ruhss

Reclaim Unit Handle Status descriptors

struct nvme_lba_status_desc

LBA Status Descriptor Entry

Definition

struct nvme_lba_status_desc {
  __le64 dslba;
  __le32 nlb;
  __u8 rsvd12;
  __u8 status;
  __u8 rsvd14[2];
};

Members

dslba

Descriptor Starting LBA

nlb

Number of Logical Blocks

rsvd12

Reserved

status

Additional status about this LBA range

rsvd14

Reserved

struct nvme_lba_status

LBA Status Descriptor List

Definition

struct nvme_lba_status {
  __le32 nlsd;
  __u8 cmpc;
  __u8 rsvd5[3];
  struct nvme_lba_status_desc descs[];
};

Members

nlsd

Number of LBA Status Descriptors

cmpc

Completion Condition

rsvd5

Reserved

descs

LBA status descriptor Entry

struct nvme_feat_auto_pst

Autonomous Power State Transition

Definition

struct nvme_feat_auto_pst {
  __le64 apst_entry[32];
};

Members

apst_entry

See enum nvme_apst_entry

enum nvme_apst_entry

Autonomous Power State Transition

Constants

NVME_APST_ENTRY_ITPS_SHIFT

Idle Transition Power State Shift

NVME_APST_ENTRY_ITPT_SHIFT

Idle Time Prior to Transition Shift

NVME_APST_ENTRY_ITPS_MASK

Idle Transition Power State Mask

NVME_APST_ENTRY_ITPT_MASK

Idle Time Prior to Transition Mask

struct nvme_metadata_element_desc

Metadata Element Descriptor

Definition

struct nvme_metadata_element_desc {
  __u8 type;
  __u8 rev;
  __le16 len;
  __u8 val[0];
};

Members

type

Element Type (ET)

rev

Element Revision (ER)

len

Element Length (ELEN)

val

Element Value (EVAL), UTF-8 string

struct nvme_host_metadata

Host Metadata Data Structure

Definition

struct nvme_host_metadata {
  __u8 ndesc;
  __u8 rsvd1;
  union {
    struct nvme_metadata_element_desc descs[0];
    __u8 descs_buf[4094];
  };
};

Members

ndesc

Number of metadata element descriptors

rsvd1

Reserved

{unnamed_union}

anonymous

descs

Metadata element descriptors

descs_buf

Metadata element descriptor buffer

enum nvme_ctrl_metadata_type

Controller Metadata Element Types

Constants

NVME_CTRL_METADATA_OS_CTRL_NAME

Name of the controller in the operating system.

NVME_CTRL_METADATA_OS_DRIVER_NAME

Name of the driver in the operating system.

NVME_CTRL_METADATA_OS_DRIVER_VER

Version of the driver in the operating system.

NVME_CTRL_METADATA_PRE_BOOT_CTRL_NAME

Name of the controller in the pre-boot environment.

NVME_CTRL_METADATA_PRE_BOOT_DRIVER_NAME

Name of the driver in the pre-boot environment.

NVME_CTRL_METADATA_PRE_BOOT_DRIVER_VER

Version of the driver in the pre-boot environment.

NVME_CTRL_METADATA_SYS_PROC_MODEL

Model of the processor.

NVME_CTRL_METADATA_CHIPSET_DRV_NAME

Chipset driver name.

NVME_CTRL_METADATA_CHIPSET_DRV_VERSION

Chipset driver version.

NVME_CTRL_METADATA_OS_NAME_AND_BUILD

Operating system name and build.

NVME_CTRL_METADATA_SYS_PROD_NAME

System product name.

NVME_CTRL_METADATA_FIRMWARE_VERSION

Host firmware (e.g UEFI) version.

NVME_CTRL_METADATA_OS_DRIVER_FILENAME

Operating system driver filename.

NVME_CTRL_METADATA_DISPLAY_DRV_NAME

Display driver name.

NVME_CTRL_METADATA_DISPLAY_DRV_VERSION

Display driver version.

NVME_CTRL_METADATA_HOST_DET_FAIL_REC

Failure record.

enum nvme_ns_metadata_type

Namespace Metadata Element Types

Constants

NVME_NS_METADATA_OS_NS_NAME

Name of the namespace in the operating system

NVME_NS_METADATA_PRE_BOOT_NS_NAME

Name of the namespace in the pre-boot environment.

NVME_NS_METADATA_OS_NS_QUAL_1

First qualifier of the Operating System Namespace Name.

NVME_NS_METADATA_OS_NS_QUAL_2

Second qualifier of the Operating System Namespace Name.

struct nvme_lba_range_type_entry

LBA Range Type - Data Structure Entry

Definition

struct nvme_lba_range_type_entry {
  __u8 type;
  __u8 attributes;
  __u8 rsvd2[14];
  __le64 slba;
  __le64 nlb;
  __u8 guid[16];
  __u8 rsvd48[16];
};

Members

type

Specifies the Type of the LBA range

attributes

Specifies attributes of the LBA range

rsvd2

Reserved

slba

Starting LBA

nlb

Number of Logical Blocks

guid

Unique Identifier

rsvd48

Reserved

enum nvme_lbart

LBA Range Type - Data Structure Entry

Constants

NVME_LBART_TYPE_GP

General Purpose

NVME_LBART_TYPE_FS

Filesystem

NVME_LBART_TYPE_RAID

RAID

NVME_LBART_TYPE_CACHE

Cache

NVME_LBART_TYPE_SWAP

Page / swap file

NVME_LBART_ATTRIB_TEMP

Temp

NVME_LBART_ATTRIB_HIDE

Hidden

struct nvme_lba_range_type

LBA Range Type

Definition

struct nvme_lba_range_type {
  struct nvme_lba_range_type_entry entry[NVME_FEAT_LBA_RANGE_MAX];
};

Members

entry

LBA range type entry. See struct nvme_lba_range_type_entry

struct nvme_plm_config

Predictable Latency Mode - Deterministic Threshold Configuration Data Structure

Definition

struct nvme_plm_config {
  __le16 ee;
  __u8 rsvd2[30];
  __le64 dtwinrt;
  __le64 dtwinwt;
  __le64 dtwintt;
  __u8 rsvd56[456];
};

Members

ee

Enable Event

rsvd2

Reserved

dtwinrt

DTWIN Reads Threshold

dtwinwt

DTWIN Writes Threshold

dtwintt

DTWIN Time Threshold

rsvd56

Reserved

struct nvme_feat_host_behavior

Host Behavior Support - Data Structure

Definition

struct nvme_feat_host_behavior {
  __u8 acre;
  __u8 etdas;
  __u8 lbafee;
  __u8 rsvd3;
  __u16 cdfe;
  __u8 rsvd6[506];
};

Members

acre

Advanced Command Retry Enable

etdas

Extended Telemetry Data Area 4 Supported

lbafee

LBA Format Extension Enable

rsvd3

Reserved

cdfe

Copy Descriptor Formats Enable

rsvd6

Reserved

enum nvme_host_behavior_support

Enable Advanced Command

Constants

NVME_ENABLE_ACRE

Enable Advanced Command Retry Enable

struct nvme_dsm_range

Dataset Management - Range Definition

Definition

struct nvme_dsm_range {
  __le32 cattr;
  __le32 nlb;
  __le64 slba;
};

Members

cattr

Context Attributes

nlb

Length in logical blocks

slba

Starting LBA

struct nvme_copy_range

Copy - Source Range Entries Descriptor Format

Definition

struct nvme_copy_range {
  __u8 rsvd0[8];
  __le64 slba;
  __le16 nlb;
  __u8 rsvd18[6];
  __le32 eilbrt;
  __le16 elbat;
  __le16 elbatm;
};

Members

rsvd0

Reserved

slba

Starting LBA

nlb

Number of Logical Blocks

rsvd18

Reserved

eilbrt

Expected Initial Logical Block Reference Tag / Expected Logical Block Storage Tag

elbat

Expected Logical Block Application Tag

elbatm

Expected Logical Block Application Tag Mask

struct nvme_copy_range_f1

Copy - Source Range Entries Descriptor Format 1h

Definition

struct nvme_copy_range_f1 {
  __u8 rsvd0[8];
  __le64 slba;
  __le16 nlb;
  __u8 rsvd18[8];
  __u8 elbt[10];
  __le16 elbat;
  __le16 elbatm;
};

Members

rsvd0

Reserved

slba

Starting LBA

nlb

Number of Logical Blocks

rsvd18

Reserved

elbt

Expected Initial Logical Block Reference Tag / Expected Logical Block Storage Tag

elbat

Expected Logical Block Application Tag

elbatm

Expected Logical Block Application Tag Mask

enum nvme_copy_range_sopt

NVMe Copy Range Source Options

Constants

NVME_COPY_SOPT_FCO

NVMe Copy Source Option Fast Copy Only

struct nvme_copy_range_f2

Copy - Source Range Entries Descriptor Format 2h

Definition

struct nvme_copy_range_f2 {
  __le32 snsid;
  __u8 rsvd4[4];
  __le64 slba;
  __le16 nlb;
  __u8 rsvd18[4];
  __le16 sopt;
  __le32 eilbrt;
  __le16 elbat;
  __le16 elbatm;
};

Members

snsid

Source Namespace Identifier

rsvd4

Reserved

slba

Starting LBA

nlb

Number of Logical Blocks

rsvd18

Reserved

sopt

Source Options

eilbrt

Expected Initial Logical Block Reference Tag / Expected Logical Block Storage Tag

elbat

Expected Logical Block Application Tag

elbatm

Expected Logical Block Application Tag Mask

struct nvme_copy_range_f3

Copy - Source Range Entries Descriptor Format 3h

Definition

struct nvme_copy_range_f3 {
  __le32 snsid;
  __u8 rsvd4[4];
  __le64 slba;
  __le16 nlb;
  __u8 rsvd18[4];
  __le16 sopt;
  __u8 rsvd24[2];
  __u8 elbt[10];
  __le16 elbat;
  __le16 elbatm;
};

Members

snsid

Source Namespace Identifier

rsvd4

Reserved

slba

Starting LBA

nlb

Number of Logical Blocks

rsvd18

Reserved

sopt

Source Options

rsvd24

Reserved

elbt

Expected Initial Logical Block Reference Tag / Expected Logical Block Storage Tag

elbat

Expected Logical Block Application Tag

elbatm

Expected Logical Block Application Tag Mask

struct nvme_registered_ctrl

Registered Controller Data Structure

Definition

struct nvme_registered_ctrl {
  __le16 cntlid;
  __u8 rcsts;
  __u8 rsvd3[5];
  __le64 hostid;
  __le64 rkey;
};

Members

cntlid

Controller ID

rcsts

Reservation Status

rsvd3

Reserved

hostid

Host Identifier

rkey

Reservation Key

struct nvme_registered_ctrl_ext

Registered Controller Extended Data Structure

Definition

struct nvme_registered_ctrl_ext {
  __le16 cntlid;
  __u8 rcsts;
  __u8 rsvd3[5];
  __le64 rkey;
  __u8 hostid[16];
  __u8 rsvd32[32];
};

Members

cntlid

Controller ID

rcsts

Reservation Status

rsvd3

Reserved

rkey

Reservation Key

hostid

Host Identifier

rsvd32

Reserved

struct nvme_resv_status

Reservation Status Data Structure

Definition

struct nvme_resv_status {
  __le32 gen;
  __u8 rtype;
  __u8 regctl[2];
  __u8 rsvd7[2];
  __u8 ptpls;
  __u8 rsvd10[14];
  union {
    struct {
      __u8 rsvd24[40];
      struct nvme_registered_ctrl_ext regctl_eds[0];
    };
    struct nvme_registered_ctrl regctl_ds[0];
  };
};

Members

gen

Generation

rtype

Reservation Type

regctl

Number of Registered Controllers

rsvd7

Reserved

ptpls

Persist Through Power Loss State

rsvd10

Reserved

{unnamed_union}

anonymous

{unnamed_struct}

anonymous

rsvd24

Reserved

regctl_eds

Registered Controller Extended Data Structure

regctl_ds

Registered Controller Data Structure

struct nvme_streams_directive_params

Streams Directive - Return Parameters Data Structure

Definition

struct nvme_streams_directive_params {
  __le16 msl;
  __le16 nssa;
  __le16 nsso;
  __u8 nssc;
  __u8 rsvd[9];
  __le32 sws;
  __le16 sgs;
  __le16 nsa;
  __le16 nso;
  __u8 rsvd2[6];
};

Members

msl

Max Streams Limit

nssa

NVM Subsystem Streams Available

nsso

NVM Subsystem Streams Open

nssc

NVM Subsystem Stream Capability

rsvd

Reserved

sws

Stream Write Size

sgs

Stream Granularity Size

nsa

Namespace Streams Allocated

nso

Namespace Streams Open

rsvd2

Reserved

struct nvme_streams_directive_status

Streams Directive - Get Status Data Structure

Definition

struct nvme_streams_directive_status {
  __le16 osc;
  __le16 sid[];
};

Members

osc

Open Stream Count

sid

Stream Identifier

struct nvme_id_directives

Identify Directive - Return Parameters Data Structure

Definition

struct nvme_id_directives {
  __u8 supported[32];
  __u8 enabled[32];
  __u8 rsvd64[4032];
};

Members

supported

Identify directive is supported

enabled

Identify directive is Enabled

rsvd64

Reserved

enum nvme_directive_types

Directives Supported or Enabled

Constants

NVME_ID_DIR_ID_BIT

Identify directive is supported

NVME_ID_DIR_SD_BIT

Streams directive is supported

NVME_ID_DIR_DP_BIT

Direct Placement directive is supported

struct nvme_host_mem_buf_attrs

Host Memory Buffer - Attributes Data Structure

Definition

struct nvme_host_mem_buf_attrs {
  __le32 hsize;
  __le32 hmdlal;
  __le32 hmdlau;
  __le32 hmdlec;
  __u8 rsvd16[4080];
};

Members

hsize

Host Memory Buffer Size

hmdlal

Host Memory Descriptor List Lower Address

hmdlau

Host Memory Descriptor List Upper Address

hmdlec

Host Memory Descriptor List Entry Count

rsvd16

Reserved

enum nvme_ae_type

Asynchronous Event Type

Constants

NVME_AER_ERROR

Error event

NVME_AER_SMART

SMART / Health Status event

NVME_AER_NOTICE

Notice event

NVME_AER_CSS

NVM Command Set Specific events

NVME_AER_VS

Vendor Specific event

enum nvme_ae_info_error

Asynchronous Event Information - Error Status

Constants

NVME_AER_ERROR_INVALID_DB_REG

Write to Invalid Doorbell Register

NVME_AER_ERROR_INVALID_DB_VAL

Invalid Doorbell Write Value

NVME_AER_ERROR_DIAG_FAILURE

Diagnostic Failure

NVME_AER_ERROR_PERSISTENT_INTERNAL_ERROR

Persistent Internal Error

NVME_AER_ERROR_TRANSIENT_INTERNAL_ERROR

Transient Internal Error

NVME_AER_ERROR_FW_IMAGE_LOAD_ERROR

Firmware Image Load Error

enum nvme_ae_info_smart

Asynchronous Event Information - SMART / Health Status

Constants

NVME_AER_SMART_SUBSYSTEM_RELIABILITY

NVM subsystem Reliability

NVME_AER_SMART_TEMPERATURE_THRESHOLD

Temperature Threshold

NVME_AER_SMART_SPARE_THRESHOLD

Spare Below Threshold

enum nvme_ae_info_css_nvm

Asynchronous Event Information - I/O Command Specific Status

Constants

NVME_AER_CSS_NVM_RESERVATION

Reservation Log Page Available

NVME_AER_CSS_NVM_SANITIZE_COMPLETED

Sanitize Operation Completed

NVME_AER_CSS_NVM_UNEXPECTED_SANITIZE_DEALLOC

Sanitize Operation Completed With Unexpected Deallocation

enum nvme_ae_info_notice

Asynchronous Event Information - Notice

Constants

NVME_AER_NOTICE_NS_CHANGED

Namespace Attribute Changed

NVME_AER_NOTICE_FW_ACT_STARTING

Firmware Activation Starting

NVME_AER_NOTICE_TELEMETRY

Telemetry Log Changed

NVME_AER_NOTICE_ANA

Asymmetric Namespace Access Change

NVME_AER_NOTICE_PL_EVENT

Predictable Latency Event Aggregate Log Change

NVME_AER_NOTICE_LBA_STATUS_ALERT

LBA Status Information Alert

NVME_AER_NOTICE_EG_EVENT

Endurance Group Event Aggregate Log Page Change

NVME_AER_NOTICE_DISC_CHANGED

Discovery Log Page Change

enum nvme_subsys_type

Type of the NVM subsystem.

Constants

NVME_NQN_DISC

Discovery type target subsystem. Describes a referral to another Discovery Service composed of Discovery controllers that provide additional discovery records. Multiple Referral entries may be reported for each Discovery Service (if that Discovery Service has multiple NVM subsystem ports or supports multiple protocols).

NVME_NQN_NVME

NVME type target subsystem. Describes an NVM subsystem whose controllers may have attached namespaces (an NVM subsystem that is not composed of Discovery controllers). Multiple NVM Subsystem entries may be reported for each NVM subsystem if that NVM subsystem has multiple NVM subsystem ports.

NVME_NQN_CURR

Current Discovery type target subsystem. Describes this Discovery subsystem (the Discovery Service that contains the controller processing the Get Log Page command). Multiple Current Discovery Subsystem entries may be reported for this Discovery subsystem if the current Discovery subsystem has multiple NVM subsystem ports.

enum nvmf_disc_eflags

Discovery Log Page entry flags.

Constants

NVMF_DISC_EFLAGS_NONE

Indicates that none of the DUPRETINFO or EPCSD features are supported.

NVMF_DISC_EFLAGS_DUPRETINFO

Duplicate Returned Information (DUPRETINFO): Indicates that using the content of this entry to access this Discovery Service returns the same information that is returned by using the content of other entries in this log page that also have this flag set.

NVMF_DISC_EFLAGS_EPCSD

Explicit Persistent Connection Support for Discovery (EPCSD): Indicates that Explicit Persistent Connections are supported for the Discovery controller.

NVMF_DISC_EFLAGS_NCC

No CDC Connectivity (NCC): If set to ‘1’, then no DDC that describes this entry is currently connected to the CDC. If cleared to ‘0’, then at least one DDC that describes this entry is currently connected to the CDC. If the Discovery controller returning this log page is not a CDC, then this bit shall be cleared to ‘0’ and should be ignored by the host.

union nvmf_tsas

Transport Specific Address Subtype

Definition

union nvmf_tsas {
  char common[NVMF_TSAS_SIZE];
  struct rdma {
    __u8 qptype;
    __u8 prtype;
    __u8 cms;
    __u8 rsvd3[5];
    __le16 pkey;
    __u8 rsvd10[246];
  } rdma;
  struct tcp {
    __u8 sectype;
  } tcp;
};

Members

common

Common transport specific attributes

rdma

RDMA transport specific attribute settings

tcp

TCP transport specific attribute settings

struct nvmf_disc_log_entry

Discovery Log Page entry

Definition

struct nvmf_disc_log_entry {
  __u8 trtype;
  __u8 adrfam;
  __u8 subtype;
  __u8 treq;
  __le16 portid;
  __le16 cntlid;
  __le16 asqsz;
  __le16 eflags;
  __u8 rsvd12[20];
  char trsvcid[NVMF_TRSVCID_SIZE];
  __u8 rsvd64[192];
  char subnqn[NVME_NQN_LENGTH];
  char traddr[NVMF_TRADDR_SIZE];
  union nvmf_tsas tsas;
};

Members

trtype

Transport Type (TRTYPE): Specifies the NVMe Transport type. See enum nvmf_trtype.

adrfam

Address Family (ADRFAM): Specifies the address family. See enum nvmf_addr_family.

subtype

Subsystem Type (SUBTYPE): Specifies the type of the NVM subsystem that is indicated in this entry. See enum nvme_subsys_type.

treq

Transport Requirements (TREQ): Indicates requirements for the NVMe Transport. See enum nvmf_treq.

portid

Port ID (PORTID): Specifies a particular NVM subsystem port. Different NVMe Transports or address families may utilize the same Port ID value (e.g. a Port ID may support both iWARP and RoCE).

cntlid

Controller ID (CNTLID): Specifies the controller ID. If the NVM subsystem uses a dynamic controller model, then this field shall be set to FFFFh. If the NVM subsystem uses a static controller model, then this field may be set to a specific controller ID (values 0h to FFEFh are valid). If the NVM subsystem uses a static controller model and the value indicated is FFFEh, then the host should remember the Controller ID returned as part of the Fabrics Connect command in order to re-establish an association in the future with the same controller.

asqsz

Admin Max SQ Size (ASQSZ): Specifies the maximum size of an Admin Submission Queue. This applies to all controllers in the NVM subsystem. The value shall be a minimum of 32 entries.

eflags

Entry Flags (EFLAGS): Indicates additional information related to the current entry. See enum nvmf_disc_eflags.

rsvd12

Reserved

trsvcid

Transport Service Identifier (TRSVCID): Specifies the NVMe Transport service identifier as an ASCII string. The NVMe Transport service identifier is specified by the associated NVMe Transport binding specification.

rsvd64

Reserved

subnqn

NVM Subsystem Qualified Name (SUBNQN): NVMe Qualified Name (NQN) that uniquely identifies the NVM subsystem. For a subsystem, if that Discovery subsystem has a unique NQN (i.e., the NVM Subsystem NVMe Qualified Name (SUBNQN) field in that Discovery subsystem’s Identify Controller data structure contains a unique NQN value), then the value returned shall be that unique NQN. If the Discovery subsystem does not have a unique NQN, then the value returned shall be the well-known Discovery Service NQN (nqn.2014-08.org.nvmexpress.discovery).

traddr

Transport Address (TRADDR): Specifies the address of the NVM subsystem that may be used for a Connect command as an ASCII string. The Address Family field describes the reference for parsing this field.

tsas

Transport specific attribute settings

enum nvmf_trtype

Transport Type codes for Discovery Log Page entry TRTYPE field

Constants

NVMF_TRTYPE_UNSPECIFIED

Not indicated

NVMF_TRTYPE_RDMA

RDMA

NVMF_TRTYPE_FC

Fibre Channel

NVMF_TRTYPE_TCP

TCP

NVMF_TRTYPE_LOOP

Intra-host Transport (i.e., loopback), reserved for host usage.

NVMF_TRTYPE_MAX

Maximum value for enum nvmf_trtype

enum nvmf_addr_family

Address Family codes for Discovery Log Page entry ADRFAM field

Constants

NVMF_ADDR_FAMILY_PCI

PCIe

NVMF_ADDR_FAMILY_IP4

AF_INET: IPv4 address family.

NVMF_ADDR_FAMILY_IP6

AF_INET6: IPv6 address family.

NVMF_ADDR_FAMILY_IB

AF_IB: InfiniBand address family.

NVMF_ADDR_FAMILY_FC

Fibre Channel address family.

NVMF_ADDR_FAMILY_LOOP

Intra-host Transport (i.e., loopback), reserved for host usage.

enum nvmf_treq

Transport Requirements codes for Discovery Log Page entry TREQ field

Constants

NVMF_TREQ_NOT_SPECIFIED

Not specified

NVMF_TREQ_REQUIRED

Required

NVMF_TREQ_NOT_REQUIRED

Not Required

NVMF_TREQ_DISABLE_SQFLOW

SQ flow control disable supported

enum nvmf_rdma_qptype

RDMA QP Service Type codes for Discovery Log Page entry TSAS RDMA_QPTYPE field

Constants

NVMF_RDMA_QPTYPE_CONNECTED

Reliable Connected

NVMF_RDMA_QPTYPE_DATAGRAM

Reliable Datagram

enum nvmf_rdma_prtype

RDMA Provider Type codes for Discovery Log Page entry TSAS RDMA_PRTYPE field

Constants

NVMF_RDMA_PRTYPE_NOT_SPECIFIED

No Provider Specified

NVMF_RDMA_PRTYPE_IB

InfiniBand

NVMF_RDMA_PRTYPE_ROCE

InfiniBand RoCE

NVMF_RDMA_PRTYPE_ROCEV2

InfiniBand RoCEV2

NVMF_RDMA_PRTYPE_IWARP

iWARP

enum nvmf_rdma_cms

RDMA Connection Management Service Type codes for Discovery Log Page entry TSAS RDMA_CMS field

Constants

NVMF_RDMA_CMS_RDMA_CM

Sockets based endpoint addressing

enum nvmf_tcp_sectype

Transport Specific Address Subtype Definition for NVMe/TCP Transport

Constants

NVMF_TCP_SECTYPE_NONE

No Security

NVMF_TCP_SECTYPE_TLS

Transport Layer Security version 1.2

NVMF_TCP_SECTYPE_TLS13

Transport Layer Security version 1.3 or a subsequent version. The TLS protocol negotiates the version and cipher suite for each TCP connection.

enum nvmf_log_discovery_lid_support

Discovery log specific support

Constants

NVMF_LOG_DISC_LID_NONE

None

NVMF_LOG_DISC_LID_EXTDLPES

Extended Discovery Log Page Entries Supported

NVMF_LOG_DISC_LID_PLEOS

Port Local Entries Only Supported

NVMF_LOG_DISC_LID_ALLSUBES

All NVM Subsystem Entries Supported

enum nvmf_log_discovery_lsp

Discovery log specific field

Constants

NVMF_LOG_DISC_LSP_NONE

None

NVMF_LOG_DISC_LSP_EXTDLPE

Extended Discovery Log Page Entries

NVMF_LOG_DISC_LSP_PLEO

Port Local Entries Only

NVMF_LOG_DISC_LSP_ALLSUBE

All NVM Subsystem Entries

struct nvmf_discovery_log

Discovery Log Page (Log Identifier 70h)

Definition

struct nvmf_discovery_log {
  __le64 genctr;
  __le64 numrec;
  __le16 recfmt;
  __u8 rsvd14[1006];
  struct nvmf_disc_log_entry entries[];
};

Members

genctr

Generation Counter (GENCTR): Indicates the version of the discovery information, starting at a value of 0h. For each change in the Discovery Log Page, this counter is incremented by one. If the value of this field is FFFFFFFF_FFFFFFFFh, then the field shall be cleared to 0h when incremented (i.e., rolls over to 0h).

numrec

Number of Records (NUMREC): Indicates the number of records contained in the log.

recfmt

Record Format (RECFMT): Specifies the format of the Discovery Log Page. If a new format is defined, this value is incremented by one. The format of the record specified in this definition shall be 0h.

rsvd14

Reserved

entries

Discovery Log Page Entries - see struct nvmf_disc_log_entry.

enum nvmf_dim_tas

Discovery Information Management Task

Constants

NVMF_DIM_TAS_REGISTER

Register

NVMF_DIM_TAS_DEREGISTER

Deregister

NVMF_DIM_TAS_UPDATE

Update

enum nvmf_dim_entfmt

Discovery Information Management Entry Format

Constants

NVMF_DIM_ENTFMT_BASIC

Basic discovery information entry

NVMF_DIM_ENTFMT_EXTENDED

Extended discovery information entry

enum nvmf_dim_etype

Discovery Information Management Entity Type

Constants

NVMF_DIM_ETYPE_HOST

Host

NVMF_DIM_ETYPE_DDC

Direct Discovery controller

NVMF_DIM_ETYPE_CDC

Centralized Discovery controller

enum nvmf_exattype

Extended Attribute Type

Constants

NVMF_EXATTYPE_HOSTID

Host Identifier

NVMF_EXATTYPE_SYMNAME

Symblic Name

struct nvmf_ext_attr

Extended Attribute (EXAT)

Definition

struct nvmf_ext_attr {
  __le16 exattype;
  __le16 exatlen;
  __u8 exatval[];
};

Members

exattype

Extended Attribute Type (EXATTYPE) - see enum nvmf_exattype

exatlen

Extended Attribute Length (EXATLEN)

exatval

Extended Attribute Value (EXATVAL) - size allocated for array must be a multiple of 4 bytes

struct nvmf_ext_die

Extended Discovery Information Entry (DIE)

Definition

struct nvmf_ext_die {
  __u8 trtype;
  __u8 adrfam;
  __u8 subtype;
  __u8 treq;
  __le16 portid;
  __le16 cntlid;
  __le16 asqsz;
  __u8 rsvd10[22];
  char trsvcid[NVMF_TRSVCID_SIZE];
  __u8 resv64[192];
  char nqn[NVME_NQN_LENGTH];
  char traddr[NVMF_TRADDR_SIZE];
  union nvmf_tsas         tsas;
  __le32 tel;
  __le16 numexat;
  __u8 resv1030[2];
  struct nvmf_ext_attr    exat[];
};

Members

trtype

Transport Type (enum nvmf_trtype)

adrfam

Address Family (enum nvmf_addr_family)

subtype

Subsystem Type (enum nvme_subsys_type)

treq

Transport Requirements (enum nvmf_treq)

portid

Port ID

cntlid

Controller ID

asqsz

Admin Max SQ Size

rsvd10

Reserved

trsvcid

Transport Service Identifier

resv64

Reserved

nqn

NVM Qualified Name

traddr

Transport Address

tsas

Transport Specific Address Subtype (union nvmf_tsas)

tel

Total Entry Length

numexat

Number of Extended Attributes

resv1030

Reserved

exat

Extended Attributes 0 (struct nvmf_ext_attr)

union nvmf_die

Discovery Information Entry (DIE)

Definition

union nvmf_die {
  struct nvmf_disc_log_entry      basic[0];
  struct nvmf_ext_die             extended;
};

Members

basic

Basic format (struct nvmf_disc_log_entry)

extended

Extended format (struct nvmf_ext_die)

Description

Depending on the ENTFMT specified in the DIM, DIEs can be entered with the Basic or Extended formats. For Basic format, each entry has a fixed length. Therefore, the “basic” field defined below can be accessed as a C array. For the Extended format, however, each entry is of variable length (TEL). Therefore, the “extended” field defined below cannot be accessed as a C array. Instead, the “extended” field is akin to a linked-list, where one can “walk” through the list. To move to the next entry, one simply adds the current entry’s length (TEL) to the “walk” pointer. The number of entries in the list is specified by NUMENT. Although extended entries are of a variable lengths (TEL), TEL is always a multiple of 4 bytes.

struct nvmf_dim_data

Discovery Information Management (DIM) - Data

Definition

struct nvmf_dim_data {
  __le32 tdl;
  __u8 rsvd4[4];
  __le64 nument;
  __le16 entfmt;
  __le16 etype;
  __u8 portlcl;
  __u8 rsvd21;
  __le16 ektype;
  char eid[NVME_NQN_LENGTH];
  char ename[NVMF_ENAME_LEN];
  char ever[NVMF_EVER_LEN];
  __u8 rsvd600[424];
  union nvmf_die  die[];
};

Members

tdl

Total Data Length

rsvd4

Reserved

nument

Number of entries

entfmt

Entry Format (enum nvmf_dim_entfmt)

etype

Entity Type (enum nvmf_dim_etype)

portlcl

Port Local

rsvd21

Reserved

ektype

Entry Key Type

eid

Entity Identifier (e.g. Host NQN)

ename

Entity Name (e.g. hostname)

ever

Entity Version (e.g. OS Name/Version)

rsvd600

Reserved

die

Discovery Information Entry (see nument above)

struct nvmf_connect_data

Data payload for the ‘connect’ command

Definition

struct nvmf_connect_data {
  __u8 hostid[16];
  __le16 cntlid;
  char rsvd4[238];
  char subsysnqn[NVME_NQN_LENGTH];
  char hostnqn[NVME_NQN_LENGTH];
  char rsvd5[256];
};

Members

hostid

Host ID of the connecting host

cntlid

Requested controller ID

rsvd4

Reserved

subsysnqn

Subsystem NQN to connect to

hostnqn

Host NQN of the connecting host

rsvd5

Reserved

struct nvme_mi_read_nvm_ss_info

NVM Subsystem Information Data Structure

Definition

struct nvme_mi_read_nvm_ss_info {
  __u8 nump;
  __u8 mjr;
  __u8 mnr;
  __u8 rsvd3[29];
};

Members

nump

Number of Ports

mjr

NVMe-MI Major Version Number

mnr

NVMe-MI Minor Version Number

rsvd3

Reserved

struct nvme_mi_port_pcie

PCIe Port Specific Data

Definition

struct nvme_mi_port_pcie {
  __u8 mps;
  __u8 sls;
  __u8 cls;
  __u8 mlw;
  __u8 nlw;
  __u8 pn;
  __u8 rsvd14[18];
};

Members

mps

PCIe Maximum Payload Size

sls

PCIe Supported Link Speeds Vector

cls

PCIe Current Link Speed

mlw

PCIe Maximum Link Width

nlw

PCIe Negotiated Link Width

pn

PCIe Port Number

rsvd14

Reserved

struct nvme_mi_port_smb

SMBus Port Specific Data

Definition

struct nvme_mi_port_smb {
  __u8 vpd_addr;
  __u8 mvpd_freq;
  __u8 mme_addr;
  __u8 mme_freq;
  __u8 nvmebm;
  __u8 rsvd13[19];
};

Members

vpd_addr

Current VPD SMBus/I2C Address

mvpd_freq

Maximum VPD Access SMBus/I2C Frequency

mme_addr

Current Management Endpoint SMBus/I2C Address

mme_freq

Maximum Management Endpoint SMBus/I2C Frequency

nvmebm

NVMe Basic Management

rsvd13

Reserved

struct nvme_mi_read_port_info

Port Information Data Structure

Definition

struct nvme_mi_read_port_info {
  __u8 portt;
  __u8 rsvd1;
  __le16 mmctptus;
  __le32 meb;
  union {
    struct nvme_mi_port_pcie pcie;
    struct nvme_mi_port_smb smb;
  };
};

Members

portt

Port Type

rsvd1

Reserved

mmctptus

Maximum MCTP Transmission Unit Size

meb

Management Endpoint Buffer Size

{unnamed_union}

anonymous

pcie

PCIe Port Specific Data

smb

SMBus Port Specific Data

struct nvme_mi_read_ctrl_info

Controller Information Data Structure

Definition

struct nvme_mi_read_ctrl_info {
  __u8 portid;
  __u8 rsvd1[4];
  __u8 prii;
  __le16 pri;
  __le16 vid;
  __le16 did;
  __le16 ssvid;
  __le16 ssid;
  __u8 rsvd16[16];
};

Members

portid

Port Identifier

rsvd1

Reserved

prii

PCIe Routing ID Information

pri

PCIe Routing ID

vid

PCI Vendor ID

did

PCI Device ID

ssvid

PCI Subsystem Vendor ID

ssid

PCI Subsystem Device ID

rsvd16

Reserved

struct nvme_mi_osc

Optionally Supported Command Data Structure

Definition

struct nvme_mi_osc {
  __u8 type;
  __u8 opc;
};

Members

type

Command Type

opc

Opcode

struct nvme_mi_read_sc_list

Management Endpoint Buffer Supported Command List Data Structure

Definition

struct nvme_mi_read_sc_list {
  __le16 numcmd;
  struct nvme_mi_osc cmds[];
};

Members

numcmd

Number of Commands

cmds

MEB supported Command Data Structure. See struct nvme_mi_osc

struct nvme_mi_nvm_ss_health_status

Subsystem Management Data Structure

Definition

struct nvme_mi_nvm_ss_health_status {
  __u8 nss;
  __u8 sw;
  __u8 ctemp;
  __u8 pdlu;
  __le16 ccs;
  __u8 rsvd8[2];
};

Members

nss

NVM Subsystem Status

sw

Smart Warnings

ctemp

Composite Temperature

pdlu

Percentage Drive Life Used

ccs

Composite Controller Status

rsvd8

Reserved

enum nvme_mi_ccs

Get State Control Primitive Success Response Fields - Control Primitive Specific Response

Constants

NVME_MI_CCS_RDY

Ready

NVME_MI_CCS_CFS

Controller Fatal Status

NVME_MI_CCS_SHST

Shutdown Status

NVME_MI_CCS_NSSRO

NVM Subsystem Reset Occurred

NVME_MI_CCS_CECO

Controller Enable Change Occurred

NVME_MI_CCS_NAC

Namespace Attribute Changed

NVME_MI_CCS_FA

Firmware Activated

NVME_MI_CCS_CSTS

Controller Status Change

NVME_MI_CCS_CTEMP

Composite Temperature Change

NVME_MI_CCS_PDLU

Percentage Used

NVME_MI_CCS_SPARE

Available Spare

NVME_MI_CCS_CCWARN

Critical Warning

struct nvme_mi_ctrl_health_status

Controller Health Data Structure (CHDS)

Definition

struct nvme_mi_ctrl_health_status {
  __le16 ctlid;
  __le16 csts;
  __le16 ctemp;
  __u8 pdlu;
  __u8 spare;
  __u8 cwarn;
  __u8 rsvd9[7];
};

Members

ctlid

Controller Identifier

csts

Controller Status

ctemp

Composite Temperature

pdlu

Percentage Used

spare

Available Spare

cwarn

Critical Warning

rsvd9

Reserved

enum nvme_mi_csts

Controller Health Data Structure (CHDS) - Controller Status (CSTS)

Constants

NVME_MI_CSTS_RDY

Ready

NVME_MI_CSTS_CFS

Controller Fatal Status

NVME_MI_CSTS_SHST

Shutdown Status

NVME_MI_CSTS_NSSRO

NVM Subsystem Reset Occurred

NVME_MI_CSTS_CECO

Controller Enable Change Occurred

NVME_MI_CSTS_NAC

Namespace Attribute Changed

NVME_MI_CSTS_FA

Firmware Activated

enum nvme_mi_cwarn

Controller Health Data Structure (CHDS) - Critical Warning (CWARN)

Constants

NVME_MI_CWARN_ST

Spare Threshold

NVME_MI_CWARN_TAUT

Temperature Above or Under Threshold

NVME_MI_CWARN_RD

Reliability Degraded

NVME_MI_CWARN_RO

Read Only

NVME_MI_CWARN_VMBF

Volatile Memory Backup Failed

struct nvme_mi_vpd_mra

NVMe MultiRecord Area

Definition

struct nvme_mi_vpd_mra {
  __u8 nmravn;
  __u8 ff;
  __u8 rsvd7[6];
  __u8 i18vpwr;
  __u8 m18vpwr;
  __u8 i33vpwr;
  __u8 m33vpwr;
  __u8 rsvd17;
  __u8 m33vapsr;
  __u8 i5vapsr;
  __u8 m5vapsr;
  __u8 i12vapsr;
  __u8 m12vapsr;
  __u8 mtl;
  __u8 tnvmcap[16];
  __u8 rsvd37[27];
};

Members

nmravn

NVMe MultiRecord Area Version Number

ff

Form Factor

rsvd7

Reserved

i18vpwr

Initial 1.8 V Power Supply Requirements

m18vpwr

Maximum 1.8 V Power Supply Requirements

i33vpwr

Initial 3.3 V Power Supply Requirements

m33vpwr

Maximum 3.3 V Power Supply Requirements

rsvd17

Reserved

m33vapsr

Maximum 3.3 Vi aux Power Supply Requirements

i5vapsr

Initial 5 V Power Supply Requirements

m5vapsr

Maximum 5 V Power Supply Requirements

i12vapsr

Initial 12 V Power Supply Requirements

m12vapsr

Maximum 12 V Power Supply Requirements

mtl

Maximum Thermal Load

tnvmcap

Total NVM Capacity

rsvd37

Reserved

struct nvme_mi_vpd_ppmra

NVMe PCIe Port MultiRecord Area

Definition

struct nvme_mi_vpd_ppmra {
  __u8 nppmravn;
  __u8 pn;
  __u8 ppi;
  __u8 ls;
  __u8 mlw;
  __u8 mctp;
  __u8 refccap;
  __u8 pi;
  __u8 rsvd13[3];
};

Members

nppmravn

NVMe PCIe Port MultiRecord Area Version Number

pn

PCIe Port Number

ppi

Port Information

ls

PCIe Link Speed

mlw

PCIe Maximum Link Width

mctp

MCTP Support

refccap

Ref Clk Capability

pi

Port Identifier

rsvd13

Reserved

struct nvme_mi_vpd_telem

Vital Product Data Element Descriptor

Definition

struct nvme_mi_vpd_telem {
  __u8 type;
  __u8 rev;
  __u8 len;
  __u8 data[0];
};

Members

type

Type of the Element Descriptor

rev

Revision of the Element Descriptor

len

Number of bytes in the Element Descriptor

data

Type-specific information associated with the Element Descriptor

enum nvme_mi_elem

Element Descriptor Types

Constants

NVME_MI_ELEM_EED

Extended Element Descriptor

NVME_MI_ELEM_USCE

Upstream Connector Element Descriptor

NVME_MI_ELEM_ECED

Expansion Connector Element Descriptor

NVME_MI_ELEM_LED

Label Element Descriptor

NVME_MI_ELEM_SMBMED

SMBus/I2C Mux Element Descriptor

NVME_MI_ELEM_PCIESED

PCIe Switch Element Descriptor

NVME_MI_ELEM_NVMED

NVM Subsystem Element Descriptor

struct nvme_mi_vpd_tra

Vital Product Data Topology MultiRecord

Definition

struct nvme_mi_vpd_tra {
  __u8 vn;
  __u8 rsvd6;
  __u8 ec;
  struct nvme_mi_vpd_telem elems[0];
};

Members

vn

Version Number

rsvd6

Reserved

ec

Element Count

elems

Element Descriptor

struct nvme_mi_vpd_mr_common

NVMe MultiRecord Area

Definition

struct nvme_mi_vpd_mr_common {
  __u8 type;
  __u8 rf;
  __u8 rlen;
  __u8 rchksum;
  __u8 hchksum;
  union {
    struct nvme_mi_vpd_mra nmra;
    struct nvme_mi_vpd_ppmra ppmra;
    struct nvme_mi_vpd_tra tmra;
  };
};

Members

type

NVMe Record Type ID

rf

Record Format

rlen

Record Length

rchksum

Record Checksum

hchksum

Header Checksum

{unnamed_union}

anonymous

nmra

NVMe MultiRecord Area

ppmra

NVMe PCIe Port MultiRecord Area

tmra

Topology MultiRecord Area

struct nvme_mi_vpd_hdr

Vital Product Data Common Header

Definition

struct nvme_mi_vpd_hdr {
  __u8 ipmiver;
  __u8 iuaoff;
  __u8 ciaoff;
  __u8 biaoff;
  __u8 piaoff;
  __u8 mrioff;
  __u8 rsvd6;
  __u8 chchk;
  __u8 vpd[];
};

Members

ipmiver

IPMI Format Version Number

iuaoff

Internal Use Area Starting Offset

ciaoff

Chassis Info Area Starting Offset

biaoff

Board Info Area Starting Offset

piaoff

Product Info Area Starting Offset

mrioff

MultiRecord Info Area Starting Offset

rsvd6

Reserved

chchk

Common Header Checksum

vpd

Vital Product Data

enum nvme_status_field

Defines all parts of the nvme status field: status code, status code type, and additional flags.

Constants

NVME_SCT_GENERIC

Generic errors applicable to multiple opcodes

NVME_SCT_CMD_SPECIFIC

Errors associated to a specific opcode

NVME_SCT_MEDIA

Errors associated with media and data integrity

NVME_SCT_PATH

Errors associated with the paths connection

NVME_SCT_VS

Vendor specific errors

NVME_SCT_MASK

Mask to get the value of the Status Code Type

NVME_SCT_SHIFT

Shift value to get the value of the Status Code Type

NVME_SC_MASK

Mask to get the value of the status code.

NVME_SC_SHIFT

Shift value to get the value of the status code.

NVME_SC_SUCCESS

Successful Completion: The command completed without error.

NVME_SC_INVALID_OPCODE

Invalid Command Opcode: A reserved coded value or an unsupported value in the command opcode field.

NVME_SC_INVALID_FIELD

Invalid Field in Command: A reserved coded value or an unsupported value in a defined field.

NVME_SC_CMDID_CONFLICT

Command ID Conflict: The command identifier is already in use.

NVME_SC_DATA_XFER_ERROR

Data Transfer Error: Transferring the data or metadata associated with a command experienced an error.

NVME_SC_POWER_LOSS

Commands Aborted due to Power Loss Notification: Indicates that the command was aborted due to a power loss notification.

NVME_SC_INTERNAL

Internal Error: The command was not completed successfully due to an internal error.

NVME_SC_ABORT_REQ

Command Abort Requested: The command was aborted due to an Abort command being received that specified the Submission Queue Identifier and Command Identifier of this command.

NVME_SC_ABORT_QUEUE

Command Aborted due to SQ Deletion: The command was aborted due to a Delete I/O Submission Queue request received for the Submission Queue to which the command was submitted.

NVME_SC_FUSED_FAIL

Command Aborted due to Failed Fused Command: The command was aborted due to the other command in a fused operation failing.

NVME_SC_FUSED_MISSING

Aborted due to Missing Fused Command: The fused command was aborted due to the adjacent submission queue entry not containing a fused command that is the other command.

NVME_SC_INVALID_NS

Invalid Namespace or Format: The namespace or the format of that namespace is invalid.

NVME_SC_CMD_SEQ_ERROR

Command Sequence Error: The command was aborted due to a protocol violation in a multi-command sequence.

NVME_SC_SGL_INVALID_LAST

Invalid SGL Segment Descriptor: The command includes an invalid SGL Last Segment or SGL Segment descriptor.

NVME_SC_SGL_INVALID_COUNT

Invalid Number of SGL Descriptors: There is an SGL Last Segment descriptor or an SGL Segment descriptor in a location other than the last descriptor of a segment based on the length indicated.

NVME_SC_SGL_INVALID_DATA

Data SGL Length Invalid: This may occur if the length of a Data SGL is too short. This may occur if the length of a Data SGL is too long and the controller does not support SGL transfers longer than the amount of data to be transferred as indicated in the SGL Support field of the Identify Controller data structure.

NVME_SC_SGL_INVALID_METADATA

Metadata SGL Length Invalid: This may occur if the length of a Metadata SGL is too short. This may occur if the length of a Metadata SGL is too long and the controller does not support SGL transfers longer than the amount of data to be transferred as indicated in the SGL Support field of the Identify Controller data structure.

NVME_SC_SGL_INVALID_TYPE

SGL Descriptor Type Invalid: The type of an SGL Descriptor is a type that is not supported by the controller.

NVME_SC_CMB_INVALID_USE

Invalid Use of Controller Memory Buffer: The attempted use of the Controller Memory Buffer is not supported by the controller.

NVME_SC_PRP_INVALID_OFFSET

PRP Offset Invalid: The Offset field for a PRP entry is invalid.

NVME_SC_AWU_EXCEEDED

Atomic Write Unit Exceeded: The length specified exceeds the atomic write unit size.

NVME_SC_OP_DENIED

Operation Denied: The command was denied due to lack of access rights. Refer to the appropriate security specification.

NVME_SC_SGL_INVALID_OFFSET

SGL Offset Invalid: The offset specified in a descriptor is invalid. This may occur when using capsules for data transfers in NVMe over Fabrics implementations and an invalid offset in the capsule is specified.

NVME_SC_HOSTID_FORMAT

Host Identifier Inconsistent Format: The NVM subsystem detected the simultaneous use of 64- bit and 128-bit Host Identifier values on different controllers.

NVME_SC_KAT_EXPIRED

Keep Alive Timer Expired: The Keep Alive Timer expired.

NVME_SC_KAT_INVALID

Keep Alive Timeout Invalid: The Keep Alive Timeout value specified is invalid.

NVME_SC_CMD_ABORTED_PREMEPT

Command Aborted due to Preempt and Abort: The command was aborted due to a Reservation Acquire command.

NVME_SC_SANITIZE_FAILED

Sanitize Failed: The most recent sanitize operation failed and no recovery action has been successfully completed.

NVME_SC_SANITIZE_IN_PROGRESS

Sanitize In Progress: The requested function (e.g., command) is prohibited while a sanitize operation is in progress.

NVME_SC_SGL_INVALID_GRANULARITY

SGL Data Block Granularity Invalid: The Address alignment or Length granularity for an SGL Data Block descriptor is invalid.

NVME_SC_CMD_IN_CMBQ_NOT_SUPP

Command Not Supported for Queue in CMB: The implementation does not support submission of the command to a Submission Queue in the Controller Memory Buffer or command completion to a Completion Queue in the Controller Memory Buffer.

NVME_SC_NS_WRITE_PROTECTED

Namespace is Write Protected: The command is prohibited while the namespace is write protected as a result of a change in the namespace write protection state as defined by the Namespace Write Protection State Machine.

NVME_SC_CMD_INTERRUPTED

Command Interrupted: Command processing was interrupted and the controller is unable to successfully complete the command. The host should retry the command.

NVME_SC_TRAN_TPORT_ERROR

Transient Transport Error: A transient transport error was detected. If the command is retried on the same controller, the command is likely to succeed. A command that fails with a transient transport error four or more times should be treated as a persistent transport error that is not likely to succeed if retried on the same controller.

NVME_SC_PROHIBITED_BY_CMD_AND_FEAT

Command Prohibited by Command and Feature Lockdown: The command was aborted due to command execution being prohibited by the Command and Feature Lockdown.

NVME_SC_ADMIN_CMD_MEDIA_NOT_READY

Admin Command Media Not Ready: The Admin command requires access to media and the media is not ready.

NVME_SC_FDP_DISABLED

Command is not allowed when Flexible Data Placement is disabled.

NVME_SC_INVALID_PLACEMENT_HANDLE_LIST

The Placement Handle List is invalid due to invalid Reclaim Unit Handle Identifier or valid Reclaim Unit Handle Identifier but restricted or the Placement Handle List number of entries exceeded the maximum number allowed.

NVME_SC_LBA_RANGE

LBA Out of Range: The command references an LBA that exceeds the size of the namespace.

NVME_SC_CAP_EXCEEDED

Capacity Exceeded: Execution of the command has caused the capacity of the namespace to be exceeded.

NVME_SC_NS_NOT_READY

Namespace Not Ready: The namespace is not ready to be accessed as a result of a condition other than a condition that is reported as an Asymmetric Namespace Access condition.

NVME_SC_RESERVATION_CONFLICT

Reservation Conflict: The command was aborted due to a conflict with a reservation held on the accessed namespace.

NVME_SC_FORMAT_IN_PROGRESS

Format In Progress: A Format NVM command is in progress on the namespace.

NVME_SC_CQ_INVALID

Completion Queue Invalid: The Completion Queue identifier specified in the command does not exist.

NVME_SC_QID_INVALID

Invalid Queue Identifier: The creation of the I/O Completion Queue failed due to an invalid queue identifier specified as part of the command. An invalid queue identifier is one that is currently in use or one that is outside the range supported by the controller.

NVME_SC_QUEUE_SIZE

Invalid Queue Size: The host attempted to create an I/O Completion Queue with an invalid number of entries.

NVME_SC_ABORT_LIMIT

Abort Command Limit Exceeded: The number of concurrently outstanding Abort commands has exceeded the limit indicated in the Identify Controller data structure.

NVME_SC_ABORT_MISSING

Abort Command is missing: The abort command is missing.

NVME_SC_ASYNC_LIMIT

Asynchronous Event Request Limit Exceeded: The number of concurrently outstanding Asynchronous Event Request commands has been exceeded.

NVME_SC_FIRMWARE_SLOT

Invalid Firmware Slot: The firmware slot indicated is invalid or read only. This error is indicated if the firmware slot exceeds the number supported.

NVME_SC_FIRMWARE_IMAGE

Invalid Firmware Image: The firmware image specified for activation is invalid and not loaded by the controller.

NVME_SC_INVALID_VECTOR

Invalid Interrupt Vector: The creation of the I/O Completion Queue failed due to an invalid interrupt vector specified as part of the command.

NVME_SC_INVALID_LOG_PAGE

Invalid Log Page: The log page indicated is invalid. This error condition is also returned if a reserved log page is requested.

NVME_SC_INVALID_FORMAT

Invalid Format: The LBA Format specified is not supported.

NVME_SC_FW_NEEDS_CONV_RESET

Firmware Activation Requires Conventional Reset: The firmware commit was successful, however, activation of the firmware image requires a conventional reset.

NVME_SC_INVALID_QUEUE

Invalid Queue Deletion: Invalid I/O Completion Queue specified to delete.

NVME_SC_FEATURE_NOT_SAVEABLE

Feature Identifier Not Saveable: The Feature Identifier specified does not support a saveable value.

NVME_SC_FEATURE_NOT_CHANGEABLE

Feature Not Changeable: The Feature Identifier is not able to be changed.

NVME_SC_FEATURE_NOT_PER_NS

Feature Not Namespace Specific: The Feature Identifier specified is not namespace specific. The Feature Identifier settings apply across all namespaces.

NVME_SC_FW_NEEDS_SUBSYS_RESET

Firmware Activation Requires NVM Subsystem Reset: The firmware commit was successful, however, activation of the firmware image requires an NVM Subsystem.

NVME_SC_FW_NEEDS_RESET

Firmware Activation Requires Controller Level Reset: The firmware commit was successful; however, the image specified does not support being activated without a reset.

NVME_SC_FW_NEEDS_MAX_TIME

Firmware Activation Requires Maximum Time Violation: The image specified if activated immediately would exceed the Maximum Time for Firmware Activation (MTFA) value reported in Identify Controller.

NVME_SC_FW_ACTIVATE_PROHIBITED

Firmware Activation Prohibited: The image specified is being prohibited from activation by the controller for vendor specific reasons.

NVME_SC_OVERLAPPING_RANGE

Overlapping Range: The downloaded firmware image has overlapping ranges.

NVME_SC_NS_INSUFFICIENT_CAP

Namespace Insufficient Capacity: Creating the namespace requires more free space than is currently available.

NVME_SC_NS_ID_UNAVAILABLE

Namespace Identifier Unavailable: The number of namespaces supported has been exceeded.

NVME_SC_NS_ALREADY_ATTACHED

Namespace Already Attached: The controller is already attached to the namespace specified.

NVME_SC_NS_IS_PRIVATE

Namespace Is Private: The namespace is private and is already attached to one controller.

NVME_SC_NS_NOT_ATTACHED

Namespace Not Attached: The request to detach the controller could not be completed because the controller is not attached to the namespace.

NVME_SC_THIN_PROV_NOT_SUPP

Thin Provisioning Not Supported: Thin provisioning is not supported by the controller.

NVME_SC_CTRL_LIST_INVALID

Controller List Invalid: The controller list provided contains invalid controller ids.

NVME_SC_SELF_TEST_IN_PROGRESS

Device Self-test In Progress: The controller or NVM subsystem already has a device self-test operation in process.

NVME_SC_BP_WRITE_PROHIBITED

Boot Partition Write Prohibited: The command is trying to modify a locked Boot Partition.

NVME_SC_INVALID_CTRL_ID

Invalid Controller Identifier:

NVME_SC_INVALID_SEC_CTRL_STATE

Invalid Secondary Controller State

NVME_SC_INVALID_CTRL_RESOURCES

Invalid Number of Controller Resources

NVME_SC_INVALID_RESOURCE_ID

Invalid Resource Identifier

NVME_SC_PMR_SAN_PROHIBITED

Sanitize Prohibited While Persistent Memory Region is Enabled

NVME_SC_ANA_GROUP_ID_INVALID

ANA Group Identifier Invalid: The specified ANA Group Identifier (ANAGRPID) is not supported in the submitted command.

NVME_SC_ANA_ATTACH_FAILED

ANA Attach Failed: The controller is not attached to the namespace as a result of an ANA condition.

NVME_SC_INSUFFICIENT_CAP

Insufficient Capacity: Requested operation requires more free space than is currently available.

NVME_SC_NS_ATTACHMENT_LIMIT_EXCEEDED

Namespace Attachment Limit Exceeded: Attaching the ns to a controller causes max number of ns attachments allowed to be exceeded.

NVME_SC_PROHIBIT_CMD_EXEC_NOT_SUPPORTED

Prohibition of Command Execution Not Supported

NVME_SC_IOCS_NOT_SUPPORTED

I/O Command Set Not Supported

NVME_SC_IOCS_NOT_ENABLED

I/O Command Set Not Enabled

NVME_SC_IOCS_COMBINATION_REJECTED

I/O Command Set Combination Rejected

NVME_SC_INVALID_IOCS

Invalid I/O Command Set

NVME_SC_ID_UNAVAILABLE

Identifier Unavailable

NVME_SC_INVALID_DISCOVERY_INFO

The discovery information provided in one or more extended discovery information entries is not applicable for the type of entity selected in the Entity Type (ETYPE) field of the Discovery Information Management command data portion’s header.

NVME_SC_ZONING_DATA_STRUCT_LOCKED

The requested Zoning data structure is locked on the CDC.

NVME_SC_ZONING_DATA_STRUCT_NOTFND

The requested Zoning data structure does not exist on the CDC.

NVME_SC_INSUFFICIENT_DISC_RES

The number of discover information entries provided in the data portion of the Discovery Information Management command for a registration task (i.e., TAS field cleared to 0h) exceeds the available capacity for new discovery information entries on the CDC or DDC. This may be a transient condition.

NVME_SC_REQSTD_FUNCTION_DISABLED

Fabric Zoning is not enabled on the CDC

NVME_SC_ZONEGRP_ORIGINATOR_INVLD

The NQN contained in the ZoneGroup Originator field does not match the Host NQN used by the DDC to connect to the CDC.

NVME_SC_BAD_ATTRIBUTES

Conflicting Dataset Management Attributes

NVME_SC_INVALID_PI

Invalid Protection Information

NVME_SC_READ_ONLY

Attempted Write to Read Only Range

NVME_SC_CMD_SIZE_LIMIT_EXCEEDED

Command Size Limit Exceeded

NVME_SC_INCOMPATIBLE_NS

Incompatible Namespace or Format: At least one source namespace and the destination namespace have incompatible formats.

NVME_SC_FAST_COPY_NOT_POSSIBLE

Fast Copy Not Possible: The Fast Copy Only (FCO) bit was set to ‘1’ in a Source Range entry and the controller was not able to use fast copy operations to copy the specified data.

NVME_SC_OVERLAPPING_IO_RANGE

Overlapping I/O Range: A source logical block range overlaps the destination logical block range.

NVME_SC_INSUFFICIENT_RESOURCES

Insufficient Resources: A resource shortage prevented the controller from performing the requested copy.

NVME_SC_CONNECT_FORMAT

Incompatible Format: The NVM subsystem does not support the record format specified by the host.

NVME_SC_CONNECT_CTRL_BUSY

Controller Busy: The controller is already associated with a host.

NVME_SC_CONNECT_INVALID_PARAM

Connect Invalid Parameters: One or more of the command parameters.

NVME_SC_CONNECT_RESTART_DISC

Connect Restart Discovery: The NVM subsystem requested is not available.

NVME_SC_CONNECT_INVALID_HOST

Connect Invalid Host: The host is either not allowed to establish an association to any controller in the NVM subsystem or the host is not allowed to establish an association to the specified controller

NVME_SC_DISCONNECT_INVALID_QTYPE

Invalid Queue Type: The command was sent on the wrong queue type.

NVME_SC_DISCOVERY_RESTART

Discover Restart: The snapshot of the records is now invalid or out of date.

NVME_SC_AUTH_REQUIRED

Authentication Required: NVMe in-band authentication is required and the queue has not yet been authenticated.

NVME_SC_ZNS_INVALID_OP_REQUEST

Invalid Zone Operation Request: The operation requested is invalid. This may be due to various conditions, including: attempting to allocate a ZRWA when a zone is not in the ZSE:Empty state; or invalid Flush Explicit ZRWA Range Send Zone Action operation.

NVME_SC_ZNS_ZRWA_RESOURCES_UNAVAILABLE

ZRWA Resources Unavailable: No ZRWAs are available.

NVME_SC_ZNS_BOUNDARY_ERROR

Zone Boundary Error: The command specifies logical blocks in more than one zone.

NVME_SC_ZNS_FULL

Zone Is Full: The accessed zone is in the ZSF:Full state.

NVME_SC_ZNS_READ_ONLY

Zone Is Read Only: The accessed zone is in the ZSRO:Read Only state.

NVME_SC_ZNS_OFFLINE

Zone Is Offline: The accessed zone is in the ZSO:Offline state.

NVME_SC_ZNS_INVALID_WRITE

Zone Invalid Write: The write to a zone was not at the write pointer.

NVME_SC_ZNS_TOO_MANY_ACTIVE

Too Many Active Zones: The controller does not allow additional active zones.

NVME_SC_ZNS_TOO_MANY_OPENS

Too Many Open Zones: The controller does not allow additional open zones.

NVME_SC_ZNS_INVAL_TRANSITION

Invalid Zone State Transition: The request is not a valid zone state transition.

NVME_SC_WRITE_FAULT

Write Fault: The write data could not be committed to the media.

NVME_SC_READ_ERROR

Unrecovered Read Error: The read data could not be recovered from the media.

NVME_SC_GUARD_CHECK

End-to-end Guard Check Error: The command was aborted due to an end-to-end guard check failure.

NVME_SC_APPTAG_CHECK

End-to-end Application Tag Check Error: The command was aborted due to an end-to-end application tag check failure.

NVME_SC_REFTAG_CHECK

End-to-end Reference Tag Check Error: The command was aborted due to an end-to-end reference tag check failure.

NVME_SC_COMPARE_FAILED

Compare Failure: The command failed due to a miscompare during a Compare command.

NVME_SC_ACCESS_DENIED

Access Denied: Access to the namespace and/or LBA range is denied due to lack of access rights.

NVME_SC_UNWRITTEN_BLOCK

Deallocated or Unwritten Logical Block: The command failed due to an attempt to read from or verify an LBA range containing a deallocated or unwritten logical block.

NVME_SC_STORAGE_TAG_CHECK

End-to-End Storage Tag Check Error: The command was aborted due to an end-to-end storage tag check failure.

NVME_SC_ANA_INTERNAL_PATH_ERROR

Internal Path Error: The command was not completed as the result of a controller internal error that is specific to the controller processing the command.

NVME_SC_ANA_PERSISTENT_LOSS

Asymmetric Access Persistent Loss: The requested function (e.g., command) is not able to be performed as a result of the relationship between the controller and the namespace being in the ANA Persistent Loss state.

NVME_SC_ANA_INACCESSIBLE

Asymmetric Access Inaccessible: The requested function (e.g., command) is not able to be performed as a result of the relationship between the controller and the namespace being in the ANA Inaccessible state.

NVME_SC_ANA_TRANSITION

Asymmetric Access Transition: The requested function (e.g., command) is not able to be performed as a result of the relationship between the controller and the namespace transitioning between Asymmetric Namespace Access states.

NVME_SC_CTRL_PATH_ERROR

Controller Pathing Error: A pathing error was detected by the controller.

NVME_SC_HOST_PATH_ERROR

Host Pathing Error: A pathing error was detected by the host.

NVME_SC_CMD_ABORTED_BY_HOST

Command Aborted By Host: The command was aborted as a result of host action.

NVME_SC_CRD

Mask to get value of Command Retry Delay index

NVME_SC_MORE

More bit. If set, more status information for this command as part of the Error Information log that may be retrieved with the Get Log Page command.

NVME_SC_DNR

Do Not Retry bit. If set, if the same command is re-submitted to any controller in the NVM subsystem, then that re-submitted command is expected to fail.

__u16 nvme_status_code_type(__u16 status_field)

Returns the NVMe Status Code Type

Parameters

__u16 status_field

The NVMe Completion Queue Entry’s Status Field See enum nvme_status_field

Return

status code type

__u16 nvme_status_code(__u16 status_field)

Returns the NVMe Status Code

Parameters

__u16 status_field

The NVMe Completion Queue Entry’s Status Field See enum nvme_status_field

Return

status code

enum nvme_status_type

type encoding for NVMe return values, when represented as an int.

Constants

NVME_STATUS_TYPE_SHIFT

shift value for status bits

NVME_STATUS_TYPE_MASK

mask value for status bits

NVME_STATUS_TYPE_NVME

NVMe command status value, typically from CDW3

NVME_STATUS_TYPE_MI

NVMe-MI header status

Description

The nvme_* api returns an int, with negative values indicating an internal or syscall error, zero signifying success, positive values representing the NVMe status.

That latter case (the NVMe status) may represent status values from different parts of the transport/controller/etc, and are at most 16 bits of data. So, we use the most-significant 3 bits of the signed int to indicate which type of status this is.

__u32 nvme_status_get_type(int status)

extract the type from a nvme_* return value

Parameters

int status

the (non-negative) return value from the NVMe API

Return

the type component of the status.

__u32 nvme_status_get_value(int status)

extract the status value from a nvme_* return value

Parameters

int status

the (non-negative) return value from the NVMe API

Return

the value component of the status; the set of values will depend on the status type.

__u32 nvme_status_equals(int status, enum nvme_status_type type, unsigned int value)

helper to check a status against a type and value

Parameters

int status

the (non-negative) return value from the NVMe API

enum nvme_status_type type

the status type

unsigned int value

the status value

Return

true if status is of the specified type and value

enum nvme_admin_opcode

Known NVMe admin opcodes

Constants

nvme_admin_delete_sq

Delete I/O Submission Queue

nvme_admin_create_sq

Create I/O Submission Queue

nvme_admin_get_log_page

Get Log Page

nvme_admin_delete_cq

Delete I/O Completion Queue

nvme_admin_create_cq

Create I/O Completion Queue

nvme_admin_identify

Identify

nvme_admin_abort_cmd

Abort

nvme_admin_set_features

Set Features

nvme_admin_get_features

Get Features

nvme_admin_async_event

Asynchronous Event Request

nvme_admin_ns_mgmt

Namespace Management

nvme_admin_fw_commit

Firmware Commit

nvme_admin_fw_activate

Firmware Commit

nvme_admin_fw_download

Firmware Image Download

nvme_admin_dev_self_test

Device Self-test

nvme_admin_ns_attach

Namespace Attachment

nvme_admin_keep_alive

Keep Alive

nvme_admin_directive_send

Directive Send

nvme_admin_directive_recv

Directive Receive

nvme_admin_virtual_mgmt

Virtualization Management

nvme_admin_nvme_mi_send

NVMe-MI Send

nvme_admin_nvme_mi_recv

NVMe-MI Receive

nvme_admin_capacity_mgmt

Capacity Management

nvme_admin_discovery_info_mgmt

Discovery Information Management (DIM)

nvme_admin_fabric_zoning_recv

Fabric Zoning Receive

nvme_admin_lockdown

Lockdown

nvme_admin_fabric_zoning_lookup

Fabric Zoning Lookup

nvme_admin_fabric_zoning_send

Fabric Zoning Send

nvme_admin_dbbuf

Doorbell Buffer Config

nvme_admin_fabrics

Fabrics Commands

nvme_admin_format_nvm

Format NVM

nvme_admin_security_send

Security Send

nvme_admin_security_recv

Security Receive

nvme_admin_sanitize_nvm

Sanitize

nvme_admin_get_lba_status

Get LBA Status

enum nvme_identify_cns

Identify - CNS Values

Constants

NVME_IDENTIFY_CNS_NS

Identify Namespace data structure

NVME_IDENTIFY_CNS_CTRL

Identify Controller data structure

NVME_IDENTIFY_CNS_NS_ACTIVE_LIST

Active Namespace ID list

NVME_IDENTIFY_CNS_NS_DESC_LIST

Namespace Identification Descriptor list

NVME_IDENTIFY_CNS_NVMSET_LIST

NVM Set List

NVME_IDENTIFY_CNS_CSI_NS

I/O Command Set specific Identify Namespace data structure

NVME_IDENTIFY_CNS_CSI_CTRL

I/O Command Set specific Identify Controller data structure

NVME_IDENTIFY_CNS_CSI_NS_ACTIVE_LIST

Active Namespace ID list associated with the specified I/O Command Set

NVME_IDENTIFY_CNS_CSI_INDEPENDENT_ID_NS

I/O Command Set Independent Identify

NVME_IDENTIFY_CNS_NS_USER_DATA_FORMAT

Namespace user data format

NVME_IDENTIFY_CNS_CSI_NS_USER_DATA_FORMAT

I/O Command Set specific user data format Namespace data structure

NVME_IDENTIFY_CNS_ALLOCATED_NS_LIST

Allocated Namespace ID list

NVME_IDENTIFY_CNS_ALLOCATED_NS

Identify Namespace data structure for the specified allocated NSID

NVME_IDENTIFY_CNS_NS_CTRL_LIST

Controller List of controllers attached to the specified NSID

NVME_IDENTIFY_CNS_CTRL_LIST

Controller List of controllers that exist in the NVM subsystem

NVME_IDENTIFY_CNS_PRIMARY_CTRL_CAP

Primary Controller Capabilities data structure for the specified primary controller

NVME_IDENTIFY_CNS_SECONDARY_CTRL_LIST

Secondary Controller list of controllers associated with the primary controller processing the command

NVME_IDENTIFY_CNS_NS_GRANULARITY

A Namespace Granularity List

NVME_IDENTIFY_CNS_UUID_LIST

A UUID List

NVME_IDENTIFY_CNS_DOMAIN_LIST

Domain List

NVME_IDENTIFY_CNS_ENDURANCE_GROUP_ID

Endurance Group List

NVME_IDENTIFY_CNS_CSI_ALLOCATED_NS_LIST

I/O Command Set specific Allocated Namespace ID list

NVME_IDENTIFY_CNS_CSI_ID_NS_DATA_STRUCTURE

I/O Command Set specific ID Namespace Data Structure for Allocated Namespace ID

NVME_IDENTIFY_CNS_COMMAND_SET_STRUCTURE

Base Specification 2.0a section 5.17.2.21

enum nvme_cmd_get_log_lid

Get Log Page -Log Page Identifiers

Constants

NVME_LOG_LID_SUPPORTED_LOG_PAGES

Supported Log Pages

NVME_LOG_LID_ERROR

Error Information

NVME_LOG_LID_SMART

SMART / Health Information

NVME_LOG_LID_FW_SLOT

Firmware Slot Information

NVME_LOG_LID_CHANGED_NS

Changed Namespace List

NVME_LOG_LID_CMD_EFFECTS

Commands Supported and Effects

NVME_LOG_LID_DEVICE_SELF_TEST

Device Self-test

NVME_LOG_LID_TELEMETRY_HOST

Telemetry Host-Initiated

NVME_LOG_LID_TELEMETRY_CTRL

Telemetry Controller-Initiated

NVME_LOG_LID_ENDURANCE_GROUP

Endurance Group Information

NVME_LOG_LID_PREDICTABLE_LAT_NVMSET

Predictable Latency Per NVM Set

NVME_LOG_LID_PREDICTABLE_LAT_AGG

Predictable Latency Event Aggregate

NVME_LOG_LID_ANA

Asymmetric Namespace Access

NVME_LOG_LID_PERSISTENT_EVENT

Persistent Event Log

NVME_LOG_LID_LBA_STATUS

LBA Status Information

NVME_LOG_LID_ENDURANCE_GRP_EVT

Endurance Group Event Aggregate

NVME_LOG_LID_MEDIA_UNIT_STATUS

Media Unit Status

NVME_LOG_LID_SUPPORTED_CAP_CONFIG_LIST

Supported Capacity Configuration Lis

NVME_LOG_LID_FID_SUPPORTED_EFFECTS

Feature Identifiers Supported and Effects

NVME_LOG_LID_MI_CMD_SUPPORTED_EFFECTS

NVMe-MI Commands Supported and Effects

NVME_LOG_LID_CMD_AND_FEAT_LOCKDOWN

Command and Feature Lockdown

NVME_LOG_LID_BOOT_PARTITION

Boot Partition

NVME_LOG_LID_PHY_RX_EOM

Physical Interface Receiver Eye Opening Measurement

NVME_LOG_LID_FDP_CONFIGS

FDP Configurations

NVME_LOG_LID_FDP_RUH_USAGE

Reclaim Unit Handle Usage

NVME_LOG_LID_FDP_STATS

FDP Statistics

NVME_LOG_LID_FDP_EVENTS

FDP Events

NVME_LOG_LID_DISCOVER

Discovery

NVME_LOG_LID_RESERVATION

Reservation Notification

NVME_LOG_LID_SANITIZE

Sanitize Status

NVME_LOG_LID_ZNS_CHANGED_ZONES

Changed Zone List

enum nvme_features_id

Features - Feature Identifiers

Constants

NVME_FEAT_FID_ARBITRATION

Arbitration

NVME_FEAT_FID_POWER_MGMT

Power Management

NVME_FEAT_FID_LBA_RANGE

LBA Range Type

NVME_FEAT_FID_TEMP_THRESH

Temperature Threshold

NVME_FEAT_FID_ERR_RECOVERY

Error Recovery

NVME_FEAT_FID_VOLATILE_WC

Volatile Write Cache

NVME_FEAT_FID_NUM_QUEUES

Number of Queues

NVME_FEAT_FID_IRQ_COALESCE

Interrupt Coalescing

NVME_FEAT_FID_IRQ_CONFIG

Interrupt Vector Configuration

NVME_FEAT_FID_WRITE_ATOMIC

Write Atomicity Normal

NVME_FEAT_FID_ASYNC_EVENT

Asynchronous Event Configuration

NVME_FEAT_FID_AUTO_PST

Autonomous Power State Transition

NVME_FEAT_FID_HOST_MEM_BUF

Host Memory Buffer

NVME_FEAT_FID_TIMESTAMP

Timestamp

NVME_FEAT_FID_KATO

Keep Alive Timer

NVME_FEAT_FID_HCTM

Host Controlled Thermal Management

NVME_FEAT_FID_NOPSC

Non-Operational Power State Config

NVME_FEAT_FID_RRL

Read Recovery Level Config

NVME_FEAT_FID_PLM_CONFIG

Predictable Latency Mode Config

NVME_FEAT_FID_PLM_WINDOW

Predictable Latency Mode Window

NVME_FEAT_FID_LBA_STS_INTERVAL

LBA Status Information Report Interval

NVME_FEAT_FID_HOST_BEHAVIOR

Host Behavior Support

NVME_FEAT_FID_SANITIZE

Endurance Group Event Configuration

NVME_FEAT_FID_ENDURANCE_EVT_CFG

Endurance Group Event Configuration

NVME_FEAT_FID_IOCS_PROFILE

I/O Command Set Profile

NVME_FEAT_FID_SPINUP_CONTROL

Spinup Control

NVME_FEAT_FID_FDP

Flexible Data Placement

NVME_FEAT_FID_FDP_EVENTS

FDP Events

NVME_FEAT_FID_ENH_CTRL_METADATA

Enhanced Controller Metadata

NVME_FEAT_FID_CTRL_METADATA

Controller Metadata

NVME_FEAT_FID_NS_METADATA

Namespace Metadata

NVME_FEAT_FID_SW_PROGRESS

Software Progress Marker

NVME_FEAT_FID_HOST_ID

Host Identifier

NVME_FEAT_FID_RESV_MASK

Reservation Notification Mask

NVME_FEAT_FID_RESV_PERSIST

Reservation Persistence

NVME_FEAT_FID_WRITE_PROTECT

Namespace Write Protection Config

enum nvme_feat

Features Access Shifts/Masks values

Constants

NVME_FEAT_ARBITRATION_BURST_SHIFT

NVME_FEAT_ARBITRATION_BURST_MASK

NVME_FEAT_ARBITRATION_LPW_SHIFT

NVME_FEAT_ARBITRATION_LPW_MASK

NVME_FEAT_ARBITRATION_MPW_SHIFT

NVME_FEAT_ARBITRATION_MPW_MASK

NVME_FEAT_ARBITRATION_HPW_SHIFT

NVME_FEAT_ARBITRATION_HPW_MASK

NVME_FEAT_PWRMGMT_PS_SHIFT

NVME_FEAT_PWRMGMT_PS_MASK

NVME_FEAT_PWRMGMT_WH_SHIFT

NVME_FEAT_PWRMGMT_WH_MASK

NVME_FEAT_LBAR_NR_SHIFT

NVME_FEAT_LBAR_NR_MASK

NVME_FEAT_TT_TMPTH_SHIFT

NVME_FEAT_TT_TMPTH_MASK

NVME_FEAT_TT_TMPSEL_SHIFT

NVME_FEAT_TT_TMPSEL_MASK

NVME_FEAT_TT_THSEL_SHIFT

NVME_FEAT_TT_THSEL_MASK

NVME_FEAT_ERROR_RECOVERY_TLER_SHIFT

NVME_FEAT_ERROR_RECOVERY_TLER_MASK

NVME_FEAT_ERROR_RECOVERY_DULBE_SHIFT

NVME_FEAT_ERROR_RECOVERY_DULBE_MASK

NVME_FEAT_VWC_WCE_SHIFT

NVME_FEAT_VWC_WCE_MASK

NVME_FEAT_NRQS_NSQR_SHIFT

NVME_FEAT_NRQS_NSQR_MASK

NVME_FEAT_NRQS_NCQR_SHIFT

NVME_FEAT_NRQS_NCQR_MASK

NVME_FEAT_IRQC_THR_SHIFT

NVME_FEAT_IRQC_THR_MASK

NVME_FEAT_IRQC_TIME_SHIFT

NVME_FEAT_IRQC_TIME_MASK

NVME_FEAT_ICFG_IV_SHIFT

NVME_FEAT_ICFG_IV_MASK

NVME_FEAT_ICFG_CD_SHIFT

NVME_FEAT_ICFG_CD_MASK

NVME_FEAT_WA_DN_SHIFT

NVME_FEAT_WA_DN_MASK

NVME_FEAT_AE_SMART_SHIFT

NVME_FEAT_AE_SMART_MASK

NVME_FEAT_AE_NAN_SHIFT

NVME_FEAT_AE_NAN_MASK

NVME_FEAT_AE_FW_SHIFT

NVME_FEAT_AE_FW_MASK

NVME_FEAT_AE_TELEM_SHIFT

NVME_FEAT_AE_TELEM_MASK

NVME_FEAT_AE_ANA_SHIFT

NVME_FEAT_AE_ANA_MASK

NVME_FEAT_AE_PLA_SHIFT

NVME_FEAT_AE_PLA_MASK

NVME_FEAT_AE_LBAS_SHIFT

NVME_FEAT_AE_LBAS_MASK

NVME_FEAT_AE_EGA_SHIFT

NVME_FEAT_AE_EGA_MASK

NVME_FEAT_APST_APSTE_SHIFT

NVME_FEAT_APST_APSTE_MASK

NVME_FEAT_HMEM_EHM_SHIFT

NVME_FEAT_HMEM_EHM_MASK

NVME_FEAT_HCTM_TMT2_SHIFT

NVME_FEAT_HCTM_TMT2_MASK

NVME_FEAT_HCTM_TMT1_SHIFT

NVME_FEAT_HCTM_TMT1_MASK

NVME_FEAT_NOPS_NOPPME_SHIFT

NVME_FEAT_NOPS_NOPPME_MASK

NVME_FEAT_RRL_RRL_SHIFT

NVME_FEAT_RRL_RRL_MASK

NVME_FEAT_PLM_PLME_SHIFT

NVME_FEAT_PLM_PLME_MASK

NVME_FEAT_PLMW_WS_SHIFT

NVME_FEAT_PLMW_WS_MASK

NVME_FEAT_LBAS_LSIRI_SHIFT

NVME_FEAT_LBAS_LSIRI_MASK

NVME_FEAT_LBAS_LSIPI_SHIFT

NVME_FEAT_LBAS_LSIPI_MASK

NVME_FEAT_SC_NODRM_SHIFT

NVME_FEAT_SC_NODRM_MASK

NVME_FEAT_EG_ENDGID_SHIFT

NVME_FEAT_EG_ENDGID_MASK

NVME_FEAT_EG_EGCW_SHIFT

NVME_FEAT_EG_EGCW_MASK

NVME_FEAT_SPM_PBSLC_SHIFT

NVME_FEAT_SPM_PBSLC_MASK

NVME_FEAT_HOSTID_EXHID_SHIFT

NVME_FEAT_HOSTID_EXHID_MASK

NVME_FEAT_RM_REGPRE_SHIFT

NVME_FEAT_RM_REGPRE_MASK

NVME_FEAT_RM_RESREL_SHIFT

NVME_FEAT_RM_RESREL_MASK

NVME_FEAT_RM_RESPRE_SHIFT

NVME_FEAT_RM_RESPRE_MASK

NVME_FEAT_RP_PTPL_SHIFT

NVME_FEAT_RP_PTPL_MASK

NVME_FEAT_WP_WPS_SHIFT

NVME_FEAT_WP_WPS_MASK

NVME_FEAT_IOCSP_IOCSCI_SHIFT

NVME_FEAT_IOCSP_IOCSCI_MASK

NVME_FEAT_FDP_ENABLED_SHIFT

NVME_FEAT_FDP_ENABLED_MASK

NVME_FEAT_FDP_INDEX_SHIFT

NVME_FEAT_FDP_INDEX_MASK

NVME_FEAT_FDP_EVENTS_ENABLE_SHIFT

NVME_FEAT_FDP_EVENTS_ENABLE_MASK

enum nvme_get_features_sel

Get Features - Select

Constants

NVME_GET_FEATURES_SEL_CURRENT

Current value

NVME_GET_FEATURES_SEL_DEFAULT

Default value

NVME_GET_FEATURES_SEL_SAVED

Saved value

NVME_GET_FEATURES_SEL_SUPPORTED

Supported capabilities

enum nvme_cmd_format_mset

Format NVM - Metadata Settings

Constants

NVME_FORMAT_MSET_SEPARATE

indicates that the metadata is transferred as part of a separate buffer.

NVME_FORMAT_MSET_EXTENDED

indicates that the metadata is transferred as part of an extended data LBA.

enum nvme_cmd_format_pi

Format NVM - Protection Information

Constants

NVME_FORMAT_PI_DISABLE

Protection information is not enabled.

NVME_FORMAT_PI_TYPE1

Protection information is enabled, Type 1.

NVME_FORMAT_PI_TYPE2

Protection information is enabled, Type 2.

NVME_FORMAT_PI_TYPE3

Protection information is enabled, Type 3.

enum nvme_cmd_format_pil

Format NVM - Protection Information Location

Constants

NVME_FORMAT_PIL_LAST

Protection information is transferred as the last bytes of metadata.

NVME_FORMAT_PIL_FIRST

Protection information is transferred as the first bytes of metadata.

enum nvme_cmd_format_ses

Format NVM - Secure Erase Settings

Constants

NVME_FORMAT_SES_NONE

No secure erase operation requested.

NVME_FORMAT_SES_USER_DATA_ERASE

User Data Erase: All user data shall be erased, contents of the user data after the erase is indeterminate (e.g. the user data may be zero filled, one filled, etc.). If a User Data Erase is requested and all affected user data is encrypted, then the controller is allowed to use a cryptographic erase to perform the requested User Data Erase.

NVME_FORMAT_SES_CRYPTO_ERASE

Cryptographic Erase: All user data shall be erased cryptographically. This is accomplished by deleting the encryption key.

enum nvme_ns_mgmt_sel

Namespace Management - Select

Constants

NVME_NS_MGMT_SEL_CREATE

Namespace Create selection

NVME_NS_MGMT_SEL_DELETE

Namespace Delete selection

enum nvme_ns_attach_sel

Namespace Attachment - Select

Constants

NVME_NS_ATTACH_SEL_CTRL_ATTACH

Namespace attach selection

NVME_NS_ATTACH_SEL_CTRL_DEATTACH

Namespace detach selection

enum nvme_fw_commit_ca

Firmware Commit - Commit Action

Constants

NVME_FW_COMMIT_CA_REPLACE

Downloaded image replaces the existing image, if any, in the specified Firmware Slot. The newly placed image is not activated.

NVME_FW_COMMIT_CA_REPLACE_AND_ACTIVATE

Downloaded image replaces the existing image, if any, in the specified Firmware Slot. The newly placed image is activated at the next Controller Level Reset.

NVME_FW_COMMIT_CA_SET_ACTIVE

The existing image in the specified Firmware Slot is activated at the next Controller Level Reset.

NVME_FW_COMMIT_CA_REPLACE_AND_ACTIVATE_IMMEDIATE

Downloaded image replaces the existing image, if any, in the specified Firmware Slot and is then activated immediately. If there is not a newly downloaded image, then the existing image in the specified firmware slot is activated immediately.

NVME_FW_COMMIT_CA_REPLACE_BOOT_PARTITION

Downloaded image replaces the Boot Partition specified by the Boot Partition ID field.

NVME_FW_COMMIT_CA_ACTIVATE_BOOT_PARTITION

Mark the Boot Partition specified in the BPID field as active and update BPINFO.ABPID.

enum nvme_directive_dtype

Directive Types

Constants

NVME_DIRECTIVE_DTYPE_IDENTIFY

Identify directive type

NVME_DIRECTIVE_DTYPE_STREAMS

Streams directive type

enum nvme_directive_receive_doper

Directive Receive Directive Operation

Constants

NVME_DIRECTIVE_RECEIVE_IDENTIFY_DOPER_PARAM

NVME_DIRECTIVE_RECEIVE_STREAMS_DOPER_PARAM

NVME_DIRECTIVE_RECEIVE_STREAMS_DOPER_STATUS

NVME_DIRECTIVE_RECEIVE_STREAMS_DOPER_RESOURCE

enum nvme_directive_send_doper

Directive Send Directive Operation

Constants

NVME_DIRECTIVE_SEND_IDENTIFY_DOPER_ENDIR

NVME_DIRECTIVE_SEND_STREAMS_DOPER_RELEASE_IDENTIFIER

NVME_DIRECTIVE_SEND_STREAMS_DOPER_RELEASE_RESOURCE

enum nvme_directive_send_identify_endir

Enable Directive

Constants

NVME_DIRECTIVE_SEND_IDENTIFY_ENDIR_DISABLE

NVME_DIRECTIVE_SEND_IDENTIFY_ENDIR_ENABLE

enum nvme_sanitize_sanact

Sanitize Action

Constants

NVME_SANITIZE_SANACT_EXIT_FAILURE

Exit Failure Mode.

NVME_SANITIZE_SANACT_START_BLOCK_ERASE

Start a Block Erase sanitize operation.

NVME_SANITIZE_SANACT_START_OVERWRITE

Start an Overwrite sanitize operation.

NVME_SANITIZE_SANACT_START_CRYPTO_ERASE

Start a Crypto Erase sanitize operation.

enum nvme_dst_stc

Action taken by the Device Self-test command

Constants

NVME_DST_STC_SHORT

Start a short device self-test operation

NVME_DST_STC_LONG

Start an extended device self-test operation

NVME_DST_STC_VS

Start a vendor specific device self-test operation

NVME_DST_STC_ABORT

Abort device self-test operation

enum nvme_virt_mgmt_act

Virtualization Management - Action

Constants

NVME_VIRT_MGMT_ACT_PRIM_CTRL_FLEX_ALLOC

Primary Controller Flexible Allocation

NVME_VIRT_MGMT_ACT_OFFLINE_SEC_CTRL

Secondary Controller Offline

NVME_VIRT_MGMT_ACT_ASSIGN_SEC_CTRL

Secondary Controller Assign

NVME_VIRT_MGMT_ACT_ONLINE_SEC_CTRL

Secondary Controller Online

enum nvme_virt_mgmt_rt

Virtualization Management - Resource Type

Constants

NVME_VIRT_MGMT_RT_VQ_RESOURCE

VQ Resources

NVME_VIRT_MGMT_RT_VI_RESOURCE

VI Resources

enum nvme_ns_write_protect_cfg

Write Protection - Write Protection State

Constants

NVME_NS_WP_CFG_NONE

No Write Protect

NVME_NS_WP_CFG_PROTECT

Write Protect

NVME_NS_WP_CFG_PROTECT_POWER_CYCLE

Write Protect Until Power Cycle

NVME_NS_WP_CFG_PROTECT_PERMANENT

Permanent Write Protect

enum nvme_log_ana_lsp

Asymmetric Namespace Access - Return Groups Only

Constants

NVME_LOG_ANA_LSP_RGO_NAMESPACES

NVME_LOG_ANA_LSP_RGO_GROUPS_ONLY

enum nvme_log_phy_rx_eom_action

Physical Interface Receiver Eye Opening Measurement Action

Constants

NVME_LOG_PHY_RX_EOM_READ

Read Log Data

NVME_LOG_PHY_RX_EOM_START_READ

Start Measurement and Read Log Data

NVME_LOG_PHY_RX_EOM_ABORT_CLEAR

Abort Measurement and Clear Log Data

enum nvme_log_phy_rx_eom_quality

Physical Interface Receiver Eye Opening Measurement Quality

Constants

NVME_LOG_PHY_RX_EOM_GOOD

<= Better Quality

NVME_LOG_PHY_RX_EOM_BETTER

<= Best Quality, >= Good Quality

NVME_LOG_PHY_RX_EOM_BEST

>= Better Quality

enum nvme_pevent_log_action

Persistent Event Log - Action

Constants

NVME_PEVENT_LOG_READ

Read Log Data

NVME_PEVENT_LOG_EST_CTX_AND_READ

Establish Context and Read Log Data

NVME_PEVENT_LOG_RELEASE_CTX

Release Context

enum nvme_feat_tmpthresh_thsel

Temperature Threshold - Threshold Type Select

Constants

NVME_FEATURE_TEMPTHRESH_THSEL_OVER

Over temperature threshold select

NVME_FEATURE_TEMPTHRESH_THSEL_UNDER

Under temperature threshold select

enum nvme_features_async_event_config_flags

Asynchronous Event Configuration configuration flags

Constants

NVME_FEATURE_AENCFG_SMART_CRIT_SPARE

NVME_FEATURE_AENCFG_SMART_CRIT_TEMPERATURE

NVME_FEATURE_AENCFG_SMART_CRIT_DEGRADED

NVME_FEATURE_AENCFG_SMART_CRIT_READ_ONLY

NVME_FEATURE_AENCFG_SMART_CRIT_VOLATILE_BACKUP

NVME_FEATURE_AENCFG_SMART_CRIT_READ_ONLY_PMR

NVME_FEATURE_AENCFG_NOTICE_NAMESPACE_ATTRIBUTES

NVME_FEATURE_AENCFG_NOTICE_FIRMWARE_ACTIVATION

NVME_FEATURE_AENCFG_NOTICE_TELEMETRY_LOG

NVME_FEATURE_AENCFG_NOTICE_ANA_CHANGE

NVME_FEATURE_AENCFG_NOTICE_PL_EVENT

NVME_FEATURE_AENCFG_NOTICE_LBA_STATUS

NVME_FEATURE_AENCFG_NOTICE_EG_EVENT

NVME_FEATURE_AENCFG_NOTICE_DISCOVERY_CHANGE

enum nvme_feat_plm_window_select

Predictable Latency Per NVM Set Log

Constants

NVME_FEATURE_PLM_DTWIN

Deterministic Window select

NVME_FEATURE_PLM_NDWIN

Non-Deterministic Window select

enum nvme_feat_resv_notify_flags

Reservation Notification Configuration

Constants

NVME_FEAT_RESV_NOTIFY_REGPRE

Mask Registration Preempted Notification

NVME_FEAT_RESV_NOTIFY_RESREL

Mask Reservation Released Notification

NVME_FEAT_RESV_NOTIFY_RESPRE

Mask Reservation Preempted Notification

enum nvme_feat_nswpcfg_state

Write Protection - Write Protection State

Constants

NVME_FEAT_NS_NO_WRITE_PROTECT

No Write Protect

NVME_FEAT_NS_WRITE_PROTECT

Write Protect

NVME_FEAT_NS_WRITE_PROTECT_PWR_CYCLE

Write Protect Until Power Cycle

NVME_FEAT_NS_WRITE_PROTECT_PERMANENT

Permanent Write Protect

enum nvme_fctype

Fabrics Command Types

Constants

nvme_fabrics_type_property_set

Property set

nvme_fabrics_type_connect

Connect

nvme_fabrics_type_property_get

Property Get

nvme_fabrics_type_auth_send

Authentication Send

nvme_fabrics_type_auth_receive

Authentication Receive

nvme_fabrics_type_disconnect

Disconnect

enum nvme_data_tfr

Data transfer direction of the command

Constants

NVME_DATA_TFR_NO_DATA_TFR

No data transfer

NVME_DATA_TFR_HOST_TO_CTRL

Host to controller

NVME_DATA_TFR_CTRL_TO_HOST

Controller to host

NVME_DATA_TFR_BIDIRECTIONAL

Bidirectional

enum nvme_io_opcode

Opcodes for I/O Commands

Constants

nvme_cmd_flush

Flush

nvme_cmd_write

Write

nvme_cmd_read

Read

nvme_cmd_write_uncor

Write Uncorrectable

nvme_cmd_compare

Compare

nvme_cmd_write_zeroes

write Zeros

nvme_cmd_dsm

Dataset Management

nvme_cmd_verify

Verify

nvme_cmd_resv_register

Reservation Register

nvme_cmd_resv_report

Reservation Report

nvme_cmd_resv_acquire

Reservation Acquire

nvme_cmd_io_mgmt_recv

I/O Management Receive

nvme_cmd_resv_release

Reservation Release

nvme_cmd_cancel

Cancel

nvme_cmd_copy

Copy

nvme_cmd_io_mgmt_send

I/O Management Send

nvme_zns_cmd_mgmt_send

Zone Management Send

nvme_zns_cmd_mgmt_recv

Zone Management Receive

nvme_zns_cmd_append

Zone Append

enum nvme_io_control_flags

I/O control flags

Constants

NVME_IO_DTYPE_STREAMS

Directive Type Streams

NVME_IO_STC

Storage Tag Check

NVME_IO_DEAC

Deallocate

NVME_IO_ZNS_APPEND_PIREMAP

Protection Information Remap

NVME_IO_PRINFO_PRCHK_REF

Protection Information Check Reference Tag

NVME_IO_PRINFO_PRCHK_APP

Protection Information Check Application Tag

NVME_IO_PRINFO_PRCHK_GUARD

Protection Information Check Guard field

NVME_IO_PRINFO_PRACT

Protection Information Action

NVME_IO_FUA

Force Unit Access

NVME_IO_LR

Limited Retry

enum nvme_io_dsm_flags

Dataset Management flags

Constants

NVME_IO_DSM_FREQ_UNSPEC

No frequency information provided

NVME_IO_DSM_FREQ_TYPICAL

Typical number of reads and writes expected for this LBA range

NVME_IO_DSM_FREQ_RARE

Infrequent writes and infrequent reads to the LBA range indicated

NVME_IO_DSM_FREQ_READS

Infrequent writes and frequent reads to the LBA range indicated

NVME_IO_DSM_FREQ_WRITES

Frequent writes and infrequent reads to the LBA range indicated

NVME_IO_DSM_FREQ_RW

Frequent writes and frequent reads to the LBA range indicated

NVME_IO_DSM_FREQ_ONCE

NVME_IO_DSM_FREQ_PREFETCH

NVME_IO_DSM_FREQ_TEMP

NVME_IO_DSM_LATENCY_NONE

No latency information provided

NVME_IO_DSM_LATENCY_IDLE

Longer latency acceptable

NVME_IO_DSM_LATENCY_NORM

Typical latency

NVME_IO_DSM_LATENCY_LOW

Smallest possible latency

NVME_IO_DSM_SEQ_REQ

NVME_IO_DSM_COMPRESSED

enum nvme_dsm_attributes

Dataset Management attributes

Constants

NVME_DSMGMT_IDR

Attribute -Integral Dataset for Read

NVME_DSMGMT_IDW

Attribute - Integral Dataset for Write

NVME_DSMGMT_AD

Attribute - Deallocate

enum nvme_resv_rtype

Reservation Type Encoding

Constants

NVME_RESERVATION_RTYPE_WE

Write Exclusive Reservation

NVME_RESERVATION_RTYPE_EA

Exclusive Access Reservation

NVME_RESERVATION_RTYPE_WERO

Write Exclusive - Registrants Only Reservation

NVME_RESERVATION_RTYPE_EARO

Exclusive Access - Registrants Only Reservation

NVME_RESERVATION_RTYPE_WEAR

Write Exclusive - All Registrants Reservation

NVME_RESERVATION_RTYPE_EAAR

Exclusive Access - All Registrants Reservation

enum nvme_resv_racqa

Reservation Acquire - Reservation Acquire Action

Constants

NVME_RESERVATION_RACQA_ACQUIRE

Acquire

NVME_RESERVATION_RACQA_PREEMPT

Preempt

NVME_RESERVATION_RACQA_PREEMPT_AND_ABORT

Preempt and Abort

enum nvme_resv_rrega

Reservation Register - Reservation Register Action

Constants

NVME_RESERVATION_RREGA_REGISTER_KEY

Register Reservation Key

NVME_RESERVATION_RREGA_UNREGISTER_KEY

Unregister Reservation Key

NVME_RESERVATION_RREGA_REPLACE_KEY

Replace Reservation Key

enum nvme_resv_cptpl

Reservation Register - Change Persist Through Power Loss State

Constants

NVME_RESERVATION_CPTPL_NO_CHANGE

No change to PTPL state

NVME_RESERVATION_CPTPL_CLEAR

Reservations are released and registrants are cleared on a power on

NVME_RESERVATION_CPTPL_PERSIST

Reservations and registrants persist across a power loss

enum nvme_resv_rrela

Reservation Release - Reservation Release Action

Constants

NVME_RESERVATION_RRELA_RELEASE

Release

NVME_RESERVATION_RRELA_CLEAR

Clear

enum nvme_zns_send_action

Zone Management Send - Zone Send Action

Constants

NVME_ZNS_ZSA_CLOSE

Close Zone

NVME_ZNS_ZSA_FINISH

Finish Zone

NVME_ZNS_ZSA_OPEN

Open Zone

NVME_ZNS_ZSA_RESET

Reset Zone

NVME_ZNS_ZSA_OFFLINE

Offline Zone

NVME_ZNS_ZSA_SET_DESC_EXT

Set Zone Descriptor Extension

NVME_ZNS_ZSA_ZRWA_FLUSH

Flush

enum nvme_zns_recv_action

Zone Management Receive - Zone Receive Action Specific Features

Constants

NVME_ZNS_ZRA_REPORT_ZONES

Report Zones

NVME_ZNS_ZRA_EXTENDED_REPORT_ZONES

Extended Report Zones

enum nvme_zns_report_options

Zone Management Receive - Zone Receive Action Specific Field

Constants

NVME_ZNS_ZRAS_REPORT_ALL

List all zones

NVME_ZNS_ZRAS_REPORT_EMPTY

List the zones in the ZSE:Empty state

NVME_ZNS_ZRAS_REPORT_IMPL_OPENED

List the zones in the ZSIO:Implicitly Opened state

NVME_ZNS_ZRAS_REPORT_EXPL_OPENED

List the zones in the ZSEO:Explicitly Opened state

NVME_ZNS_ZRAS_REPORT_CLOSED

List the zones in the ZSC:Closed state

NVME_ZNS_ZRAS_REPORT_FULL

List the zones in the ZSF:Full state

NVME_ZNS_ZRAS_REPORT_READ_ONLY

List the zones in the ZSRO:Read Only state

NVME_ZNS_ZRAS_REPORT_OFFLINE

List the zones in the ZSO:Offline state

enum nvme_io_mgmt_recv_mo

I/O Management Receive - Management Operation

Constants

NVME_IO_MGMT_RECV_RUH_STATUS

Reclaim Unit Handle Status

enum nvme_io_mgmt_send_mo

I/O Management Send - Management Operation

Constants

NVME_IO_MGMT_SEND_RUH_UPDATE

Reclaim Unit Handle Update

struct nvme_ns_mgmt_host_sw_specified

Namespace management Host Software Specified Fields.

Definition

struct nvme_ns_mgmt_host_sw_specified {
  __le64 nsze;
  __le64 ncap;
  __u8 rsvd16[10];
  __u8 flbas;
  __u8 rsvd27[2];
  __u8 dps;
  __u8 nmic;
  __u8 rsvd31[61];
  __le32 anagrpid;
  __u8 rsvd96[4];
  __le16 nvmsetid;
  __le16 endgid;
  __u8 rsvd104[280];
  __le64 lbstm;
  __le16 nphndls;
  __u8 rsvd394[105];
  union {
    __u8 rsvd499[13];
    struct {
      __u8 znsco;
      __le32 rar;
      __le32 ror;
      __le32 rnumzrwa;
    } zns;
  };
  __le16 phndl[128];
  __u8 rsvd768[3328];
};

Members

nsze

Namespace Size indicates the total size of the namespace in logical blocks. The number of logical blocks is based on the formatted LBA size.

ncap

Namespace Capacity indicates the maximum number of logical blocks that may be allocated in the namespace at any point in time. The number of logical blocks is based on the formatted LBA size.

rsvd16

Reserved

flbas

Formatted LBA Size, see enum nvme_id_ns_flbas.

rsvd27

Reserved

dps

End-to-end Data Protection Type Settings, see enum nvme_id_ns_dps.

nmic

Namespace Multi-path I/O and Namespace Sharing Capabilities, see enum nvme_id_ns_nmic.

rsvd31

Reserved

anagrpid

ANA Group Identifier indicates the ANA Group Identifier of the ANA group of which the namespace is a member.

rsvd96

Reserved

nvmsetid

NVM Set Identifier indicates the NVM Set with which this namespace is associated.

endgid

Endurance Group Identifier indicates the Endurance Group with which this namespace is associated.

rsvd104

Reserved

lbstm

Logical Block Storage Tag Mask Identifies the mask for the Storage Tag field for the protection information

nphndls

Number of Placement Handles specifies the number of Placement Handles included in the Placement Handle List

rsvd394

Reserved

{unnamed_union}

anonymous

rsvd499

Reserved for I/O Command Sets that extend this specification.

zns

rsvd499( Zoned Namespace Command Set specific field )

phndl

Placement Handle Associated RUH : This field specifies the Reclaim Unit Handle Identifier to be associated with the Placement Handle value. If the Flexible Data Placement capability is not supported or not enabled in specified Endurance Group, then the controller shall ignore this field.

rsvd768

Reserved

ioctl.h

Linux NVMe ioctl interface functions

struct nvme_passthru_cmd

nvme passthrough command structure

Definition

struct nvme_passthru_cmd {
  __u8 opcode;
  __u8 flags;
  __u16 rsvd1;
  __u32 nsid;
  __u32 cdw2;
  __u32 cdw3;
  __u64 metadata;
  __u64 addr;
  __u32 metadata_len;
  __u32 data_len;
  __u32 cdw10;
  __u32 cdw11;
  __u32 cdw12;
  __u32 cdw13;
  __u32 cdw14;
  __u32 cdw15;
  __u32 timeout_ms;
  __u32 result;
};

Members

opcode

Operation code, see enum nvme_io_opcodes and enum nvme_admin_opcodes

flags

Not supported: intended for command flags (eg: SGL, FUSE)

rsvd1

Reserved for future use

nsid

Namespace Identifier, or Fabrics type

cdw2

Command Dword 2 (no spec defined use)

cdw3

Command Dword 3 (no spec defined use)

metadata

User space address to metadata buffer (NULL if not used)

addr

User space address to data buffer (NULL if not used)

metadata_len

Metadata buffer transfer length

data_len

Data buffer transfer length

cdw10

Command Dword 10 (command specific)

cdw11

Command Dword 11 (command specific)

cdw12

Command Dword 12 (command specific)

cdw13

Command Dword 13 (command specific)

cdw14

Command Dword 14 (command specific)

cdw15

Command Dword 15 (command specific)

timeout_ms

If non-zero, overrides system default timeout in milliseconds

result

Set on completion to the command’s CQE DWORD 0 controller response

struct nvme_passthru_cmd64

64-bit nvme passthrough command structure

Definition

struct nvme_passthru_cmd64 {
  __u8 opcode;
  __u8 flags;
  __u16 rsvd1;
  __u32 nsid;
  __u32 cdw2;
  __u32 cdw3;
  __u64 metadata;
  __u64 addr;
  __u32 metadata_len;
  __u32 data_len;
  __u32 cdw10;
  __u32 cdw11;
  __u32 cdw12;
  __u32 cdw13;
  __u32 cdw14;
  __u32 cdw15;
  __u32 timeout_ms;
  __u32 rsvd2;
  __u64 result;
};

Members

opcode

Operation code, see enum nvme_io_opcodes and enum nvme_admin_opcodes

flags

Not supported: intended for command flags (eg: SGL, FUSE)

rsvd1

Reserved for future use

nsid

Namespace Identifier, or Fabrics type

cdw2

Command Dword 2 (no spec defined use)

cdw3

Command Dword 3 (no spec defined use)

metadata

User space address to metadata buffer (NULL if not used)

addr

User space address to data buffer (NULL if not used)

metadata_len

Metadata buffer transfer length

data_len

Data buffer transfer length

cdw10

Command Dword 10 (command specific)

cdw11

Command Dword 11 (command specific)

cdw12

Command Dword 12 (command specific)

cdw13

Command Dword 13 (command specific)

cdw14

Command Dword 14 (command specific)

cdw15

Command Dword 15 (command specific)

timeout_ms

If non-zero, overrides system default timeout in milliseconds

rsvd2

Reserved for future use (and fills an implicit struct pad

result

Set on completion to the command’s CQE DWORD 0-1 controller response

struct nvme_uring_cmd

nvme uring command structure

Definition

struct nvme_uring_cmd {
  __u8 opcode;
  __u8 flags;
  __u16 rsvd1;
  __u32 nsid;
  __u32 cdw2;
  __u32 cdw3;
  __u64 metadata;
  __u64 addr;
  __u32 metadata_len;
  __u32 data_len;
  __u32 cdw10;
  __u32 cdw11;
  __u32 cdw12;
  __u32 cdw13;
  __u32 cdw14;
  __u32 cdw15;
  __u32 timeout_ms;
  __u32 rsvd2;
};

Members

opcode

Operation code, see enum nvme_io_opcodes and enum nvme_admin_opcodes

flags

Not supported: intended for command flags (eg: SGL, FUSE)

rsvd1

Reserved for future use

nsid

Namespace Identifier, or Fabrics type

cdw2

Command Dword 2 (no spec defined use)

cdw3

Command Dword 3 (no spec defined use)

metadata

User space address to metadata buffer (NULL if not used)

addr

User space address to data buffer (NULL if not used)

metadata_len

Metadata buffer transfer length

data_len

Data buffer transfer length

cdw10

Command Dword 10 (command specific)

cdw11

Command Dword 11 (command specific)

cdw12

Command Dword 12 (command specific)

cdw13

Command Dword 13 (command specific)

cdw14

Command Dword 14 (command specific)

cdw15

Command Dword 15 (command specific)

timeout_ms

If non-zero, overrides system default timeout in milliseconds

rsvd2

Reserved for future use (and fills an implicit struct pad

sizeof_args

sizeof_args (type, member, align)

Helper function used to determine structure sizes

Parameters

type

Argument structure type

member

Member inside the type

align

Alignment information

int nvme_submit_admin_passthru64(int fd, struct nvme_passthru_cmd64 *cmd, __u64 *result)

Submit a 64-bit nvme passthrough admin command

Parameters

int fd

File descriptor of nvme device

struct nvme_passthru_cmd64 *cmd

The nvme admin command to send

__u64 *result

Optional field to return the result from the CQE DW0-1

Description

Uses NVME_IOCTL_ADMIN64_CMD for the ioctl request.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_admin_passthru64(int fd, __u8 opcode, __u8 flags, __u16 rsvd, __u32 nsid, __u32 cdw2, __u32 cdw3, __u32 cdw10, __u32 cdw11, __u32 cdw12, __u32 cdw13, __u32 cdw14, __u32 cdw15, __u32 data_len, void *data, __u32 metadata_len, void *metadata, __u32 timeout_ms, __u64 *result)

Submit a 64-bit nvme passthrough command

Parameters

int fd

File descriptor of nvme device

__u8 opcode

The nvme io command to send

__u8 flags

NVMe command flags (not used)

__u16 rsvd

Reserved for future use

__u32 nsid

Namespace identifier

__u32 cdw2

Command dword 2

__u32 cdw3

Command dword 3

__u32 cdw10

Command dword 10

__u32 cdw11

Command dword 11

__u32 cdw12

Command dword 12

__u32 cdw13

Command dword 13

__u32 cdw14

Command dword 14

__u32 cdw15

Command dword 15

__u32 data_len

Length of the data transferred in this command in bytes

void *data

Pointer to user address of the data buffer

__u32 metadata_len

Length of metadata transferred in this command

void *metadata

Pointer to user address of the metadata buffer

__u32 timeout_ms

How long the kernel waits for the command to complete

__u64 *result

Optional field to return the result from the CQE dword 0

Description

Parameterized form of nvme_submit_admin_passthru64(). This sets up and submits a struct nvme_passthru_cmd64.

Known values for opcode are defined in enum nvme_admin_opcode.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_submit_admin_passthru(int fd, struct nvme_passthru_cmd *cmd, __u32 *result)

Submit an nvme passthrough admin command

Parameters

int fd

File descriptor of nvme device

struct nvme_passthru_cmd *cmd

The nvme admin command to send

__u32 *result

Optional field to return the result from the CQE DW0

Description

Uses NVME_IOCTL_ADMIN_CMD for the ioctl request.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_admin_passthru(int fd, __u8 opcode, __u8 flags, __u16 rsvd, __u32 nsid, __u32 cdw2, __u32 cdw3, __u32 cdw10, __u32 cdw11, __u32 cdw12, __u32 cdw13, __u32 cdw14, __u32 cdw15, __u32 data_len, void *data, __u32 metadata_len, void *metadata, __u32 timeout_ms, __u32 *result)

Submit an nvme passthrough command

Parameters

int fd

File descriptor of nvme device

__u8 opcode

The nvme io command to send

__u8 flags

NVMe command flags (not used)

__u16 rsvd

Reserved for future use

__u32 nsid

Namespace identifier

__u32 cdw2

Command dword 2

__u32 cdw3

Command dword 3

__u32 cdw10

Command dword 10

__u32 cdw11

Command dword 11

__u32 cdw12

Command dword 12

__u32 cdw13

Command dword 13

__u32 cdw14

Command dword 14

__u32 cdw15

Command dword 15

__u32 data_len

Length of the data transferred in this command in bytes

void *data

Pointer to user address of the data buffer

__u32 metadata_len

Length of metadata transferred in this command

void *metadata

Pointer to user address of the metadata buffer

__u32 timeout_ms

How long the kernel waits for the command to complete

__u32 *result

Optional field to return the result from the CQE dword 0

Description

Parameterized form of nvme_submit_admin_passthru(). This sets up and submits a struct nvme_passthru_cmd.

Known values for opcode are defined in enum nvme_admin_opcode.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_submit_io_passthru64(int fd, struct nvme_passthru_cmd64 *cmd, __u64 *result)

Submit a 64-bit nvme passthrough command

Parameters

int fd

File descriptor of nvme device

struct nvme_passthru_cmd64 *cmd

The nvme io command to send

__u64 *result

Optional field to return the result from the CQE DW0-1

Description

Uses NVME_IOCTL_IO64_CMD for the ioctl request.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_io_passthru64(int fd, __u8 opcode, __u8 flags, __u16 rsvd, __u32 nsid, __u32 cdw2, __u32 cdw3, __u32 cdw10, __u32 cdw11, __u32 cdw12, __u32 cdw13, __u32 cdw14, __u32 cdw15, __u32 data_len, void *data, __u32 metadata_len, void *metadata, __u32 timeout_ms, __u64 *result)

Submit an nvme io passthrough command

Parameters

int fd

File descriptor of nvme device

__u8 opcode

The nvme io command to send

__u8 flags

NVMe command flags (not used)

__u16 rsvd

Reserved for future use

__u32 nsid

Namespace identifier

__u32 cdw2

Command dword 2

__u32 cdw3

Command dword 3

__u32 cdw10

Command dword 10

__u32 cdw11

Command dword 11

__u32 cdw12

Command dword 12

__u32 cdw13

Command dword 13

__u32 cdw14

Command dword 14

__u32 cdw15

Command dword 15

__u32 data_len

Length of the data transferred in this command in bytes

void *data

Pointer to user address of the data buffer

__u32 metadata_len

Length of metadata transferred in this command

void *metadata

Pointer to user address of the metadata buffer

__u32 timeout_ms

How long the kernel waits for the command to complete

__u64 *result

Optional field to return the result from the CQE dword 0

Description

Parameterized form of nvme_submit_io_passthru64(). This sets up and submits a struct nvme_passthru_cmd64.

Known values for opcode are defined in enum nvme_io_opcode.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_submit_io_passthru(int fd, struct nvme_passthru_cmd *cmd, __u32 *result)

Submit an nvme passthrough command

Parameters

int fd

File descriptor of nvme device

struct nvme_passthru_cmd *cmd

The nvme io command to send

__u32 *result

Optional field to return the result from the CQE DW0

Description

Uses NVME_IOCTL_IO_CMD for the ioctl request.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_io_passthru(int fd, __u8 opcode, __u8 flags, __u16 rsvd, __u32 nsid, __u32 cdw2, __u32 cdw3, __u32 cdw10, __u32 cdw11, __u32 cdw12, __u32 cdw13, __u32 cdw14, __u32 cdw15, __u32 data_len, void *data, __u32 metadata_len, void *metadata, __u32 timeout_ms, __u32 *result)

Submit an nvme io passthrough command

Parameters

int fd

File descriptor of nvme device

__u8 opcode

The nvme io command to send

__u8 flags

NVMe command flags (not used)

__u16 rsvd

Reserved for future use

__u32 nsid

Namespace identifier

__u32 cdw2

Command dword 2

__u32 cdw3

Command dword 3

__u32 cdw10

Command dword 10

__u32 cdw11

Command dword 11

__u32 cdw12

Command dword 12

__u32 cdw13

Command dword 13

__u32 cdw14

Command dword 14

__u32 cdw15

Command dword 15

__u32 data_len

Length of the data transferred in this command in bytes

void *data

Pointer to user address of the data buffer

__u32 metadata_len

Length of metadata transferred in this command

void *metadata

Pointer to user address of the metadata buffer

__u32 timeout_ms

How long the kernel waits for the command to complete

__u32 *result

Optional field to return the result from the CQE dword 0

Description

Parameterized form of nvme_submit_io_passthru(). This sets up and submits a struct nvme_passthru_cmd.

Known values for opcode are defined in enum nvme_io_opcode.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_subsystem_reset(int fd)

Initiate a subsystem reset

Parameters

int fd

File descriptor of nvme device

Description

This should only be sent to controller handles, not to namespaces.

Return

Zero if a subsystem reset was initiated or -1 with errno set otherwise.

int nvme_ctrl_reset(int fd)

Initiate a controller reset

Parameters

int fd

File descriptor of nvme device

Description

This should only be sent to controller handles, not to namespaces.

Return

0 if a reset was initiated or -1 with errno set otherwise.

int nvme_ns_rescan(int fd)

Initiate a controller rescan

Parameters

int fd

File descriptor of nvme device

Description

This should only be sent to controller handles, not to namespaces.

Return

0 if a rescan was initiated or -1 with errno set otherwise.

int nvme_get_nsid(int fd, __u32 *nsid)

Retrieve the NSID from a namespace file descriptor

Parameters

int fd

File descriptor of nvme namespace

__u32 *nsid

User pointer to namespace id

Description

This should only be sent to namespace handles, not to controllers. The kernel’s interface returns the nsid as the return value. This is unfortunate for many architectures that are incapable of allowing distinguishing a namespace id > 0x80000000 from a negative error number.

Return

0 if nsid was set successfully or -1 with errno set otherwise.

int nvme_identify(struct nvme_identify_args *args)

Send the NVMe Identify command

Parameters

struct nvme_identify_args *args

struct nvme_identify_args argument structure

Description

The Identify command returns a data buffer that describes information about the NVM subsystem, the controller or the namespace(s).

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_ctrl(int fd, struct nvme_id_ctrl *id)

Retrieves nvme identify controller

Parameters

int fd

File descriptor of nvme device

struct nvme_id_ctrl *id

User space destination address to transfer the data,

Description

Sends nvme identify with CNS value NVME_IDENTIFY_CNS_CTRL.

See struct nvme_id_ctrl for details on the data returned.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_ns(int fd, __u32 nsid, struct nvme_id_ns *ns)

Retrieves nvme identify namespace

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace to identify

struct nvme_id_ns *ns

User space destination address to transfer the data

Description

If the Namespace Identifier (NSID) field specifies an active NSID, then the Identify Namespace data structure is returned to the host for that specified namespace.

If the controller supports the Namespace Management capability and the NSID field is set to NVME_NSID_ALL, then the controller returns an Identify Namespace data structure that specifies capabilities that are common across namespaces for this controller.

See struct nvme_id_ns for details on the structure returned.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_allocated_ns(int fd, __u32 nsid, struct nvme_id_ns *ns)

Same as nvme_identify_ns, but only for allocated namespaces

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace to identify

struct nvme_id_ns *ns

User space destination address to transfer the data

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_active_ns_list(int fd, __u32 nsid, struct nvme_ns_list *list)

Retrieves active namespaces id list

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Return namespaces greater than this identifier

struct nvme_ns_list *list

User space destination address to transfer the data

Description

A list of 1024 namespace IDs is returned to the host containing NSIDs in increasing order that are greater than the value specified in the Namespace Identifier (nsid) field of the command.

See struct nvme_ns_list for the definition of the returned structure.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_allocated_ns_list(int fd, __u32 nsid, struct nvme_ns_list *list)

Retrieves allocated namespace id list

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Return namespaces greater than this identifier

struct nvme_ns_list *list

User space destination address to transfer the data

Description

A list of 1024 namespace IDs is returned to the host containing NSIDs in increasing order that are greater than the value specified in the Namespace Identifier (nsid) field of the command.

See struct nvme_ns_list for the definition of the returned structure.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_ctrl_list(int fd, __u16 cntid, struct nvme_ctrl_list *cntlist)

Retrieves identify controller list

Parameters

int fd

File descriptor of nvme device

__u16 cntid

Starting CNTLID to return in the list

struct nvme_ctrl_list *cntlist

User space destination address to transfer the data

Description

Up to 2047 controller identifiers is returned containing a controller identifier greater than or equal to the controller identifier specified in cntid.

See struct nvme_ctrl_list for a definition of the structure returned.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_nsid_ctrl_list(int fd, __u32 nsid, __u16 cntid, struct nvme_ctrl_list *cntlist)

Retrieves controller list attached to an nsid

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Return controllers that are attached to this nsid

__u16 cntid

Starting CNTLID to return in the list

struct nvme_ctrl_list *cntlist

User space destination address to transfer the data

Description

Up to 2047 controller identifiers are returned containing a controller identifier greater than or equal to the controller identifier specified in cntid attached to nsid.

See struct nvme_ctrl_list for a definition of the structure returned.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1

int nvme_identify_ns_descs(int fd, __u32 nsid, struct nvme_ns_id_desc *descs)

Retrieves namespace descriptor list

Parameters

int fd

File descriptor of nvme device

__u32 nsid

The namespace id to retrieve descriptors

struct nvme_ns_id_desc *descs

User space destination address to transfer the data

Description

A list of Namespace Identification Descriptor structures is returned to the host for the namespace specified in the Namespace Identifier (NSID) field if it is an active NSID.

The data returned is in the form of an array of ‘struct nvme_ns_id_desc’.

See struct nvme_ns_id_desc for the definition of the returned structure.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_nvmset_list(int fd, __u16 nvmsetid, struct nvme_id_nvmset_list *nvmset)

Retrieves NVM Set List

Parameters

int fd

File descriptor of nvme device

__u16 nvmsetid

NVM Set Identifier

struct nvme_id_nvmset_list *nvmset

User space destination address to transfer the data

Description

Retrieves an NVM Set List, struct nvme_id_nvmset_list. The data structure is an ordered list by NVM Set Identifier, starting with the first NVM Set Identifier supported by the NVM subsystem that is equal to or greater than the NVM Set Identifier.

See struct nvme_id_nvmset_list for the definition of the returned structure.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_primary_ctrl(int fd, __u16 cntid, struct nvme_primary_ctrl_cap *cap)

Retrieve NVMe Primary Controller identification

Parameters

int fd

File descriptor of nvme device

__u16 cntid

Return controllers starting at this identifier

struct nvme_primary_ctrl_cap *cap

User space destination buffer address to transfer the data

Description

See struct nvme_primary_ctrl_cap for the definition of the returned structure, cap.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_secondary_ctrl_list(int fd, __u16 cntid, struct nvme_secondary_ctrl_list *sc_list)

Retrieves secondary controller list

Parameters

int fd

File descriptor of nvme device

__u16 cntid

Return controllers starting at this identifier

struct nvme_secondary_ctrl_list *sc_list

User space destination address to transfer the data

Description

A Secondary Controller List is returned to the host for up to 127 secondary controllers associated with the primary controller processing this command. The list contains entries for controller identifiers greater than or equal to the value specified in the Controller Identifier (cntid).

See struct nvme_secondary_ctrls_list for a definition of the returned structure.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_ns_granularity(int fd, struct nvme_id_ns_granularity_list *gr_list)

Retrieves namespace granularity identification

Parameters

int fd

File descriptor of nvme device

struct nvme_id_ns_granularity_list *gr_list

User space destination address to transfer the data

Description

If the controller supports reporting of Namespace Granularity, then a Namespace Granularity List is returned to the host for up to sixteen namespace granularity descriptors

See struct nvme_id_ns_granularity_list for the definition of the returned structure.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_uuid(int fd, struct nvme_id_uuid_list *uuid_list)

Retrieves device’s UUIDs

Parameters

int fd

File descriptor of nvme device

struct nvme_id_uuid_list *uuid_list

User space destination address to transfer the data

Description

Each UUID List entry is either 0h, the NVMe Invalid UUID, or a valid UUID. Valid UUIDs are those which are non-zero and are not the NVMe Invalid UUID.

See struct nvme_id_uuid_list for the definition of the returned structure.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_ns_csi(int fd, __u32 nsid, __u8 uuidx, enum nvme_csi csi, void *data)

I/O command set specific identify namespace data

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace to identify

__u8 uuidx

UUID Index for differentiating vendor specific encoding

enum nvme_csi csi

Command Set Identifier

void *data

User space destination address to transfer the data

Description

An I/O Command Set specific Identify Namespace data structure is returned for the namespace specified in nsid.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_ctrl_csi(int fd, enum nvme_csi csi, void *data)

I/O command set specific Identify Controller data

Parameters

int fd

File descriptor of nvme device

enum nvme_csi csi

Command Set Identifier

void *data

User space destination address to transfer the data

Description

An I/O Command Set specific Identify Controller data structure is returned to the host for the controller processing the command. The specific Identify Controller data structure to be returned is specified by csi.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_active_ns_list_csi(int fd, __u32 nsid, enum nvme_csi csi, struct nvme_ns_list *ns_list)

Active namespace ID list associated with a specified I/O command set

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Return namespaces greater than this identifier

enum nvme_csi csi

Command Set Identifier

struct nvme_ns_list *ns_list

User space destination address to transfer the data

Description

A list of 1024 namespace IDs is returned to the host containing active NSIDs in increasing order that are greater than the value specified in the Namespace Identifier (nsid) field of the command and matching the I/O Command Set specified in the csi argument.

See struct nvme_ns_list for the definition of the returned structure.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_allocated_ns_list_csi(int fd, __u32 nsid, enum nvme_csi csi, struct nvme_ns_list *ns_list)

Allocated namespace ID list associated with a specified I/O command set

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Return namespaces greater than this identifier

enum nvme_csi csi

Command Set Identifier

struct nvme_ns_list *ns_list

User space destination address to transfer the data

Description

A list of 1024 namespace IDs is returned to the host containing allocated NSIDs in increasing order that are greater than the value specified in the nsid field of the command and matching the I/O Command Set specified in the csi argument.

See struct nvme_ns_list for the definition of the returned structure.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_independent_identify_ns(int fd, __u32 nsid, struct nvme_id_independent_id_ns *ns)

I/O command set independent Identify namespace data

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Return namespaces greater than this identifier

struct nvme_id_independent_id_ns *ns

I/O Command Set Independent Identify Namespace data structure

Description

The I/O command set independent Identify namespace data structure for the namespace identified with ns is returned to the host.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_ns_csi_user_data_format(int fd, __u16 user_data_format, __u8 uuidx, enum nvme_csi csi, void *data)

Identify namespace user data format

Parameters

int fd

File descriptor of nvme device

__u16 user_data_format

Return namespaces capability of identifier

__u8 uuidx

UUID selection, if supported

enum nvme_csi csi

Command Set Identifier

void *data

User space destination address to transfer the data

Description

Identify Namespace data structure for the specified User Data Format index containing the namespace capabilities for the NVM Command Set.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_iocs_ns_csi_user_data_format(int fd, __u16 user_data_format, __u8 uuidx, enum nvme_csi csi, void *data)

Identify I/O command set namespace data structure

Parameters

int fd

File descriptor of nvme device

__u16 user_data_format

Return namespaces capability of identifier

__u8 uuidx

UUID selection, if supported

enum nvme_csi csi

Command Set Identifier

void *data

User space destination address to transfer the data

Description

I/O Command Set specific Identify Namespace data structure for the specified User Data Format index containing the namespace capabilities for the I/O Command Set specified in the CSI field.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_nvm_identify_ctrl(int fd, struct nvme_id_ctrl_nvm *id)

Identify controller data

Parameters

int fd

File descriptor of nvme device

struct nvme_id_ctrl_nvm *id

User space destination address to transfer the data

Description

Return an identify controller data structure to the host of processing controller.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_domain_list(int fd, __u16 domid, struct nvme_id_domain_list *list)

Domain list data

Parameters

int fd

File descriptor of nvme device

__u16 domid

Domain ID

struct nvme_id_domain_list *list

User space destination address to transfer data

Description

A list of 31 domain IDs is returned to the host containing domain attributes in increasing order that are greater than the value specified in the domid field.

See struct nvme_identify_domain_attr for the definition of the returned structure.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_endurance_group_list(int fd, __u16 endgrp_id, struct nvme_id_endurance_group_list *list)

Endurance group list data

Parameters

int fd

File descriptor of nvme device

__u16 endgrp_id

Endurance group identifier

struct nvme_id_endurance_group_list *list

Array of endurance group identifiers

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_identify_iocs(int fd, __u16 cntlid, struct nvme_id_iocs *iocs)

I/O command set data structure

Parameters

int fd

File descriptor of nvme device

__u16 cntlid

Controller ID

struct nvme_id_iocs *iocs

User space destination address to transfer the data

Description

Retrieves list of the controller’s supported io command set vectors. See struct nvme_id_iocs.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_zns_identify_ns(int fd, __u32 nsid, struct nvme_zns_id_ns *data)

ZNS identify namespace data

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace to identify

struct nvme_zns_id_ns *data

User space destination address to transfer the data

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_zns_identify_ctrl(int fd, struct nvme_zns_id_ctrl *id)

ZNS identify controller data

Parameters

int fd

File descriptor of nvme device

struct nvme_zns_id_ctrl *id

User space destination address to transfer the data

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log(struct nvme_get_log_args *args)

NVMe Admin Get Log command

Parameters

struct nvme_get_log_args *args

struct nvme_get_log_args argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_page(int fd, __u32 xfer_len, struct nvme_get_log_args *args)

Get log page data

Parameters

int fd

File descriptor of nvme device

__u32 xfer_len

Max log transfer size per request to split the total.

struct nvme_get_log_args *args

struct nvme_get_log_args argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_supported_log_pages(int fd, bool rae, struct nvme_supported_log_pages *log)

Retrieve nmve supported log pages

Parameters

int fd

File descriptor of nvme device

bool rae

Retain asynchronous events

struct nvme_supported_log_pages *log

Array of LID supported and Effects data structures

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_error(int fd, unsigned int nr_entries, bool rae, struct nvme_error_log_page *err_log)

Retrieve nvme error log

Parameters

int fd

File descriptor of nvme device

unsigned int nr_entries

Number of error log entries allocated

bool rae

Retain asynchronous events

struct nvme_error_log_page *err_log

Array of error logs of size ‘entries’

Description

This log page describes extended error information for a command that completed with error, or may report an error that is not specific to a particular command.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_smart(int fd, __u32 nsid, bool rae, struct nvme_smart_log *smart_log)

Retrieve nvme smart log

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Optional namespace identifier

bool rae

Retain asynchronous events

struct nvme_smart_log *smart_log

User address to store the smart log

Description

This log page provides SMART and general health information. The information provided is over the life of the controller and is retained across power cycles. To request the controller log page, the namespace identifier specified is FFFFFFFFh. The controller may also support requesting the log page on a per namespace basis, as indicated by bit 0 of the LPA field in the Identify Controller data structure.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_fw_slot(int fd, bool rae, struct nvme_firmware_slot *fw_log)

Retrieves the controller firmware log

Parameters

int fd

File descriptor of nvme device

bool rae

Retain asynchronous events

struct nvme_firmware_slot *fw_log

User address to store the log page

Description

This log page describes the firmware revision stored in each firmware slot supported. The firmware revision is indicated as an ASCII string. The log page also indicates the active slot number.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_changed_ns_list(int fd, bool rae, struct nvme_ns_list *ns_log)

Retrieve namespace changed list

Parameters

int fd

File descriptor of nvme device

bool rae

Retain asynchronous events

struct nvme_ns_list *ns_log

User address to store the log page

Description

This log page describes namespaces attached to this controller that have changed since the last time the namespace was identified, been added, or deleted.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_cmd_effects(int fd, enum nvme_csi csi, struct nvme_cmd_effects_log *effects_log)

Retrieve nvme command effects log

Parameters

int fd

File descriptor of nvme device

enum nvme_csi csi

Command Set Identifier

struct nvme_cmd_effects_log *effects_log

User address to store the effects log

Description

This log page describes the commands that the controller supports and the effects of those commands on the state of the NVM subsystem.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_device_self_test(int fd, struct nvme_self_test_log *log)

Retrieve the device self test log

Parameters

int fd

File descriptor of nvme device

struct nvme_self_test_log *log

Userspace address of the log payload

Description

The log page indicates the status of an in progress self test and the percent complete of that operation, and the results of the previous 20 self-test operations.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_create_telemetry_host(int fd, struct nvme_telemetry_log *log)

Create host telemetry log

Parameters

int fd

File descriptor of nvme device

struct nvme_telemetry_log *log

Userspace address of the log payload

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_telemetry_host(int fd, __u64 offset, __u32 len, void *log)

Get Telemetry Host-Initiated log page

Parameters

int fd

File descriptor of nvme device

__u64 offset

Offset into the telemetry data

__u32 len

Length of provided user buffer to hold the log data in bytes

void *log

User address for log page data

Description

Retrieves the Telemetry Host-Initiated log page at the requested offset using the previously existing capture.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_telemetry_ctrl(int fd, bool rae, __u64 offset, __u32 len, void *log)

Get Telemetry Controller-Initiated log page

Parameters

int fd

File descriptor of nvme device

bool rae

Retain asynchronous events

__u64 offset

Offset into the telemetry data

__u32 len

Length of provided user buffer to hold the log data in bytes

void *log

User address for log page data

Description

Retrieves the Telemetry Controller-Initiated log page at the requested offset using the previously existing capture.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_endurance_group(int fd, __u16 endgid, struct nvme_endurance_group_log *log)

Get Endurance Group log

Parameters

int fd

File descriptor of nvme device

__u16 endgid

Starting group identifier to return in the list

struct nvme_endurance_group_log *log

User address to store the endurance log

Description

This log page indicates if an Endurance Group Event has occurred for a particular Endurance Group. If an Endurance Group Event has occurred, the details of the particular event are included in the Endurance Group Information log page for that Endurance Group. An asynchronous event is generated when an entry for an Endurance Group is newly added to this log page.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_predictable_lat_nvmset(int fd, __u16 nvmsetid, struct nvme_nvmset_predictable_lat_log *log)

Predictable Latency Per NVM Set

Parameters

int fd

File descriptor of nvme device

__u16 nvmsetid

NVM set id

struct nvme_nvmset_predictable_lat_log *log

User address to store the predictable latency log

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_predictable_lat_event(int fd, bool rae, __u32 offset, __u32 len, void *log)

Retrieve Predictable Latency Event Aggregate Log Page

Parameters

int fd

File descriptor of nvme device

bool rae

Retain asynchronous events

__u32 offset

Offset into the predictable latency event

__u32 len

Length of provided user buffer to hold the log data in bytes

void *log

User address for log page data

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_fdp_configurations(int fd, __u16 egid, __u32 offset, __u32 len, void *log)

Get list of Flexible Data Placement configurations

Parameters

int fd

File descriptor of nvme device

__u16 egid

Endurance group identifier

__u32 offset

Offset into log page

__u32 len

Length (in bytes) of provided user buffer to hold the log data

void *log

Log page data buffer

int nvme_get_log_reclaim_unit_handle_usage(int fd, __u16 egid, __u32 offset, __u32 len, void *log)

Get reclaim unit handle usage

Parameters

int fd

File descriptor of nvme device

__u16 egid

Endurance group identifier

__u32 offset

Offset into log page

__u32 len

Length (in bytes) of provided user buffer to hold the log data

void *log

Log page data buffer

int nvme_get_log_fdp_stats(int fd, __u16 egid, __u32 offset, __u32 len, void *log)

Get Flexible Data Placement statistics

Parameters

int fd

File descriptor of nvme device

__u16 egid

Endurance group identifier

__u32 offset

Offset into log page

__u32 len

Length (in bytes) of provided user buffer to hold the log data

void *log

Log page data buffer

int nvme_get_log_fdp_events(int fd, __u16 egid, bool host_events, __u32 offset, __u32 len, void *log)

Get Flexible Data Placement events

Parameters

int fd

File descriptor of nvme device

__u16 egid

Endurance group identifier

bool host_events

Whether to report host or controller events

__u32 offset

Offset into log page

__u32 len

Length (in bytes) of provided user buffer to hold the log data

void *log

Log page data buffer

int nvme_get_log_ana(int fd, enum nvme_log_ana_lsp lsp, bool rae, __u64 offset, __u32 len, void *log)

Retrieve Asymmetric Namespace Access log page

Parameters

int fd

File descriptor of nvme device

enum nvme_log_ana_lsp lsp

Log specific, see enum nvme_get_log_ana_lsp

bool rae

Retain asynchronous events

__u64 offset

Offset to the start of the log page

__u32 len

The allocated length of the log page

void *log

User address to store the ana log

Description

This log consists of a header describing the log and descriptors containing the asymmetric namespace access information for ANA Groups that contain namespaces that are attached to the controller processing the command.

See struct nvme_ana_rsp_hdr for the definition of the returned structure.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_ana_groups(int fd, bool rae, __u32 len, struct nvme_ana_group_desc *log)

Retrieve Asymmetric Namespace Access groups only log page

Parameters

int fd

File descriptor of nvme device

bool rae

Retain asynchronous events

__u32 len

The allocated length of the log page

struct nvme_ana_group_desc *log

User address to store the ana group log

Description

See struct nvme_ana_group_desc for the definition of the returned structure.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_lba_status(int fd, bool rae, __u64 offset, __u32 len, void *log)

Retrieve LBA Status

Parameters

int fd

File descriptor of nvme device

bool rae

Retain asynchronous events

__u64 offset

Offset to the start of the log page

__u32 len

The allocated length of the log page

void *log

User address to store the log page

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_endurance_grp_evt(int fd, bool rae, __u32 offset, __u32 len, void *log)

Retrieve Rotational Media Information

Parameters

int fd

File descriptor of nvme device

bool rae

Retain asynchronous events

__u32 offset

Offset to the start of the log page

__u32 len

The allocated length of the log page

void *log

User address to store the log page

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_fid_supported_effects(int fd, bool rae, struct nvme_fid_supported_effects_log *log)

Retrieve Feature Identifiers Supported and Effects

Parameters

int fd

File descriptor of nvme device

bool rae

Retain asynchronous events

struct nvme_fid_supported_effects_log *log

FID Supported and Effects data structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise

int nvme_get_log_mi_cmd_supported_effects(int fd, bool rae, struct nvme_mi_cmd_supported_effects_log *log)

displays the MI Commands Supported by the controller

Parameters

int fd

File descriptor of nvme device

bool rae

Retain asynchronous events

struct nvme_mi_cmd_supported_effects_log *log

MI Command Supported and Effects data structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise

int nvme_get_log_boot_partition(int fd, bool rae, __u8 lsp, __u32 len, struct nvme_boot_partition *part)

Retrieve Boot Partition

Parameters

int fd

File descriptor of nvme device

bool rae

Retain asynchronous events

__u8 lsp

The log specified field of LID

__u32 len

The allocated size, minimum struct nvme_boot_partition

struct nvme_boot_partition *part

User address to store the log page

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise

int nvme_get_log_phy_rx_eom(int fd, __u8 lsp, __u16 controller, __u32 len, struct nvme_phy_rx_eom_log *log)

Retrieve Physical Interface Receiver Eye Opening Measurement Log

Parameters

int fd

File descriptor of nvme device

__u8 lsp

Log specific, controls action and measurement quality

__u16 controller

Target controller ID

__u32 len

The allocated size, minimum struct nvme_phy_rx_eom_log

struct nvme_phy_rx_eom_log *log

User address to store the log page

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise

int nvme_get_log_discovery(int fd, bool rae, __u32 offset, __u32 len, void *log)

Retrieve Discovery log page

Parameters

int fd

File descriptor of nvme device

bool rae

Retain asynchronous events

__u32 offset

Offset of this log to retrieve

__u32 len

The allocated size for this portion of the log

void *log

User address to store the discovery log

Description

Supported only by fabrics discovery controllers, returning discovery records.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_media_unit_stat(int fd, __u16 domid, struct nvme_media_unit_stat_log *mus)

Retrieve Media Unit Status

Parameters

int fd

File descriptor of nvme device

__u16 domid

Domain Identifier selection, if supported

struct nvme_media_unit_stat_log *mus

User address to store the Media Unit statistics log

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise

int nvme_get_log_support_cap_config_list(int fd, __u16 domid, struct nvme_supported_cap_config_list_log *cap)

Retrieve Supported Capacity Configuration List

Parameters

int fd

File descriptor of nvme device

__u16 domid

Domain Identifier selection, if supported

struct nvme_supported_cap_config_list_log *cap

User address to store supported capabilities config list

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise

int nvme_get_log_reservation(int fd, bool rae, struct nvme_resv_notification_log *log)

Retrieve Reservation Notification

Parameters

int fd

File descriptor of nvme device

bool rae

Retain asynchronous events

struct nvme_resv_notification_log *log

User address to store the reservation log

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise

int nvme_get_log_sanitize(int fd, bool rae, struct nvme_sanitize_log_page *log)

Retrieve Sanitize Status

Parameters

int fd

File descriptor of nvme device

bool rae

Retain asynchronous events

struct nvme_sanitize_log_page *log

User address to store the sanitize log

Description

The Sanitize Status log page reports sanitize operation time estimates and information about the most recent sanitize operation.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_zns_changed_zones(int fd, __u32 nsid, bool rae, struct nvme_zns_changed_zone_log *log)

Retrieve list of zones that have changed

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace ID

bool rae

Retain asynchronous events

struct nvme_zns_changed_zone_log *log

User address to store the changed zone log

Description

The list of zones that have changed state due to an exceptional event.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_log_persistent_event(int fd, enum nvme_pevent_log_action action, __u32 size, void *pevent_log)

Retrieve Persistent Event Log

Parameters

int fd

File descriptor of nvme device

enum nvme_pevent_log_action action

Action the controller should take during processing this command

__u32 size

Size of pevent_log

void *pevent_log

User address to store the persistent event log

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features(struct nvme_set_features_args *args)

Set a feature attribute

Parameters

struct nvme_set_features_args *args

struct nvme_set_features_args argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_data(int fd, __u8 fid, __u32 nsid, __u32 cdw11, bool save, __u32 data_len, void *data, __u32 *result)

Helper function for nvme_set_features()

Parameters

int fd

File descriptor of nvme device

__u8 fid

Feature identifier

__u32 nsid

Namespace ID, if applicable

__u32 cdw11

Value to set the feature to

bool save

Save value across power states

__u32 data_len

Length of feature data, if applicable, in bytes

void *data

User address of feature data, if applicable

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_simple(int fd, __u8 fid, __u32 nsid, __u32 cdw11, bool save, __u32 *result)

Helper function for nvme_set_features()

Parameters

int fd

File descriptor of nvme device

__u8 fid

Feature identifier

__u32 nsid

Namespace ID, if applicable

__u32 cdw11

Value to set the feature to

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_arbitration(int fd, __u8 ab, __u8 lpw, __u8 mpw, __u8 hpw, bool save, __u32 *result)

Set arbitration features

Parameters

int fd

File descriptor of nvme device

__u8 ab

Arbitration Burst

__u8 lpw

Low Priority Weight

__u8 mpw

Medium Priority Weight

__u8 hpw

High Priority Weight

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_power_mgmt(int fd, __u8 ps, __u8 wh, bool save, __u32 *result)

Set power management feature

Parameters

int fd

File descriptor of nvme device

__u8 ps

Power State

__u8 wh

Workload Hint

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_lba_range(int fd, __u32 nsid, __u8 nr_ranges, bool save, struct nvme_lba_range_type *data, __u32 *result)

Set LBA range feature

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace ID

__u8 nr_ranges

Number of ranges in data

bool save

Save value across power states

struct nvme_lba_range_type *data

User address of feature data

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_temp_thresh(int fd, __u16 tmpth, __u8 tmpsel, enum nvme_feat_tmpthresh_thsel thsel, bool save, __u32 *result)

Set temperature threshold feature

Parameters

int fd

File descriptor of nvme device

__u16 tmpth

Temperature Threshold

__u8 tmpsel

Threshold Temperature Select

enum nvme_feat_tmpthresh_thsel thsel

Threshold Type Select

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_err_recovery(int fd, __u32 nsid, __u16 tler, bool dulbe, bool save, __u32 *result)

Set error recovery feature

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace ID

__u16 tler

Time-limited error recovery value

bool dulbe

Deallocated or Unwritten Logical Block Error Enable

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_volatile_wc(int fd, bool wce, bool save, __u32 *result)

Set volatile write cache feature

Parameters

int fd

File descriptor of nvme device

bool wce

Write cache enable

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_irq_coalesce(int fd, __u8 thr, __u8 time, bool save, __u32 *result)

Set IRQ coalesce feature

Parameters

int fd

File descriptor of nvme device

__u8 thr

Aggregation Threshold

__u8 time

Aggregation Time

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_irq_config(int fd, __u16 iv, bool cd, bool save, __u32 *result)

Set IRQ config feature

Parameters

int fd

File descriptor of nvme device

__u16 iv

Interrupt Vector

bool cd

Coalescing Disable

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_write_atomic(int fd, bool dn, bool save, __u32 *result)

Set write atomic feature

Parameters

int fd

File descriptor of nvme device

bool dn

Disable Normal

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_async_event(int fd, __u32 events, bool save, __u32 *result)

Set asynchronous event feature

Parameters

int fd

File descriptor of nvme device

__u32 events

Events to enable

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_auto_pst(int fd, bool apste, bool save, struct nvme_feat_auto_pst *apst, __u32 *result)

Set autonomous power state feature

Parameters

int fd

File descriptor of nvme device

bool apste

Autonomous Power State Transition Enable

bool save

Save value across power states

struct nvme_feat_auto_pst *apst

Autonomous Power State Transition

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_timestamp(int fd, bool save, __u64 timestamp)

Set timestamp feature

Parameters

int fd

File descriptor of nvme device

bool save

Save value across power states

__u64 timestamp

The current timestamp value to assign to this feature

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_hctm(int fd, __u16 tmt2, __u16 tmt1, bool save, __u32 *result)

Set thermal management feature

Parameters

int fd

File descriptor of nvme device

__u16 tmt2

Thermal Management Temperature 2

__u16 tmt1

Thermal Management Temperature 1

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_nopsc(int fd, bool noppme, bool save, __u32 *result)

Set non-operational power state feature

Parameters

int fd

File descriptor of nvme device

bool noppme

Non-Operational Power State Permissive Mode Enable

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_rrl(int fd, __u8 rrl, __u16 nvmsetid, bool save, __u32 *result)

Set read recovery level feature

Parameters

int fd

File descriptor of nvme device

__u8 rrl

Read recovery level setting

__u16 nvmsetid

NVM set id

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_plm_config(int fd, bool enable, __u16 nvmsetid, bool save, struct nvme_plm_config *data, __u32 *result)

Set predictable latency feature

Parameters

int fd

File descriptor of nvme device

bool enable

Predictable Latency Enable

__u16 nvmsetid

NVM Set Identifier

bool save

Save value across power states

struct nvme_plm_config *data

Pointer to structure nvme_plm_config

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_plm_window(int fd, enum nvme_feat_plm_window_select sel, __u16 nvmsetid, bool save, __u32 *result)

Set window select feature

Parameters

int fd

File descriptor of nvme device

enum nvme_feat_plm_window_select sel

Window Select

__u16 nvmsetid

NVM Set Identifier

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_lba_sts_interval(int fd, __u16 lsiri, __u16 lsipi, bool save, __u32 *result)

Set LBA status information feature

Parameters

int fd

File descriptor of nvme device

__u16 lsiri

LBA Status Information Report Interval

__u16 lsipi

LBA Status Information Poll Interval

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_host_behavior(int fd, bool save, struct nvme_feat_host_behavior *data)

Set host behavior feature

Parameters

int fd

File descriptor of nvme device

bool save

Save value across power states

struct nvme_feat_host_behavior *data

Pointer to structure nvme_feat_host_behavior

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_sanitize(int fd, bool nodrm, bool save, __u32 *result)

Set sanitize feature

Parameters

int fd

File descriptor of nvme device

bool nodrm

No-Deallocate Response Mode

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_endurance_evt_cfg(int fd, __u16 endgid, __u8 egwarn, bool save, __u32 *result)

Set endurance event config feature

Parameters

int fd

File descriptor of nvme device

__u16 endgid

Endurance Group Identifier

__u8 egwarn

Flags to enable warning, see enum nvme_eg_critical_warning_flags

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_sw_progress(int fd, __u8 pbslc, bool save, __u32 *result)

Set pre-boot software load count feature

Parameters

int fd

File descriptor of nvme device

__u8 pbslc

Pre-boot Software Load Count

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_host_id(int fd, bool exhid, bool save, __u8 *hostid)

Set enable extended host identifiers feature

Parameters

int fd

File descriptor of nvme device

bool exhid

Enable Extended Host Identifier

bool save

Save value across power states

__u8 *hostid

Host ID to set

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_resv_mask(int fd, __u32 mask, bool save, __u32 *result)

Set reservation notification mask feature

Parameters

int fd

File descriptor of nvme device

__u32 mask

Reservation Notification Mask Field

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Description

Deprecated: doesn’t support specifying a NSID. Use nvme_set_features_resv_mask2() instead.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_resv_mask2(int fd, __u32 nsid, __u32 mask, bool save, __u32 *result)

Set reservation notification mask feature

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace ID

__u32 mask

Reservation Notification Mask Field

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_resv_persist(int fd, bool ptpl, bool save, __u32 *result)

Set persist through power loss feature

Parameters

int fd

File descriptor of nvme device

bool ptpl

Persist Through Power Loss

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Description

Deprecated: doesn’t support specifying a NSID. Use nvme_set_features_resv_persist2() instead.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_resv_persist2(int fd, __u32 nsid, bool ptpl, bool save, __u32 *result)

Set persist through power loss feature

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace ID

bool ptpl

Persist Through Power Loss

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_write_protect(int fd, enum nvme_feat_nswpcfg_state state, bool save, __u32 *result)

Set write protect feature

Parameters

int fd

File descriptor of nvme device

enum nvme_feat_nswpcfg_state state

Write Protection State

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Description

Deprecated: doesn’t support specifying a NSID. Use nvme_set_features_write_protect2() instead.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_write_protect2(int fd, __u32 nsid, enum nvme_feat_nswpcfg_state state, bool save, __u32 *result)

Set write protect feature

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace ID

enum nvme_feat_nswpcfg_state state

Write Protection State

bool save

Save value across power states

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_features_iocs_profile(int fd, __u16 iocsi, bool save)

Set I/O command set profile feature

Parameters

int fd

File descriptor of nvme device

__u16 iocsi

I/O Command Set Combination Index

bool save

Save value across power states

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features(struct nvme_get_features_args *args)

Retrieve a feature attribute

Parameters

struct nvme_get_features_args *args

struct nvme_get_features_args argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_data(int fd, enum nvme_features_id fid, __u32 nsid, __u32 data_len, void *data, __u32 *result)

Helper function for nvme_get_features()

Parameters

int fd

File descriptor of nvme device

enum nvme_features_id fid

Feature identifier

__u32 nsid

Namespace ID, if applicable

__u32 data_len

Length of feature data, if applicable, in bytes

void *data

User address of feature data, if applicable

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_simple(int fd, enum nvme_features_id fid, __u32 nsid, __u32 *result)

Helper function for nvme_get_features()

Parameters

int fd

File descriptor of nvme device

enum nvme_features_id fid

Feature identifier

__u32 nsid

Namespace ID, if applicable

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_arbitration(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get arbitration feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_power_mgmt(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get power management feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_lba_range(int fd, enum nvme_get_features_sel sel, struct nvme_lba_range_type *data, __u32 *result)

Get LBA range feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

struct nvme_lba_range_type *data

User address of feature data, if applicable

__u32 *result

The command completion result from CQE dword0

Description

Deprecated: doesn’t support specifying a NSID. Use nvme_get_features_lba_range2() instead.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_lba_range2(int fd, enum nvme_get_features_sel sel, __u32 nsid, struct nvme_lba_range_type *data, __u32 *result)

Get LBA range feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 nsid

Namespace ID

struct nvme_lba_range_type *data

Buffer to receive LBA Range Type data structure

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_temp_thresh(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get temperature threshold feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_err_recovery(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get error recovery feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Description

Deprecated: doesn’t support specifying a NSID. Use nvme_get_features_err_recovery2() instead.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_err_recovery2(int fd, enum nvme_get_features_sel sel, __u32 nsid, __u32 *result)

Get error recovery feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 nsid

Namespace ID

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_volatile_wc(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get volatile write cache feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_num_queues(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get number of queues feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_irq_coalesce(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get IRQ coalesce feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_irq_config(int fd, enum nvme_get_features_sel sel, __u16 iv, __u32 *result)

Get IRQ config feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u16 iv

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_write_atomic(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get write atomic feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_async_event(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get asynchronous event feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_auto_pst(int fd, enum nvme_get_features_sel sel, struct nvme_feat_auto_pst *apst, __u32 *result)

Get autonomous power state feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

struct nvme_feat_auto_pst *apst

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_host_mem_buf(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get host memory buffer feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Description

Deprecated: doesn’t fetch the Host Memory Buffer Attributes data structure. Use nvme_get_features_host_mem_buf2() instead.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_host_mem_buf2(int fd, enum nvme_get_features_sel sel, struct nvme_host_mem_buf_attrs *attrs, __u32 *result)

Get host memory buffer feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

struct nvme_host_mem_buf_attrs *attrs

Buffer for returned Host Memory Buffer Attributes

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_timestamp(int fd, enum nvme_get_features_sel sel, struct nvme_timestamp *ts)

Get timestamp feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

struct nvme_timestamp *ts

Current timestamp

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_kato(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get keep alive timeout feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_hctm(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get thermal management feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_nopsc(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get non-operational power state feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_rrl(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get read recovery level feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_plm_config(int fd, enum nvme_get_features_sel sel, __u16 nvmsetid, struct nvme_plm_config *data, __u32 *result)

Get predictable latency feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u16 nvmsetid

NVM set id

struct nvme_plm_config *data

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_plm_window(int fd, enum nvme_get_features_sel sel, __u16 nvmsetid, __u32 *result)

Get window select feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u16 nvmsetid

NVM set id

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_lba_sts_interval(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get LBA status information feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_host_behavior(int fd, enum nvme_get_features_sel sel, struct nvme_feat_host_behavior *data, __u32 *result)

Get host behavior feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

struct nvme_feat_host_behavior *data

Pointer to structure nvme_feat_host_behavior

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_sanitize(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get sanitize feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_endurance_event_cfg(int fd, enum nvme_get_features_sel sel, __u16 endgid, __u32 *result)

Get endurance event config feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u16 endgid

Endurance Group Identifier

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_sw_progress(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get software progress feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_host_id(int fd, enum nvme_get_features_sel sel, bool exhid, __u32 len, __u8 *hostid)

Get host id feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

bool exhid

Enable Extended Host Identifier

__u32 len

Length of hostid

__u8 *hostid

Buffer for returned host ID

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_resv_mask(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get reservation mask feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Description

Deprecated: doesn’t support specifying a NSID. Use nvme_get_features_resv_mask2() instead.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_resv_mask2(int fd, enum nvme_get_features_sel sel, __u32 nsid, __u32 *result)

Get reservation mask feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 nsid

Namespace ID

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_resv_persist(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get reservation persist feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Description

Deprecated: doesn’t support specifying a NSID. Use nvme_get_features_resv_persist2() instead.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_resv_persist2(int fd, enum nvme_get_features_sel sel, __u32 nsid, __u32 *result)

Get reservation persist feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 nsid

Namespace ID

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_write_protect(int fd, __u32 nsid, enum nvme_get_features_sel sel, __u32 *result)

Get write protect feature

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace ID

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_features_iocs_profile(int fd, enum nvme_get_features_sel sel, __u32 *result)

Get IOCS profile feature

Parameters

int fd

File descriptor of nvme device

enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_format_nvm(struct nvme_format_nvm_args *args)

Format nvme namespace(s)

Parameters

struct nvme_format_nvm_args *args

struct nvme_format_nvme_args argument structure

Description

The Format NVM command low level formats the NVM media. This command is used by the host to change the LBA data size and/or metadata size. A low level format may destroy all data and metadata associated with all namespaces or only the specific namespace associated with the command

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_ns_mgmt(struct nvme_ns_mgmt_args *args)

Issue a Namespace management command

Parameters

struct nvme_ns_mgmt_args *args

struct nvme_ns_mgmt_args Argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_ns_mgmt_create(int fd, struct nvme_id_ns *ns, __u32 *nsid, __u32 timeout, __u8 csi, struct nvme_ns_mgmt_host_sw_specified *data)

Create a non attached namespace

Parameters

int fd

File descriptor of nvme device

struct nvme_id_ns *ns

Namespace identification that defines ns creation parameters

__u32 *nsid

On success, set to the namespace id that was created

__u32 timeout

Override the default timeout to this value in milliseconds; set to 0 to use the system default.

__u8 csi

Command Set Identifier

struct nvme_ns_mgmt_host_sw_specified *data

Host Software Specified Fields that defines ns creation parameters

Description

On successful creation, the namespace exists in the subsystem, but is not attached to any controller. Use the nvme_ns_attach_ctrls() to assign the namespace to one or more controllers.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_ns_mgmt_delete_timeout(int fd, __u32 nsid, __u32 timeout)

Delete a non attached namespace with timeout

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace identifier to delete

__u32 timeout

Override the default timeout to this value in milliseconds; set to 0 to use the system default.

Description

It is recommended that a namespace being deleted is not attached to any controller. Use the nvme_ns_detach_ctrls() first if the namespace is still attached.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_ns_mgmt_delete(int fd, __u32 nsid)

Delete a non attached namespace

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace identifier to delete

Description

It is recommended that a namespace being deleted is not attached to any controller. Use the nvme_ns_detach_ctrls() first if the namespace is still attached.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_ns_attach(struct nvme_ns_attach_args *args)

Attach or detach namespace to controller(s)

Parameters

struct nvme_ns_attach_args *args

struct nvme_ns_attach_args Argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_ns_attach_ctrls(int fd, __u32 nsid, struct nvme_ctrl_list *ctrlist)

Attach namespace to controllers

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace ID to attach

struct nvme_ctrl_list *ctrlist

Controller list to modify attachment state of nsid

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_ns_detach_ctrls(int fd, __u32 nsid, struct nvme_ctrl_list *ctrlist)

Detach namespace from controllers

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace ID to detach

struct nvme_ctrl_list *ctrlist

Controller list to modify attachment state of nsid

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_fw_download(struct nvme_fw_download_args *args)

Download part or all of a firmware image to the controller

Parameters

struct nvme_fw_download_args *args

struct nvme_fw_download_args argument structure

Description

The Firmware Image Download command downloads all or a portion of an image for a future update to the controller. The Firmware Image Download command downloads a new image (in whole or in part) to the controller.

The image may be constructed of multiple pieces that are individually downloaded with separate Firmware Image Download commands. Each Firmware Image Download command includes a Dword Offset and Number of Dwords that specify a dword range.

The new firmware image is not activated as part of the Firmware Image Download command. Use the nvme_fw_commit() to activate a newly downloaded image.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_fw_commit(struct nvme_fw_commit_args *args)

Commit firmware using the specified action

Parameters

struct nvme_fw_commit_args *args

struct nvme_fw_commit_args argument structure

Description

The Firmware Commit command modifies the firmware image or Boot Partitions.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise. The command status response may specify additional reset actions required to complete the commit process.

int nvme_security_send(struct nvme_security_send_args *args)

Security Send command

Parameters

struct nvme_security_send_args *args

struct nvme_security_send argument structure

Description

The Security Send command transfers security protocol data to the controller. The data structure transferred to the controller as part of this command contains security protocol specific commands to be performed by the controller. The data structure transferred may also contain data or parameters associated with the security protocol commands.

The security data is protocol specific and is not defined by the NVMe specification.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_security_receive(struct nvme_security_receive_args *args)

Security Receive command

Parameters

struct nvme_security_receive_args *args

struct nvme_security_receive argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_lba_status(struct nvme_get_lba_status_args *args)

Retrieve information on possibly unrecoverable LBAs

Parameters

struct nvme_get_lba_status_args *args

struct nvme_get_lba_status_args argument structure

Description

The Get LBA Status command requests information about Potentially Unrecoverable LBAs. Refer to the specification for action type descriptions.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_directive_send(struct nvme_directive_send_args *args)

Send directive command

Parameters

struct nvme_directive_send_args *args

struct nvme_directive_send_args argument structure

Description

Directives is a mechanism to enable host and NVM subsystem or controller information exchange. The Directive Send command transfers data related to a specific Directive Type from the host to the controller.

See the NVMe specification for more information.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_directive_send_id_endir(int fd, __u32 nsid, bool endir, enum nvme_directive_dtype dtype, struct nvme_id_directives *id)

Directive Send Enable Directive

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace Identifier

bool endir

Enable Directive

enum nvme_directive_dtype dtype

Directive Type

struct nvme_id_directives *id

Pointer to structure nvme_id_directives

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_directive_send_stream_release_identifier(int fd, __u32 nsid, __u16 stream_id)

Directive Send Stream release

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace ID

__u16 stream_id

Stream identifier

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_directive_send_stream_release_resource(int fd, __u32 nsid)

Directive Send Stream release resources

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace ID

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_directive_recv(struct nvme_directive_recv_args *args)

Receive directive specific data

Parameters

struct nvme_directive_recv_args *args

struct nvme_directive_recv_args argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_directive_recv_identify_parameters(int fd, __u32 nsid, struct nvme_id_directives *id)

Directive receive identifier parameters

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace ID

struct nvme_id_directives *id

Identify parameters buffer

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_directive_recv_stream_parameters(int fd, __u32 nsid, struct nvme_streams_directive_params *parms)

Directive receive stream parameters

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace ID

struct nvme_streams_directive_params *parms

Streams directive parameters buffer

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_directive_recv_stream_status(int fd, __u32 nsid, unsigned int nr_entries, struct nvme_streams_directive_status *id)

Directive receive stream status

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace ID

unsigned int nr_entries

Number of streams to receive

struct nvme_streams_directive_status *id

Stream status buffer

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_directive_recv_stream_allocate(int fd, __u32 nsid, __u16 nsr, __u32 *result)

Directive receive stream allocate

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace ID

__u16 nsr

Namespace Streams Requested

__u32 *result

If successful, the CQE dword0 value

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_capacity_mgmt(struct nvme_capacity_mgmt_args *args)

Capacity management command

Parameters

struct nvme_capacity_mgmt_args *args

struct nvme_capacity_mgmt_args argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_lockdown(struct nvme_lockdown_args *args)

Issue lockdown command

Parameters

struct nvme_lockdown_args *args

struct nvme_lockdown_args argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_set_property(struct nvme_set_property_args *args)

Set controller property

Parameters

struct nvme_set_property_args *args

struct nvme_set_property_args argument structure

Description

This is an NVMe-over-Fabrics specific command, not applicable to PCIe. These properties align to the PCI MMIO controller registers.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_property(struct nvme_get_property_args *args)

Get a controller property

Parameters

struct nvme_get_property_args *args

struct nvme_get_propert_args argument structure

Description

This is an NVMe-over-Fabrics specific command, not applicable to PCIe. These properties align to the PCI MMIO controller registers.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_sanitize_nvm(struct nvme_sanitize_nvm_args *args)

Start a sanitize operation

Parameters

struct nvme_sanitize_nvm_args *args

struct nvme_sanitize_nvm_args argument structure

Description

A sanitize operation alters all user data in the NVM subsystem such that recovery of any previous user data from any cache, the non-volatile media, or any Controller Memory Buffer is not possible.

The Sanitize command starts a sanitize operation or to recover from a previously failed sanitize operation. The sanitize operation types that may be supported are Block Erase, Crypto Erase, and Overwrite. All sanitize operations are processed in the background, i.e., completion of the sanitize command does not indicate completion of the sanitize operation.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_dev_self_test(struct nvme_dev_self_test_args *args)

Start or abort a self test

Parameters

struct nvme_dev_self_test_args *args

struct nvme_dev_self_test argument structure

Description

The Device Self-test command starts a device self-test operation or abort a device self-test operation. A device self-test operation is a diagnostic testing sequence that tests the integrity and functionality of the controller and may include testing of the media associated with namespaces. The controller may return a response to this command immediately while running the self-test in the background.

Set the ‘nsid’ field to 0 to not include namespaces in the test. Set to 0xffffffff to test all namespaces. All other values tests a specific namespace, if present.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_virtual_mgmt(struct nvme_virtual_mgmt_args *args)

Virtualization resource management

Parameters

struct nvme_virtual_mgmt_args *args

struct nvme_virtual_mgmt_args argument structure

Description

The Virtualization Management command is supported by primary controllers that support the Virtualization Enhancements capability. This command is used for several functions:

  • Modifying Flexible Resource allocation for the primary controller

  • Assigning Flexible Resources for secondary controllers

  • Setting the Online and Offline state for secondary controllers

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_flush(int fd, __u32 nsid)

Send an nvme flush command

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace identifier

Description

The Flush command requests that the contents of volatile write cache be made non-volatile.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_io(struct nvme_io_args *args, __u8 opcode)

Submit an nvme user I/O command

Parameters

struct nvme_io_args *args

struct nvme_io_args argument structure

__u8 opcode

Opcode to execute

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_read(struct nvme_io_args *args)

Submit an nvme user read command

Parameters

struct nvme_io_args *args

struct nvme_io_args argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_write(struct nvme_io_args *args)

Submit an nvme user write command

Parameters

struct nvme_io_args *args

struct nvme_io_args argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_compare(struct nvme_io_args *args)

Submit an nvme user compare command

Parameters

struct nvme_io_args *args

struct nvme_io_args argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_write_zeros(struct nvme_io_args *args)

Submit an nvme write zeroes command

Parameters

struct nvme_io_args *args

struct nvme_io_args argument structure

Description

The Write Zeroes command sets a range of logical blocks to zero. After successful completion of this command, the value returned by subsequent reads of logical blocks in this range shall be all bytes cleared to 0h until a write occurs to this LBA range.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_write_uncorrectable(struct nvme_io_args *args)

Submit an nvme write uncorrectable command

Parameters

struct nvme_io_args *args

struct nvme_io_args argument structure

Description

The Write Uncorrectable command marks a range of logical blocks as invalid. When the specified logical block(s) are read after this operation, a failure is returned with Unrecovered Read Error status. To clear the invalid logical block status, a write operation on those logical blocks is required.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_verify(struct nvme_io_args *args)

Send an nvme verify command

Parameters

struct nvme_io_args *args

struct nvme_io_args argument structure

Description

The Verify command verifies integrity of stored information by reading data and metadata, if applicable, for the LBAs indicated without transferring any data or metadata to the host.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_dsm(struct nvme_dsm_args *args)

Send an nvme data set management command

Parameters

struct nvme_dsm_args *args

struct nvme_dsm_args argument structure

Description

The Dataset Management command is used by the host to indicate attributes for ranges of logical blocks. This includes attributes like frequency that data is read or written, access size, and other information that may be used to optimize performance and reliability, and may be used to deallocate/unmap/trim those logical blocks.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_copy(struct nvme_copy_args *args)

Copy command

Parameters

struct nvme_copy_args *args

struct nvme_copy_args argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_resv_acquire(struct nvme_resv_acquire_args *args)

Send an nvme reservation acquire

Parameters

struct nvme_resv_acquire_args *args

struct nvme_resv_acquire argument structure

Description

The Reservation Acquire command acquires a reservation on a namespace, preempt a reservation held on a namespace, and abort a reservation held on a namespace.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_resv_register(struct nvme_resv_register_args *args)

Send an nvme reservation register

Parameters

struct nvme_resv_register_args *args

struct nvme_resv_register_args argument structure

Description

The Reservation Register command registers, unregisters, or replaces a reservation key.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_resv_release(struct nvme_resv_release_args *args)

Send an nvme reservation release

Parameters

struct nvme_resv_release_args *args

struct nvme_resv_release_args argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_resv_report(struct nvme_resv_report_args *args)

Send an nvme reservation report

Parameters

struct nvme_resv_report_args *args

struct nvme_resv_report_args argument structure

Description

Returns a Reservation Status data structure to memory that describes the registration and reservation status of a namespace. See the definition for the returned structure, struct nvme_reservation_status, for more details.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_io_mgmt_recv(struct nvme_io_mgmt_recv_args *args)

I/O Management Receive command

Parameters

struct nvme_io_mgmt_recv_args *args

struct nvme_io_mgmt_recv_args argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_fdp_reclaim_unit_handle_status(int fd, __u32 nsid, __u32 data_len, void *data)

Get reclaim unit handle status

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace identifier

__u32 data_len

Length of response buffer

void *data

Response buffer

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_io_mgmt_send(struct nvme_io_mgmt_send_args *args)

I/O Management Send command

Parameters

struct nvme_io_mgmt_send_args *args

struct nvme_io_mgmt_send_args argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_fdp_reclaim_unit_handle_update(int fd, __u32 nsid, unsigned int npids, __u16 *pids)

Update a list of reclaim unit handles

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace identifier

unsigned int npids

Number of placement identifiers

__u16 *pids

List of placement identifiers

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_zns_mgmt_send(struct nvme_zns_mgmt_send_args *args)

ZNS management send command

Parameters

struct nvme_zns_mgmt_send_args *args

struct nvme_zns_mgmt_send_args argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_zns_mgmt_recv(struct nvme_zns_mgmt_recv_args *args)

ZNS management receive command

Parameters

struct nvme_zns_mgmt_recv_args *args

struct nvme_zns_mgmt_recv_args argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_zns_report_zones(int fd, __u32 nsid, __u64 slba, enum nvme_zns_report_options opts, bool extended, bool partial, __u32 data_len, void *data, __u32 timeout, __u32 *result)

Return the list of zones

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace ID

__u64 slba

Starting LBA

enum nvme_zns_report_options opts

Reporting options

bool extended

Extended report

bool partial

Partial report requested

__u32 data_len

Length of the data buffer

void *data

Userspace address of the report zones data

__u32 timeout

timeout in ms

__u32 *result

The command completion result from CQE dword0

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_zns_append(struct nvme_zns_append_args *args)

Append data to a zone

Parameters

struct nvme_zns_append_args *args

struct nvme_zns_append_args argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_dim_send(struct nvme_dim_args *args)

Send a Discovery Information Management (DIM) command

Parameters

struct nvme_dim_args *args

struct nvme_dim_args argument structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

fabrics.h

Fabrics-specific definitions.

struct nvme_fabrics_config

Defines all linux nvme fabrics initiator options

Definition

struct nvme_fabrics_config {
  char *host_traddr;
  char *host_iface;
  int queue_size;
  int nr_io_queues;
  int reconnect_delay;
  int ctrl_loss_tmo;
  int fast_io_fail_tmo;
  int keep_alive_tmo;
  int nr_write_queues;
  int nr_poll_queues;
  int tos;
  long keyring;
  long tls_key;
  bool duplicate_connect;
  bool disable_sqflow;
  bool hdr_digest;
  bool data_digest;
  bool tls;
  bool concat;
};

Members

host_traddr

Host transport address

host_iface

Host interface name

queue_size

Number of IO queue entries

nr_io_queues

Number of controller IO queues to establish

reconnect_delay

Time between two consecutive reconnect attempts.

ctrl_loss_tmo

Override the default controller reconnect attempt timeout in seconds

fast_io_fail_tmo

Set the fast I/O fail timeout in seconds.

keep_alive_tmo

Override the default keep-alive-timeout to this value in seconds

nr_write_queues

Number of queues to use for exclusively for writing

nr_poll_queues

Number of queues to reserve for polling completions

tos

Type of service

keyring

Keyring to store and lookup keys

tls_key

TLS PSK for the connection

duplicate_connect

Allow multiple connections to the same target

disable_sqflow

Disable controller sq flow control

hdr_digest

Generate/verify header digest (TCP)

data_digest

Generate/verify data digest (TCP)

tls

Start TLS on the connection (TCP)

concat

Enable secure concatenation (TCP)

struct nvme_fabrics_uri

Parsed URI structure

Definition

struct nvme_fabrics_uri {
  char *scheme;
  char *protocol;
  char *userinfo;
  char *host;
  int port;
  char **path_segments;
  char *query;
  char *fragment;
};

Members

scheme

Scheme name (typically ‘nvme’)

protocol

Optional protocol/transport (e.g. ‘tcp’)

userinfo

Optional user information component of the URI authority

host

Host transport address

port

The port subcomponent or 0 if not specified

path_segments

NULL-terminated array of path segments

query

Optional query string component (separated by ‘?’)

fragment

Optional fragment identifier component (separated by ‘#’)

const char *nvmf_trtype_str(__u8 trtype)

Decode TRTYPE field

Parameters

__u8 trtype

value to be decoded

Description

Decode the transport type field in the discovery log page entry.

Return

decoded string

const char *nvmf_adrfam_str(__u8 adrfam)

Decode ADRFAM field

Parameters

__u8 adrfam

value to be decoded

Description

Decode the address family field in the discovery log page entry.

Return

decoded string

const char *nvmf_subtype_str(__u8 subtype)

Decode SUBTYPE field

Parameters

__u8 subtype

value to be decoded

Description

Decode the subsystem type field in the discovery log page entry.

Return

decoded string

const char *nvmf_treq_str(__u8 treq)

Decode TREQ field

Parameters

__u8 treq

value to be decoded

Description

Decode the transport requirements field in the discovery log page entry.

Return

decoded string

const char *nvmf_eflags_str(__u16 eflags)

Decode EFLAGS field

Parameters

__u16 eflags

value to be decoded

Description

Decode the EFLAGS field in the discovery log page entry.

Return

decoded string

const char *nvmf_sectype_str(__u8 sectype)

Decode SECTYPE field

Parameters

__u8 sectype

value to be decoded

Description

Decode the SECTYPE field in the discovery log page entry.

Return

decoded string

const char *nvmf_prtype_str(__u8 prtype)

Decode RDMA Provider type field

Parameters

__u8 prtype

value to be decoded

Description

Decode the RDMA Provider type field in the discovery log page entry.

Return

decoded string

const char *nvmf_qptype_str(__u8 qptype)

Decode RDMA QP Service type field

Parameters

__u8 qptype

value to be decoded

Description

Decode the RDMA QP Service type field in the discovery log page entry.

Return

decoded string

const char *nvmf_cms_str(__u8 cms)

Decode RDMA connection management service field

Parameters

__u8 cms

value to be decoded

Description

Decode the RDMA connection management service field in the discovery log page entry.

Return

decoded string

void nvmf_default_config(struct nvme_fabrics_config *cfg)

Default values for fabrics configuration

Parameters

struct nvme_fabrics_config *cfg

config values to set

Description

Initializes cfg with default values.

void nvmf_update_config(nvme_ctrl_t c, const struct nvme_fabrics_config *cfg)

Update fabrics configuration values

Parameters

nvme_ctrl_t c

Controller to be modified

const struct nvme_fabrics_config *cfg

Updated configuration values

Description

Updates the values from c with the configuration values from cfg; all non-default values from cfg will overwrite the values in c.

int nvmf_add_ctrl(nvme_host_t h, nvme_ctrl_t c, const struct nvme_fabrics_config *cfg)

Connect a controller and update topology

Parameters

nvme_host_t h

Host to which the controller should be attached

nvme_ctrl_t c

Controller to be connected

const struct nvme_fabrics_config *cfg

Default configuration for the controller

Description

Issues a ‘connect’ command to the NVMe-oF controller and inserts c into the topology using h as parent. c must be initialized and not connected to the topology.

Return

0 on success; on failure errno is set and -1 is returned.

int nvmf_get_discovery_log(nvme_ctrl_t c, struct nvmf_discovery_log **logp, int max_retries)

Return the discovery log page

Parameters

nvme_ctrl_t c

Discovery controller to use

struct nvmf_discovery_log **logp

Pointer to the log page to be returned

int max_retries

Number of retries in case of failure

Description

The memory allocated for the log page and returned in logp must be freed by the caller using free().

Note

Consider using nvmf_get_discovery_wargs() instead.

Return

0 on success; on failure -1 is returned and errno is set

struct nvme_get_discovery_args

Arguments for nvmf_get_discovery_wargs()

Definition

struct nvme_get_discovery_args {
  nvme_ctrl_t c;
  int args_size;
  int max_retries;
  __u32 *result;
  __u32 timeout;
  __u8 lsp;
};

Members

c

Discovery controller

args_size

Length of the structure

max_retries

Number of retries in case of failure

result

The command completion result from CQE dword0

timeout

Timeout in ms (default: NVME_DEFAULT_IOCTL_TIMEOUT)

lsp

Log specific field (See enum nvmf_log_discovery_lsp)

struct nvmf_discovery_log *nvmf_get_discovery_wargs(struct nvme_get_discovery_args *args)

Get the discovery log page with args

Parameters

struct nvme_get_discovery_args *args

Argument structure

Description

This function is similar to nvmf_get_discovery_log(), but takes an extensible args parameter. args provides more options than nvmf_get_discovery_log().

This function performs a get discovery log page (DLP) command and returns the DLP. The memory allocated for the returned DLP must be freed by the caller using free().

Return

Pointer to the discovery log page (to be freed). NULL on failure and errno is set.

char *nvmf_hostnqn_generate()

Generate a machine specific host nqn

Parameters

Return

An nvm namespace qualified name string based on the machine identifier, or NULL if not successful.

char *nvmf_hostnqn_from_file()

Reads the host nvm qualified name from the config default location

Parameters

Description

Retrieve the qualified name from the config file located in $SYSCONFIDR/nvme. $SYSCONFDIR is usually /etc.

Return

The host nqn, or NULL if unsuccessful. If found, the caller is responsible to free the string.

char *nvmf_hostid_from_file()

Reads the host identifier from the config default location

Parameters

Description

Retrieve the host idenditifer from the config file located in $SYSCONFDIR/nvme/. $SYSCONFDIR is usually /etc.

Return

The host identifier, or NULL if unsuccessful. If found, the caller

is responsible to free the string.

nvme_ctrl_t nvmf_connect_disc_entry(nvme_host_t h, struct nvmf_disc_log_entry *e, const struct nvme_fabrics_config *defcfg, bool *discover)

Connect controller based on the discovery log page entry

Parameters

nvme_host_t h

Host to which the controller should be connected

struct nvmf_disc_log_entry *e

Discovery log page entry

const struct nvme_fabrics_config *defcfg

Default configuration to be used for the new controller

bool *discover

Set to ‘true’ if the new controller is a discovery controller

Return

Pointer to the new controller

bool nvmf_is_registration_supported(nvme_ctrl_t c)

check whether registration can be performed.

Parameters

nvme_ctrl_t c

Controller instance

Description

Only discovery controllers (DC) that comply with TP8010 support explicit registration with the DIM PDU. These can be identified by looking at the value of a dctype in the Identify command response. A value of 1 (DDC) or 2 (CDC) indicates that the DC supports explicit registration.

Return

true if controller supports explicit registration. false otherwise.

int nvmf_register_ctrl(nvme_ctrl_t c, enum nvmf_dim_tas tas, __u32 *result)

Perform registration task with a DC

Parameters

nvme_ctrl_t c

Controller instance

enum nvmf_dim_tas tas

Task field of the Command Dword 10 (cdw10). Indicates whether to perform a Registration, Deregistration, or Registration-update.

__u32 *result

The command-specific result returned by the DC upon command completion.

Description

Perform registration task with a Discovery Controller (DC). Three tasks are supported: register, deregister, and registration update.

Return

0 on success; on failure -1 is returned and errno is set

struct nvme_fabrics_uri *nvme_parse_uri(const char *str)

Parse the URI string

Parameters

const char *str

URI string

Description

Parse the URI string as defined in the NVM Express Boot Specification. Supported URI elements looks as follows:

nvme+tcp://user**host**:port/subsys_nqn/nid?query=val#fragment

Return

nvme_fabrics_uri structure on success; NULL on failure with errno set.

void nvme_free_uri(struct nvme_fabrics_uri *uri)

Free the URI structure

Parameters

struct nvme_fabrics_uri *uri

nvme_fabrics_uri structure

Description

Free an nvme_fabrics_uri structure.

linux.h

linux-specific utility functions

int nvme_fw_download_seq(int fd, __u32 size, __u32 xfer, __u32 offset, void *buf)

Firmware download sequence

Parameters

int fd

File descriptor of nvme device

__u32 size

Total size of the firmware image to transfer

__u32 xfer

Maximum size to send with each partial transfer

__u32 offset

Starting offset to send with this firmware download

void *buf

Address of buffer containing all or part of the firmware image.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

enum nvme_telemetry_da

Telemetry Log Data Area

Constants

NVME_TELEMETRY_DA_1

Data Area 1

NVME_TELEMETRY_DA_2

Data Area 2

NVME_TELEMETRY_DA_3

Data Area 3

NVME_TELEMETRY_DA_4

Data Area 4

int nvme_get_telemetry_max(int fd, enum nvme_telemetry_da *da, size_t *max_data_tx)

Get telemetry limits

Parameters

int fd

File descriptor of nvme device

enum nvme_telemetry_da *da

On success return max supported data area

size_t *max_data_tx

On success set to max transfer chunk supported by the controller

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_telemetry_log(int fd, bool create, bool ctrl, bool rae, size_t max_data_tx, enum nvme_telemetry_da da, struct nvme_telemetry_log **log, size_t *size)

Get specified telemetry log

Parameters

int fd

File descriptor of nvme device

bool create

Generate new host initated telemetry capture

bool ctrl

Get controller Initiated log

bool rae

Retain asynchronous events

size_t max_data_tx

Set the max data transfer size to be used retrieving telemetry.

enum nvme_telemetry_da da

Log page data area, valid values: enum nvme_telemetry_da.

struct nvme_telemetry_log **log

On success, set to the value of the allocated and retrieved log.

size_t *size

Ptr to the telemetry log size, so it can be returned

Description

The total size allocated can be calculated as:

(nvme_telemetry_log da size + 1) * NVME_LOG_TELEM_BLOCK_SIZE.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_ctrl_telemetry(int fd, bool rae, struct nvme_telemetry_log **log, enum nvme_telemetry_da da, size_t *size)

Get controller telemetry log

Parameters

int fd

File descriptor of nvme device

bool rae

Retain asynchronous events

struct nvme_telemetry_log **log

On success, set to the value of the allocated and retrieved log.

enum nvme_telemetry_da da

Log page data area, valid values: enum nvme_telemetry_da

size_t *size

Ptr to the telemetry log size, so it can be returned

Description

The total size allocated can be calculated as:

(nvme_telemetry_log da size + 1) * NVME_LOG_TELEM_BLOCK_SIZE.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_host_telemetry(int fd, struct nvme_telemetry_log **log, enum nvme_telemetry_da da, size_t *size)

Get host telemetry log

Parameters

int fd

File descriptor of nvme device

struct nvme_telemetry_log **log

On success, set to the value of the allocated and retrieved log.

enum nvme_telemetry_da da

Log page data area, valid values: enum nvme_telemetry_da

size_t *size

Ptr to the telemetry log size, so it can be returned

Description

The total size allocated can be calculated as:

(nvme_telemetry_log da size + 1) * NVME_LOG_TELEM_BLOCK_SIZE.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_new_host_telemetry(int fd, struct nvme_telemetry_log **log, enum nvme_telemetry_da da, size_t *size)

Get new host telemetry log

Parameters

int fd

File descriptor of nvme device

struct nvme_telemetry_log **log

On success, set to the value of the allocated and retrieved log.

enum nvme_telemetry_da da

Log page data area, valid values: enum nvme_telemetry_da

size_t *size

Ptr to the telemetry log size, so it can be returned

Description

The total size allocated can be calculated as:

(nvme_telemetry_log da size + 1) * NVME_LOG_TELEM_BLOCK_SIZE.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_ana_log_len(int fd, size_t *analen)

Retrieve size of the current ANA log

Parameters

int fd

File descriptor of nvme device

size_t *analen

Pointer to where the length will be set on success

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_logical_block_size(int fd, __u32 nsid, int *blksize)

Retrieve block size

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace id

int *blksize

Pointer to where the block size will be set on success

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_get_lba_status_log(int fd, bool rae, struct nvme_lba_status_log **log)

Retrieve the LBA Status log page

Parameters

int fd

File descriptor of the nvme device

bool rae

Retain asynchronous events

struct nvme_lba_status_log **log

On success, set to the value of the allocated and retrieved log.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_namespace_attach_ctrls(int fd, __u32 nsid, __u16 num_ctrls, __u16 *ctrlist)

Attach namespace to controller(s)

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace ID to attach

__u16 num_ctrls

Number of controllers in ctrlist

__u16 *ctrlist

List of controller IDs to perform the attach action

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_namespace_detach_ctrls(int fd, __u32 nsid, __u16 num_ctrls, __u16 *ctrlist)

Detach namespace from controller(s)

Parameters

int fd

File descriptor of nvme device

__u32 nsid

Namespace ID to detach

__u16 num_ctrls

Number of controllers in ctrlist

__u16 *ctrlist

List of controller IDs to perform the detach action

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_open(const char *name)

Open an nvme controller or namespace device

Parameters

const char *name

The basename of the device to open

Description

This will look for the handle in /dev/ and validate the name and filetype match linux conventions.

Return

A file descriptor for the device on a successful open, or -1 with errno set otherwise.

enum nvme_hmac_alg

HMAC algorithm

Constants

NVME_HMAC_ALG_NONE

No HMAC algorithm

NVME_HMAC_ALG_SHA2_256

SHA2-256

NVME_HMAC_ALG_SHA2_384

SHA2-384

NVME_HMAC_ALG_SHA2_512

SHA2-512

int nvme_gen_dhchap_key(char *hostnqn, enum nvme_hmac_alg hmac, unsigned int key_len, unsigned char *secret, unsigned char *key)

DH-HMAC-CHAP key generation

Parameters

char *hostnqn

Host NVMe Qualified Name

enum nvme_hmac_alg hmac

HMAC algorithm

unsigned int key_len

Output key length

unsigned char *secret

Secret to used for digest

unsigned char *key

Generated DH-HMAC-CHAP key

Return

If key generation was successful the function returns 0 or -1 with errno set otherwise.

long nvme_lookup_keyring(const char *keyring)

Lookup keyring serial number

Parameters

const char *keyring

Keyring name

Description

Looks up the serial number of the keyring keyring.

Return

The key serial number of the keyring or 0 with errno set otherwise.

char *nvme_describe_key_serial(long key_id)

Return key description

Parameters

long key_id

Key serial number

Description

Fetches the description of the key or keyring identified by the serial number key_id.

Return

The description of key_id or NULL on failure. The returned string needs to be freed by the caller.

long nvme_lookup_key(const char *type, const char *identity)

Lookup key serial number

Parameters

const char *type

Key type

const char *identity

Key description

Description

Looks up the serial number of the key identity with type type in the current session keyring.

Return

The key serial number of the key or 0 with errno set otherwise.

int nvme_set_keyring(long keyring_id)

Link keyring for lookup

Parameters

long keyring_id

Keyring id

Description

Links keyring_id into the session keyring such that its keys are available for further key lookups.

Return

0 on success, a negative number on error with errno set.

unsigned char *nvme_read_key(long keyring_id, long key_id, int *len)

Read key raw data

Parameters

long keyring_id

Id of the keyring holding key_id

long key_id

Key id

int *len

Length of the returned data

Description

Links the keyring specified by keyring_id into the session keyring and reads the payload of the key specified by key_id. len holds the size of the returned buffer. If keyring is 0 the default keyring ‘.nvme’ is used.

Return

Pointer to the payload on success, or NULL with errno set otherwise.

long nvme_update_key(long keyring_id, const char *key_type, const char *identity, unsigned char *key_data, int key_len)

Update key raw data

Parameters

long keyring_id

Id of the keyring holding key_id

const char *key_type

Type of the key to insert

const char *identity

Key identity string

unsigned char *key_data

Raw data of the key

int key_len

Length of key_data

Description

Links the keyring specified by keyring_id into the session keyring and updates the key reference by identity with key_data. The old key with identity identity will be revoked to make it inaccessible.

Return

Key id of the new key or 0 with errno set otherwise.

nvme_scan_tls_keys_cb_t

Typedef: Callback for iterating TLS keys

Syntax

void nvme_scan_tls_keys_cb_t (long keyring, long key, char *desc, int desc_len, void *data)

Parameters

long keyring

Keyring which has been iterated

long key

Key for which the callback has been invoked

char *desc

Description of the key

int desc_len

Length of desc

void *data

Pointer for caller data

Description

Called for each TLS PSK in the keyring.

int nvme_scan_tls_keys(const char *keyring, nvme_scan_tls_keys_cb_t cb, void *data)

Iterate over TLS keys in a keyring

Parameters

const char *keyring

Keyring holding TLS keys

nvme_scan_tls_keys_cb_t cb

Callback function

void *data

Pointer for data to be passed to cb

Description

Iterates keyring and call cb for each TLS key. When keyring is NULL the default ‘.nvme’ keyring is used. A TLS key must be of type ‘psk’ and the description must be of the form ‘NVMe<0|1><R|G>0<1|2> <identity>’, otherwise it will be skipped during iteration.

Return

Number of keys for which cb was called, or -1 with errno set on error.

long nvme_insert_tls_key(const char *keyring, const char *key_type, const char *hostnqn, const char *subsysnqn, int hmac, unsigned char *configured_key, int key_len)

Derive and insert TLS key

Parameters

const char *keyring

Keyring to use

const char *key_type

Type of the resulting key

const char *hostnqn

Host NVMe Qualified Name

const char *subsysnqn

Subsystem NVMe Qualified Name

int hmac

HMAC algorithm

unsigned char *configured_key

Configured key data to derive the key from

int key_len

Length of configured_key

Description

Derives a ‘retained’ TLS key as specified in NVMe TCP 1.0a and stores it as type key_type in the keyring specified by keyring.

Return

The key serial number if the key could be inserted into the keyring or 0 with errno otherwise.

long nvme_insert_tls_key_versioned(const char *keyring, const char *key_type, const char *hostnqn, const char *subsysnqn, int version, int hmac, unsigned char *configured_key, int key_len)

Derive and insert TLS key

Parameters

const char *keyring

Keyring to use

const char *key_type

Type of the resulting key

const char *hostnqn

Host NVMe Qualified Name

const char *subsysnqn

Subsystem NVMe Qualified Name

int version

Key version to use

int hmac

HMAC algorithm

unsigned char *configured_key

Configured key data to derive the key from

int key_len

Length of configured_key

Description

Derives a ‘retained’ TLS key as specified in NVMe TCP 1.0a (if version s set to ‘0’) or NVMe TP8028 (if version is set to ‘1) and stores it as type key_type in the keyring specified by keyring.

Return

The key serial number if the key could be inserted into the keyring or 0 with errno otherwise.

char *nvme_generate_tls_key_identity(const char *hostnqn, const char *subsysnqn, int version, int hmac, unsigned char *configured_key, int key_len)

Generate the TLS key identity

Parameters

const char *hostnqn

Host NVMe Qualified Name

const char *subsysnqn

Subsystem NVMe Qualified Name

int version

Key version to use

int hmac

HMAC algorithm

unsigned char *configured_key

Configured key data to derive the key from

int key_len

Length of configured_key

Description

Derives a ‘retained’ TLS key as specified in NVMe TCP and generate the corresponding TLs identity.

Return

The string containing the TLS identity. It is the responsibility of the caller to free the returned string.

char *nvme_export_tls_key(const unsigned char *key_data, int key_len)

Export a TLS key

Parameters

const unsigned char *key_data

Raw data of the key

int key_len

Length of key_data

Description

Returns key_data in the PSK Interchange format as defined in section 3.6.1.5 of the NVMe TCP Transport specification.

Return

The string containing the TLS identity or NULL with errno set on error. It is the responsibility of the caller to free the returned string.

unsigned char *nvme_import_tls_key(const char *encoded_key, int *key_len, unsigned int *hmac)

Import a TLS key

Parameters

const char *encoded_key

TLS key in PSK interchange format

int *key_len

Length of the resulting key data

unsigned int *hmac

HMAC algorithm

Description

Imports key_data in the PSK Interchange format as defined in section 3.6.1.5 of the NVMe TCP Transport specification.

Return

The raw data of the PSK or NULL with errno set on error. It is the responsibility of the caller to free the returned string.

int nvme_submit_passthru(int fd, unsigned long ioctl_cmd, struct nvme_passthru_cmd *cmd, __u32 *result)

Low level ioctl wrapper for passthru commands

Parameters

int fd

File descriptor of the nvme device

unsigned long ioctl_cmd

IOCTL command id

struct nvme_passthru_cmd *cmd

Passhtru command

__u32 *result

Optional field to return the result

Description

This is a low level library function which should not be used directly. It is exposed as weak symbol so that the user application is able to provide their own implementation of this function with additional debugging or logging code.

Return

The value from the ioctl system call (see ioctl documentation)

int nvme_submit_passthru64(int fd, unsigned long ioctl_cmd, struct nvme_passthru_cmd64 *cmd, __u64 *result)

Low level ioctl wrapper for passthru commands

Parameters

int fd

File descriptor of the nvme device

unsigned long ioctl_cmd

IOCTL command id

struct nvme_passthru_cmd64 *cmd

Passhtru command

__u64 *result

Optional field to return the result

Description

This is a low level library function which should not be used directly. It is exposed as weak symbol so that the user application is able to provide their own implementation of this function with additional debugging or logging code.

Return

The value from the ioctl system call (see ioctl documentation)

mi.h - NVMe Management Interface library (libnvme-mi) definitions.

These provide an abstraction for the MI messaging between controllers and a host, typically over an MCTP-over-i2c link to a NVMe device, used as part of the out-of-band management of a system.

We have a few data structures define here to reflect the topology of a MI connection with an NVMe subsystem:

  • nvme_mi_ep_t: an MI endpoint - our mechanism of communication with a NVMe subsystem. For MCTP, an endpoint will be the component that holds the MCTP address (EID), and receives our request message.

    endpoints are defined in the NVMe-MI spec, and are specific to the MI interface.

    Each endpoint will provide access to one or more of:

  • nvme_mi_ctrl_t: a NVMe controller, as defined by the NVMe base spec. The controllers are responsible for processing any NVMe standard commands (eg, the Admin command set). An endpoint (nvme_mi_ep_t) may provide access to multiple controllers - so each of the controller- type commands will require a nvme_mi_ctrl_t to be specified, rather than an endpoint

A couple of conventions with the libnvme-mi API:

  • All types and functions have the nvme_mi prefix, to distinguish from the libnvme core.

  • We currently support either MI commands and Admin commands. The former adds a _mi prefix, the latter an _admin prefix. [This does result in the MI functions having a double _mi, like nvme_mi_mi_subsystem_health_status_poll, which is apparently amusing for our German-speaking readers]

For return values: unless specified in the per-function documentation, all functions:

  • return 0 on success

  • return -1, with errno set, for errors communicating with the MI device, either in request or response data

  • return >1 on MI status errors. This value is the 8-bit MI status value, represented by enum nvme_mi_resp_status. Note that the status values may be vendor-defined above 0xe0.

For the second case, we have a few conventions for errno values:

  • EPROTO: response data violated the MI protocol, and libnvme cannot validly interpret the response

  • EIO: Other I/O error communicating with device (eg., valid but unexpected response data)

  • EINVAL: invalid input arguments for a command

In line with the core NVMe API, the Admin command functions take an _args structure to provide the command-specific parameters. However, for the MI interface, the fd and timeout members of these _args structs are ignored.

References to the specifications here will either to be the NVM Express Management Interface (“NVMe-MI”) or the NVM Express Base specification (“NVMe”). At the time of writing, the versions we’re referencing here are:

  • NVMe-MI 1.2b

  • NVMe 2.0b

with a couple of accommodations for older spec types, particularly NVMe-MI 1.1, where possible.

NVME_MI_MSGTYPE_NVME

NVME_MI_MSGTYPE_NVME ()

MCTP message type for NVMe-MI messages.

Parameters

Description

This is defined by MCTP, but is referenced as part of the NVMe-MI message spec. This is the MCTP NVMe message type (0x4), with the message-integrity bit (0x80) set.

enum nvme_mi_message_type

NVMe-MI message type field.

Constants

NVME_MI_MT_CONTROL

NVME-MI Control Primitive

NVME_MI_MT_MI

NVMe-MI command

NVME_MI_MT_ADMIN

NVMe Admin command

NVME_MI_MT_PCIE

PCIe command

Description

Used as byte 1 of both request and response messages (NMIMT bits of NMP byte). Not to be confused with the MCTP message type in byte 0.

enum nvme_mi_ror

Request or response field.

Constants

NVME_MI_ROR_REQ

request message

NVME_MI_ROR_RSP

response message

enum nvme_mi_resp_status

values for the response status field

Constants

NVME_MI_RESP_SUCCESS

success

NVME_MI_RESP_MPR

More Processing Required

NVME_MI_RESP_INTERNAL_ERR

Internal Error

NVME_MI_RESP_INVALID_OPCODE

Invalid command opcode

NVME_MI_RESP_INVALID_PARAM

Invalid command parameter

NVME_MI_RESP_INVALID_CMD_SIZE

Invalid command size

NVME_MI_RESP_INVALID_INPUT_SIZE

Invalid command input data size

NVME_MI_RESP_ACCESS_DENIED

Access Denied

NVME_MI_RESP_VPD_UPDATES_EXCEEDED

More VPD updates than allowed

NVME_MI_RESP_PCIE_INACCESSIBLE

PCIe functionality currently unavailable

NVME_MI_RESP_MEB_SANITIZED

MEB has been cleared due to sanitize

NVME_MI_RESP_ENC_SERV_FAILURE

Enclosure services process failed

NVME_MI_RESP_ENC_SERV_XFER_FAILURE

Transfer with enclosure services failed

NVME_MI_RESP_ENC_FAILURE

Unreoverable enclosure failure

NVME_MI_RESP_ENC_XFER_REFUSED

Enclosure services transfer refused

NVME_MI_RESP_ENC_FUNC_UNSUP

Unsupported enclosure services function

NVME_MI_RESP_ENC_SERV_UNAVAIL

Enclosure services unavailable

NVME_MI_RESP_ENC_DEGRADED

Noncritical failure detected by enc. services

NVME_MI_RESP_SANITIZE_IN_PROGRESS

Command prohibited during sanitize

struct nvme_mi_msg_hdr

General MI message header.

Definition

struct nvme_mi_msg_hdr {
  __u8 type;
  __u8 nmp;
  __u8 meb;
  __u8 rsvd0;
};

Members

type

MCTP message type, will always be NVME_MI_MSGTYPE_NVME

nmp

NVMe-MI message parameters (including MI message type)

meb

Management Endpoint Buffer flag; unused for libnvme-mi implementation

rsvd0

currently reserved

Description

Wire format shared by both request and response messages, per NVMe-MI section 3.1. This is used for all message types, MI and Admin.

struct nvme_mi_msg_resp

Generic response type.

Definition

struct nvme_mi_msg_resp {
  struct nvme_mi_msg_hdr hdr;
  __u8 status;
  __u8 rsvd0[3];
};

Members

hdr

the general request/response message header

status

response status value (see enum nvme_mi_resp_status)

rsvd0

reserved data, may be defined by specific response

Description

Every response will start with one of these; command-specific responses will define parts of the reserved data, and may add further fields.

enum nvme_mi_mi_opcode

Operation code for supported NVMe-MI commands.

Constants

nvme_mi_mi_opcode_mi_data_read

Read NVMe-MI Data Structure

nvme_mi_mi_opcode_subsys_health_status_poll

Subsystem Health Status Poll

nvme_mi_mi_opcode_configuration_set

MI Configuration Set

nvme_mi_mi_opcode_configuration_get

MI Configuration Get

struct nvme_mi_mi_req_hdr

MI request message header.

Definition

struct nvme_mi_mi_req_hdr {
  struct nvme_mi_msg_hdr hdr;
  __u8 opcode;
  __u8 rsvd0[3];
  __le32 cdw0, cdw1;
};

Members

hdr

generic MI message header

opcode

opcode (OPC) for the specific MI command

rsvd0

reserved bytes

cdw0

Management Request Doubleword 0 - command specific usage

cdw1

Management Request Doubleword 1 - command specific usage

Description

Wire format for MI request message headers, defined in section 5 of NVMe-MI.

struct nvme_mi_mi_resp_hdr

MI response message header.

Definition

struct nvme_mi_mi_resp_hdr {
  struct nvme_mi_msg_hdr hdr;
  __u8 status;
  __u8 nmresp[3];
};

Members

hdr

generic MI message header

status

generic response status from command; non-zero on failure.

nmresp

NVMe Management Response: command-type-specific response data

Description

Wire format for MI response message header, defined in section 5 of NVMe-MI.

enum nvme_mi_dtyp

Data Structure Type field.

Constants

nvme_mi_dtyp_subsys_info

NVM Subsystem Information

nvme_mi_dtyp_port_info

Port information

nvme_mi_dtyp_ctrl_list

Controller List

nvme_mi_dtyp_ctrl_info

Controller Information

nvme_mi_dtyp_opt_cmd_support

Optionally Supported Command List

nvme_mi_dtyp_meb_support

Management Endpoint Buffer Command Support List

Description

Data Structure Type field for Read NVMe-MI Data Structure command, used to indicate the particular structure to query from the endpoint.

enum nvme_mi_config_id

NVMe-MI Configuration identifier.

Constants

NVME_MI_CONFIG_SMBUS_FREQ

Current SMBus/I2C frequency

NVME_MI_CONFIG_HEALTH_STATUS_CHANGE

Health Status change - used to clear health status bits in CCS bits of status poll. Only for Set ops.

NVME_MI_CONFIG_MCTP_MTU

MCTP maximum transmission unit size of port specified in dw 0

Description

Configuration parameters for the MI Get/Set Configuration commands.

See :c:type:`nvme_mi_mi_config_get`() and :c:type:`nvme_mi_config_set`().

enum nvme_mi_config_smbus_freq

SMBus/I2C frequency values

Constants

NVME_MI_CONFIG_SMBUS_FREQ_100kHz

100kHz

NVME_MI_CONFIG_SMBUS_FREQ_400kHz

400kHz

NVME_MI_CONFIG_SMBUS_FREQ_1MHz

1MHz

Description

Values used in the SMBus Frequency device configuration. See :c:type:`nvme_mi_mi_config_get_smbus_freq`() and :c:type:`nvme_mi_mi_config_set_smbus_freq`().

struct nvme_mi_admin_req_hdr

Admin command request header.

Definition

struct nvme_mi_admin_req_hdr {
  struct nvme_mi_msg_hdr hdr;
  __u8 opcode;
  __u8 flags;
  __le16 ctrl_id;
  __le32 cdw1, cdw2, cdw3, cdw4, cdw5;
  __le32 doff;
  __le32 dlen;
  __le32 rsvd0, rsvd1;
  __le32 cdw10, cdw11, cdw12, cdw13, cdw14, cdw15;
};

Members

hdr

Generic MI message header

opcode

Admin command opcode (using enum nvme_admin_opcode)

flags

Command Flags, indicating dlen and doff validity; Only defined in NVMe-MI version 1.1, no fields defined in 1.2 (where the dlen/doff are always considered valid).

ctrl_id

Controller ID target of command

cdw1

Submission Queue Entry doubleword 1

cdw2

Submission Queue Entry doubleword 2

cdw3

Submission Queue Entry doubleword 3

cdw4

Submission Queue Entry doubleword 4

cdw5

Submission Queue Entry doubleword 5

doff

Offset of data to return from command

dlen

Length of sent/returned data

rsvd0

Reserved

rsvd1

Reserved

cdw10

Submission Queue Entry doubleword 10

cdw11

Submission Queue Entry doubleword 11

cdw12

Submission Queue Entry doubleword 12

cdw13

Submission Queue Entry doubleword 13

cdw14

Submission Queue Entry doubleword 14

cdw15

Submission Queue Entry doubleword 15

Description

Wire format for Admin command message headers, defined in section 6 of NVMe-MI.

struct nvme_mi_admin_resp_hdr

Admin command response header.

Definition

struct nvme_mi_admin_resp_hdr {
  struct nvme_mi_msg_hdr hdr;
  __u8 status;
  __u8 rsvd0[3];
  __le32 cdw0, cdw1, cdw3;
};

Members

hdr

Generic MI message header

status

Generic response code, non-zero on failure

rsvd0

Reserved

cdw0

Completion Queue Entry doubleword 0

cdw1

Completion Queue Entry doubleword 1

cdw3

Completion Queue Entry doubleword 3

Description

This is the generic response format with the three doublewords of completion queue data, plus optional response data.

const char *nvme_mi_status_to_string(int status)

return a string representation of the MI status.

Parameters

int status

MI response status

Description

Gives a string description of status, as per section 4.1.2 of the NVMe-MI spec. The status value should be of type NVME_STATUS_MI, and extracted from the return value using nvme_status_get_value().

Returned string is const, and should not be free()ed.

Return

A string representing the status value

nvme_root_t nvme_mi_create_root(FILE *fp, int log_level)

Create top-level MI (root) handle.

Parameters

FILE *fp

File descriptor for logging messages

int log_level

Logging level to use

Description

Create the top-level (library) handle for creating subsequent endpoint objects. Similar to nvme_create_root(), but we provide this to allow linking without the core libnvme.

See nvme_create_root.

Return

new root object, or NULL on failure.

void nvme_mi_free_root(nvme_root_t root)

Free root object.

Parameters

nvme_root_t root

root to free

void nvme_mi_set_probe_enabled(nvme_root_t root, bool enabled)

enable/disable the probe for new endpoints

Parameters

nvme_root_t root

nvme_root_t object

bool enabled

whether to probe new endpoints

Description

Controls whether newly-created endpoints are probed for quirks on creation. Defaults to enabled, which results in some initial messaging with the endpoint to determine model-specific details.

type nvme_mi_ep_t

MI Endpoint object.

Description

Represents our communication endpoint on the remote MI-capable device. To be used for direct MI commands for the endpoint (through the nvme_mi_mi_* functions(), or to communicate with individual controllers (see nvme_mi_init_ctrl).

Endpoints are created through a transport-specific constructor; currently only MCTP-connected endpoints are supported, through nvme_mi_open_mctp. Subsequent operations on the endpoint (and related controllers) are transport-independent.

nvme_mi_ep_t nvme_mi_first_endpoint(nvme_root_t m)

Start endpoint iterator

Parameters

nvme_root_t m

nvme_root_t object

Return

first MI endpoint object under this root, or NULL if no endpoints

are present.

Description

See: nvme_mi_next_endpoint, nvme_mi_for_each_endpoint

nvme_mi_ep_t nvme_mi_next_endpoint(nvme_root_t m, nvme_mi_ep_t e)

Continue endpoint iterator

Parameters

nvme_root_t m

nvme_root_t object

nvme_mi_ep_t e

nvme_mi_ep_t current position of iterator

Return

next endpoint MI endpoint object after e under this root, or NULL

if no further endpoints are present.

Description

See: nvme_mi_first_endpoint, nvme_mi_for_each_endpoint

nvme_mi_for_each_endpoint

nvme_mi_for_each_endpoint (m, e)

Iterator for NVMe-MI endpoints.

Parameters

m

nvme_root_t containing endpoints

e

nvme_mi_ep_t object, set on each iteration

nvme_mi_for_each_endpoint_safe

nvme_mi_for_each_endpoint_safe (m, e, _e)

Iterator for NVMe-MI endpoints, allowing deletion during traversal

Parameters

m

nvme_root_t containing endpoints

e

nvme_mi_ep_t object, set on each iteration

_e

nvme_mi_ep_t object used as temporary storage

int nvme_mi_ep_set_timeout(nvme_mi_ep_t ep, unsigned int timeout_ms)

set a timeout for NVMe-MI responses

Parameters

nvme_mi_ep_t ep

MI endpoint object

unsigned int timeout_ms

Timeout for MI responses, given in milliseconds

void nvme_mi_ep_set_mprt_max(nvme_mi_ep_t ep, unsigned int mprt_max_ms)

set the maximum wait time for a More Processing Required response

Parameters

nvme_mi_ep_t ep

MI endpoint object

unsigned int mprt_max_ms

Maximum more processing required wait time

Description

NVMe-MI endpoints may respond to a request with a “More Processing Required” response; this also includes a hint on the worst-case processing time for the eventual response data, with a specification-defined maximum of 65.535 seconds.

This function provides a way to limit the maximum time we’re prepared to wait for the final response. Specify zero in mprt_max_ms for no limit. This should be larger than the command/response timeout set in :c:type:`nvme_mi_ep_set_timeout`().

unsigned int nvme_mi_ep_get_timeout(nvme_mi_ep_t ep)

get the current timeout value for NVMe-MI responses

Parameters

nvme_mi_ep_t ep

MI endpoint object

Description

Returns the current timeout value, in milliseconds, for this endpoint.

type nvme_mi_ctrl_t

NVMe-MI Controller object.

Description

Provides NVMe command functionality, through the MI interface.

nvme_mi_ctrl_t nvme_mi_first_ctrl(nvme_mi_ep_t ep)

Start controller iterator

Parameters

nvme_mi_ep_t ep

nvme_mi_ep_t object

Return

first MI controller object under this root, or NULL if no controllers

are present.

Description

See: nvme_mi_next_ctrl, nvme_mi_for_each_ctrl

nvme_mi_ctrl_t nvme_mi_next_ctrl(nvme_mi_ep_t ep, nvme_mi_ctrl_t c)

Continue ctrl iterator

Parameters

nvme_mi_ep_t ep

nvme_mi_ep_t object

nvme_mi_ctrl_t c

nvme_mi_ctrl_t current position of iterator

Return

next MI controller object after c under this endpoint, or NULL

if no further controllers are present.

Description

See: nvme_mi_first_ctrl, nvme_mi_for_each_ctrl

nvme_mi_for_each_ctrl

nvme_mi_for_each_ctrl (ep, c)

Iterator for NVMe-MI controllers.

Parameters

ep

nvme_mi_ep_t containing endpoints

c

nvme_mi_ctrl_t object, set on each iteration

Description

Allows iteration of the list of controllers behind an endpoint. Unless the controllers have already been created explicitly, you’ll probably want to call :c:type:`nvme_mi_scan_ep`() to scan for the controllers first.

See: :c:type:`nvme_mi_scan_ep`()

nvme_mi_for_each_ctrl_safe

nvme_mi_for_each_ctrl_safe (ep, c, _c)

Iterator for NVMe-MI controllers, allowing deletion during traversal

Parameters

ep

nvme_mi_ep_t containing controllers

c

nvme_mi_ctrl_t object, set on each iteration

_c

nvme_mi_ctrl_t object used as temporary storage

Description

Allows iteration of the list of controllers behind an endpoint, safe against deletion during iteration. Unless the controllers have already been created explicitly (or you’re just iterating to destroy controllers) you’ll probably want to call :c:type:`nvme_mi_scan_ep`() to scan for the controllers first.

See: :c:type:`nvme_mi_scan_ep`()

nvme_mi_ep_t nvme_mi_open_mctp(nvme_root_t root, unsigned int netid, uint8_t eid)

Create an endpoint using a MCTP connection.

Parameters

nvme_root_t root

root object to create under

unsigned int netid

MCTP network ID on this system

uint8_t eid

MCTP endpoint ID

Description

Transport-specific endpoint initialization for MI-connected endpoints. Once an endpoint is created, the rest of the API is transport-independent.

See nvme_mi_close

Return

New endpoint object for netid & eid, or NULL on failure.

void nvme_mi_close(nvme_mi_ep_t ep)

Close an endpoint connection and release resources, including controller objects.

Parameters

nvme_mi_ep_t ep

Endpoint object to close

nvme_root_t nvme_mi_scan_mctp(void)

look for MCTP-connected NVMe-MI endpoints.

Parameters

void

no arguments

Description

This function queries the system MCTP daemon (“mctpd”) over D-Bus, to find MCTP endpoints that report support for NVMe-MI over MCTP.

This requires libvnme-mi to be compiled with D-Bus support; if not, this will return NULL.

Return

A nvme_root_t populated with a set of MCTP-connected endpoints,

or NULL on failure

int nvme_mi_scan_ep(nvme_mi_ep_t ep, bool force_rescan)

query an endpoint for its NVMe controllers.

Parameters

nvme_mi_ep_t ep

Endpoint to scan

bool force_rescan

close existing controllers and rescan

Description

This function queries an MI endpoint for the controllers available, by performing an MI Read MI Data Structure command (requesting the controller list). The controllers are stored in the endpoint’s internal list, and can be iterated with nvme_mi_for_each_ctrl.

This will only scan the endpoint once, unless force_rescan is set. If so, all existing controller objects will be freed - the caller must not hold a reference to those across this call.

See: nvme_mi_for_each_ctrl

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

nvme_mi_ctrl_t nvme_mi_init_ctrl(nvme_mi_ep_t ep, __u16 ctrl_id)

initialise a NVMe controller.

Parameters

nvme_mi_ep_t ep

Endpoint to create under

__u16 ctrl_id

ID of controller to initialize.

Description

Create a connection to a controller behind the endpoint specified in ep. Controller IDs may be queried from the endpoint through nvme_mi_mi_read_mi_data_ctrl_list.

See nvme_mi_close_ctrl

Return

New controller object, or NULL on failure.

void nvme_mi_close_ctrl(nvme_mi_ctrl_t ctrl)

free a controller

Parameters

nvme_mi_ctrl_t ctrl

controller to free

__u16 nvme_mi_ctrl_id(nvme_mi_ctrl_t ctrl)

get the ID of a controller

Parameters

nvme_mi_ctrl_t ctrl

controller to query

Description

Retrieve the ID of the controller, as defined by hardware, and available in the Identify (Controller List) data. This is the value passed to nvme_mi_init_ctrl, but may have been created internally via nvme_mi_scan_ep.

Return

the (locally-stored) ID of this controller.

char *nvme_mi_endpoint_desc(nvme_mi_ep_t ep)

Get a string describing a MI endpoint.

Parameters

nvme_mi_ep_t ep

endpoint to describe

Description

Generates a human-readable string describing the endpoint, with possibly transport-specific data. The string is allocated during the call, and the caller is responsible for free()-ing the string.

Return

a newly-allocated string containing the endpoint description, or

NULL on failure.

int nvme_mi_mi_read_mi_data_subsys(nvme_mi_ep_t ep, struct nvme_mi_read_nvm_ss_info *s)

Perform a Read MI Data Structure command, retrieving subsystem data.

Parameters

nvme_mi_ep_t ep

endpoint for MI communication

struct nvme_mi_read_nvm_ss_info *s

subsystem information to populate

Description

Retrieves the Subsystem information - number of external ports and NVMe version information. See struct nvme_mi_read_nvm_ss_info.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise..

int nvme_mi_mi_read_mi_data_port(nvme_mi_ep_t ep, __u8 portid, struct nvme_mi_read_port_info *p)

Perform a Read MI Data Structure command, retrieving port data.

Parameters

nvme_mi_ep_t ep

endpoint for MI communication

__u8 portid

id of port data to retrieve

struct nvme_mi_read_port_info *p

port information to populate

Description

Retrieves the Port information, for the specified port ID. The subsystem data (from nvme_mi_mi_read_mi_data_subsys) nmp field contains the allowed range of port IDs.

See struct nvme_mi_read_port_info.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise..

int nvme_mi_mi_read_mi_data_ctrl_list(nvme_mi_ep_t ep, __u8 start_ctrlid, struct nvme_ctrl_list *list)

Perform a Read MI Data Structure command, retrieving the list of attached controllers.

Parameters

nvme_mi_ep_t ep

endpoint for MI communication

__u8 start_ctrlid

starting controller ID

struct nvme_ctrl_list *list

controller list to populate

Description

Retrieves the list of attached controllers, with IDs greater than or equal to start_ctrlid.

See struct nvme_ctrl_list.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise..

int nvme_mi_mi_read_mi_data_ctrl(nvme_mi_ep_t ep, __u16 ctrl_id, struct nvme_mi_read_ctrl_info *ctrl)

Perform a Read MI Data Structure command, retrieving controller information

Parameters

nvme_mi_ep_t ep

endpoint for MI communication

__u16 ctrl_id

ID of controller to query

struct nvme_mi_read_ctrl_info *ctrl

controller data to populate

Description

Retrieves the Controller Information Data Structure for the attached controller with ID ctrlid.

See struct nvme_mi_read_ctrl_info.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise..

int nvme_mi_mi_subsystem_health_status_poll(nvme_mi_ep_t ep, bool clear, struct nvme_mi_nvm_ss_health_status *nshds)

Read the Subsystem Health Data Structure from the NVM subsystem

Parameters

nvme_mi_ep_t ep

endpoint for MI communication

bool clear

flag to clear the Composite Controller Status state

struct nvme_mi_nvm_ss_health_status *nshds

subsystem health status data to populate

Description

Retrieves the Subsystem Health Data Structure into nshds. If clear is set, requests that the Composite Controller Status bits are cleared after the read. See NVMe-MI section 5.6 for details on the CCS bits.

See struct nvme_mi_nvm_ss_health_status.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise..

int nvme_mi_mi_config_get(nvme_mi_ep_t ep, __u32 dw0, __u32 dw1, __u32 *nmresp)

query a configuration parameter

Parameters

nvme_mi_ep_t ep

endpoint for MI communication

__u32 dw0

management doubleword 0, containing configuration identifier, plus config-specific fields

__u32 dw1

management doubleword 0, config-specific.

__u32 *nmresp

set to queried configuration data in NMRESP field of response.

Description

Performs a MI Configuration Get command, with the configuration identifier as the LSB of dw0. Other dw0 and dw1 data is configuration-identifier specific.

On a successful Configuration Get, the nmresp pointer will be populated with the bytes from the 3-byte NMRESP field, converted to native endian.

See enum nvme_mi_config_id for identifiers.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise..

int nvme_mi_mi_config_set(nvme_mi_ep_t ep, __u32 dw0, __u32 dw1)

set a configuration parameter

Parameters

nvme_mi_ep_t ep

endpoint for MI communication

__u32 dw0

management doubleword 0, containing configuration identifier, plus config-specific fields

__u32 dw1

management doubleword 0, config-specific.

Description

Performs a MI Configuration Set command, with the command as the LSB of dw0. Other dw0 and dw1 data is configuration-identifier specific.

See enum nvme_mi_config_id for identifiers.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise..

int nvme_mi_mi_config_get_smbus_freq(nvme_mi_ep_t ep, __u8 port, enum nvme_mi_config_smbus_freq *freq)

get configuration: SMBus port frequency

Parameters

nvme_mi_ep_t ep

endpoint for MI communication

__u8 port

port ID to query

enum nvme_mi_config_smbus_freq *freq

output value for current frequency configuration

Description

Performs a MI Configuration Get, to query the current SMBus frequency of the port specified in port. On success, populates freq with the port frequency

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise..

int nvme_mi_mi_config_set_smbus_freq(nvme_mi_ep_t ep, __u8 port, enum nvme_mi_config_smbus_freq freq)

set configuration: SMBus port frequency

Parameters

nvme_mi_ep_t ep

endpoint for MI communication

__u8 port

port ID to set

enum nvme_mi_config_smbus_freq freq

new frequency configuration

Description

Performs a MI Configuration Set, to update the current SMBus frequency of the port specified in port.

See struct nvme_mi_read_port_info for the maximum supported SMBus frequency for the port.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise..

int nvme_mi_mi_config_set_health_status_change(nvme_mi_ep_t ep, __u32 mask)

clear CCS bits in health status

Parameters

nvme_mi_ep_t ep

endpoint for MI communication

__u32 mask

bitmask to clear

Description

Performs a MI Configuration Set, to update the current health status poll values of the Composite Controller Status bits. Bits set in mask will be cleared from future health status poll data, and may be re-triggered by a future health change event.

See nvme_mi_mi_subsystem_health_status_poll`(), :c:type:`enum nvme_mi_ccs for values in mask.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise..

int nvme_mi_mi_config_get_mctp_mtu(nvme_mi_ep_t ep, __u8 port, __u16 *mtu)

get configuration: MCTP MTU

Parameters

nvme_mi_ep_t ep

endpoint for MI communication

__u8 port

port ID to query

__u16 *mtu

output value for current MCTP MTU configuration

Description

Performs a MI Configuration Get, to query the current MCTP Maximum Transmission Unit size (MTU) of the port specified in port. On success, populates mtu with the MTU.

The default reset value is 64, corresponding to the MCTP baseline MTU.

Some controllers may also use this as the maximum receive unit size, and may not accept MCTP messages larger than the configured MTU.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise..

int nvme_mi_mi_config_set_mctp_mtu(nvme_mi_ep_t ep, __u8 port, __u16 mtu)

set configuration: MCTP MTU

Parameters

nvme_mi_ep_t ep

endpoint for MI communication

__u8 port

port ID to set

__u16 mtu

new MTU configuration

Description

Performs a MI Configuration Set, to update the current MCTP MTU value for the port specified in port.

Some controllers may also use this as the maximum receive unit size, and may not accept MCTP messages larger than the configured MTU. When setting this value, you will likely need to change the MTU of the local MCTP interface(s) to match.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise..

int nvme_mi_admin_xfer(nvme_mi_ctrl_t ctrl, struct nvme_mi_admin_req_hdr *admin_req, size_t req_data_size, struct nvme_mi_admin_resp_hdr *admin_resp, off_t resp_data_offset, size_t *resp_data_size)

Raw admin transfer interface.

Parameters

nvme_mi_ctrl_t ctrl

controller to send the admin command to

struct nvme_mi_admin_req_hdr *admin_req

request data

size_t req_data_size

size of request data payload

struct nvme_mi_admin_resp_hdr *admin_resp

buffer for response data

off_t resp_data_offset

offset into request data to retrieve from controller

size_t *resp_data_size

size of response data buffer, updated to received size

Description

Performs an arbitrary NVMe Admin command, using the provided request data, in admin_req. The size of the request data payload is specified in req_data_size - this does not include the standard header length (so a header-only request would have a size of 0).

On success, response data is stored in admin_resp, which has an optional appended payload buffer of resp_data_size bytes. The actual payload transferred will be stored in resp_data_size. These sizes do not include the Admin request header, so 0 represents no payload.

As with all Admin commands, we can request partial data from the Admin Response payload, offset by resp_data_offset.

See: struct nvme_mi_admin_req_hdr and struct nvme_mi_admin_resp_hdr.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise..

int nvme_mi_admin_admin_passthru(nvme_mi_ctrl_t ctrl, __u8 opcode, __u8 flags, __u16 rsvd, __u32 nsid, __u32 cdw2, __u32 cdw3, __u32 cdw10, __u32 cdw11, __u32 cdw12, __u32 cdw13, __u32 cdw14, __u32 cdw15, __u32 data_len, void *data, __u32 metadata_len, void *metadata, __u32 timeout_ms, __u32 *result)

Submit an nvme admin passthrough command

Parameters

nvme_mi_ctrl_t ctrl

Controller to send command to

__u8 opcode

The nvme admin command to send

__u8 flags

NVMe command flags (not used)

__u16 rsvd

Reserved for future use

__u32 nsid

Namespace identifier

__u32 cdw2

Command dword 2

__u32 cdw3

Command dword 3

__u32 cdw10

Command dword 10

__u32 cdw11

Command dword 11

__u32 cdw12

Command dword 12

__u32 cdw13

Command dword 13

__u32 cdw14

Command dword 14

__u32 cdw15

Command dword 15

__u32 data_len

Length of the data transferred in this command in bytes

void *data

Pointer to user address of the data buffer

__u32 metadata_len

Length of metadata transferred in this command(not used)

void *metadata

Pointer to user address of the metadata buffer(not used)

__u32 timeout_ms

How long to wait for the command to complete

__u32 *result

Optional field to return the result from the CQE dword 0

Description

Send a customized NVMe Admin command request message and get the corresponding response message.

This interface supports no data, host to controller and controller to host but it doesn’t support bidirectional data transfer. Also this interface only supports data transfer size range [0, 4096] (bytes) so the & data_len parameter must be less than 4097.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_identify_partial(nvme_mi_ctrl_t ctrl, struct nvme_identify_args *args, off_t offset, size_t size)

Perform an Admin identify command, and retrieve partial response data.

Parameters

nvme_mi_ctrl_t ctrl

Controller to process identify command

struct nvme_identify_args *args

Identify command arguments

off_t offset

offset of identify data to retrieve from response

size_t size

size of identify data to return

Description

Perform an Identify command, using the Identify command parameters in args. The offset and size arguments allow the caller to retrieve part of the identify response. See NVMe-MI section 6.2 for the semantics (and some handy diagrams) of the offset & size parameters.

Will return an error if the length of the response data (from the controller) did not match size.

Unless you’re performing a vendor-unique identify command, You’ll probably want to use one of the identify helpers (nvme_mi_admin_identify, nvme_mi_admin_identify_cns_nsid, or nvme_mi_admin_identify_<type>) instead of this. If the type of your identify command is standardized but not yet supported by libnvme-mi, please contact the maintainers.

See: struct nvme_identify_args

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_identify(nvme_mi_ctrl_t ctrl, struct nvme_identify_args *args)

Perform an Admin identify command.

Parameters

nvme_mi_ctrl_t ctrl

Controller to process identify command

struct nvme_identify_args *args

Identify command arguments

Description

Perform an Identify command, using the Identify command parameters in args. Stores the identify data in ->data, and (if set) the result from cdw0 into args->result.

Will return an error if the length of the response data (from the controller) is not a full NVME_IDENTIFY_DATA_SIZE.

See: struct nvme_identify_args

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_identify_cns_nsid(nvme_mi_ctrl_t ctrl, enum nvme_identify_cns cns, __u32 nsid, void *data)

Perform an Admin identify command using specific CNS/NSID parameters.

Parameters

nvme_mi_ctrl_t ctrl

Controller to process identify command

enum nvme_identify_cns cns

Controller or Namespace Structure, specifying identified object

__u32 nsid

namespace ID

void *data

buffer for identify data response

Description

Perform an Identify command, using the CNS specifier cns, and the namespace ID nsid if required by the CNS type.

Stores the identify data in data, which is expected to be a buffer of NVME_IDENTIFY_DATA_SIZE bytes.

Will return an error if the length of the response data (from the controller) is not a full NVME_IDENTIFY_DATA_SIZE.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_identify_ns(nvme_mi_ctrl_t ctrl, __u32 nsid, struct nvme_id_ns *ns)

Perform an Admin identify command for a namespace

Parameters

nvme_mi_ctrl_t ctrl

Controller to process identify command

__u32 nsid

namespace ID

struct nvme_id_ns *ns

Namespace identification to populate

Description

Perform an Identify (namespace) command, setting the namespace id data in ns. The namespace is expected to active and allocated.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_identify_ns_descs(nvme_mi_ctrl_t ctrl, __u32 nsid, struct nvme_ns_id_desc *descs)

Perform an Admin identify Namespace Identification Descriptor list command for a namespace

Parameters

nvme_mi_ctrl_t ctrl

Controller to process identify command

__u32 nsid

Namespace ID

struct nvme_ns_id_desc *descs

Namespace Identification Descriptor list to populate

Description

Perform an Identify namespace identification description list command, setting the namespace identification description list in descs

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_identify_allocated_ns(nvme_mi_ctrl_t ctrl, __u32 nsid, struct nvme_id_ns *ns)

Perform an Admin identify command for an allocated namespace

Parameters

nvme_mi_ctrl_t ctrl

Controller to process identify command

__u32 nsid

namespace ID

struct nvme_id_ns *ns

Namespace identification to populate

Description

Perform an Identify (namespace) command, setting the namespace id data in ns.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_identify_ctrl(nvme_mi_ctrl_t ctrl, struct nvme_id_ctrl *id)

Perform an Admin identify for a controller

Parameters

nvme_mi_ctrl_t ctrl

Controller to process identify command

struct nvme_id_ctrl *id

Controller identify data to populate

Description

Perform an Identify command, for the controller specified by ctrl, writing identify data to id.

Will return an error if the length of the response data (from the controller) is not a full NVME_IDENTIFY_DATA_SIZE, so id will be fully populated on success.

See: struct nvme_id_ctrl

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_identify_ctrl_list(nvme_mi_ctrl_t ctrl, __u16 cntid, struct nvme_ctrl_list *list)

Perform an Admin identify for a controller list.

Parameters

nvme_mi_ctrl_t ctrl

Controller to process identify command

__u16 cntid

Controller ID to specify list start

struct nvme_ctrl_list *list

List data to populate

Description

Perform an Identify command, for the controller list starting with IDs greater than or equal to cntid.

Will return an error if the length of the response data (from the controller) is not a full NVME_IDENTIFY_DATA_SIZE, so id will be fully populated on success.

See: struct nvme_ctrl_list

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_identify_nsid_ctrl_list(nvme_mi_ctrl_t ctrl, __u32 nsid, __u16 cntid, struct nvme_ctrl_list *list)

Perform an Admin identify for a controller list with specific namespace ID

Parameters

nvme_mi_ctrl_t ctrl

Controller to process identify command

__u32 nsid

Namespace identifier

__u16 cntid

Controller ID to specify list start

struct nvme_ctrl_list *list

List data to populate

Description

Perform an Identify command, for the controller list for nsid, starting with IDs greater than or equal to cntid.

Will return an error if the length of the response data (from the controller) is not a full NVME_IDENTIFY_DATA_SIZE, so id will be fully populated on success.

See: struct nvme_ctrl_list

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_identify_allocated_ns_list(nvme_mi_ctrl_t ctrl, __u32 nsid, struct nvme_ns_list *list)

Perform an Admin identify for an allocated namespace list

Parameters

nvme_mi_ctrl_t ctrl

Controller to process identify command

__u32 nsid

Namespace ID to specify list start

struct nvme_ns_list *list

List data to populate

Description

Perform an Identify command, for the allocated namespace list starting with IDs greater than or equal to nsid. Specify NVME_NSID_NONE for the start of the list.

Will return an error if the length of the response data (from the controller) is not a full NVME_IDENTIFY_DATA_SIZE, so list will be be fully populated on success.

See: struct nvme_ns_list

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_identify_active_ns_list(nvme_mi_ctrl_t ctrl, __u32 nsid, struct nvme_ns_list *list)

Perform an Admin identify for an active namespace list

Parameters

nvme_mi_ctrl_t ctrl

Controller to process identify command

__u32 nsid

Namespace ID to specify list start

struct nvme_ns_list *list

List data to populate

Description

Perform an Identify command, for the active namespace list starting with IDs greater than or equal to nsid. Specify NVME_NSID_NONE for the start of the list.

Will return an error if the length of the response data (from the controller) is not a full NVME_IDENTIFY_DATA_SIZE, so list will be be fully populated on success.

See: struct nvme_ns_list

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_identify_primary_ctrl(nvme_mi_ctrl_t ctrl, __u16 cntid, struct nvme_primary_ctrl_cap *cap)

Perform an Admin identify for primary controller capabilities data structure.

Parameters

nvme_mi_ctrl_t ctrl

Controller to process identify command

__u16 cntid

Controller ID to specify

struct nvme_primary_ctrl_cap *cap

Primary Controller Capabilities data structure to populate

Description

Perform an Identify command to get the Primary Controller Capabilities data for the controller specified by cntid

Will return an error if the length of the response data (from the controller) is not a full NVME_IDENTIFY_DATA_SIZE, so cap will be be fully populated on success.

See: struct nvme_primary_ctrl_cap

Return

0 on success, non-zero on failure

int nvme_mi_admin_identify_secondary_ctrl_list(nvme_mi_ctrl_t ctrl, __u16 cntid, struct nvme_secondary_ctrl_list *list)

Perform an Admin identify for a secondary controller list.

Parameters

nvme_mi_ctrl_t ctrl

Controller to process identify command

__u16 cntid

Controller ID to specify list start

struct nvme_secondary_ctrl_list *list

List data to populate

Description

Perform an Identify command, for the secondary controllers associated with the current primary controller. Only entries with IDs greater than or equal to cntid are returned.

Will return an error if the length of the response data (from the controller) is not a full NVME_IDENTIFY_DATA_SIZE, so list will be be fully populated on success.

See: struct nvme_secondary_ctrl_list

Return

0 on success, non-zero on failure

int nvme_mi_admin_get_log_page(nvme_mi_ctrl_t ctrl, __u32 xfer_len, struct nvme_get_log_args *args)

Retrieve log page data from controller

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

__u32 xfer_len

The chunk size of the read

struct nvme_get_log_args *args

Get Log Page command arguments

Description

Performs a Get Log Page Admin command as specified by args. Response data is stored in args->data, which should be a buffer of args->data_len bytes. Resulting data length is stored in args->data_len on successful command completion.

This request may be implemented as multiple log page commands, in order to fit within MI message-size limits.

See: struct nvme_get_log_args

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log(nvme_mi_ctrl_t ctrl, struct nvme_get_log_args *args)

Retrieve log page data from controller

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

struct nvme_get_log_args *args

Get Log Page command arguments

Description

Performs a Get Log Page Admin command as specified by args. Response data is stored in args->data, which should be a buffer of args->data_len bytes. Resulting data length is stored in args->data_len on successful command completion.

This request may be implemented as multiple log page commands, in order to fit within MI message-size limits.

See: struct nvme_get_log_args

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_nsid_log(nvme_mi_ctrl_t ctrl, bool rae, enum nvme_cmd_get_log_lid lid, __u32 nsid, __u32 len, void *log)

Helper for Get Log Page functions

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

bool rae

Retain Asynchronous Events

enum nvme_cmd_get_log_lid lid

Log identifier

__u32 nsid

Namespace ID

__u32 len

length of log buffer

void *log

pointer for resulting log data

Description

Performs a Get Log Page Admin command for a specific log ID lid and namespace ID nsid. Log data is expected to be len bytes, and is stored in log on success. The rae flag is passed as-is to the Get Log Page command, and is specific to the Log Page requested.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_simple(nvme_mi_ctrl_t ctrl, enum nvme_cmd_get_log_lid lid, __u32 len, void *log)

Helper for Get Log Page functions with no NSID or RAE requirements

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

enum nvme_cmd_get_log_lid lid

Log identifier

__u32 len

length of log buffer

void *log

pointer for resulting log data

Description

Performs a Get Log Page Admin command for a specific log ID lid, using NVME_NSID_ALL for the namespace identifier, and rae set to false.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_supported_log_pages(nvme_mi_ctrl_t ctrl, bool rae, struct nvme_supported_log_pages *log)

Retrieve nmve supported log pages

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

bool rae

Retain asynchronous events

struct nvme_supported_log_pages *log

Array of LID supported and Effects data structures

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_error(nvme_mi_ctrl_t ctrl, unsigned int nr_entries, bool rae, struct nvme_error_log_page *err_log)

Retrieve nvme error log

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

unsigned int nr_entries

Number of error log entries allocated

bool rae

Retain asynchronous events

struct nvme_error_log_page *err_log

Array of error logs of size ‘entries’

Description

This log page describes extended error information for a command that completed with error, or may report an error that is not specific to a particular command.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_smart(nvme_mi_ctrl_t ctrl, __u32 nsid, bool rae, struct nvme_smart_log *smart_log)

Retrieve nvme smart log

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

__u32 nsid

Optional namespace identifier

bool rae

Retain asynchronous events

struct nvme_smart_log *smart_log

User address to store the smart log

Description

This log page provides SMART and general health information. The information provided is over the life of the controller and is retained across power cycles. To request the controller log page, the namespace identifier specified is FFFFFFFFh. The controller may also support requesting the log page on a per namespace basis, as indicated by bit 0 of the LPA field in the Identify Controller data structure.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_fw_slot(nvme_mi_ctrl_t ctrl, bool rae, struct nvme_firmware_slot *fw_log)

Retrieves the controller firmware log

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

bool rae

Retain asynchronous events

struct nvme_firmware_slot *fw_log

User address to store the log page

Description

This log page describes the firmware revision stored in each firmware slot supported. The firmware revision is indicated as an ASCII string. The log page also indicates the active slot number.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_changed_ns_list(nvme_mi_ctrl_t ctrl, bool rae, struct nvme_ns_list *ns_log)

Retrieve namespace changed list

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

bool rae

Retain asynchronous events

struct nvme_ns_list *ns_log

User address to store the log page

Description

This log page describes namespaces attached to this controller that have changed since the last time the namespace was identified, been added, or deleted.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_cmd_effects(nvme_mi_ctrl_t ctrl, enum nvme_csi csi, struct nvme_cmd_effects_log *effects_log)

Retrieve nvme command effects log

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

enum nvme_csi csi

Command Set Identifier

struct nvme_cmd_effects_log *effects_log

User address to store the effects log

Description

This log page describes the commands that the controller supports and the effects of those commands on the state of the NVM subsystem.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_device_self_test(nvme_mi_ctrl_t ctrl, struct nvme_self_test_log *log)

Retrieve the device self test log

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

struct nvme_self_test_log *log

Userspace address of the log payload

Description

The log page indicates the status of an in progress self test and the percent complete of that operation, and the results of the previous 20 self-test operations.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_create_telemetry_host(nvme_mi_ctrl_t ctrl, struct nvme_telemetry_log *log)

Create host telemetry log

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

struct nvme_telemetry_log *log

Userspace address of the log payload

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_telemetry_host(nvme_mi_ctrl_t ctrl, __u64 offset, __u32 len, void *log)

Get Telemetry Host-Initiated log page

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

__u64 offset

Offset into the telemetry data

__u32 len

Length of provided user buffer to hold the log data in bytes

void *log

User address for log page data

Description

Retrieves the Telemetry Host-Initiated log page at the requested offset using the previously existing capture.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_telemetry_ctrl(nvme_mi_ctrl_t ctrl, bool rae, __u64 offset, __u32 len, void *log)

Get Telemetry Controller-Initiated log page

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

bool rae

Retain asynchronous events

__u64 offset

Offset into the telemetry data

__u32 len

Length of provided user buffer to hold the log data in bytes

void *log

User address for log page data

Description

Retrieves the Telemetry Controller-Initiated log page at the requested offset using the previously existing capture.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_endurance_group(nvme_mi_ctrl_t ctrl, __u16 endgid, struct nvme_endurance_group_log *log)

Get Endurance Group log

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

__u16 endgid

Starting group identifier to return in the list

struct nvme_endurance_group_log *log

User address to store the endurance log

Description

This log page indicates if an Endurance Group Event has occurred for a particular Endurance Group. If an Endurance Group Event has occurred, the details of the particular event are included in the Endurance Group Information log page for that Endurance Group. An asynchronous event is generated when an entry for an Endurance Group is newly added to this log page.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_predictable_lat_nvmset(nvme_mi_ctrl_t ctrl, __u16 nvmsetid, struct nvme_nvmset_predictable_lat_log *log)

Predictable Latency Per NVM Set

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

__u16 nvmsetid

NVM set id

struct nvme_nvmset_predictable_lat_log *log

User address to store the predictable latency log

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_predictable_lat_event(nvme_mi_ctrl_t ctrl, bool rae, __u32 offset, __u32 len, void *log)

Retrieve Predictable Latency Event Aggregate Log Page

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

bool rae

Retain asynchronous events

__u32 offset

Offset into the predictable latency event

__u32 len

Length of provided user buffer to hold the log data in bytes

void *log

User address for log page data

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_ana(nvme_mi_ctrl_t ctrl, enum nvme_log_ana_lsp lsp, bool rae, __u64 offset, __u32 len, void *log)

Retrieve Asymmetric Namespace Access log page

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

enum nvme_log_ana_lsp lsp

Log specific, see enum nvme_get_log_ana_lsp

bool rae

Retain asynchronous events

__u64 offset

Offset to the start of the log page

__u32 len

The allocated length of the log page

void *log

User address to store the ana log

Description

This log consists of a header describing the log and descriptors containing the asymmetric namespace access information for ANA Groups that contain namespaces that are attached to the controller processing the command.

See struct nvme_ana_rsp_hdr for the definition of the returned structure.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_ana_groups(nvme_mi_ctrl_t ctrl, bool rae, __u32 len, struct nvme_ana_group_desc *log)

Retrieve Asymmetric Namespace Access groups only log page

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

bool rae

Retain asynchronous events

__u32 len

The allocated length of the log page

struct nvme_ana_group_desc *log

User address to store the ana group log

Description

See struct nvme_ana_group_desc for the definition of the returned structure.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_lba_status(nvme_mi_ctrl_t ctrl, bool rae, __u64 offset, __u32 len, void *log)

Retrieve LBA Status

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

bool rae

Retain asynchronous events

__u64 offset

Offset to the start of the log page

__u32 len

The allocated length of the log page

void *log

User address to store the log page

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_endurance_grp_evt(nvme_mi_ctrl_t ctrl, bool rae, __u32 offset, __u32 len, void *log)

Retrieve Rotational Media Information

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

bool rae

Retain asynchronous events

__u32 offset

Offset to the start of the log page

__u32 len

The allocated length of the log page

void *log

User address to store the log page

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_fid_supported_effects(nvme_mi_ctrl_t ctrl, bool rae, struct nvme_fid_supported_effects_log *log)

Retrieve Feature Identifiers Supported and Effects

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

bool rae

Retain asynchronous events

struct nvme_fid_supported_effects_log *log

FID Supported and Effects data structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_mi_cmd_supported_effects(nvme_mi_ctrl_t ctrl, bool rae, struct nvme_mi_cmd_supported_effects_log *log)

displays the MI Commands Supported by the controller

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

bool rae

Retain asynchronous events

struct nvme_mi_cmd_supported_effects_log *log

MI Command Supported and Effects data structure

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_boot_partition(nvme_mi_ctrl_t ctrl, bool rae, __u8 lsp, __u32 len, struct nvme_boot_partition *part)

Retrieve Boot Partition

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

bool rae

Retain asynchronous events

__u8 lsp

The log specified field of LID

__u32 len

The allocated size, minimum struct nvme_boot_partition

struct nvme_boot_partition *part

User address to store the log page

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_phy_rx_eom(nvme_mi_ctrl_t ctrl, __u8 lsp, __u16 controller, __u32 len, struct nvme_phy_rx_eom_log *log)

Retrieve Physical Interface Receiver Eye Opening Measurement Log

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

__u8 lsp

Log specific, controls action and measurement quality

__u16 controller

Target controller ID

__u32 len

The allocated size, minimum struct nvme_phy_rx_eom_log

struct nvme_phy_rx_eom_log *log

User address to store the log page

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise

int nvme_mi_admin_get_log_discovery(nvme_mi_ctrl_t ctrl, bool rae, __u32 offset, __u32 len, void *log)

Retrieve Discovery log page

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

bool rae

Retain asynchronous events

__u32 offset

Offset of this log to retrieve

__u32 len

The allocated size for this portion of the log

void *log

User address to store the discovery log

Description

Supported only by fabrics discovery controllers, returning discovery records.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_media_unit_stat(nvme_mi_ctrl_t ctrl, __u16 domid, struct nvme_media_unit_stat_log *mus)

Retrieve Media Unit Status

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

__u16 domid

Domain Identifier selection, if supported

struct nvme_media_unit_stat_log *mus

User address to store the Media Unit statistics log

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_support_cap_config_list(nvme_mi_ctrl_t ctrl, __u16 domid, struct nvme_supported_cap_config_list_log *cap)

Retrieve Supported Capacity Configuration List

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

__u16 domid

Domain Identifier selection, if supported

struct nvme_supported_cap_config_list_log *cap

User address to store supported capabilities config list

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_reservation(nvme_mi_ctrl_t ctrl, bool rae, struct nvme_resv_notification_log *log)

Retrieve Reservation Notification

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

bool rae

Retain asynchronous events

struct nvme_resv_notification_log *log

User address to store the reservation log

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_sanitize(nvme_mi_ctrl_t ctrl, bool rae, struct nvme_sanitize_log_page *log)

Retrieve Sanitize Status

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

bool rae

Retain asynchronous events

struct nvme_sanitize_log_page *log

User address to store the sanitize log

Description

The Sanitize Status log page reports sanitize operation time estimates and information about the most recent sanitize operation.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_zns_changed_zones(nvme_mi_ctrl_t ctrl, __u32 nsid, bool rae, struct nvme_zns_changed_zone_log *log)

Retrieve list of zones that have changed

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

__u32 nsid

Namespace ID

bool rae

Retain asynchronous events

struct nvme_zns_changed_zone_log *log

User address to store the changed zone log

Description

The list of zones that have changed state due to an exceptional event.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_log_persistent_event(nvme_mi_ctrl_t ctrl, enum nvme_pevent_log_action action, __u32 size, void *pevent_log)

Retrieve Persistent Event Log

Parameters

nvme_mi_ctrl_t ctrl

Controller to query

enum nvme_pevent_log_action action

Action the controller should take during processing this command

__u32 size

Size of pevent_log

void *pevent_log

User address to store the persistent event log

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_security_send(nvme_mi_ctrl_t ctrl, struct nvme_security_send_args *args)

Perform a Security Send command on a controller.

Parameters

nvme_mi_ctrl_t ctrl

Controller to send command to

struct nvme_security_send_args *args

Security Send command arguments

Description

Performs a Security Send Admin command as specified by args. Response data is stored in args->data, which should be a buffer of args->data_len bytes. Resulting data length is stored in args->data_len on successful command completion.

Security Send data length should not be greater than 4096 bytes to comply with specification limits.

See: struct nvme_get_log_args

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_security_recv(nvme_mi_ctrl_t ctrl, struct nvme_security_receive_args *args)

Perform a Security Receive command on a controller.

Parameters

nvme_mi_ctrl_t ctrl

Controller to send command to

struct nvme_security_receive_args *args

Security Receive command arguments

Description

Performs a Security Receive Admin command as specified by args. Response data is stored in args->data, which should be a buffer of args->data_len bytes. Resulting data length is stored in args->data_len on successful command completion.

Security Receive data length should not be greater than 4096 bytes to comply with specification limits.

See: struct nvme_get_log_args

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_features(nvme_mi_ctrl_t ctrl, struct nvme_get_features_args *args)

Perform a Get Feature command on a controller

Parameters

nvme_mi_ctrl_t ctrl

Controller to send command to

struct nvme_get_features_args *args

Get Features command arguments

Description

Performs a Get Features Admin command as specified by args. Returned feature data will be stored in args->result and args->data, depending on the specification of the feature itself; most features do not return additional data. See section 5.27.1 of the NVMe spec (v2.0b) for feature-specific information.

On success, args->data_len will be updated with the actual data length received.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_features_data(nvme_mi_ctrl_t ctrl, enum nvme_features_id fid, __u32 nsid, __u32 data_len, void *data, __u32 *result)

Helper function for :c:type:`nvme_mi_admin_get_features`()

Parameters

nvme_mi_ctrl_t ctrl

Controller to send command to

enum nvme_features_id fid

Feature identifier

__u32 nsid

Namespace ID, if applicable for fid

__u32 data_len

Length of feature data, if applicable for fid, in bytes

void *data

User address of feature data, if applicable

__u32 *result

The command completion result from CQE dword0

Description

Helper for optionally features that optionally return data, using the SEL_CURRENT selector value.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_get_features_simple(nvme_mi_ctrl_t ctrl, enum nvme_features_id fid, __u32 nsid, __u32 *result)

Get a simple feature value with no data

Parameters

nvme_mi_ctrl_t ctrl

Controller to send command to

enum nvme_features_id fid

Feature identifier

__u32 nsid

Namespace id, if required by fid

__u32 *result

output feature data

int nvme_mi_admin_set_features(nvme_mi_ctrl_t ctrl, struct nvme_set_features_args *args)

Perform a Set Features command on a controller

Parameters

nvme_mi_ctrl_t ctrl

Controller to send command to

struct nvme_set_features_args *args

Set Features command arguments

Description

Performs a Set Features Admin command as specified by args. Result data will be stored in args->result. on the specification of the feature itself; most features do not return additional data. See section 5.27.1 of the NVMe spec (v2.0b) for feature-specific information.

On success, args->data_len will be updated with the actual data length received.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_ns_mgmt(nvme_mi_ctrl_t ctrl, struct nvme_ns_mgmt_args *args)

Issue a Namespace Management command

Parameters

nvme_mi_ctrl_t ctrl

Controller to send command to

struct nvme_ns_mgmt_args *args

Namespace management command arguments

Description

Issues a Namespace Management command to ctrl, with arguments specified from args.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_ns_mgmt_create(nvme_mi_ctrl_t ctrl, struct nvme_id_ns *ns, __u8 csi, __u32 *nsid, struct nvme_ns_mgmt_host_sw_specified *data)

Helper for Namespace Management Create command

Parameters

nvme_mi_ctrl_t ctrl

Controller to send command to

struct nvme_id_ns *ns

New namespace parameters

__u8 csi

Command Set Identifier for new NS

__u32 *nsid

Set to new namespace ID on create

struct nvme_ns_mgmt_host_sw_specified *data

Host Software Specified Fields that defines ns creation parameters

Description

Issues a Namespace Management (Create) command to ctrl, to create a new namespace specified by ns, using command set csi. On success, the new namespace ID will be written to nsid.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_ns_mgmt_delete(nvme_mi_ctrl_t ctrl, __u32 nsid)

Helper for Namespace Management Delete command

Parameters

nvme_mi_ctrl_t ctrl

Controller to send command to

__u32 nsid

Namespace ID to delete

Description

Issues a Namespace Management (Delete) command to ctrl, to delete the namespace with id nsid.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_ns_attach(nvme_mi_ctrl_t ctrl, struct nvme_ns_attach_args *args)

Attach or detach namespace to controller(s)

Parameters

nvme_mi_ctrl_t ctrl

Controller to send command to

struct nvme_ns_attach_args *args

Namespace Attach command arguments

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_ns_attach_ctrls(nvme_mi_ctrl_t ctrl, __u32 nsid, struct nvme_ctrl_list *ctrlist)

Attach namespace to controllers

Parameters

nvme_mi_ctrl_t ctrl

Controller to send command to

__u32 nsid

Namespace ID to attach

struct nvme_ctrl_list *ctrlist

Controller list to modify attachment state of nsid

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_ns_detach_ctrls(nvme_mi_ctrl_t ctrl, __u32 nsid, struct nvme_ctrl_list *ctrlist)

Detach namespace from controllers

Parameters

nvme_mi_ctrl_t ctrl

Controller to send command to

__u32 nsid

Namespace ID to detach

struct nvme_ctrl_list *ctrlist

Controller list to modify attachment state of nsid

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_fw_download(nvme_mi_ctrl_t ctrl, struct nvme_fw_download_args *args)

Download part or all of a firmware image to the controller

Parameters

nvme_mi_ctrl_t ctrl

Controller to send firmware data to

struct nvme_fw_download_args *args

struct nvme_fw_download_args argument structure

Description

The Firmware Image Download command downloads all or a portion of an image for a future update to the controller. The Firmware Image Download command downloads a new image (in whole or in part) to the controller.

The image may be constructed of multiple pieces that are individually downloaded with separate Firmware Image Download commands. Each Firmware Image Download command includes a Dword Offset and Number of Dwords that specify a dword range.

The new firmware image is not activated as part of the Firmware Image Download command. Use the nvme_mi_admin_fw_commit() to activate a newly downloaded image.

Return

0 on success, non-zero on failure

int nvme_mi_admin_fw_commit(nvme_mi_ctrl_t ctrl, struct nvme_fw_commit_args *args)

Commit firmware using the specified action

Parameters

nvme_mi_ctrl_t ctrl

Controller to send firmware data to

struct nvme_fw_commit_args *args

struct nvme_fw_download_args argument structure

Description

The Firmware Commit command modifies the firmware image or Boot Partitions.

Return

0 on success, non-zero on failure

int nvme_mi_admin_format_nvm(nvme_mi_ctrl_t ctrl, struct nvme_format_nvm_args *args)

Format NVMe namespace

Parameters

nvme_mi_ctrl_t ctrl

Controller to send command to

struct nvme_format_nvm_args *args

Format NVM command arguments

Description

Perform a low-level format to set the LBA data & metadata size. May destroy data & metadata on the specified namespaces

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

int nvme_mi_admin_sanitize_nvm(nvme_mi_ctrl_t ctrl, struct nvme_sanitize_nvm_args *args)

Start a subsystem Sanitize operation

Parameters

nvme_mi_ctrl_t ctrl

Controller to send command to

struct nvme_sanitize_nvm_args *args

Sanitize command arguments

Description

A sanitize operation alters all user data in the NVM subsystem such that recovery of any previous user data from any cache, the non-volatile media, or any Controller Memory Buffer is not possible.

The Sanitize command starts a sanitize operation or to recover from a previously failed sanitize operation. The sanitize operation types that may be supported are Block Erase, Crypto Erase, and Overwrite. All sanitize operations are processed in the background, i.e., completion of the sanitize command does not indicate completion of the sanitize operation.

Return

The nvme command status if a response was received (see enum nvme_status_field) or -1 with errno set otherwise.

tree.h

libnvme tree object interface

nvme_root_t nvme_create_root(FILE *fp, int log_level)

Initialize root object

Parameters

FILE *fp

File descriptor for logging messages

int log_level

Logging level to use

Return

Initialized nvme_root_t object

void nvme_root_set_application(nvme_root_t r, const char *a)

Specify managing application

Parameters

nvme_root_t r

nvme_root_t object

const char *a

Application string

Description

Sets the managing application string for r.

const char *nvme_root_get_application(nvme_root_t r)

Get managing application

Parameters

nvme_root_t r

nvme_root_t object

Description

Returns the managing application string for r or NULL if not set.

void nvme_root_release_fds(nvme_root_t r)

Close all opened file descriptors in the tree

Parameters

nvme_root_t r

nvme_root_t object

Description

Controller and Namespace objects cache the file descriptors of opened nvme devices. This API can be used to close and clear all cached fds in the tree.

void nvme_free_tree(nvme_root_t r)

Free root object

Parameters

nvme_root_t r

nvme_root_t object

Description

Free an nvme_root_t object and all attached objects

nvme_host_t nvme_first_host(nvme_root_t r)

Start host iterator

Parameters

nvme_root_t r

nvme_root_t object

Return

First nvme_host_t object in an iterator

nvme_host_t nvme_next_host(nvme_root_t r, nvme_host_t h)

Next host iterator

Parameters

nvme_root_t r

nvme_root_t object

nvme_host_t h

Previous nvme_host_t iterator

Return

Next nvme_host_t object in an iterator

nvme_root_t nvme_host_get_root(nvme_host_t h)

Returns nvme_root_t object

Parameters

nvme_host_t h

nvme_host_t object

Return

nvme_root_t object from h

nvme_host_t nvme_lookup_host(nvme_root_t r, const char *hostnqn, const char *hostid)

Lookup nvme_host_t object

Parameters

nvme_root_t r

nvme_root_t object

const char *hostnqn

Host NQN

const char *hostid

Host ID

Description

Lookup a nvme_host_t object based on hostnqn and hostid or create one if not found.

Return

nvme_host_t object

const char *nvme_host_get_dhchap_key(nvme_host_t h)

Return host key

Parameters

nvme_host_t h

Host for which the key should be returned

Return

DH-HMAC-CHAP host key or NULL if not set

void nvme_host_set_dhchap_key(nvme_host_t h, const char *key)

set host key

Parameters

nvme_host_t h

Host for which the key should be set

const char *key

DH-HMAC-CHAP Key to set or NULL to clear existing key

void nvme_host_set_pdc_enabled(nvme_host_t h, bool enabled)

Set Persistent Discovery Controller flag

Parameters

nvme_host_t h

Host for which the falg should be set

bool enabled

The bool to set the enabled flag

Description

When nvme_host_set_pdc_enabled() is not used to set the PDC flag, nvme_host_is_pdc_enabled() will return the default value which was passed into the function and not the undefined flag value.

bool nvme_host_is_pdc_enabled(nvme_host_t h, bool fallback)

Is Persistenct Discovery Controller enabled

Parameters

nvme_host_t h

Host which to check if PDC is enabled

bool fallback

The fallback default value of the flag when nvme_host_set_pdc_enabled has not be used to set the flag.

Return

true if PDC is enabled for h, else false

nvme_host_t nvme_default_host(nvme_root_t r)

Initializes the default host

Parameters

nvme_root_t r

nvme_root_t object

Description

Initializes the default host object based on the values in /etc/nvme/hostnqn and /etc/nvme/hostid and attaches it to r.

Return

nvme_host_t object

nvme_subsystem_t nvme_first_subsystem(nvme_host_t h)

Start subsystem iterator

Parameters

nvme_host_t h

nvme_host_t object

Return

first nvme_subsystem_t object in an iterator

nvme_subsystem_t nvme_next_subsystem(nvme_host_t h, nvme_subsystem_t s)

Next subsystem iterator

Parameters

nvme_host_t h

nvme_host_t object

nvme_subsystem_t s

Previous nvme_subsystem_t iterator

Return

next nvme_subsystem_t object in an iterator

nvme_subsystem_t nvme_lookup_subsystem(struct nvme_host *h, const char *name, const char *subsysnqn)

Lookup nvme_subsystem_t object

Parameters

struct nvme_host *h

nvme_host_t object

const char *name

Name of the subsystem (may be NULL)

const char *subsysnqn

Subsystem NQN

Description

Lookup a nvme_subsystem_t object in h base on name (if present) and subsysnqn or create one if not found.

Return

nvme_subsystem_t object

void nvme_free_subsystem(struct nvme_subsystem *s)

Free a subsystem

Parameters

struct nvme_subsystem *s

subsystem

Description

Frees s and all related objects.

nvme_host_t nvme_subsystem_get_host(nvme_subsystem_t s)

Returns nvme_host_t object

Parameters

nvme_subsystem_t s

subsystem

Return

nvme_host_t object from s

nvme_ns_t nvme_ctrl_first_ns(nvme_ctrl_t c)

Start namespace iterator

Parameters

nvme_ctrl_t c

Controller instance

Return

First nvme_ns_t object of an c iterator

nvme_ns_t nvme_ctrl_next_ns(nvme_ctrl_t c, nvme_ns_t n)

Next namespace iterator

Parameters

nvme_ctrl_t c

Controller instance

nvme_ns_t n

Previous nvme_ns_t iterator

Return

Next nvme_ns_t object of an c iterator

nvme_path_t nvme_ctrl_first_path(nvme_ctrl_t c)

Start path iterator

Parameters

nvme_ctrl_t c

Controller instance

Return

First nvme_path_t object of an c iterator

nvme_path_t nvme_ctrl_next_path(nvme_ctrl_t c, nvme_path_t p)

Next path iterator

Parameters

nvme_ctrl_t c

Controller instance

nvme_path_t p

Previous nvme_path_t object of an c iterator

Return

Next nvme_path_t object of an c iterator

nvme_ctrl_t nvme_subsystem_first_ctrl(nvme_subsystem_t s)

First ctrl iterator

Parameters

nvme_subsystem_t s

nvme_subsystem_t object

Return

First controller of an s iterator

nvme_ctrl_t nvme_subsystem_next_ctrl(nvme_subsystem_t s, nvme_ctrl_t c)

Next ctrl iterator

Parameters

nvme_subsystem_t s

nvme_subsystem_t object

nvme_ctrl_t c

Previous controller instance of an s iterator

Return

Next controller of an s iterator

nvme_path_t nvme_namespace_first_path(nvme_ns_t ns)

Start path iterator

Parameters

nvme_ns_t ns

Namespace instance

Return

First nvme_path_t object of an ns iterator

nvme_path_t nvme_namespace_next_path(nvme_ns_t ns, nvme_path_t p)

Next path iterator

Parameters

nvme_ns_t ns

Namespace instance

nvme_path_t p

Previous nvme_path_t object of an ns iterator

Return

Next nvme_path_t object of an ns iterator

nvme_ctrl_t nvme_lookup_ctrl(nvme_subsystem_t s, const char *transport, const char *traddr, const char *host_traddr, const char *host_iface, const char *trsvcid, nvme_ctrl_t p)

Lookup nvme_ctrl_t object

Parameters

nvme_subsystem_t s

nvme_subsystem_t object

const char *transport

Transport name

const char *traddr

Transport address

const char *host_traddr

Host transport address

const char *host_iface

Host interface name

const char *trsvcid

Transport service identifier

nvme_ctrl_t p

Previous controller instance

Description

Lookup a controller in s based on transport, traddr, host_traddr, host_iface, and trsvcid. transport must be specified, other fields may be required depending on the transport. A new object is created if none is found. If p is specified the lookup will start at p instead of the first controller.

Return

Controller instance

nvme_ctrl_t nvme_ctrl_find(nvme_subsystem_t s, const char *transport, const char *traddr, const char *trsvcid, const char *subsysnqn, const char *host_traddr, const char *host_iface)

Locate an existing controller

Parameters

nvme_subsystem_t s

nvme_subsystem_t object

const char *transport

Transport name

const char *traddr

Transport address

const char *trsvcid

Transport service identifier

const char *subsysnqn

Subsystem NQN

const char *host_traddr

Host transport address

const char *host_iface

Host interface name

Description

Lookup a controller in s based on transport, traddr, trsvcid, subsysnqn, host_traddr, and host_iface. transport must be specified, other fields may be required depending on the transport. Parameters set to NULL will be ignored.

Unlike nvme_lookup_ctrl(), this function does not create a new object if an existing controller cannot be found.

Return

Controller instance on success, NULL otherwise.

bool nvme_ctrl_config_match(struct nvme_ctrl *c, const char *transport, const char *traddr, const char *trsvcid, const char *subsysnqn, const char *host_traddr, const char *host_iface)

Check if ctrl c matches config params

Parameters

struct nvme_ctrl *c

An existing controller instance

const char *transport

Transport name

const char *traddr

Transport address

const char *trsvcid

Transport service identifier

const char *subsysnqn

Subsystem NQN

const char *host_traddr

Host transport address

const char *host_iface

Host interface name

Description

Check that controller c matches parameters: transport, traddr, trsvcid, subsysnqn, host_traddr, and host_iface. Parameters set to NULL will be ignored.

Return

true if there’s a match, false otherwise.

nvme_ctrl_t nvme_create_ctrl(nvme_root_t r, const char *subsysnqn, const char *transport, const char *traddr, const char *host_traddr, const char *host_iface, const char *trsvcid)

Allocate an unconnected NVMe controller

Parameters

nvme_root_t r

NVMe root element

const char *subsysnqn

Subsystem NQN

const char *transport

Transport type

const char *traddr

Transport address

const char *host_traddr

Host transport address

const char *host_iface

Host interface name

const char *trsvcid

Transport service ID

Description

Creates an unconnected controller to be used for nvme_add_ctrl().

Return

Controller instance

nvme_ns_t nvme_subsystem_first_ns(nvme_subsystem_t s)

Start namespace iterator

Parameters

nvme_subsystem_t s

nvme_subsystem_t object

Return

First nvme_ns_t object of an s iterator

nvme_ns_t nvme_subsystem_next_ns(nvme_subsystem_t s, nvme_ns_t n)

Next namespace iterator

Parameters

nvme_subsystem_t s

nvme_subsystem_t object

nvme_ns_t n

Previous nvme_ns_t iterator

Return

Next nvme_ns_t object of an s iterator

nvme_for_each_host_safe

nvme_for_each_host_safe (r, h, _h)

Traverse host list

Parameters

r

nvme_root_t object

h

nvme_host_t object

_h

Temporary nvme_host_t object

nvme_for_each_host

nvme_for_each_host (r, h)

Traverse host list

Parameters

r

nvme_root_t object

h

nvme_host_t object

nvme_for_each_subsystem_safe

nvme_for_each_subsystem_safe (h, s, _s)

Traverse subsystems

Parameters

h

nvme_host_t object

s

nvme_subsystem_t object

_s

Temporary nvme_subsystem_t object

nvme_for_each_subsystem

nvme_for_each_subsystem (h, s)

Traverse subsystems

Parameters

h

nvme_host_t object

s

nvme_subsystem_t object

nvme_subsystem_for_each_ctrl_safe

nvme_subsystem_for_each_ctrl_safe (s, c, _c)

Traverse controllers

Parameters

s

nvme_subsystem_t object

c

Controller instance

_c

A nvme_ctrl_t_node to use as temporary storage

nvme_subsystem_for_each_ctrl

nvme_subsystem_for_each_ctrl (s, c)

Traverse controllers

Parameters

s

nvme_subsystem_t object

c

Controller instance

nvme_ctrl_for_each_ns_safe

nvme_ctrl_for_each_ns_safe (c, n, _n)

Traverse namespaces

Parameters

c

Controller instance

n

nvme_ns_t object

_n

A nvme_ns_t_node to use as temporary storage

nvme_ctrl_for_each_ns

nvme_ctrl_for_each_ns (c, n)

Traverse namespaces

Parameters

c

Controller instance

n

nvme_ns_t object

nvme_ctrl_for_each_path_safe

nvme_ctrl_for_each_path_safe (c, p, _p)

Traverse paths

Parameters

c

Controller instance

p

nvme_path_t object

_p

A nvme_path_t_node to use as temporary storage

nvme_ctrl_for_each_path

nvme_ctrl_for_each_path (c, p)

Traverse paths

Parameters

c

Controller instance

p

nvme_path_t object

nvme_subsystem_for_each_ns_safe

nvme_subsystem_for_each_ns_safe (s, n, _n)

Traverse namespaces

Parameters

s

nvme_subsystem_t object

n

nvme_ns_t object

_n

A nvme_ns_t_node to use as temporary storage

nvme_subsystem_for_each_ns

nvme_subsystem_for_each_ns (s, n)

Traverse namespaces

Parameters

s

nvme_subsystem_t object

n

nvme_ns_t object

nvme_namespace_for_each_path_safe

nvme_namespace_for_each_path_safe (n, p, _p)

Traverse paths

Parameters

n

Namespace instance

p

nvme_path_t object

_p

A nvme_path_t_node to use as temporary storage

nvme_namespace_for_each_path

nvme_namespace_for_each_path (n, p)

Traverse paths

Parameters

n

Namespace instance

p

nvme_path_t object

int nvme_ns_get_fd(nvme_ns_t n)

Get associated file descriptor

Parameters

nvme_ns_t n

Namespace instance

Description

libnvme will open() the file (if not already opened) and keep an internal copy of the file descriptor. Following calls to this API retrieve the internal cached copy of the file descriptor. The file will remain opened and the fd will remain cached until the ns object is deleted or nvme_ns_release_fd() is called.

Return

File descriptor associated with n or -1

void nvme_ns_release_fd(nvme_ns_t n)

Close fd and clear fd from ns object

Parameters

nvme_ns_t n

Namespace instance

int nvme_ns_get_nsid(nvme_ns_t n)

NSID of a namespace

Parameters

nvme_ns_t n

Namespace instance

Return

NSID of n

int nvme_ns_get_lba_size(nvme_ns_t n)

LBA size of a namespace

Parameters

nvme_ns_t n

Namespace instance

Return

LBA size of n

int nvme_ns_get_meta_size(nvme_ns_t n)

Metadata size of a namespace

Parameters

nvme_ns_t n

Namespace instance

Return

Metadata size of n

uint64_t nvme_ns_get_lba_count(nvme_ns_t n)

LBA count of a namespace

Parameters

nvme_ns_t n

Namespace instance

Return

LBA count of n

uint64_t nvme_ns_get_lba_util(nvme_ns_t n)

LBA utilization of a namespace

Parameters

nvme_ns_t n

Namespace instance

Return

LBA utilization of n

enum nvme_csi nvme_ns_get_csi(nvme_ns_t n)

Command set identifier of a namespace

Parameters

nvme_ns_t n

Namespace instance

Return

The namespace’s command set identifier in use

const uint8_t *nvme_ns_get_eui64(nvme_ns_t n)

64-bit eui of a namespace

Parameters

nvme_ns_t n

Namespace instance

Return

A pointer to the 64-bit eui

const uint8_t *nvme_ns_get_nguid(nvme_ns_t n)

128-bit nguid of a namespace

Parameters

nvme_ns_t n

Namespace instance

Return

A pointer to the 128-bit nguid

void nvme_ns_get_uuid(nvme_ns_t n, unsigned char out[NVME_UUID_LEN])

UUID of a namespace

Parameters

nvme_ns_t n

Namespace instance

unsigned char out[NVME_UUID_LEN]

buffer for the UUID

Description

Copies the namespace’s uuid into out

const char *nvme_ns_get_sysfs_dir(nvme_ns_t n)

sysfs directory of a namespace

Parameters

nvme_ns_t n

Namespace instance

Return

sysfs directory name of n

const char *nvme_ns_get_name(nvme_ns_t n)

sysfs name of a namespace

Parameters

nvme_ns_t n

Namespace instance

Return

sysfs name of n

const char *nvme_ns_get_generic_name(nvme_ns_t n)

Returns name of generic namespace chardev.

Parameters

nvme_ns_t n

Namespace instance

Return

Name of generic namespace chardev

const char *nvme_ns_get_firmware(nvme_ns_t n)

Firmware string of a namespace

Parameters

nvme_ns_t n

Namespace instance

Return

Firmware string of n

const char *nvme_ns_get_serial(nvme_ns_t n)

Serial number of a namespace

Parameters

nvme_ns_t n

Namespace instance

Return

Serial number string of n

const char *nvme_ns_get_model(nvme_ns_t n)

Model of a namespace

Parameters

nvme_ns_t n

Namespace instance

Return

Model string of n

nvme_subsystem_t nvme_ns_get_subsystem(nvme_ns_t n)

nvme_subsystem_t of a namespace

Parameters

nvme_ns_t n

Namespace instance

Return

nvme_subsystem_t object of n

nvme_ctrl_t nvme_ns_get_ctrl(nvme_ns_t n)

nvme_ctrl_t of a namespace

Parameters

nvme_ns_t n

Namespace instance

Description

nvme_ctrl_t object may be NULL for a multipathed namespace

Return

nvme_ctrl_t object of n if present

void nvme_free_ns(struct nvme_ns *n)

Free a namespace object

Parameters

struct nvme_ns *n

Namespace instance

int nvme_ns_read(nvme_ns_t n, void *buf, off_t offset, size_t count)

Read from a namespace

Parameters

nvme_ns_t n

Namespace instance

void *buf

Buffer into which the data will be transferred

off_t offset

LBA offset of n

size_t count

Number of sectors in buf

Return

Number of sectors read or -1 on error.

int nvme_ns_write(nvme_ns_t n, void *buf, off_t offset, size_t count)

Write to a namespace

Parameters

nvme_ns_t n

Namespace instance

void *buf

Buffer with data to be written

off_t offset

LBA offset of n

size_t count

Number of sectors in buf

Return

Number of sectors written or -1 on error

int nvme_ns_verify(nvme_ns_t n, off_t offset, size_t count)

Verify data on a namespace

Parameters

nvme_ns_t n

Namespace instance

off_t offset

LBA offset of n

size_t count

Number of sectors to be verified

Return

Number of sectors verified

int nvme_ns_compare(nvme_ns_t n, void *buf, off_t offset, size_t count)

Compare data on a namespace

Parameters

nvme_ns_t n

Namespace instance

void *buf

Buffer with data to be compared

off_t offset

LBA offset of n

size_t count

Number of sectors in buf

Return

Number of sectors compared

int nvme_ns_write_zeros(nvme_ns_t n, off_t offset, size_t count)

Write zeros to a namespace

Parameters

nvme_ns_t n

Namespace instance

off_t offset

LBA offset in n

size_t count

Number of sectors to be written

Return

Number of sectors written

int nvme_ns_write_uncorrectable(nvme_ns_t n, off_t offset, size_t count)

Issus a ‘write uncorrectable’ command

Parameters

nvme_ns_t n

Namespace instance

off_t offset

LBA offset in n

size_t count

Number of sectors to be written

Return

Number of sectors written

int nvme_ns_flush(nvme_ns_t n)

Flush data to a namespace

Parameters

nvme_ns_t n

Namespace instance

Return

0 on success, -1 on error.

int nvme_ns_identify(nvme_ns_t n, struct nvme_id_ns *ns)

Issue an ‘identify namespace’ command

Parameters

nvme_ns_t n

Namespace instance

struct nvme_id_ns *ns

nvme_id_ns buffer

Description

Writes the data returned by the ‘identify namespace’ command into ns.

Return

0 on success, -1 on error.

int nvme_ns_identify_descs(nvme_ns_t n, struct nvme_ns_id_desc *descs)

Issue an ‘identify descriptors’ command

Parameters

nvme_ns_t n

Namespace instance

struct nvme_ns_id_desc *descs

List of identify descriptors

Description

Writes the data returned by the ‘identify descriptors’ command into descs.

Return

0 on success, -1 on error.

const char *nvme_path_get_name(nvme_path_t p)

sysfs name of an nvme_path_t object

Parameters

nvme_path_t p

nvme_path_t object

Return

sysfs name of p

const char *nvme_path_get_sysfs_dir(nvme_path_t p)

sysfs directory of an nvme_path_t object

Parameters

nvme_path_t p

nvme_path_t object

Return

sysfs directory of p

const char *nvme_path_get_ana_state(nvme_path_t p)

ANA state of an nvme_path_t object

Parameters

nvme_path_t p

nvme_path_t object

Return

ANA (Asynchronous Namespace Access) state of p

nvme_ctrl_t nvme_path_get_ctrl(nvme_path_t p)

Parent controller of an nvme_path_t object

Parameters

nvme_path_t p

nvme_path_t object

Return

Parent controller if present

nvme_ns_t nvme_path_get_ns(nvme_path_t p)

Parent namespace of an nvme_path_t object

Parameters

nvme_path_t p

nvme_path_t object

Return

Parent namespace if present

int nvme_ctrl_get_fd(nvme_ctrl_t c)

Get associated file descriptor

Parameters

nvme_ctrl_t c

Controller instance

Description

libnvme will open() the file (if not already opened) and keep an internal copy of the file descriptor. Following calls to this API retrieve the internal cached copy of the file descriptor. The file will remain opened and the fd will remain cached until the controller object is deleted or nvme_ctrl_release_fd() is called.

Return

File descriptor associated with c or -1

void nvme_ctrl_release_fd(nvme_ctrl_t c)

Close fd and clear fd from controller object

Parameters

nvme_ctrl_t c

Controller instance

const char *nvme_ctrl_get_name(nvme_ctrl_t c)

sysfs name of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

sysfs name of c

const char *nvme_ctrl_get_sysfs_dir(nvme_ctrl_t c)

sysfs directory of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

sysfs directory name of c

const char *nvme_ctrl_get_address(nvme_ctrl_t c)

Address string of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

NVMe-over-Fabrics address string of c or empty string of no address is present.

char *nvme_ctrl_get_src_addr(nvme_ctrl_t c, char *src_addr, size_t src_addr_len)

Extract src_addr from the c->address string

Parameters

nvme_ctrl_t c

Controller instance

char *src_addr

Where to copy the src_addr. Size must be at least INET6_ADDRSTRLEN.

size_t src_addr_len

Length of the buffer src_addr.

Return

Pointer to src_addr on success. NULL on failure to extract the src_addr.

const char *nvme_ctrl_get_phy_slot(nvme_ctrl_t c)

PCI physical slot number of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

PCI physical slot number of c or empty string if slot number is not present.

const char *nvme_ctrl_get_firmware(nvme_ctrl_t c)

Firmware string of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

Firmware string of c

const char *nvme_ctrl_get_model(nvme_ctrl_t c)

Model of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

Model string of c

const char *nvme_ctrl_get_state(nvme_ctrl_t c)

Running state of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

String indicating the running state of c

const char *nvme_ctrl_get_numa_node(nvme_ctrl_t c)

NUMA node of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

String indicating the NUMA node

const char *nvme_ctrl_get_queue_count(nvme_ctrl_t c)

Queue count of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

Queue count of c

const char *nvme_ctrl_get_serial(nvme_ctrl_t c)

Serial number of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

Serial number string of c

const char *nvme_ctrl_get_sqsize(nvme_ctrl_t c)

SQ size of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

SQ size (as string) of c

const char *nvme_ctrl_get_transport(nvme_ctrl_t c)

Transport type of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

Transport type of c

const char *nvme_ctrl_get_subsysnqn(nvme_ctrl_t c)

Subsystem NQN of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

Subsystem NQN of c

nvme_subsystem_t nvme_ctrl_get_subsystem(nvme_ctrl_t c)

Parent subsystem of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

Parent nvme_subsystem_t object

const char *nvme_ctrl_get_traddr(nvme_ctrl_t c)

Transport address of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

Transport address of c

const char *nvme_ctrl_get_trsvcid(nvme_ctrl_t c)

Transport service identifier of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

Transport service identifier of c (if present)

const char *nvme_ctrl_get_host_traddr(nvme_ctrl_t c)

Host transport address of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

Host transport address of c (if present)

const char *nvme_ctrl_get_host_iface(nvme_ctrl_t c)

Host interface name of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

Host interface name of c (if present)

const char *nvme_ctrl_get_dhchap_host_key(nvme_ctrl_t c)

Return host key

Parameters

nvme_ctrl_t c

Controller to be checked

Return

DH-HMAC-CHAP host key or NULL if not set

const char *nvme_ctrl_get_cntlid(nvme_ctrl_t c)

Controller id

Parameters

nvme_ctrl_t c

Controller to be checked

Return

Controller id of c

void nvme_ctrl_set_dhchap_host_key(nvme_ctrl_t c, const char *key)

Set host key

Parameters

nvme_ctrl_t c

Host for which the key should be set

const char *key

DH-HMAC-CHAP Key to set or NULL to clear existing key

const char *nvme_ctrl_get_dhchap_key(nvme_ctrl_t c)

Return controller key

Parameters

nvme_ctrl_t c

Controller for which the key should be set

Return

DH-HMAC-CHAP controller key or NULL if not set

void nvme_ctrl_set_dhchap_key(nvme_ctrl_t c, const char *key)

Set controller key

Parameters

nvme_ctrl_t c

Controller for which the key should be set

const char *key

DH-HMAC-CHAP Key to set or NULL to clear existing key

struct nvme_fabrics_config *nvme_ctrl_get_config(nvme_ctrl_t c)

Fabrics configuration of a controller

Parameters

nvme_ctrl_t c

Controller instance

Return

Fabrics configuration of c

void nvme_ctrl_set_discovered(nvme_ctrl_t c, bool discovered)

Set the ‘discovered’ flag

Parameters

nvme_ctrl_t c

nvme_ctrl_t object

bool discovered

Value of the ‘discovered’ flag

Description

Set the ‘discovered’ flag of c to discovered

bool nvme_ctrl_is_discovered(nvme_ctrl_t c)

Returns the value of the ‘discovered’ flag

Parameters

nvme_ctrl_t c

Controller instance

Return

Value of the ‘discovered’ flag of c

void nvme_ctrl_set_persistent(nvme_ctrl_t c, bool persistent)

Set the ‘persistent’ flag

Parameters

nvme_ctrl_t c

Controller instance

bool persistent

value of the ‘persistent’ flag

Description

Set the ‘persistent’ flag of c to persistent

bool nvme_ctrl_is_persistent(nvme_ctrl_t c)

Returns the value of the ‘persistent’ flag

Parameters

nvme_ctrl_t c

Controller instance

Return

Value of the ‘persistent’ flag of c

void nvme_ctrl_set_discovery_ctrl(nvme_ctrl_t c, bool discovery)

Set the ‘discovery_ctrl’ flag

Parameters

nvme_ctrl_t c

Controller to be modified

bool discovery

value of the discovery_ctrl flag

Description

Sets the ‘discovery_ctrl’ flag in c to specify whether c connects to a discovery subsystem.

bool nvme_ctrl_is_discovery_ctrl(nvme_ctrl_t c)

Check the ‘discovery_ctrl’ flag

Parameters

nvme_ctrl_t c

Controller to be checked

Description

Returns the value of the ‘discovery_ctrl’ flag which specifies whether c connects to a discovery subsystem.

Return

Value of the ‘discover_ctrl’ flag

void nvme_ctrl_set_unique_discovery_ctrl(nvme_ctrl_t c, bool unique)

Set the ‘unique_discovery_ctrl’ flag

Parameters

nvme_ctrl_t c

Controller to be modified

bool unique

value of the unique_disc_ctrl flag

Description

Sets the ‘unique_discovery_ctrl’ flag in c to specify wheter c is a unique discovery controller

bool nvme_ctrl_is_unique_discovery_ctrl(nvme_ctrl_t c)

Check the ‘unique_discovery_ctrl’ flag

Parameters

nvme_ctrl_t c

Controller to be checked

Return

Value of the ‘unique_discovery_ctrl’ flag

int nvme_ctrl_identify(nvme_ctrl_t c, struct nvme_id_ctrl *id)

Issues an ‘identify controller’ command

Parameters

nvme_ctrl_t c

Controller instance

struct nvme_id_ctrl *id

Identify controller data structure

Description

Issues an ‘identify controller’ command to c and copies the data into id.

Return

0 on success or -1 on failure.

int nvme_disconnect_ctrl(nvme_ctrl_t c)

Disconnect a controller

Parameters

nvme_ctrl_t c

Controller instance

Description

Issues a ‘disconnect’ fabrics command to c

Return

0 on success, -1 on failure.

nvme_ctrl_t nvme_scan_ctrl(nvme_root_t r, const char *name)

Scan on a controller

Parameters

nvme_root_t r

nvme_root_t object

const char *name

Name of the controller

Description

Scans a controller with sysfs name name and add it to r.

Return

nvme_ctrl_t object

void nvme_rescan_ctrl(nvme_ctrl_t c)

Rescan an existing controller

Parameters

nvme_ctrl_t c

Controller instance

int nvme_init_ctrl(nvme_host_t h, nvme_ctrl_t c, int instance)

Initialize nvme_ctrl_t object for an existing controller.

Parameters

nvme_host_t h

nvme_host_t object

nvme_ctrl_t c

nvme_ctrl_t object

int instance

Instance number (e.g. 1 for nvme1)

Return

The ioctl() return code. Typically 0 on success.

void nvme_free_ctrl(struct nvme_ctrl *c)

Free controller

Parameters

struct nvme_ctrl *c

Controller instance

Unlink controller

Parameters

struct nvme_ctrl *c

Controller instance

const char *nvme_subsystem_get_nqn(nvme_subsystem_t s)

Retrieve NQN from subsystem

Parameters

nvme_subsystem_t s

nvme_subsystem_t object

Return

NQN of subsystem

const char *nvme_subsystem_get_sysfs_dir(nvme_subsystem_t s)

sysfs directory of an nvme_subsystem_t object

Parameters

nvme_subsystem_t s

nvme_subsystem_t object

Return

sysfs directory name of s

const char *nvme_subsystem_get_name(nvme_subsystem_t s)

sysfs name of an nvme_subsystem_t object

Parameters

nvme_subsystem_t s

nvme_subsystem_t object

Return

sysfs name of s

const char *nvme_subsystem_get_type(nvme_subsystem_t s)

Returns the type of a subsystem

Parameters

nvme_subsystem_t s

nvme_subsystem_t object

Description

Returns the subsystem type of s.

Return

‘nvm’ or ‘discovery’

const char *nvme_subsystem_get_application(nvme_subsystem_t s)

Return the application string

Parameters

nvme_subsystem_t s

nvme_subsystem_t object

Return

Managing application string or NULL if not set.

void nvme_subsystem_set_application(nvme_subsystem_t s, const char *a)

Set the application string

Parameters

nvme_subsystem_t s

nvme_subsystem_t object

const char *a

application string

Description

Sets the managing application string for s.

const char *nvme_subsystem_get_iopolicy(nvme_subsystem_t s)

Return the IO policy of subsytem

Parameters

nvme_subsystem_t s

nvme_subsystem_t object

Return

IO policy used by current subsystem

int nvme_scan_topology(nvme_root_t r, nvme_scan_filter_t f, void *f_args)

Scan NVMe topology and apply filter

Parameters

nvme_root_t r

nvme_root_t object

nvme_scan_filter_t f

filter to apply

void *f_args

user-specified argument to f

Description

Scans the NVMe topology and filters out the resulting elements by applying f.

Return

Number of elements scanned

const char *nvme_host_get_hostnqn(nvme_host_t h)

Host NQN of an nvme_host_t object

Parameters

nvme_host_t h

nvme_host_t object

Return

Host NQN of h

const char *nvme_host_get_hostid(nvme_host_t h)

Host ID of an nvme_host_t object

Parameters

nvme_host_t h

nvme_host_t object

Return

Host ID of h

void nvme_host_release_fds(struct nvme_host *h)

Close all opened file descriptors under host

Parameters

struct nvme_host *h

nvme_host_t object

Description

Controller and Namespace objects cache the file descriptors of opened nvme devices. This API can be used to close and clear all cached fds under this host.

void nvme_free_host(nvme_host_t h)

Free nvme_host_t object

Parameters

nvme_host_t h

nvme_host_t object

nvme_root_t nvme_scan(const char *config_file)

Scan NVMe topology

Parameters

const char *config_file

Configuration file

Return

nvme_root_t object of found elements

int nvme_read_config(nvme_root_t r, const char *config_file)

Read NVMe JSON configuration file

Parameters

nvme_root_t r

nvme_root_t object

const char *config_file

JSON configuration file

Description

Read in the contents of config_file and merge them with the elements in r.

Return

0 on success, -1 on failure with errno set.

void nvme_refresh_topology(nvme_root_t r)

Refresh nvme_root_t object contents

Parameters

nvme_root_t r

nvme_root_t object

Description

Removes all elements in r and rescans the existing topology.

int nvme_update_config(nvme_root_t r)

Update JSON configuration

Parameters

nvme_root_t r

nvme_root_t object

Description

Updates the JSON configuration file with the contents of r.

Return

0 on success, -1 on failure.

int nvme_dump_config(nvme_root_t r)

Print the JSON configuration

Parameters

nvme_root_t r

nvme_root_t object

Description

Prints the current contents of the JSON configuration file to stdout.

Return

0 on success, -1 on failure.

int nvme_dump_tree(nvme_root_t r)

Dump internal object tree

Parameters

nvme_root_t r

nvme_root_t object

Description

Prints the internal object tree in JSON format to stdout.

Return

0 on success, -1 on failure.

char *nvme_get_attr(const char *d, const char *attr)

Read sysfs attribute

Parameters

const char *d

sysfs directory

const char *attr

sysfs attribute name

Return

String with the contents of attr or NULL in case of an empty value

or in case of an error (indicated by non-zero errno code).

char *nvme_get_subsys_attr(nvme_subsystem_t s, const char *attr)

Read subsystem sysfs attribute

Parameters

nvme_subsystem_t s

nvme_subsystem_t object

const char *attr

sysfs attribute name

Return

String with the contents of attr or NULL in case of an empty value

or in case of an error (indicated by non-zero errno code).

char *nvme_get_ctrl_attr(nvme_ctrl_t c, const char *attr)

Read controller sysfs attribute

Parameters

nvme_ctrl_t c

Controller instance

const char *attr

sysfs attribute name

Return

String with the contents of attr or NULL in case of an empty value

or in case of an error (indicated by non-zero errno code).

char *nvme_get_ns_attr(nvme_ns_t n, const char *attr)

Read namespace sysfs attribute

Parameters

nvme_ns_t n

nvme_ns_t object

const char *attr

sysfs attribute name

Return

String with the contents of attr or NULL in case of an empty value

or in case of an error (indicated by non-zero errno code).

nvme_ns_t nvme_subsystem_lookup_namespace(struct nvme_subsystem *s, __u32 nsid)

lookup namespace by NSID

Parameters

struct nvme_subsystem *s

nvme_subsystem_t object

__u32 nsid

Namespace id

Return

nvme_ns_t of the namespace with id nsid in subsystem s

void nvme_subsystem_release_fds(struct nvme_subsystem *s)

Close all opened fds under subsystem

Parameters

struct nvme_subsystem *s

nvme_subsystem_t object

Description

Controller and Namespace objects cache the file descriptors of opened nvme devices. This API can be used to close and clear all cached fds under this subsystem.

char *nvme_get_path_attr(nvme_path_t p, const char *attr)

Read path sysfs attribute

Parameters

nvme_path_t p

nvme_path_t object

const char *attr

sysfs attribute name

Return

String with the contents of attr or NULL in case of an empty value

or in case of an error (indicated by non-zero errno code).

nvme_ns_t nvme_scan_namespace(const char *name)

scan namespace based on sysfs name

Parameters

const char *name

sysfs name of the namespace to scan

Return

nvme_ns_t object or NULL if not found.

const char *nvme_host_get_hostsymname(nvme_host_t h)

Get the host’s symbolic name

Parameters

nvme_host_t h

Host for which the symbolic name should be returned.

Return

The symbolic name or NULL if a symbolic name hasn’t been configure.

void nvme_host_set_hostsymname(nvme_host_t h, const char *hostsymname)

Set the host’s symbolic name

Parameters

nvme_host_t h

Host for which the symbolic name should be set.

const char *hostsymname

Symbolic name

filters.h

libnvme directory filter

int nvme_namespace_filter(const struct dirent *d)

Filter for namespaces

Parameters

const struct dirent *d

dirent to check

Return

1 if d matches, 0 otherwise

int nvme_paths_filter(const struct dirent *d)

Filter for paths

Parameters

const struct dirent *d

dirent to check

Return

1 if d matches, 0 otherwise

int nvme_ctrls_filter(const struct dirent *d)

Filter for controllers

Parameters

const struct dirent *d

dirent to check

Return

1 if d matches, 0 otherwise

int nvme_subsys_filter(const struct dirent *d)

Filter for subsystems

Parameters

const struct dirent *d

dirent to check

Return

1 if d matches, 0 otherwise

int nvme_scan_subsystems(struct dirent ***subsys)

Scan for subsystems

Parameters

struct dirent ***subsys

Pointer to array of dirents

Return

number of entries in subsys

int nvme_scan_subsystem_namespaces(nvme_subsystem_t s, struct dirent ***ns)

Scan for namespaces in a subsystem

Parameters

nvme_subsystem_t s

Subsystem to scan

struct dirent ***ns

Pointer to array of dirents

Return

number of entries in ns

int nvme_scan_ctrls(struct dirent ***ctrls)

Scan for controllers

Parameters

struct dirent ***ctrls

Pointer to array of dirents

Return

number of entries in ctrls

int nvme_scan_ctrl_namespace_paths(nvme_ctrl_t c, struct dirent ***paths)

Scan for namespace paths in a controller

Parameters

nvme_ctrl_t c

Controller to scan

struct dirent ***paths

Pointer to array of dirents

Return

number of entries in paths

int nvme_scan_ctrl_namespaces(nvme_ctrl_t c, struct dirent ***ns)

Scan for namespaces in a controller

Parameters

nvme_ctrl_t c

Controller to scan

struct dirent ***ns

Pointer to array of dirents

Return

number of entries in ns

util.h

libnvme utility functions

enum nvme_connect_err

nvme connect error codes

Constants

ENVME_CONNECT_RESOLVE

failed to resolve host

ENVME_CONNECT_ADDRFAM

unrecognized address family

ENVME_CONNECT_TRADDR

failed to get traddr

ENVME_CONNECT_TARG

need a transport (-t) argument

ENVME_CONNECT_AARG

need a address (-a) argument

ENVME_CONNECT_OPEN

failed to open nvme-fabrics device

ENVME_CONNECT_WRITE

failed to write to nvme-fabrics device

ENVME_CONNECT_READ

failed to read from nvme-fabrics device

ENVME_CONNECT_PARSE

failed to parse ctrl info

ENVME_CONNECT_INVAL_TR

invalid transport type

ENVME_CONNECT_LOOKUP_SUBSYS_NAME

failed to lookup subsystem name

ENVME_CONNECT_LOOKUP_SUBSYS

failed to lookup subsystem

ENVME_CONNECT_ALREADY

the connect attempt failed, already connected

ENVME_CONNECT_INVAL

invalid arguments/configuration

ENVME_CONNECT_ADDRINUSE

hostnqn already in use

ENVME_CONNECT_NODEV

invalid interface

ENVME_CONNECT_OPNOTSUPP

not supported

ENVME_CONNECT_CONNREFUSED

connection refused

ENVME_CONNECT_ADDRNOTAVAIL

cannot assign requested address

ENVME_CONNECT_IGNORED

connect attempt is ignored due to configuration

__u8 nvme_status_to_errno(int status, bool fabrics)

Converts nvme return status to errno

Parameters

int status

Return status from an nvme passthrough command

bool fabrics

Set to true if status is to a fabrics target.

Return

An errno representing the nvme status if it is an nvme status field, or unchanged status is < 0 since errno is already set.

const char *nvme_status_to_string(int status, bool fabrics)

Returns string describing nvme return status.

Parameters

int status

Return status from an nvme passthrough command

bool fabrics

Set to true if status is to a fabrics target.

Return

String representation of the nvme status if it is an nvme status field, or a standard errno string if status is < 0.

const char *nvme_errno_to_string(int err)

Returns string describing nvme connect failures

Parameters

int err

Returned error code from nvme_add_ctrl()

Return

String representation of the nvme connect error codes

void nvme_init_ctrl_list(struct nvme_ctrl_list *cntlist, __u16 num_ctrls, __u16 *ctrlist)

Initialize an nvme_ctrl_list structure from an array.

Parameters

struct nvme_ctrl_list *cntlist

The controller list structure to initialize

__u16 num_ctrls

The number of controllers in the array, ctrlist.

__u16 *ctrlist

An array of controller identifiers in CPU native endian.

Description

This is intended to be used with any command that takes a controller list argument. See nvme_ns_attach_ctrls() and nvme_ns_detach().

void nvme_init_dsm_range(struct nvme_dsm_range *dsm, __u32 *ctx_attrs, __u32 *llbas, __u64 *slbas, __u16 nr_ranges)

Constructs a data set range structure

Parameters

struct nvme_dsm_range *dsm

DSM range array

__u32 *ctx_attrs

Array of context attributes

__u32 *llbas

Array of length in logical blocks

__u64 *slbas

Array of starting logical blocks

__u16 nr_ranges

The size of the dsm arrays

Description

Each array must be the same size of size ‘nr_ranges’. This is intended to be used with constructing a payload for nvme_dsm().

Return

The nvme command status if a response was received or -errno otherwise.

void nvme_init_copy_range(struct nvme_copy_range *copy, __u16 *nlbs, __u64 *slbas, __u32 *eilbrts, __u32 *elbatms, __u32 *elbats, __u16 nr)

Constructs a copy range structure

Parameters

struct nvme_copy_range *copy

Copy range array

__u16 *nlbs

Number of logical blocks

__u64 *slbas

Starting LBA

__u32 *eilbrts

Expected initial logical block reference tag

__u32 *elbatms

Expected logical block application tag mask

__u32 *elbats

Expected logical block application tag

__u16 nr

Number of descriptors to construct

void nvme_init_copy_range_f1(struct nvme_copy_range_f1 *copy, __u16 *nlbs, __u64 *slbas, __u64 *eilbrts, __u32 *elbatms, __u32 *elbats, __u16 nr)

Constructs a copy range f1 structure

Parameters

struct nvme_copy_range_f1 *copy

Copy range array

__u16 *nlbs

Number of logical blocks

__u64 *slbas

Starting LBA

__u64 *eilbrts

Expected initial logical block reference tag

__u32 *elbatms

Expected logical block application tag mask

__u32 *elbats

Expected logical block application tag

__u16 nr

Number of descriptors to construct

void nvme_init_copy_range_f2(struct nvme_copy_range_f2 *copy, __u32 *snsids, __u16 *nlbs, __u64 *slbas, __u16 *sopts, __u32 *eilbrts, __u32 *elbatms, __u32 *elbats, __u16 nr)

Constructs a copy range f2 structure

Parameters

struct nvme_copy_range_f2 *copy

Copy range array

__u32 *snsids

Source namespace identifier

__u16 *nlbs

Number of logical blocks

__u64 *slbas

Starting LBA

__u16 *sopts

Source options

__u32 *eilbrts

Expected initial logical block reference tag

__u32 *elbatms

Expected logical block application tag mask

__u32 *elbats

Expected logical block application tag

__u16 nr

Number of descriptors to construct

void nvme_init_copy_range_f3(struct nvme_copy_range_f3 *copy, __u32 *snsids, __u16 *nlbs, __u64 *slbas, __u16 *sopts, __u64 *eilbrts, __u32 *elbatms, __u32 *elbats, __u16 nr)

Constructs a copy range f3 structure

Parameters

struct nvme_copy_range_f3 *copy

Copy range array

__u32 *snsids

Source namespace identifier

__u16 *nlbs

Number of logical blocks

__u64 *slbas

Starting LBA

__u16 *sopts

Source options

__u64 *eilbrts

Expected initial logical block reference tag

__u32 *elbatms

Expected logical block application tag mask

__u32 *elbats

Expected logical block application tag

__u16 nr

Number of descriptors to construct

int nvme_get_feature_length(int fid, __u32 cdw11, __u32 *len)

Retreive the command payload length for a specific feature identifier

Parameters

int fid

Feature identifier, see enum nvme_features_id.

__u32 cdw11

The cdw11 value may affect the transfer (only known fid is NVME_FEAT_FID_HOST_ID)

__u32 *len

On success, set to this features payload length in bytes.

Return

0 on success, -1 with errno set to EINVAL if the function did not recognize fid.

int nvme_get_feature_length2(int fid, __u32 cdw11, enum nvme_data_tfr dir, __u32 *len)

Retreive the command payload length for a specific feature identifier

Parameters

int fid

Feature identifier, see enum nvme_features_id.

__u32 cdw11

The cdw11 value may affect the transfer (only known fid is NVME_FEAT_FID_HOST_ID)

enum nvme_data_tfr dir

Data transfer direction: false - host to controller, true - controller to host may affect the transfer (only known fid is NVME_FEAT_FID_HOST_MEM_BUF).

__u32 *len

On success, set to this features payload length in bytes.

Return

0 on success, -1 with errno set to EINVAL if the function did not recognize fid.

int nvme_get_directive_receive_length(enum nvme_directive_dtype dtype, enum nvme_directive_receive_doper doper, __u32 *len)

Get directive receive length

Parameters

enum nvme_directive_dtype dtype

Directive type, see enum nvme_directive_dtype

enum nvme_directive_receive_doper doper

Directive receive operation, see enum nvme_directive_receive_doper

__u32 *len

On success, set to this directives payload length in bytes.

Return

0 on success, -1 with errno set to EINVAL if the function did not recognize dtype or doper.

size_t get_entity_name(char *buffer, size_t bufsz)

Get Entity Name (ENAME).

Parameters

char *buffer

The buffer where the ENAME will be saved as an ASCII string.

size_t bufsz

The size of buffer.

Description

Per TP8010, ENAME is defined as the name associated with the host (i.e. hostname).

Return

Number of characters copied to buffer.

size_t get_entity_version(char *buffer, size_t bufsz)

Get Entity Version (EVER).

Parameters

char *buffer

The buffer where the EVER will be saved as an ASCII string.

size_t bufsz

The size of buffer.

Description

EVER is defined as the operating system name and version as an ASCII string. This function reads different files from the file system and builds a string as follows: [os type] [os release] [distro release]

E.g. “Linux 5.17.0-rc1 SLES 15.4”

Return

Number of characters copied to buffer.

char *kv_strip(char *kv)

Strip blanks from key value string

Parameters

char *kv

The key-value string to strip

Description

Strip leading/trailing blanks as well as trailing comments from the Key=Value string pointed to by kv.

Return

A pointer to the stripped string. Note that the original string, kv, gets modified.

char *kv_keymatch(const char *kv, const char *key)

Look for key in key value string

Parameters

const char *kv

The key=value string to search for the presence of key

const char *key

The key to look for

Description

Look for key in the Key=Value pair pointed to by k and return a pointer to the Value if key is found.

Check if kv starts with key. If it does then make sure that we have a whole-word match on the key, and if we do, return a pointer to the first character of value (i.e. skip leading spaces, tabs, and equal sign)

Return

A pointer to the first character of “value” if a match is found. NULL otherwise.

char *startswith(const char *s, const char *prefix)

Checks that a string starts with a given prefix.

Parameters

const char *s

The string to check

const char *prefix

A string that s could be starting with

Return

If s starts with prefix, then return a pointer within s at the first character after the matched prefix. NULL otherwise.

round_up

round_up (val, mult)

Round a value val to the next multiple specified by mult.

Parameters

val

Value to round

mult

Multiple to round to.

Description

usage: int x = round_up(13, sizeof(__u32)); // 13 -> 16

__u16 nvmf_exat_len(size_t val_len)

Return length rounded up by 4

Parameters

size_t val_len

Value length

Description

Return the size in bytes, rounded to a multiple of 4 (e.g., size of __u32), of the buffer needed to hold the exat value of size val_len.

Return

Length rounded up by 4

__u16 nvmf_exat_size(size_t val_len)

Return min aligned size to hold value

Parameters

size_t val_len

This is the length of the data to be copied to the “exatval” field of a “struct nvmf_ext_attr”.

Description

Return the size of the “struct nvmf_ext_attr” needed to hold a value of size val_len.

Return

The size in bytes, rounded to a multiple of 4 (i.e. size of __u32), of the “struct nvmf_ext_attr” required to hold a string of length val_len.

struct nvmf_ext_attr *nvmf_exat_ptr_next(struct nvmf_ext_attr *p)

Increment p to the next element in the array.

Parameters

struct nvmf_ext_attr *p

Pointer to an element of an array of “struct nvmf_ext_attr”.

Description

Extended attributes are saved to an array of “struct nvmf_ext_attr” where each element of the array is of variable size. In order to move to the next element in the array one must increment the pointer to the current element (p) by the size of the current element.

Return

Pointer to the next element in the array.

enum nvme_version

Selector for version to be returned by nvme_get_version

Constants

NVME_VERSION_PROJECT

Project release version

NVME_VERSION_GIT

Git reference

const char *nvme_get_version(enum nvme_version type)

Return version libnvme string

Parameters

enum nvme_version type

Selects which version type (see struct nvme_version)

Return

Returns version string for known types or else “n/a”

int nvme_uuid_to_string(unsigned char uuid[NVME_UUID_LEN], char *str)

Return string represenation of encoded UUID

Parameters

unsigned char uuid[NVME_UUID_LEN]

Binary encoded input UUID

char *str

Output string represenation of UUID

Return

Returns error code if type conversion fails.

int nvme_uuid_from_string(const char *str, unsigned char uuid[NVME_UUID_LEN])

Return encoded UUID represenation of string UUID

Parameters

const char *str

Output string represenation of UUID

unsigned char uuid[NVME_UUID_LEN]

Binary encoded input UUID

Return

Returns error code if type conversion fails.

int nvme_uuid_random(unsigned char uuid[NVME_UUID_LEN])

Generate random UUID

Parameters

unsigned char uuid[NVME_UUID_LEN]

Generated random UUID

Description

Generate random number according https://www.rfc-editor.org/rfc/rfc4122#section-4.4

Return

Returns error code if generating of random number fails.

int nvme_uuid_find(struct nvme_id_uuid_list *uuid_list, const unsigned char uuid[NVME_UUID_LEN])

Find UUID position on UUID list

Parameters

struct nvme_id_uuid_list *uuid_list

UUID list returned by identify UUID

const unsigned char uuid[NVME_UUID_LEN]

Binary encoded input UUID

Return

The array position where given UUID is present, or -1 on failure with errno set.

bool nvme_ipaddrs_eq(const char *addr1, const char *addr2)

Check if 2 IP addresses are equal.

Parameters

const char *addr1

IP address (can be IPv4 or IPv6)

const char *addr2

IP address (can be IPv4 or IPv6)

Return

true if addr1 == addr2. false otherwise.

const char *nvme_iface_matching_addr(const struct ifaddrs *iface_list, const char *addr)

Get interface matching addr

Parameters

const struct ifaddrs *iface_list

Interface list returned by getifaddrs()

const char *addr

Address to match

Description

Parse the interface list pointed to by iface_list looking for the interface that has addr as one of its assigned addresses.

Return

The name of the interface that owns addr or NULL.

bool nvme_iface_primary_addr_matches(const struct ifaddrs *iface_list, const char *iface, const char *addr)

Check that interface’s primary address matches

Parameters

const struct ifaddrs *iface_list

Interface list returned by getifaddrs()

const char *iface

Interface to match

const char *addr

Address to match

Description

Parse the interface list pointed to by iface_list and looking for interface iface. The get its primary address and check if it matches addr.

Return

true if a match is found, false otherwise.

log.h

logging functions

void nvme_init_logging(nvme_root_t r, int lvl, bool log_pid, bool log_tstamp)

Initialize logging

Parameters

nvme_root_t r

nvme_root_t context

int lvl

Logging level to set

bool log_pid

Boolean to enable logging of the PID

bool log_tstamp

Boolean to enable logging of the timestamp

Description

Sets the default logging variables for the library.

void nvme_init_default_logging(FILE *fp, int lvl, bool log_pid, bool log_tstamp)

Initialize default (fallback) logging

Parameters

FILE *fp

File descriptor for logging messages

int lvl

Logging level to set

bool log_pid

Boolean to enable logging of the PID

bool log_tstamp

Boolean to enable logging of the timestamp

Description

Sets the default logging settings for the library in case the root object is absent.

int nvme_get_logging_level(nvme_root_t r, bool *log_pid, bool *log_tstamp)

Get current logging level

Parameters

nvme_root_t r

nvme_root_t context

bool *log_pid

Pointer to store a current value of logging of the PID flag at (optional).

bool *log_tstamp

Pointer to store a current value of logging of the timestamp flag at (optional).

Description

Retrieves current values of logging variables.

Return

current log level value or DEFAULT_LOGLEVEL if not initialized.

void nvme_set_root(nvme_root_t r)

Set nvme_root_t context

Parameters

nvme_root_t r

nvme_root_t context

Description

In order to be able to log from code paths where no root object is passed in via the arguments use the the default one which can be set via this call. When creating a new root object with nvme_create_root the global root object will be set as well. This means the global root object is always pointing to the latest created root object. Note the first nvme_free_tree call will reset the global root object.

This function is deprecated. Use nvme_init_default_logging or/and nvme_init_logging instead.

void nvme_set_debug(bool debug)

Set NVMe command debugging output

Parameters

bool debug

true to enable or false to disable

Description

This function is deprecated. Use nvme_init_default_logging instead.

bool nvme_get_debug(void)

Get NVMe command debugging output

Parameters

void

no arguments

Description

This function is deprecated. Use nvme_get_logging_level instead.

Return

false if disabled or true if enabled.

nbft.h

NVM Express Boot Specification, Revision 1.0

Note: this API is currently unstable, subject to further additions.

enum nbft_desc_type

NBFT Elements - Descriptor Types (Figure 5)

Constants

NBFT_DESC_HEADER

Header: an ACPI structure header with some additional NBFT specific info.

NBFT_DESC_CONTROL

Control Descriptor: indicates the location of host, HFI, SSNS, security, and discovery descriptors.

NBFT_DESC_HOST

Host Descriptor: host information.

NBFT_DESC_HFI

HFI Descriptor: an indexable table of HFI Descriptors, one for each fabric interface on the host.

NBFT_DESC_SSNS

Subsystem Namespace Descriptor: an indexable table of SSNS Descriptors.

NBFT_DESC_SECURITY

Security Descriptor: an indexable table of Security descriptors.

NBFT_DESC_DISCOVERY

Discovery Descriptor: an indexable table of Discovery Descriptors.

NBFT_DESC_HFI_TRINFO

HFI Transport Descriptor: indicated by an HFI Descriptor, corresponds to a specific transport for a single HFI.

NBFT_DESC_RESERVED_8

Reserved.

NBFT_DESC_SSNS_EXT_INFO

SSNS Extended Info Descriptor: indicated by an SSNS Descriptor if required.

enum nbft_trtype

NBFT Interface Transport Types (Figure 7)

Constants

NBFT_TRTYPE_TCP

NVMe/TCP (802.3 + TCP/IP). String Designator “tcp”.

struct nbft_heap_obj

NBFT Header Driver Signature

Definition

struct nbft_heap_obj {
  __le32 offset;
  __le16 length;
};

Members

offset

Offset in bytes of the heap object, if any, from byte offset 0h of the NBFT Table Header.

length

Length in bytes of the heap object, if any.

struct nbft_header

NBFT Table - Header (Figure 8)

Definition

struct nbft_header {
  char signature[4];
  __le32 length;
  __u8 major_revision;
  __u8 checksum;
  char oem_id[6];
  char oem_table_id[8];
  __le32 oem_revision;
  __le32 creator_id;
  __le32 creator_revision;
  __le32 heap_offset;
  __le32 heap_length;
  struct nbft_heap_obj driver_dev_path_sig;
  __u8 minor_revision;
  __u8 reserved[13];
};

Members

signature

Signature: An ASCII string representation of the table identifier. This field shall be set to the value 4E424654h (i.e. “NBFT”, see #NBFT_HEADER_SIG).

length

Length: The length of the table, in bytes, including the header, starting from offset 0h. This field is used to record the size of the entire table.

major_revision

Major Revision: The major revision of the structure corresponding to the Signature field. Larger major revision numbers should not be assumed backward compatible to lower major revision numbers with the same signature.

checksum

Checksum: The entire table, including the Checksum field, shall sum to 0h to be considered valid.

oem_id

OEMID shall be populated by the NBFT driver writer by an OEM-supplied string that identifies the OEM. All trailing bytes shall be NULL.

oem_table_id

OEM Table ID: This field shall be populated by the NBFT driver writer with an OEM-supplied string that the OEM uses to identify the particular data table. This field is particularly useful when defining a definition block to distinguish definition block functions. The OEM assigns each dissimilar table a new OEM Table ID.

oem_revision

OEM Revision: An OEM-supplied revision number. Larger numbers are assumed to be newer revisions.

creator_id

Creator ID: Vendor ID of utility that created the table. For instance, this may be the ID for the ASL Compiler.

creator_revision

Creator Revision: Revision of utility that created the table. For instance, this may be the ID for the ASL Compiler.

heap_offset

Heap Offset (HO): This field indicates the offset in bytes of the heap, if any, from byte offset 0h of the NBFT Table Header.

heap_length

Heap Length (HL): The length of the heap, if any.

driver_dev_path_sig

Driver Signature Heap Object Reference: This field indicates the offset in bytes of a heap object containing the Driver Signature, if any, from byte offset 0h of the NBFT Table Header.

minor_revision

Minor Revision: The minor revision of the structure corresponding to the Signature field. If the major revision numbers are the same, any minor revision number differences shall be backwards compatible with the same signature.

reserved

Reserved.

struct nbft_control

NBFT Table - Control Descriptor (Figure 8)

Definition

struct nbft_control {
  __u8 structure_id;
  __u8 major_revision;
  __u8 minor_revision;
  __u8 reserved1;
  __le16 csl;
  __u8 flags;
  __u8 reserved2;
  struct nbft_heap_obj hdesc;
  __u8 hsv;
  __u8 reserved3;
  __le32 hfio;
  __le16 hfil;
  __u8 hfiv;
  __u8 num_hfi;
  __le32 ssnso;
  __le16 ssnsl;
  __u8 ssnsv;
  __u8 num_ssns;
  __le32 seco;
  __le16 secl;
  __u8 secv;
  __u8 num_sec;
  __le32 disco;
  __le16 discl;
  __u8 discv;
  __u8 num_disc;
  __u8 reserved4[16];
};

Members

structure_id

Structure ID: This field specifies the element (refer to enum nbft_desc_type). This field shall be set to 1h (i.e., Control, #NBFT_DESC_CONTROL).

major_revision

Major Revision: The major revision of the structure corresponding to the Signature field. Larger major revision numbers should not be assumed backward compatible to lower major revision numbers with the same signature.

minor_revision

Minor Revision: The minor revision of the structure corresponding to the signature field. If the major revision numbers are the same, any minor revision number differences shall be backwards compatible with the same signature.

reserved1

Reserved.

csl

Control Structure Length (CSL): This field indicates the length in bytes of the Control Descriptor.

flags

Flags, see enum nbft_control_flags.

reserved2

Reserved.

hdesc

Host Descriptor (HDESC): This field indicates the location and length of the Host Descriptor (see struct nbft_host).

hsv

Host Descriptor Version (HSV): This field indicates the version of the Host Descriptor.

reserved3

Reserved.

hfio

HFI Descriptor List Offset (HFIO): If this field is set to a non-zero value, then this field indicates the offset in bytes of the HFI Descriptor List, if any, from byte offset 0h of the NBFT Table Header. If the num_hfi field is cleared to 0h, then this field is reserved.

hfil

HFI Descriptor Length (HFIL): This field indicates the length in bytes of each HFI Descriptor, if any. If the num_hfi field is cleared to 0h, then this field is reserved.

hfiv

HFI Descriptor Version (HFIV): This field indicates the version of each HFI Descriptor.

num_hfi

Number of Host Fabric Interface Descriptors (NumHFI): This field indicates the number of HFI Descriptors (see struct nbft_hfi) in the HFI Descriptor List, if any. If no interfaces have been configured, then this field shall be cleared to 0h.

ssnso

SSNS Descriptor List Offset (SSNSO):: This field indicates the offset in bytes of the SSNS Descriptor List, if any, from byte offset 0h of the NBFT Table Header. If the num_ssns field is cleared to 0h, then this field is reserved.

ssnsl

SSNS Descriptor Length (SSNSL): This field indicates the length in bytes of each SSNS Descriptor, if any. If the num_ssns field is cleared to 0h, then this field is reserved.

ssnsv

SSNS Descriptor Version (SSNSV): This field indicates the version of the SSNS Descriptor.

num_ssns

Number of Subsystem and Namespace Descriptors (NumSSNS): This field indicates the number of Subsystem Namespace (SSNS) Descriptors (see struct nbft_ssns) in the SSNS Descriptor List, if any.

seco

Security Profile Descriptor List Offset (SECO): This field indicates the offset in bytes of the Security Profile Descriptor List, if any, from byte offset 0h of the NBFT Table Header. If the num_sec field is cleared to 0h, then this field is reserved.

secl

Security Profile Descriptor Length (SECL): This field indicates the length in bytes of each Security Profile Descriptor, if any. If the num_sec field is cleared to 0h, then this field is reserved.

secv

Security Profile Descriptor Version (SECV): This field indicates the version of the Security Profile Descriptor.

num_sec

Number of Security Profile Descriptors (NumSec): This field indicates the number of Security Profile Descriptors (see struct nbft_security), if any, in the Security Profile Descriptor List.

disco

Discovery Descriptor Offset (DISCO): This field indicates the offset in bytes of the Discovery Descriptor List, if any, from byte offset 0h of the NBFT Table Header. If the num_disc field is cleared to 0h, then this field is reserved.

discl

Discovery Descriptor Length (DISCL): This field indicates the length in bytes of each Discovery Descriptor, if any. If the num_disc field is cleared to 0h, then this field is reserved.

discv

Discovery Descriptor Version (DISCV): This field indicates the version of the Discovery Descriptor.

num_disc

Number of Discovery Descriptors (NumDisc): This field indicates the number of Discovery Descriptors (see struct nbft_discovery), if any, in the Discovery Descriptor List, if any.

reserved4

Reserved.

enum nbft_control_flags

Control Descriptor Flags

Constants

NBFT_CONTROL_VALID

Block Valid: indicates that the structure is valid.

struct nbft_host

Host Descriptor (Figure 9)

Definition

struct nbft_host {
  __u8 structure_id;
  __u8 flags;
  __u8 host_id[16];
  struct nbft_heap_obj host_nqn_obj;
  __u8 reserved[8];
};

Members

structure_id

Structure ID: This field shall be set to 2h (i.e., Host Descriptor; #NBFT_DESC_HOST).

flags

Host Flags, see enum nbft_host_flags.

host_id

Host ID: This field shall be set to the Host Identifier. This field shall not be empty if the NBFT and NVMe Boot are supported by the Platform.

host_nqn_obj

Host NQN Heap Object Reference: this field indicates a heap object containing a Host NQN. This object shall not be empty if the NBFT and NVMe Boot are supported by the Platform.

reserved

Reserved.

enum nbft_host_flags

Host Flags

Constants

NBFT_HOST_VALID

Descriptor Valid: If set to 1h, then this descriptor is valid. If cleared to 0h, then this descriptor is reserved.

NBFT_HOST_HOSTID_CONFIGURED

HostID Configured: If set to 1h, then the Host ID field contains an administratively-configured value. If cleared to 0h, then the Host ID field contains a driver default value.

NBFT_HOST_HOSTNQN_CONFIGURED

Host NQN Configured: If set to 1h, then the Host NQN indicated by the Host NQN Heap Object Reference field (struct nbft_host.host_nqn) contains an administratively-configured value. If cleared to 0h, then the Host NQN indicated by the Host NQN Offset field contains a driver default value.

NBFT_HOST_PRIMARY_ADMIN_MASK

Mask to get Primary Administrative Host Descriptor: indicates whether the Host Descriptor in this NBFT was selected as the primary NBFT for administrative purposes of platform identity as a hint to the OS. If multiple NBFT tables are present, only one NBFT should be administratively selected. There is no enforcement mechanism for this to be coordinated between multiple NBFT tables, but this field should be set to Selected (#NBFT_HOST_PRIMARY_ADMIN_SELECTED) if more than one NBFT is present.

NBFT_HOST_PRIMARY_ADMIN_NOT_INDICATED

Not Indicated by Driver: The driver that created this NBFT provided no administrative priority hint for this NBFT.

NBFT_HOST_PRIMARY_ADMIN_UNSELECTED

Unselected: The driver that created this NBFT explicitly indicated that this NBFT should not be prioritized over any other NBFT.

NBFT_HOST_PRIMARY_ADMIN_SELECTED

Selected: The driver that created this NBFT explicitly indicated that this NBFT should be prioritized over any other NBFT.

struct nbft_hfi

Host Fabric Interface (HFI) Descriptor (Figure 11)

Definition

struct nbft_hfi {
  __u8 structure_id;
  __u8 index;
  __u8 flags;
  __u8 trtype;
  __u8 reserved1[12];
  struct nbft_heap_obj trinfo_obj;
  __u8 reserved2[10];
};

Members

structure_id

Structure ID: This field shall be set to 3h (i.e., Host Fabric Interface Descriptor; #NBFT_DESC_HFI).

index

HFI Descriptor Index: This field indicates the number of this HFI Descriptor in the Host Fabric Interface Descriptor List.

flags

HFI Descriptor Flags, see enum nbft_hfi_flags.

trtype

HFI Transport Type, see enum nbft_trtype.

reserved1

Reserved.

trinfo_obj

HFI Transport Info Descriptor Heap Object Reference: If this field is set to a non-zero value, then this field indicates the location and size of a heap object containing a HFI Transport Info.

reserved2

Reserved.

enum nbft_hfi_flags

HFI Descriptor Flags

Constants

NBFT_HFI_VALID

Descriptor Valid: If set to 1h, then this descriptor is valid. If cleared to 0h, then this descriptor is reserved.

struct nbft_hfi_info_tcp

HFI Transport Info Descriptor - NVMe/TCP (Figure 13)

Definition

struct nbft_hfi_info_tcp {
  __u8 structure_id;
  __u8 version;
  __u8 trtype;
  __u8 trinfo_version;
  __le16 hfi_index;
  __u8 flags;
  __le32 pci_sbdf;
  __u8 mac_addr[6];
  __le16 vlan;
  __u8 ip_origin;
  __u8 ip_address[16];
  __u8 subnet_mask_prefix;
  __u8 ip_gateway[16];
  __u8 reserved1;
  __le16 route_metric;
  __u8 primary_dns[16];
  __u8 secondary_dns[16];
  __u8 dhcp_server[16];
  struct nbft_heap_obj host_name_obj;
  __u8 reserved2[18];
};

Members

structure_id

Structure ID: This field shall be set to 7h (i.e., HFI Transport Info; #NBFT_DESC_HFI_TRINFO).

version

Version: This field shall be set to 1h.

trtype

HFI Transport Type, see enum nbft_trtype: This field shall be set to 03h (i.e., NVMe/TCP; #NBFT_TRTYPE_TCP).

trinfo_version

Transport Info Version: Implementations compliant to this specification shall set this field to 1h.

hfi_index

HFI Descriptor Index: The value of the HFI Descriptor Index field of the HFI Descriptor (see struct nbft_hfi.index) whose HFI Transport Info Descriptor Heap Object Reference field indicates this HFI Transport Info Descriptor.

flags

HFI Transport Flags, see enum nbft_hfi_info_tcp_flags.

pci_sbdf

PCI Express Routing ID for the HFI Transport Function: This field indicates the PCI Express Routing ID as specified in the PCI Express Base Specification.

mac_addr

MAC Address: The MAC address of this HFI, in EUI-48TM format, as defined in the IEEE Guidelines for Use of Extended Unique Identifiers. This field shall be set to a non-zero value.

vlan

VLAN: If this field is set to a non-zero value, then this field contains the VLAN identifier if the VLAN associated with this HFI, as defined in IEEE 802.1q-2018. If no VLAN is associated with this HFI, then this field shall be cleared to 0h.

ip_origin

IP Origin: If this field is set to a non-zero value, then this field indicates the source of Ethernet L3 configuration information used by the driver for this interface. Valid values are defined in the Win 32 API: NL_PREFIX_ORIGIN enumeration specification. This field should be cleared to 0h if the IP Origin field is unused by driver.

ip_address

IP Address: This field indicates the IPv4 or IPv6 address of this HFI. This field shall be set to a non-zero value.

subnet_mask_prefix

Subnet Mask Prefix: This field indicates the IPv4 or IPv6 subnet mask in CIDR routing prefix notation.

ip_gateway

IP Gateway: If this field is set to a non-zero value, this field indicates the IPv4 or IPv6 address of the IP gateway for this HFI. If this field is cleared to 0h, then no IP gateway is specified.

reserved1

Reserved.

route_metric

Route Metric: If this field is set to a non-zero value, this field indicates the cost value for the route indicated by this HF. This field contains the value utilized by the pre-OS driver when chosing among all available routes. Lower values relate to higher priority. Refer to IETF RFC 4249. If the pre-OS driver supports routing and did not configure a specific route metric for this interface, then the pre-OS driver should set this value to 500. If the pre-OS driver does not support routing, then this field should be cleared to 0h.

primary_dns

Primary DNS: If this field is set to a non-zero value, this field indicates the IPv4 or IPv6 address of the Primary DNS server for this HFI, if any, from byte offset 0h of the NBFT Table Header. If this field is cleared to 0h, then no Primary DNS is specified.

secondary_dns

Secondary DNS: If this field is set to a non-zero value, this field indicates the IPv4 or IPv6 address of the Secondary DNS server for this HFI, if any, from byte offset 0h of the NBFT Table Header. If this field is cleared to 0h, then no Secondary DNS is specified.

dhcp_server

DHCP Server: If the DHCP Override bit is set to 1h, then this field indicates the IPv4 or IPv6 address of the DHCP server used to assign this HFI address. If that bit is cleared to 0h, then this field is reserved.

host_name_obj

Host Name Heap Object Reference: If this field is set to a non-zero value, then this field indicates the location and size of a heap object containing a Host Name string.

reserved2

Reserved.

enum nbft_hfi_info_tcp_flags

HFI Transport Flags

Constants

NBFT_HFI_INFO_TCP_VALID

Descriptor Valid: if set to 1h, then this descriptor is valid. If cleared to 0h, then this descriptor is reserved.

NBFT_HFI_INFO_TCP_GLOBAL_ROUTE

Global Route vs. Link Local Override Flag: if set to 1h, then the BIOS utilized this interface described by HFI to be the default route with highest priority. If cleared to 0h, then routes are local to their own scope.

NBFT_HFI_INFO_TCP_DHCP_OVERRIDE

DHCP Override: if set to 1, then HFI information was populated by consuming the DHCP on this interface. If cleared to 0h, then the HFI information was set administratively by a configuration interface to the driver and pre-OS envrionment.

struct nbft_ssns

Subsystem Namespace (SSNS) Descriptor (Figure 15)

Definition

struct nbft_ssns {
  __u8 structure_id;
  __le16 index;
  __le16 flags;
  __u8 trtype;
  __le16 trflags;
  __u8 primary_discovery_ctrl_index;
  __u8 reserved1;
  struct nbft_heap_obj subsys_traddr_obj;
  struct nbft_heap_obj subsys_trsvcid_obj;
  __le16 subsys_port_id;
  __le32 nsid;
  __u8 nidt;
  __u8 nid[16];
  __u8 security_desc_index;
  __u8 primary_hfi_desc_index;
  __u8 reserved2;
  struct nbft_heap_obj secondary_hfi_assoc_obj;
  struct nbft_heap_obj subsys_ns_nqn_obj;
  struct nbft_heap_obj ssns_extended_info_desc_obj;
  __u8 reserved3[62];
};

Members

structure_id

Structure ID: This field shall be set to 4h (i.e., SSNS; #NBFT_DESC_SSNS).

index

SSNS Descriptor Index: This field indicates the number of this Subsystem Namespace Descriptor in the Subsystem Namespace Descriptor List.

flags

SSNS Flags, see enum nbft_ssns_flags.

trtype

Transport Type, see enum nbft_trtype.

trflags

Transport Specific Flags, see enum nbft_ssns_trflags.

primary_discovery_ctrl_index

Primary Discovery Controller Index: The Discovery Descriptor Index field of the Discovery Descriptor (see struct nbft_discovery) that is associated with this SSNS Descriptor. If a Discovery controller was used to establish this record this value shall be set to a non-zero value. If this namespace was associated with multiple Discovery controllers, those Discovery controllers shall have records in the Discovery Descriptor to facilitate multi-path rediscovery as required. If no Discovery controller was utilized to inform this namespace record, this field shall be cleared to 0h.

reserved1

Reserved.

subsys_traddr_obj

Subsystem Transport Address Heap Object Reference: This field indicates the location and size of a heap object containing the Subsystem Transport Address. For IP based transports types, shall be an IP Address.

subsys_trsvcid_obj

Subsystem Transport Service Identifier Heap Object Reference: This field indicates the location and size of a heap object containing an array of bytes indicating the Subsystem Transport Service Identifier. See enum nbft_trtype.

subsys_port_id

Subsystem Port ID: Port in the NVM subsystem associated with this transport address used by the pre-OS driver.

nsid

Namespace ID: This field indicates the namespace identifier (NSID) of the namespace indicated by this descriptor. This field shall be cleared to 0h if not specified by the user. If this value is cleared to 0h, then consumers of the NBFT shall rely on the NID.

nidt

Namespace Identifier Type (NIDT): This field contains the value of the Namespace Identifier Type (NIDT) field in the Namespace Identification Descriptor for the namespace indicated by this descriptor. If a namespace supports multiple NIDT entries for uniqueness, the order of preference is NIDT field value of 3h (i.e., UUID) before 2h (i.e., NSGUID), and 2h before 1h (i.e., EUI-64).

nid

Namespace Identifier (NID): This field contains the value of the Namespace Identifier (NID) field in the Namespace Identification Descriptor for the namespace indicated by this descriptor.

security_desc_index

Security Profile Descriptor Index: If the Use Security Flag bit in the SSNS Flags field is set to 1h, then this field indicates the value of the Security Profile Descriptor Index field of the Security Profile Descriptor (see struct nbft_security) associated with this namespace. If the Use Security Flag bit is cleared to 0h, then no Security Profile Descriptor is associated with this namespace and this field is reserved.

primary_hfi_desc_index

Primary HFI Descriptor Index: This field indicates the value of the HFI Descriptor Index field of the HFI Descriptor (see struct nbft_hfi) for the interface associated with this namespace. If multiple HFIs are associated with this record, subsequent interfaces should be populated in the Secondary HFI Associations field.

reserved2

Reserved.

secondary_hfi_assoc_obj

Secondary HFI Associations Heap Object Reference: If this field is set to a non-zero value, then this field indicates an array of bytes, in which each byte contains the value of the HFI Descriptor Index field of an HFI Descriptor in the HFI Descriptor List. If this field is cleared to 0h, then no secondary HFI associations are specified.

subsys_ns_nqn_obj

Subsystem and Namespace NQN Heap Object Reference: This field indicates the location and size of a heap object containing the Subsystem and Namespace NQN.

ssns_extended_info_desc_obj

SSNS Extended Information Descriptor Heap Object Reference: If the SSNS Extended Info In-use Flag bit is set to 1h, then this field indicates the offset in bytes of a heap object containing an SSNS Extended Information Descriptor (see struct nbft_ssns_ext_info) heap object from byte offset 0h of the NBFT Table Header. If the SSNS Extended Info In-use Flag bit is cleared to 0h, then this field is reserved.

reserved3

Reserved.

enum nbft_ssns_flags

Subsystem and Namespace Specific Flags Field (Figure 16)

Constants

NBFT_SSNS_VALID

Descriptor Valid: If set to 1h, then this descriptor is valid. If cleared to 0h, then this descriptor is not valid. A host that supports NVMe-oF Boot, but does not currently have a remote Subsystem and Namespace assigned may clear this bit to 0h.

NBFT_SSNS_NON_BOOTABLE_ENTRY

Non-bootable Entry Flag: If set to 1h, this flag indicates that this SSNS Descriptor contains a namespace of administrative purpose to the boot process, but the pre-OS may not have established connectivity to or evaluated the contents of this Descriptor. Such namespaces may contain supplemental data deemed relevant by the Administrator as part of the pre-OS to OS hand off. This may include properties such as a UEFI device path that may not have been created for this namespace. This means an OS runtime may still require the contents of such a namespace to complete later stages of boot. If cleared to 0h, then this namespace did not have any special administrative intent.

NBFT_SSNS_USE_SECURITY_FIELD

Use Security Flag: If set to 1h, then there is a Security Profile Descriptor associated with this SSNS record and the Security Profile Descriptor Index field is valid. If cleared to 0h, then there is no Security Profile Descriptor associated with this SSNS record and the Security Profile Descriptor Index field is not valid.

NBFT_SSNS_DHCP_ROOT_PATH_OVERRIDE

DHCP Root-Path Override Flag: If set to 1h, then this SSNS descriptor was populated by consuming the DHCP Root-Path on this interface. If cleared to 0h, then the DHCP Root-Path was not used in populating the SSNS descriptor.

NBFT_SSNS_EXTENDED_INFO_IN_USE

SSNS Extended Info In-use Flag: If set to 1h, then the SSNS Extended Information Offset field and the SSNS Extended Information Length field are valid. This flag, if set to 1h, indicates that a Subsystem and Namespace Extended Information Descriptor corresponding to this descriptor is present.

NBFT_SSNS_SEPARATE_DISCOVERY_CTRL

Separate Discovery Controller Flag: If set to 1h, then the Discovery controller associated with this volume is on a different transport address than the specified in the Subsystem Transport Address Heap Object Reference. If cleared to 0h, then the Discovery controller is the same as the Subsystem Transport Address Heap Object Reference.

NBFT_SSNS_DISCOVERED_NAMESPACE

Discovered Namespace Flag: If set to 1h, then this namespace was acquired through discovery. If cleared to 0h, then this namespace was explicitly configured in the system.

NBFT_SSNS_UNAVAIL_NAMESPACE_MASK

Mask to get Unavailable Namespace Flag: This field indicates the availability of the namespace at a specific point in time. Such use is only a hint and its use does not guarantee the availability of that referenced namespace at any future point in time.

NBFT_SSNS_UNAVAIL_NAMESPACE_NOTIND

Not Indicated by Driver: No information is provided.

NBFT_SSNS_UNAVAIL_NAMESPACE_AVAIL

Available: A referenced namespace described by this flag was previously accessible by the pre-OS driver.

NBFT_SSNS_UNAVAIL_NAMESPACE_UNAVAIL

Unavailable: This namespace was administratively configured but unattempted, unavailable or inaccessible when establishing connectivity by the pre-OS driver.

enum nbft_ssns_trflags

SSNS Transport Specific Flags Field (Figure 17)

Constants

NBFT_SSNS_TRFLAG_VALID

Transport Specific Flags in Use: If set to 1h, then this descriptor is valid. If cleared to 0h, then this descriptor is not valid.

NBFT_SSNS_PDU_HEADER_DIGEST

PDU Header Digest (HDGST) Flag: If set to 1h, then the host or administrator required the connection described by this Subsystem and Namespace Descriptor to use the NVM Header Digest Enabled. A consumer of this information should attempt to use NVM Header Digest when recreating this connection if enabled. If cleared to 0h, then the host or administrator did not require the connection described by this Subsystem and Namespace Descriptor to use the NVM Header Digest Enabled.

NBFT_SSNS_DATA_DIGEST

Data Digest (DDGST) Flag: If set to 1h, then the host or administrator required the connection described by this Subsystem and Namespace Descriptor to use the NVM Data Digest Enabled. If cleared to 0h, then the host or administrator did not require the connection described by this Subsystem and Namespace Descriptor to use the NVM Data Digest Enabled. A consumer of this field should attempt to use NVM Data Digest when recreating this connection if enabled.

struct nbft_ssns_ext_info

Subsystem and Namespace Extended Information Descriptor (Figure 19)

Definition

struct nbft_ssns_ext_info {
  __u8 structure_id;
  __u8 version;
  __le16 ssns_index;
  __le32 flags;
  __le16 cntlid;
  __le16 asqsz;
  struct nbft_heap_obj dhcp_root_path_str_obj;
};

Members

structure_id

Structure ID: This field shall be set to 9h (i.e., SSNS Extended Info; #NBFT_DESC_SSNS_EXT_INFO).

version

Version: This field shall be set to 1h.

ssns_index

SSNS Descriptor Index: This field indicates the value of the SSNS Descriptor Index field of the Subsystem and Namespace Descriptor (see struct nbft_ssns) whose SSNS Extended Information Descriptor Heap Object Reference field indicates this descriptor.

flags

Flags, see enum nbft_ssns_ext_info_flags.

cntlid

Controller ID: The controller identifier of the first controller associated with the Admin Queue by the driver. If a controller identifier is not administratively specified or direct configuration is not supported by the driver, then this field shall be cleared to 0h.

asqsz

Admin Submission Queue Size (ASQSZ): The Admin Submission Queue Size utilized for the respective SSNS by the driver.

dhcp_root_path_str_obj

DHCP Root Path String Heap Object Reference: If the SSNS DHCP Root Path Override (#NBFT_SSNS_DHCP_ROOT_PATH_OVERRIDE) flag bit is set to 1h, then this field indicates the offset in bytes of a heap object containing an DHCP Root Path String used by the driver. If the SNSS DHCP Root Path Override flag bit is cleared to 0h, then this field is reserved.

enum nbft_ssns_ext_info_flags

Subsystem and Namespace Extended Information Descriptor Flags

Constants

NBFT_SSNS_EXT_INFO_VALID

Descriptor Valid: If set to 1h, then this descriptor is valid. If cleared to 0h, then this descriptor is reserved.

NBFT_SSNS_EXT_INFO_ADMIN_ASQSZ

Administrative ASQSZ: If set to 1h, then the value of the ASQSZ field was provided by administrative configuration for this SSNS record. If cleared to 0h, then the value of the ASQSZ field was either obtained by discovery or assumed by the driver.

struct nbft_security

Security Profile Descriptor (Figure 21)

Definition

struct nbft_security {
  __u8 structure_id;
  __u8 index;
  __le16 flags;
  __u8 secret_type;
  __u8 reserved1;
  struct nbft_heap_obj sec_chan_alg_obj;
  struct nbft_heap_obj auth_proto_obj;
  struct nbft_heap_obj cipher_suite_obj;
  struct nbft_heap_obj dh_grp_obj;
  struct nbft_heap_obj sec_hash_func_obj;
  struct nbft_heap_obj sec_keypath_obj;
  __u8 reserved2[22];
};

Members

structure_id

Structure ID: This field shall be set to 5h (i.e., Security; #NBFT_DESC_SECURITY).

index

Security Profile Descriptor Index: This field indicates the number of this Security Profile Descriptor in the Security Profile Descriptor List.

flags

Security Profile Descriptor Flags, see enum nbft_security_flags.

secret_type

Secret Type, see enum nbft_security_secret_type.

reserved1

Reserved.

sec_chan_alg_obj

Secure Channel Algorithm Heap Object Reference: If the Security Policy List field is set to 1h, then this field indicates the location and size of a heap object containing a list of secure channel algorithms. The list is an array of bytes and the values are defined in the Security Type (SECTYPE) field in the Transport Specific Address Subtype Definition in the NVMe TCP Transport Specification. If the Security Policy List field is cleared to 0h, then this field is reserved.

auth_proto_obj

Authentication Protocols Heap Object Reference: If the Authentication Policy List field is set to 1h, then this field indicates the location and size of a heap object containing a list of authentication protocol identifiers. If the Authentication Policy List field is cleared to 0h, then this field is reserved.

cipher_suite_obj

Cipher Suite Offset Heap Object Reference: If the Cipher Suites Restricted by Policy bit is set to 1h, then this field indicates the location and size of a heap object containing a list of cipher suite identifiers. The list, if any, is an array of bytes and the values are defined in the IANA TLS Parameters Registry. If the Cipher Suites Restricted by Policy bit is cleared to 0h, then this field is reserved.

dh_grp_obj

DH Groups Heap Object Reference: If the Authentication DH Groups Restricted by Policy List bit is set to 1h, then this field indicates the location and size of a heap object containing a list of DH-HMAC-CHAP Diffie-Hellman (DH) group identifiers. If the Authentication DH Groups Restricted by Policy List bit is cleared to 0h, then this field is reserved.

sec_hash_func_obj

Secure Hash Functions Offset Heap Object Reference: If the Secure Hash Functions Policy List bit is set to 1h, then this field indicates the offset in bytes of a heap object containing a list of DH-HMAC-CHAP hash function identifiers. The list is an array of bytes and the values are defined in the NVM Express Base Specification. If the Secure Hash Functions Policy List bit is cleared to 0h, then this field is reserved.

sec_keypath_obj

Secret Keypath Offset Heap Object Reference: if this field is set to a non-zero value, then this field indicates the location and size of a heap object containing a URI. The type of the URI is specified in the Secret Type field. If this field is cleared to 0h, then this field is reserved.

reserved2

Reserved.

enum nbft_security_flags

Security Profile Descriptor Flags (Figure 22)

Constants

NBFT_SECURITY_VALID

Descriptor Valid: If set to 1h, then this descriptor is valid. If cleared to 0h, then this descriptor is not valid.

NBFT_SECURITY_IN_BAND_AUTH_MASK

Mask to get the In-Band Authentication Required field.

NBFT_SECURITY_IN_BAND_AUTH_NOT_SUPPORTED

In-band authentication is not supported by the NVM subsystem.

NBFT_SECURITY_IN_BAND_AUTH_NOT_REQUIRED

In-band authentication is supported by the NVM subsystem and is not required.

NBFT_SECURITY_IN_BAND_AUTH_REQUIRED

In-band authentication is supported by the NVM subsystem and is required.

NBFT_SECURITY_AUTH_POLICY_LIST_MASK

Mask to get the Authentication Policy List flag: This field indicates whether authentication protocols were indicated by policy from driver defaults or administrative configuration.

NBFT_SECURITY_AUTH_POLICY_LIST_NOT_SUPPORTED

Authentication Protocols Heap Object Reference field Offset and Length are reserved.

NBFT_SECURITY_AUTH_POLICY_LIST_DRIVER

Authentication Protocols Offset field and the Authentication Protocols Length field indicate a list of authentication protocols used by the driver.

NBFT_SECURITY_AUTH_POLICY_LIST_ADMIN

Authentication Protocols Offset field and the Authentication Protocols Length field indicate a list of authentication protocols that were administratively set and used by the driver.

NBFT_SECURITY_SEC_CHAN_NEG_MASK

Mask to get the Secure Channel Negotiation Required flag: This field indicates whether secure channel negotiation (e.g. TLS) is required.

NBFT_SECURITY_SEC_CHAN_NEG_NOT_SUPPORTED

Secure channel negotiation is not supported by the NVM subsystem.

NBFT_SECURITY_SEC_CHAN_NEG_NOT_REQUIRED

Secure channel negotiation is supported by the NVM subsystem and is not required.

NBFT_SECURITY_SEC_CHAN_NEG_REQUIRED

Secure channel negotiation is supported by the NVM subsystem and is required.

NBFT_SECURITY_SEC_POLICY_LIST_MASK

Mask to get the Security Policy List flag: This field indicates whether secure channel protocols were indicated by policy from driver defaults or administrative configuration.

NBFT_SECURITY_SEC_POLICY_LIST_NOT_SUPPORTED

The Offset field and Length field in the Secure Channel Algorithm Heap Object Reference field are reserved.

NBFT_SECURITY_SEC_POLICY_LIST_DRIVER

The Heap Object specified by the Secure Channel Algorithm Heap Object Reference field indicates a list of authentication protocols used by the driver.

NBFT_SECURITY_SEC_POLICY_LIST_ADMIN

The Heap Object specified by the Secure Channel Algorithm Heap Object Reference field indicates a list of authentication protocols that were administratively set and used by the driver.

NBFT_SECURITY_CIPHER_RESTRICTED

Cipher Suites Restricted by Policy: If set to 1h, then the Cipher Suite Offset field and the Ciper Suite Length field indicate a list of supported cipher suites by the driver. If cleared to 0h, then the Cipher Suite Offset field and the Cipher Suite Length field are reserved.

NBFT_SECURITY_AUTH_DH_GROUPS_RESTRICTED

Authentication DH Groups Restricted by Policy List: If set to 1h, then connections shall use one of the authentication DH groups in the Authentication DH Groups List is required. If cleared to 0h, then no Authentication DH Groups List is indicated and use of an authentication DH Group is not required.

NBFT_SECURITY_SEC_HASH_FUNC_POLICY_LIST

Secure Hash Functions Policy List: If set to 1h, then connections shall use one of the secure hash functions in the Secure Hash Functions Policy List is required. If cleared to 0h, then no Secure Hash Functions Policy List is indicated and use of a secure hash function is not required.

enum nbft_security_secret_type

Security Profile Descriptor Secret Type

Constants

NBFT_SECURITY_SECRET_REDFISH_HOST_IFACE_URI

Redfish Host Interface URI: If set to 1h, then the Secret Keypath Object Reference is a URI pointing to a Redfish Key Collection Object that contains the PSK.

struct nbft_discovery

Discovery Descriptor (Figure 24)

Definition

struct nbft_discovery {
  __u8 structure_id;
  __u8 flags;
  __u8 index;
  __u8 hfi_index;
  __u8 sec_index;
  __u8 reserved1;
  struct nbft_heap_obj discovery_ctrl_addr_obj;
  struct nbft_heap_obj discovery_ctrl_nqn_obj;
  __u8 reserved2[14];
};

Members

structure_id

Structure ID: This field shall be set to 6h (i.e., Discovery Descriptor; #NBFT_DESC_DISCOVERY).

flags

Discovery Descriptor Flags, see enum nbft_discovery_flags.

index

Discovery Descriptor Index: This field indicates the number of this Discovery Descriptor in the Discovery Descriptor List.

hfi_index

HFI Descriptor Index: This field indicates the value of the HFI Descriptor Index field of the HFI Descriptor associated with this Discovery Descriptor. If multiple HFIs share a common Discovery controller, there shall be multiple Discovery Descriptor entries with one per HFI.

sec_index

Security Profile Descriptor Index: This field indicates the value of the Security Profile Descriptor Index field of the Security Descriptor associated with this Discovery Descriptor.

reserved1

Reserved.

discovery_ctrl_addr_obj

Discovery Controller Address Heap Object Reference: This field indicates the location and size of a heap object containing a URI which indicates an NVMe Discovery controller associated with this Discovery Descriptor. If this field is cleared to 0h, then no URI is specified.

discovery_ctrl_nqn_obj

Discovery Controller NQN Heap Object Reference: If set to a non-zero value, this field indicates the location and size of a heap object containing an NVMe Discovery controller NQN. If the NVMe Discovery controller referenced by this record requires secure authentication with a well known Subsystem NQN, this field indicates the unique NQN for that NVMe Discovery controller. This record is involved formatted as an NQN string. If this field is cleared to 0h, then this field is reserved and the OS shall use the well known discovery NQN for this record.

reserved2

Reserved.

enum nbft_discovery_flags

Discovery Descriptor Flags

Constants

NBFT_DISCOVERY_VALID

Descriptor Valid: if set to 1h, then this descriptor is valid. If cleared to 0h, then this descriptor is reserved.

enum nbft_info_primary_admin_host_flag

Primary Administrative Host Descriptor Flags

Constants

NBFT_INFO_PRIMARY_ADMIN_HOST_FLAG_NOT_INDICATED

Not Indicated by Driver: The driver that created this NBFT provided no administrative priority hint for this NBFT.

NBFT_INFO_PRIMARY_ADMIN_HOST_FLAG_UNSELECTED

Unselected: The driver that created this NBFT explicitly indicated that this NBFT should not be prioritized over any other NBFT.

NBFT_INFO_PRIMARY_ADMIN_HOST_FLAG_SELECTED

Selected: The driver that created this NBFT explicitly indicated that this NBFT should be prioritized over any other NBFT.

NBFT_INFO_PRIMARY_ADMIN_HOST_FLAG_RESERVED

Reserved.

struct nbft_info_host

Host Descriptor

Definition

struct nbft_info_host {
  unsigned char *id;
  char *nqn;
  bool host_id_configured;
  bool host_nqn_configured;
  enum nbft_info_primary_admin_host_flag primary;
};

Members

id

Host ID (raw UUID, length = 16 bytes).

nqn

Host NQN.

host_id_configured

HostID Configured Flag: value of True indicates that id contains administratively-configured value, or driver default value if False.

host_nqn_configured

Host NQN Configured Flag: value of True indicates that nqn contains administratively-configured value, or driver default value if False.

primary

Primary Administrative Host Descriptor, see enum nbft_info_primary_admin_host_flag.

struct nbft_info_hfi_info_tcp

HFI Transport Info Descriptor - NVMe/TCP

Definition

struct nbft_info_hfi_info_tcp {
  __u32 pci_sbdf;
  __u8 mac_addr[6];
  __u16 vlan;
  __u8 ip_origin;
  char ipaddr[40];
  __u8 subnet_mask_prefix;
  char gateway_ipaddr[40];
  __u16 route_metric;
  char primary_dns_ipaddr[40];
  char secondary_dns_ipaddr[40];
  char dhcp_server_ipaddr[40];
  char *host_name;
  bool this_hfi_is_default_route;
  bool dhcp_override;
};

Members

pci_sbdf

PCI Express Routing ID for the HFI Transport Function.

mac_addr

MAC Address: The MAC address of this HFI, in EUI-48TM format.

vlan

The VLAN identifier if the VLAN is associated with this HFI, as defined in IEEE 802.1q-2018 or zeroes if no VLAN is associated with this HFI.

ip_origin

The source of Ethernet L3 configuration information used by the driver or 0 if not used.

ipaddr

The IPv4 or IPv6 address of this HFI.

subnet_mask_prefix

The IPv4 or IPv6 subnet mask in CIDR routing prefix notation.

gateway_ipaddr

The IPv4 or IPv6 address of the IP gateway for this HFI or zeroes if no IP gateway is specified.

route_metric

The cost value for the route indicated by this HFI.

primary_dns_ipaddr

The IPv4 or IPv6 address of the Primary DNS server for this HFI.

secondary_dns_ipaddr

The IPv4 or IPv6 address of the Secondary DNS server for this HFI.

dhcp_server_ipaddr

The IPv4 or IPv6 address of the DHCP server used to assign this HFI address.

host_name

The Host Name string.

this_hfi_is_default_route

If True, then the BIOS utilized this interface described by HFI to be the default route with highest priority. If False, then routes are local to their own scope.

dhcp_override

If True, then HFI information was populated by consuming the DHCP on this interface. If False, then the HFI information was set administratively by a configuration interface to the driver and pre-OS envrionment.

struct nbft_info_hfi

Host Fabric Interface (HFI) Descriptor

Definition

struct nbft_info_hfi {
  int index;
  char transport[8];
  struct nbft_info_hfi_info_tcp tcp_info;
};

Members

index

HFI Descriptor Index: indicates the number of this HFI Descriptor in the Host Fabric Interface Descriptor List.

transport

Transport Type string (e.g. ‘tcp’).

tcp_info

The HFI Transport Info Descriptor, see struct nbft_info_hfi_info_tcp.

struct nbft_info_discovery

Discovery Descriptor

Definition

struct nbft_info_discovery {
  int index;
  struct nbft_info_security *security;
  struct nbft_info_hfi *hfi;
  char *uri;
  char *nqn;
};

Members

index

The number of this Discovery Descriptor in the Discovery Descriptor List.

security

The Security Profile Descriptor, see struct nbft_info_security.

hfi

The HFI Descriptor associated with this Discovery Descriptor. See struct nbft_info_hfi.

uri

A URI which indicates an NVMe Discovery controller associated with this Discovery Descriptor.

nqn

An NVMe Discovery controller NQN.

struct nbft_info_security

Security Profile Descriptor

Definition

struct nbft_info_security {
  int index;
};

Members

index

The number of this Security Profile Descriptor in the Security Profile Descriptor List.

enum nbft_info_nid_type

Namespace Identifier Type (NIDT)

Constants

NBFT_INFO_NID_TYPE_NONE

No identifier available.

NBFT_INFO_NID_TYPE_EUI64

The EUI-64 identifier.

NBFT_INFO_NID_TYPE_NGUID

The NSGUID identifier.

NBFT_INFO_NID_TYPE_NS_UUID

The UUID identifier.

struct nbft_info_subsystem_ns

Subsystem Namespace (SSNS) info

Definition

struct nbft_info_subsystem_ns {
  int index;
  struct nbft_info_discovery *discovery;
  struct nbft_info_security *security;
  int num_hfis;
  struct nbft_info_hfi **hfis;
  char transport[8];
  char traddr[40];
  char *trsvcid;
  __u16 subsys_port_id;
  __u32 nsid;
  enum nbft_info_nid_type nid_type;
  __u8 *nid;
  char *subsys_nqn;
  bool pdu_header_digest_required;
  bool data_digest_required;
  int controller_id;
  int asqsz;
  char *dhcp_root_path_string;
  bool discovered;
  bool unavailable;
};

Members

index

SSNS Descriptor Index in the descriptor list.

discovery

Primary Discovery Controller associated with this SSNS Descriptor.

security

Security Profile Descriptor associated with this namespace.

num_hfis

Number of HFIs.

hfis

List of HFIs associated with this namespace. Includes the primary HFI at the first position and all secondary HFIs. This array is null-terminated.

transport

Transport Type string (e.g. ‘tcp’).

traddr

Subsystem Transport Address.

trsvcid

Subsystem Transport Service Identifier.

subsys_port_id

The Subsystem Port ID.

nsid

The Namespace ID of this descriptor or when nid should be used instead.

nid_type

Namespace Identifier Type, see enum nbft_info_nid_type.

nid

The Namespace Identifier value.

subsys_nqn

Subsystem and Namespace NQN.

pdu_header_digest_required

PDU Header Digest (HDGST) Flag: the use of NVM Header Digest Enabled is required.

data_digest_required

Data Digest (DDGST) Flag: the use of NVM Data Digest Enabled is required.

controller_id

Controller ID (SSNS Extended Information Descriptor): The controller ID associated with the Admin Queue or 0 if not supported.

asqsz

Admin Submission Queue Size (SSNS Extended Information Descriptor) or 0 if not supported.

dhcp_root_path_string

DHCP Root Path Override string (SSNS Extended Information Descriptor).

discovered

Indicates that this namespace was acquired through discovery.

unavailable

Namespace is unavailable as indicated by the pre-OS driver.

struct nbft_info

The parsed NBFT table data.

Definition

struct nbft_info {
  char *filename;
  __u8 *raw_nbft;
  ssize_t raw_nbft_size;
  struct nbft_info_host host;
  struct nbft_info_hfi **hfi_list;
  struct nbft_info_security **security_list;
  struct nbft_info_discovery **discovery_list;
  struct nbft_info_subsystem_ns **subsystem_ns_list;
};

Members

filename

Path to the NBFT table.

raw_nbft

The original NBFT table contents.

raw_nbft_size

Size of raw_nbft.

host

The Host Descriptor (should match other NBFTs).

hfi_list

The HFI Descriptor List (null-terminated array).

security_list

The Security Profile Descriptor List (null-terminated array).

discovery_list

The Discovery Descriptor List (null-terminated array).

subsystem_ns_list

The SSNS Descriptor List (null-terminated array).

int nvme_nbft_read(struct nbft_info **nbft, const char *filename)

Read and parse contents of an ACPI NBFT table

Parameters

struct nbft_info **nbft

Parsed NBFT table data.

const char *filename

Filename of the raw NBFT table to read.

Description

Read and parse the specified NBFT file into a struct nbft_info. Free with nvme_nbft_free().

Return

0 on success, errno otherwise.

void nvme_nbft_free(struct nbft_info *nbft)

Free the struct nbft_info and its contents

Parameters

struct nbft_info *nbft

Parsed NBFT table data.