--- /dev/null
+# SPDX-License-Identifier: Apache-2.0
+
+version: 2
+
+python:
+ system_packages: true
+
+build:
+ os: ubuntu-22.04
+ tools:
+ python: "3"
+ apt_packages:
+ - meson
+ - python3-lxml
+ - docbook-xsl
+ - xsltproc
+ - pandoc
+ jobs:
+ post_install:
+ - pip3 install lxml
+ pre_build:
+ - meson .build -Ddocs=rst -Ddocs-build=true || cat .build/meson-logs/meson-log.txt
+ - ninja -C .build
+
+sphinx:
+ configuration: .build/doc/conf.py
+++ /dev/null
-===
-API
-===
-
-.. module:: libnvme
-
-This part of the documentation lists the full API reference of all public classes and
-functions.
-
-.. include:: rst/types.rst
-.. include:: rst/ioctl.rst
-.. include:: rst/fabrics.rst
-.. include:: rst/linux.rst
-.. include:: rst/mi.rst
-.. include:: rst/tree.rst
-.. include:: rst/filters.rst
-.. include:: rst/util.rst
-.. include:: rst/log.rst
+++ /dev/null
-# Configuration file for the Sphinx documentation builder.
-#
-# This file only contains a selection of the most common options. For a full
-# list see the documentation:
-# https://www.sphinx-doc.org/en/master/usage/configuration.html
-
-
-# -- Project information -----------------------------------------------------
-
-project = 'libnvme'
-copyright = '2020, Keith Busch'
-author = 'Keith Busch <kbusch@kernel.org>'
-master_doc = 'index'
-
-release = '1.2'
-
-
-# -- General configuration ---------------------------------------------------
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = [
-]
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-# This pattern also affects html_static_path and html_extra_path.
-exclude_patterns = ['html', 'man', 'Thumbs.db', '.DS_Store']
+++ /dev/null
-{
- "$schema": "https://json-schema.org/draft/2020-12/schema",
- "$id": "https://github.com/linux-nvme/libnvme/doc/config-schema.json",
- "title": "config.json",
- "description": "libnvme JSON configuration",
- "type": "object",
- "properties": {
- "hosts": {
- "description": "Array of NVMe Host properties",
- "type": "array",
- "items": { "$ref": "#/$defs/host" }
- }
- },
- "$defs": {
- "host": {
- "description": "NVMe Host properties",
- "type": "object",
- "properties": {
- "hostnqn": {
- "description": "NVMe host NQN",
- "type": "string",
- "maxLength": 223
- },
- "hostid": {
- "description": "NVMe host ID",
- "type": "string"
- },
- "dhchap_key": {
- "description": "Host DH-HMAC-CHAP key",
- "type": "string"
- },
- "hostsymname": {
- "description": "NVMe host symbolic name",
- "type": "string"
- },
- "required": [ "hostnqn" ],
- "subsystems": {
- "description": "Array of NVMe subsystem properties",
- "type": "array",
- "items": { "$ref": "#/$defs/subsystem" }
- }
- }
- },
- "subsystem": {
- "description": "NVMe subsystem properties",
- "type": "object",
- "properties": {
- "nqn": {
- "description": "Subsystem NQN",
- "type": "string",
- "maxLength": 223
- },
- "ports": {
- "description": "Array of NVMe subsystem ports",
- "type": "array",
- "items": { "$ref": "#/$defs/port" }
- },
- "required": [ "nqn" ]
- }
- },
- "port": {
- "description": "NVMe subsystem port",
- "type": "object",
- "properties": {
- "transport": {
- "description": "Transport type",
- "type": "string"
- },
- "traddr": {
- "description": "Transport address",
- "type": "string"
- },
- "host_traddr": {
- "description": "Host transport address",
- "type": "string"
- },
- "host_iface": {
- "description": "Host interface name",
- "type": "string"
- },
- "trsvcid": {
- "description": "Transport service identifier",
- "type": "string"
- },
- "dhchap_key": {
- "description": "Host DH-HMAC-CHAP key",
- "type": "string"
- },
- "dhchap_ctrl_key": {
- "description": "Controller DH-HMAC-CHAP key",
- "type": "string"
- },
- "nr_io_queues": {
- "description": "Number of I/O queues",
- "type": "integer"
- },
- "nr_write_queues": {
- "description": "Number of write queues",
- "type": "integer"
- },
- "nr_poll_queues": {
- "description": "Number of poll queues",
- "type": "integer"
- },
- "queue_size": {
- "description": "Queue size",
- "type": "integer"
- },
- "keep_alive_tmo": {
- "description": "Keep-Alive timeout (in seconds)",
- "type": "integer"
- },
- "reconnect_delay": {
- "description": "Reconnect delay (in seconds)",
- "type": "integer"
- },
- "ctrl_loss_tmo": {
- "description": "Controller loss timeout (in seconds)",
- "type": "integer"
- },
- "fast_io_fail_tmo": {
- "description": "Fast I/O Fail timeout (in seconds)",
- "type": "integer",
- "default": 600
- },
- "tos": {
- "description": "Type of service",
- "type": "integer",
- "default": -1
- },
- "duplicate_connect": {
- "description": "Allow duplicate connections",
- "type": "boolean",
- "default": false
- },
- "disable_sqflow": {
- "description": "Explicitly disable SQ flow control",
- "type": "boolean",
- "default": false
- },
- "hdr_digest": {
- "description": "Enable header digest",
- "type": "boolean",
- "default": false
- },
- "data_digest": {
- "description": "Enable data digest",
- "type": "boolean",
- "default": false
- },
- "tls": {
- "description": "Enable TLS encryption",
- "type": "boolean",
- "default": false
- },
- "persistent": {
- "description": "Create persistent discovery connection",
- "type": "boolean"
- },
- "discovery": {
- "description": "Connect to a discovery controller",
- "type": "boolean"
- }
- },
- "required": [ "transport" ]
- }
- }
-}
+++ /dev/null
-Welcome to libnvme's documentation!
-===================================
-
-This is the libnvme development C library. libnvme provides type definitions for
-NVMe specification structures, enumerations, and bit fields,
-helper functions to construct, dispatch, and decode commands and payloads,
-and utilities to connect, scan, and manage nvme devices on a Linux system.
-
-.. toctree::
- :maxdepth: 2
- :caption: Contents:
-
- installation.rst
- quickstart.rst
- mi.rst
- api.rst
-
-Indices and tables
-==================
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
+++ /dev/null
-Installation
-============
-
-Debian / Ubuntu:
---------------
-
-.. code-block:: sh
-
- $ apt-get install libnvme
-
-Fedora / Red Hat:
---------------
-
-.. code-block:: sh
-
- $ dnf install libnvme
-
-Python Version
---------------
-
-The latest Python 3 version is always recommended, since it has all the latest bells and
-whistles. libnvme supports Python 3.6 and above.
-
-Dependencies
-------------
-
-libnvme only uses packages from the standard library,
-so no additional dependencies will be installed when installing libnvme.
-
-Install libnvme python
--------------
-
-Debian / Ubuntu:
-
-.. code-block:: sh
-
- $ apt-get install python3-libnvme
-
-Fedora / Red Hat:
-
-.. code-block:: sh
-
- $ dnf install python3-libnvme
-
-libnvme is available on `PyPI`_, and can be installed using pip. The version on PyPI is
-always the latest stable release.
-
-.. _PyPi: https://pypi.org/project/libnvme/
-
-.. code-block:: sh
-
- $ pip install libnvme
+++ /dev/null
-NVMe Management Interface (NVMe-MI) support
-===========================================
-
-This libnvme project also includes support for the NVMe Management Interface
-(NVMe-MI), currently over a Management Component Transport (MCTP)
-protocol link. This MCTP link will typically use i2c/SMBus as the
-hardware transport, enabling out-of-band management and control over NVMe
-devices using a simple SMBus interface.
-
-The MI interface is compiled into a separate shared object, ``libnvme-mi.so``.
-
-Most of the MI API is transport-agnostic, except for the endpoint constructor
-functions. Once an endpoint object (``nvme_mi_ep_t``) is created, the generic
-functions can be used to manage it.
-
-When endpoints are created (through one of the transport-specific functions,
-like ``nvme_mi_open_mctp()``), the endpoint hardware will be probed to
-see if any device-specific workarounds ("quirks") are required. This is
-implemented as an Identify Controller command, requesting a small amount of
-data on controller ID 0.
-
-To suppress this probe, the ``LIBNVME_MI_PROBE_ENABLED`` environment var can be
-set. Values of ``0``, ``false`` and ``disabled`` will disable the probe, and no
-quirks will be applied. Other values, or an unset environment variable, will
-enable the probe.
-
-MCTP Transport
---------------
-
-The MI API is generally transport-agnostic, but the only currently-supported
-transport is MCTP, using the kernel ``AF_MCTP`` socket interface.
-
-MCTP endpoints are addressed by a (network-id, endpoint-id) pair. Endpoint
-IDs (EIDs) are defined by the MCTP standard as an 8-bit value. Since the
-address space is somewhat limited, the Linux `AF_MCTP` support allows for
-separate MCTP "networks", which provide separate address spaces. These networks
-each have a unique ``unsigned int`` as their ID.
-
-The default Network ID is 1; unless you have configured otherwise, MCTP
-endpoints will appear on this network.
-
-If compiled with D-Bus support, ``libnvme-mi`` can query the system MCTP daemon
-("``mctpd``") to find attached NVMe devices, via the ``nvme_mi_scan_mctp()``
-function. Calling this will establish a ``nvme_root_t`` object, populated
-with the results of that scan. Use the ``nvme_mi_for_each_endpoint`` macro
-to iterate through the scanned endpoints.
-
-Note that the MCTP daemon is provided separately, as part of the MCTP userspace
-tools, at https://github.com/CodeConstruct/mctp . ``mctpd`` is responsible for
-discovery and enumeration for MCTP endpoints on the system, and will query
-each for its protocol capabilities during enumeration. Consequently, NVMe-MI
-endpoints will need to report support for NVMe-MI-over-MCTP (protocol 0x4) in
-their supported protocols list (ie., as returned by the MCTP Get Message Type
-Support command) in order to be discovered.
+++ /dev/null
-==========
-Quickstart
-==========
-
-tbd
\ No newline at end of file
+++ /dev/null
-.. _fabrics.h:
-
-**fabrics.h**
-
-
-Fabrics-specific definitions.
-
-
-
-.. c: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;
- bool duplicate_connect;
- bool disable_sqflow;
- bool hdr_digest;
- bool data_digest;
- bool tls;
- };
-
-**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
-
-``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)
-
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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**.
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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
-
-
-
-
-.. c: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)
-
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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.
-
-
-.. c:function:: char * nvmf_hostnqn_from_file ()
-
- Reads the host nvm qualified name from the config default location in /etc/nvme/
-
-**Parameters**
-
-**Return**
-
-The host nqn, or NULL if unsuccessful. If found, the caller
-is responsible to free the string.
-
-
-.. c:function:: char * nvmf_hostid_from_file ()
-
- Reads the host identifier from the config default location in /etc/nvme/.
-
-**Parameters**
-
-**Return**
-
-The host identifier, or NULL if unsuccessful. If found, the caller
- is responsible to free the string.
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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
-
-
+++ /dev/null
-.. _filters.h:
-
-**filters.h**
-
-
-libnvme directory filter
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
+++ /dev/null
-.. _ioctl.h:
-
-**ioctl.h**
-
-
-Linux NVMe ioctl interface functions
-
-
-
-.. c: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 :c:type:`enum nvme_io_opcodes <nvme_io_opcodes>` and :c:type:`enum nvme_admin_opcodes <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
-
-
-
-
-
-.. c: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 :c:type:`enum nvme_io_opcodes <nvme_io_opcodes>` and :c:type:`enum nvme_admin_opcodes <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
-
-
-
-
-
-.. c: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 :c:type:`enum nvme_io_opcodes <nvme_io_opcodes>` and :c:type:`enum nvme_admin_opcodes <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
-
-
-
-.. c:macro:: 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
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`struct nvme_passthru_cmd64 <nvme_passthru_cmd64>`.
-
-Known values for **opcode** are defined in :c:type:`enum nvme_admin_opcode <nvme_admin_opcode>`.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`struct nvme_passthru_cmd <nvme_passthru_cmd>`.
-
-Known values for **opcode** are defined in :c:type:`enum nvme_admin_opcode <nvme_admin_opcode>`.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`struct nvme_passthru_cmd64 <nvme_passthru_cmd64>`.
-
-Known values for **opcode** are defined in :c:type:`enum nvme_io_opcode <nvme_io_opcode>`.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`struct nvme_passthru_cmd <nvme_passthru_cmd>`.
-
-Known values for **opcode** are defined in :c:type:`enum nvme_io_opcode <nvme_io_opcode>`.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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.
-
-
-.. c:function:: int nvme_identify (struct nvme_identify_args *args)
-
- Send the NVMe Identify command
-
-**Parameters**
-
-``struct nvme_identify_args *args``
- :c:type:`struct nvme_identify_args <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`struct nvme_id_ctrl <nvme_id_ctrl>` for details on the data returned.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`struct nvme_id_ns <nvme_id_ns>` for details on the structure returned.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`struct nvme_ns_list <nvme_ns_list>` for the definition of the returned structure.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`struct nvme_ns_list <nvme_ns_list>` for the definition of the returned structure.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`struct nvme_ctrl_list <nvme_ctrl_list>` for a definition of the structure returned.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`struct nvme_ctrl_list <nvme_ctrl_list>` for a definition of the structure returned.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1
-
-
-.. c:function:: 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 :c:type:`struct nvme_ns_id_desc <nvme_ns_id_desc>` for the definition of the returned structure.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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, :c:type:`struct nvme_id_nvmset_list <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 :c:type:`struct nvme_id_nvmset_list <nvme_id_nvmset_list>` for the definition of the returned structure.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`struct nvme_primary_ctrl_cap <nvme_primary_ctrl_cap>` for the definition of the returned structure, **cap**.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_identify_secondary_ctrl_list (int fd, __u32 nsid, __u16 cntid, struct nvme_secondary_ctrl_list *sc_list)
-
- Retrieves secondary controller list
-
-**Parameters**
-
-``int fd``
- File descriptor of nvme device
-
-``__u32 nsid``
- Namespace identifier
-
-``__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 :c:type:`struct nvme_secondary_ctrls_list <nvme_secondary_ctrls_list>` for a definition of the returned
-structure.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`struct nvme_id_ns_granularity_list <nvme_id_ns_granularity_list>` for the definition of the returned
-structure.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`struct nvme_id_uuid_list <nvme_id_uuid_list>` for the definition of the returned structure.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`struct nvme_ns_list <nvme_ns_list>` for the definition of the returned structure.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`struct nvme_ns_list <nvme_ns_list>` for the definition of the returned structure.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`struct nvme_identify_domain_attr <nvme_identify_domain_attr>` for the definition of the
-returned structure.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`struct nvme_id_iocs <nvme_id_iocs>`.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_get_log (struct nvme_get_log_args *args)
-
- NVMe Admin Get Log command
-
-**Parameters**
-
-``struct nvme_get_log_args *args``
- :c:type:`struct nvme_get_log_args <nvme_get_log_args>` argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_log_ana_lsp <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 :c:type:`struct nvme_ana_rsp_hdr <nvme_ana_rsp_hdr>` for the definition of the returned structure.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`struct nvme_ana_group_desc <nvme_ana_group_desc>` for the definition of the returned structure.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_set_features (struct nvme_set_features_args *args)
-
- Set a feature attribute
-
-**Parameters**
-
-``struct nvme_set_features_args *args``
- :c:type:`struct nvme_set_features_args <nvme_set_features_args>` argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_set_features_lba_range (int fd, __u32 nsid, __u32 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
-
-``__u32 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_eg_critical_warning_flags <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_get_features (struct nvme_get_features_args *args)
-
- Retrieve a feature attribute
-
-**Parameters**
-
-``struct nvme_get_features_args *args``
- :c:type:`struct nvme_get_features_args <nvme_get_features_args>` argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <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
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``struct nvme_timestamp *ts``
- Current timestamp
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_features_sel <nvme_get_features_sel>`
-
-``__u32 *result``
- The command completion result from CQE dword0
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_format_nvm (struct nvme_format_nvm_args *args)
-
- Format nvme namespace(s)
-
-**Parameters**
-
-``struct nvme_format_nvm_args *args``
- :c:type:`struct nvme_format_nvme_args <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_ns_mgmt (struct nvme_ns_mgmt_args *args)
-
- Issue a Namespace management command
-
-**Parameters**
-
-``struct nvme_ns_mgmt_args *args``
- :c:type:`struct nvme_ns_mgmt_args <nvme_ns_mgmt_args>` Argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_ns_mgmt_create (int fd, struct nvme_id_ns *ns, __u32 *nsid, __u32 timeout, __u8 csi)
-
- 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
-
-**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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_ns_attach (struct nvme_ns_attach_args *args)
-
- Attach or detach namespace to controller(s)
-
-**Parameters**
-
-``struct nvme_ns_attach_args *args``
- :c:type:`struct nvme_ns_attach_args <nvme_ns_attach_args>` Argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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``
- :c:type:`struct nvme_fw_download_args <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_fw_commit (struct nvme_fw_commit_args *args)
-
- Commit firmware using the specified action
-
-**Parameters**
-
-``struct nvme_fw_commit_args *args``
- :c:type:`struct nvme_fw_commit_args <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise. The command
-status response may specify additional reset actions required to complete
-the commit process.
-
-
-.. c:function:: int nvme_security_send (struct nvme_security_send_args *args)
-
- Security Send command
-
-**Parameters**
-
-``struct nvme_security_send_args *args``
- :c:type:`struct nvme_security_send <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_security_receive (struct nvme_security_receive_args *args)
-
- Security Receive command
-
-**Parameters**
-
-``struct nvme_security_receive_args *args``
- :c:type:`struct nvme_security_receive <nvme_security_receive>` argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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``
- :c:type:`struct nvme_get_lba_status_args <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_directive_send (struct nvme_directive_send_args *args)
-
- Send directive command
-
-**Parameters**
-
-``struct nvme_directive_send_args *args``
- :c:type:`struct nvme_directive_send_args <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_directive_recv (struct nvme_directive_recv_args *args)
-
- Receive directive specific data
-
-**Parameters**
-
-``struct nvme_directive_recv_args *args``
- :c:type:`struct nvme_directive_recv_args <nvme_directive_recv_args>` argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_capacity_mgmt (struct nvme_capacity_mgmt_args *args)
-
- Capacity management command
-
-**Parameters**
-
-``struct nvme_capacity_mgmt_args *args``
- :c:type:`struct nvme_capacity_mgmt_args <nvme_capacity_mgmt_args>` argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_lockdown (struct nvme_lockdown_args *args)
-
- Issue lockdown command
-
-**Parameters**
-
-``struct nvme_lockdown_args *args``
- :c:type:`struct nvme_lockdown_args <nvme_lockdown_args>` argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_set_property (struct nvme_set_property_args *args)
-
- Set controller property
-
-**Parameters**
-
-``struct nvme_set_property_args *args``
- :c:type:`struct nvme_set_property_args <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_get_property (struct nvme_get_property_args *args)
-
- Get a controller property
-
-**Parameters**
-
-``struct nvme_get_property_args *args``
- :c:type:`struct nvme_get_propert_args <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_sanitize_nvm (struct nvme_sanitize_nvm_args *args)
-
- Start a sanitize operation
-
-**Parameters**
-
-``struct nvme_sanitize_nvm_args *args``
- :c:type:`struct nvme_sanitize_nvm_args <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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``
- :c:type:`struct nvme_dev_self_test <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_virtual_mgmt (struct nvme_virtual_mgmt_args *args)
-
- Virtualization resource management
-
-**Parameters**
-
-``struct nvme_virtual_mgmt_args *args``
- :c:type:`struct nvme_virtual_mgmt_args <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_io (struct nvme_io_args *args, __u8 opcode)
-
- Submit an nvme user I/O command
-
-**Parameters**
-
-``struct nvme_io_args *args``
- :c:type:`struct nvme_io_args <nvme_io_args>` argument structure
-
-``__u8 opcode``
- Opcode to execute
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_read (struct nvme_io_args *args)
-
- Submit an nvme user read command
-
-**Parameters**
-
-``struct nvme_io_args *args``
- :c:type:`struct nvme_io_args <nvme_io_args>` argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_write (struct nvme_io_args *args)
-
- Submit an nvme user write command
-
-**Parameters**
-
-``struct nvme_io_args *args``
- :c:type:`struct nvme_io_args <nvme_io_args>` argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_compare (struct nvme_io_args *args)
-
- Submit an nvme user compare command
-
-**Parameters**
-
-``struct nvme_io_args *args``
- :c:type:`struct nvme_io_args <nvme_io_args>` argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_write_zeros (struct nvme_io_args *args)
-
- Submit an nvme write zeroes command
-
-**Parameters**
-
-``struct nvme_io_args *args``
- :c:type:`struct nvme_io_args <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_write_uncorrectable (struct nvme_io_args *args)
-
- Submit an nvme write uncorrectable command
-
-**Parameters**
-
-``struct nvme_io_args *args``
- :c:type:`struct nvme_io_args <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_verify (struct nvme_io_args *args)
-
- Send an nvme verify command
-
-**Parameters**
-
-``struct nvme_io_args *args``
- :c:type:`struct nvme_io_args <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_dsm (struct nvme_dsm_args *args)
-
- Send an nvme data set management command
-
-**Parameters**
-
-``struct nvme_dsm_args *args``
- :c:type:`struct nvme_dsm_args <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_copy (struct nvme_copy_args *args)
-
- Copy command
-
-**Parameters**
-
-``struct nvme_copy_args *args``
- :c:type:`struct nvme_copy_args <nvme_copy_args>` argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_resv_acquire (struct nvme_resv_acquire_args *args)
-
- Send an nvme reservation acquire
-
-**Parameters**
-
-``struct nvme_resv_acquire_args *args``
- :c:type:`struct nvme_resv_acquire <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_resv_register (struct nvme_resv_register_args *args)
-
- Send an nvme reservation register
-
-**Parameters**
-
-``struct nvme_resv_register_args *args``
- :c:type:`struct nvme_resv_register_args <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_resv_release (struct nvme_resv_release_args *args)
-
- Send an nvme reservation release
-
-**Parameters**
-
-``struct nvme_resv_release_args *args``
- :c:type:`struct nvme_resv_release_args <nvme_resv_release_args>` argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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, :c:type:`struct nvme_reservation_status <nvme_reservation_status>`, for more details.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_zns_mgmt_send (struct nvme_zns_mgmt_send_args *args)
-
- ZNS management send command
-
-**Parameters**
-
-``struct nvme_zns_mgmt_send_args *args``
- :c:type:`struct nvme_zns_mgmt_send_args <nvme_zns_mgmt_send_args>` argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_zns_mgmt_recv (struct nvme_zns_mgmt_recv_args *args)
-
- ZNS management receive command
-
-**Parameters**
-
-``struct nvme_zns_mgmt_recv_args *args``
- :c:type:`struct nvme_zns_mgmt_recv_args <nvme_zns_mgmt_recv_args>` argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_zns_append (struct nvme_zns_append_args *args)
-
- Append data to a zone
-
-**Parameters**
-
-``struct nvme_zns_append_args *args``
- :c:type:`struct nvme_zns_append_args <nvme_zns_append_args>` argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_dim_send (struct nvme_dim_args *args)
-
- Send a Discovery Information Management (DIM) command
-
-**Parameters**
-
-``struct nvme_dim_args *args``
- :c:type:`struct nvme_dim_args <nvme_dim_args>` argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
+++ /dev/null
-.. _linux.h:
-
-**linux.h**
-
-
-linux-specific utility functions
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-
-
-.. c: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
-
-
-.. c:function:: 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: :c:type:`enum nvme_telemetry_da <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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: :c:type:`enum nvme_telemetry_da <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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: :c:type:`enum nvme_telemetry_da <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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``
- :c:type:`struct nvme_get_log_args <nvme_get_log_args>` argument structure
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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.
-
-
-
-
-.. c: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
-
-
-.. c:function:: 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.
-
-
+++ /dev/null
-.. _log.h:
-
-**log.h**
-
-
-logging functions
-
-.. c:function:: 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.
-
-
endforeach
endif
else
- if want_docs == 'all' or want_docs == 'rst'
- install_subdir('rst', install_dir: rstdir)
- endif
+ # no prebuild docs
endif
endif
+++ /dev/null
-.. _mi.h - NVMe Management Interface library (libnvme-mi) definitions.:
-
-**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:
-
- - :c:type:`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:
-
- - :c:type:`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 (:c:type:`nvme_mi_ep_t`)
- may provide access to multiple controllers - so each of the controller-
- type commands will require a :c:type:`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
- :c:type:`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 :c:type:`enum nvme_mi_resp_status <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.
-
-.. c:macro:: 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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c:enum:: nvme_mi_ror
-
- Request or response field.
-
-**Constants**
-
-``NVME_MI_ROR_REQ``
- request message
-
-``NVME_MI_ROR_RSP``
- response message
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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 :c:type:`enum nvme_mi_resp_status <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.
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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`().
-
-
-
-
-.. c: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`().
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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 :c:type:`nvme_create_root`.
-
-**Return**
-
-new root object, or NULL on failure.
-
-
-.. c:function:: void nvme_mi_free_root (nvme_root_t root)
-
- Free root object.
-
-**Parameters**
-
-``nvme_root_t root``
- root to free
-
-
-
-
-.. c: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 :c:type:`nvme_mi_init_ctrl`).
-
-Endpoints are created through a transport-specific constructor; currently
-only MCTP-connected endpoints are supported, through :c:type:`nvme_mi_open_mctp`.
-Subsequent operations on the endpoint (and related controllers) are
-transport-independent.
-
-
-.. c:function:: nvme_mi_ep_t nvme_mi_first_endpoint (nvme_root_t m)
-
- Start endpoint iterator
-
-**Parameters**
-
-``nvme_root_t m``
- :c:type:`nvme_root_t` object
-
-**Return**
-
-first MI endpoint object under this root, or NULL if no endpoints
- are present.
-
-**Description**
-
-See: :c:type:`nvme_mi_next_endpoint`, :c:type:`nvme_mi_for_each_endpoint`
-
-
-.. c:function:: 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``
- :c:type:`nvme_root_t` object
-
-``nvme_mi_ep_t e``
- :c:type:`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: :c:type:`nvme_mi_first_endpoint`, :c:type:`nvme_mi_for_each_endpoint`
-
-
-.. c:macro:: nvme_mi_for_each_endpoint
-
-``nvme_mi_for_each_endpoint (m, e)``
-
- Iterator for NVMe-MI endpoints.
-
-**Parameters**
-
-``m``
- :c:type:`nvme_root_t` containing endpoints
-
-``e``
- :c:type:`nvme_mi_ep_t` object, set on each iteration
-
-
-.. c:macro:: 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``
- :c:type:`nvme_root_t` containing endpoints
-
-``e``
- :c:type:`nvme_mi_ep_t` object, set on each iteration
-
-``_e``
- :c:type:`nvme_mi_ep_t` object used as temporary storage
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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`().
-
-
-.. c:function:: 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.
-
-
-
-
-.. c:type:: nvme_mi_ctrl_t
-
- NVMe-MI Controller object.
-
-**Description**
-
-
-Provides NVMe command functionality, through the MI interface.
-
-
-.. c:function:: nvme_mi_ctrl_t nvme_mi_first_ctrl (nvme_mi_ep_t ep)
-
- Start controller iterator
-
-**Parameters**
-
-``nvme_mi_ep_t ep``
- :c:type:`nvme_mi_ep_t` object
-
-**Return**
-
-first MI controller object under this root, or NULL if no controllers
- are present.
-
-**Description**
-
-See: :c:type:`nvme_mi_next_ctrl`, :c:type:`nvme_mi_for_each_ctrl`
-
-
-.. c:function:: 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``
- :c:type:`nvme_mi_ep_t` object
-
-``nvme_mi_ctrl_t c``
- :c:type:`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: :c:type:`nvme_mi_first_ctrl`, :c:type:`nvme_mi_for_each_ctrl`
-
-
-.. c:macro:: nvme_mi_for_each_ctrl
-
-``nvme_mi_for_each_ctrl (ep, c)``
-
- Iterator for NVMe-MI controllers.
-
-**Parameters**
-
-``ep``
- :c:type:`nvme_mi_ep_t` containing endpoints
-
-``c``
- :c:type:`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`()
-
-
-.. c:macro:: 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``
- :c:type:`nvme_mi_ep_t` containing controllers
-
-``c``
- :c:type:`nvme_mi_ctrl_t` object, set on each iteration
-
-``_c``
- :c:type:`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`()
-
-
-.. c:function:: 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 :c:type:`nvme_mi_close`
-
-**Return**
-
-New endpoint object for **netid** & **eid**, or NULL on failure.
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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: :c:type:`nvme_mi_for_each_ctrl`
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`nvme_mi_mi_read_mi_data_ctrl_list`.
-
-See :c:type:`nvme_mi_close_ctrl`
-
-**Return**
-
-New controller object, or NULL on failure.
-
-
-.. c:function:: void nvme_mi_close_ctrl (nvme_mi_ctrl_t ctrl)
-
- free a controller
-
-**Parameters**
-
-``nvme_mi_ctrl_t ctrl``
- controller to free
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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 :c:type:`struct nvme_mi_read_nvm_ss_info <nvme_mi_read_nvm_ss_info>`.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise..
-
-
-.. c:function:: 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 :c:type:`nvme_mi_mi_read_mi_data_subsys`) nmp field contains the allowed
-range of port IDs.
-
-See :c:type:`struct nvme_mi_read_port_info <nvme_mi_read_port_info>`.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise..
-
-
-.. c:function:: 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 :c:type:`struct nvme_ctrl_list <nvme_ctrl_list>`.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise..
-
-
-.. c:function:: 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 :c:type:`struct nvme_mi_read_ctrl_info <nvme_mi_read_ctrl_info>`.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise..
-
-
-.. c:function:: 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 :c:type:`struct nvme_mi_nvm_ss_health_status <nvme_mi_nvm_ss_health_status>`.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise..
-
-
-.. c:function:: 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 :c:type:`enum nvme_mi_config_id <nvme_mi_config_id>` for identifiers.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise..
-
-
-.. c:function:: 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 :c:type:`enum nvme_mi_config_id <nvme_mi_config_id>` for identifiers.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise..
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise..
-
-
-.. c:function:: 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 :c:type:`struct nvme_mi_read_port_info <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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise..
-
-
-.. c:function:: 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 :c:type:`nvme_mi_mi_subsystem_health_status_poll`(), :c:type:`enum nvme_mi_ccs <nvme_mi_ccs>` for
-values in **mask**.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise..
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise..
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise..
-
-
-.. c:function:: 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: :c:type:`struct nvme_mi_admin_req_hdr <nvme_mi_admin_req_hdr>` and :c:type:`struct nvme_mi_admin_resp_hdr <nvme_mi_admin_resp_hdr>`.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise..
-
-
-.. c:function:: 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: :c:type:`struct nvme_identify_args <nvme_identify_args>`
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`NVME_IDENTIFY_DATA_SIZE`.
-
-See: :c:type:`struct nvme_identify_args <nvme_identify_args>`
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`NVME_IDENTIFY_DATA_SIZE` bytes.
-
-Will return an error if the length of the response data (from the
-controller) is not a full :c:type:`NVME_IDENTIFY_DATA_SIZE`.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`NVME_IDENTIFY_DATA_SIZE`, so **id** will be
-fully populated on success.
-
-See: :c:type:`struct nvme_id_ctrl <nvme_id_ctrl>`
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`NVME_IDENTIFY_DATA_SIZE`, so **id** will be
-fully populated on success.
-
-See: :c:type:`struct nvme_ctrl_list <nvme_ctrl_list>`
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`NVME_IDENTIFY_DATA_SIZE`, so **id** will be
-fully populated on success.
-
-See: :c:type:`struct nvme_ctrl_list <nvme_ctrl_list>`
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`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 :c:type:`NVME_IDENTIFY_DATA_SIZE`, so **list** will be
-be fully populated on success.
-
-See: :c:type:`struct nvme_ns_list <nvme_ns_list>`
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`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 :c:type:`NVME_IDENTIFY_DATA_SIZE`, so **list** will be
-be fully populated on success.
-
-See: :c:type:`struct nvme_ns_list <nvme_ns_list>`
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`NVME_IDENTIFY_DATA_SIZE`, so **cap** will be
-be fully populated on success.
-
-See: :c:type:`struct nvme_primary_ctrl_cap <nvme_primary_ctrl_cap>`
-
-**Return**
-
-0 on success, non-zero on failure
-
-
-.. c:function:: int nvme_mi_admin_identify_secondary_ctrl_list (nvme_mi_ctrl_t ctrl, __u32 nsid, __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
-
-``__u32 nsid``
- Namespace ID to specify list start
-
-``__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 :c:type:`NVME_IDENTIFY_DATA_SIZE`, so **list** will be
-be fully populated on success.
-
-See: :c:type:`struct nvme_secondary_ctrl_list <nvme_secondary_ctrl_list>`
-
-**Return**
-
-0 on success, non-zero on failure
-
-
-.. c:function:: 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: :c:type:`struct nvme_get_log_args <nvme_get_log_args>`
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`enum nvme_get_log_ana_lsp <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 :c:type:`struct nvme_ana_rsp_hdr <nvme_ana_rsp_hdr>` for the definition of the returned structure.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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 :c:type:`struct nvme_ana_group_desc <nvme_ana_group_desc>` for the definition of the returned structure.
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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: :c:type:`struct nvme_get_log_args <nvme_get_log_args>`
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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: :c:type:`struct nvme_get_log_args <nvme_get_log_args>`
-
-**Return**
-
-The nvme command status if a response was received (see
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: int nvme_mi_admin_ns_mgmt_create (nvme_mi_ctrl_t ctrl, struct nvme_id_ns *ns, __u8 csi, __u32 *nsid)
-
- 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
-
-**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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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``
- :c:type:`struct nvme_fw_download_args <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
-
-
-.. c:function:: 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``
- :c:type:`struct nvme_fw_download_args <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
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
-.. c:function:: 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
-:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-
-
+++ /dev/null
-.. _tree.h:
-
-**tree.h**
-
-
-libnvme tree object interface
-
-.. c:function:: 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 :c:type:`nvme_root_t` object
-
-
-.. c:function:: void nvme_free_tree (nvme_root_t r)
-
- Free root object
-
-**Parameters**
-
-``nvme_root_t r``
- :c:type:`nvme_root_t` object
-
-**Description**
-
-Free an :c:type:`nvme_root_t` object and all attached objects
-
-
-.. c:function:: nvme_host_t nvme_first_host (nvme_root_t r)
-
- Start host iterator
-
-**Parameters**
-
-``nvme_root_t r``
- :c:type:`nvme_root_t` object
-
-**Return**
-
-First :c:type:`nvme_host_t` object in an iterator
-
-
-.. c:function:: nvme_host_t nvme_next_host (nvme_root_t r, nvme_host_t h)
-
- Next host iterator
-
-**Parameters**
-
-``nvme_root_t r``
- :c:type:`nvme_root_t` object
-
-``nvme_host_t h``
- Previous :c:type:`nvme_host_t` iterator
-
-**Return**
-
-Next :c:type:`nvme_host_t` object in an iterator
-
-
-.. c:function:: nvme_root_t nvme_host_get_root (nvme_host_t h)
-
- Returns nvme_root_t object
-
-**Parameters**
-
-``nvme_host_t h``
- :c:type:`nvme_host_t` object
-
-**Return**
-
-:c:type:`nvme_root_t` object from **h**
-
-
-.. c:function:: 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``
- :c:type:`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**
-
-:c:type:`nvme_host_t` object
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: nvme_host_t nvme_default_host (nvme_root_t r)
-
- Initializes the default host
-
-**Parameters**
-
-``nvme_root_t r``
- :c:type:`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**
-
-:c:type:`nvme_host_t` object
-
-
-.. c:function:: nvme_subsystem_t nvme_first_subsystem (nvme_host_t h)
-
- Start subsystem iterator
-
-**Parameters**
-
-``nvme_host_t h``
- :c:type:`nvme_host_t` object
-
-**Return**
-
-first :c:type:`nvme_subsystem_t` object in an iterator
-
-
-.. c:function:: nvme_subsystem_t nvme_next_subsystem (nvme_host_t h, nvme_subsystem_t s)
-
- Next subsystem iterator
-
-**Parameters**
-
-``nvme_host_t h``
- :c:type:`nvme_host_t` object
-
-``nvme_subsystem_t s``
- Previous :c:type:`nvme_subsystem_t` iterator
-
-**Return**
-
-next :c:type:`nvme_subsystem_t` object in an iterator
-
-
-.. c:function:: 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``
- :c:type:`nvme_host_t` object
-
-``const char *name``
- Name of the subsystem (may be NULL)
-
-``const char *subsysnqn``
- Subsystem NQN
-
-**Description**
-
-Lookup a :c:type:`nvme_subsystem_t` object in **h** base on **name** (if present)
-and **subsysnqn** or create one if not found.
-
-**Return**
-
-nvme_subsystem_t object
-
-
-.. c:function:: void nvme_free_subsystem (struct nvme_subsystem *s)
-
- Free a subsystem
-
-**Parameters**
-
-``struct nvme_subsystem *s``
- subsystem
-
-**Description**
-
-Frees **s** and all related objects.
-
-
-.. c:function:: nvme_host_t nvme_subsystem_get_host (nvme_subsystem_t s)
-
- Returns nvme_host_t object
-
-**Parameters**
-
-``nvme_subsystem_t s``
- subsystem
-
-**Return**
-
-:c:type:`nvme_host_t` object from **s**
-
-
-.. c:function:: nvme_ns_t nvme_ctrl_first_ns (nvme_ctrl_t c)
-
- Start namespace iterator
-
-**Parameters**
-
-``nvme_ctrl_t c``
- Controller instance
-
-**Return**
-
-First :c:type:`nvme_ns_t` object of an **c** iterator
-
-
-.. c:function:: 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
-
-
-.. c:function:: nvme_path_t nvme_ctrl_first_path (nvme_ctrl_t c)
-
- Start path iterator
-
-**Parameters**
-
-``nvme_ctrl_t c``
- Controller instance
-
-**Return**
-
-First :c:type:`nvme_path_t` object of an **c** iterator
-
-
-.. c:function:: 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 :c:type:`nvme_path_t` object of an **c** iterator
-
-**Return**
-
-Next :c:type:`nvme_path_t` object of an **c** iterator
-
-
-.. c:function:: nvme_ctrl_t nvme_subsystem_first_ctrl (nvme_subsystem_t s)
-
- First ctrl iterator
-
-**Parameters**
-
-``nvme_subsystem_t s``
- :c:type:`nvme_subsystem_t` object
-
-**Return**
-
-First controller of an **s** iterator
-
-
-.. c:function:: nvme_ctrl_t nvme_subsystem_next_ctrl (nvme_subsystem_t s, nvme_ctrl_t c)
-
- Next ctrl iterator
-
-**Parameters**
-
-``nvme_subsystem_t s``
- :c:type:`nvme_subsystem_t` object
-
-``nvme_ctrl_t c``
- Previous controller instance of an **s** iterator
-
-**Return**
-
-Next controller of an **s** iterator
-
-
-.. c:function:: nvme_path_t nvme_namespace_first_path (nvme_ns_t ns)
-
- Start path iterator
-
-**Parameters**
-
-``nvme_ns_t ns``
- Namespace instance
-
-**Return**
-
-First :c:type:`nvme_path_t` object of an **ns** iterator
-
-
-.. c:function:: 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 :c:type:`nvme_path_t` object of an **ns** iterator
-
-**Return**
-
-Next :c:type:`nvme_path_t` object of an **ns** iterator
-
-
-.. c:function:: 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``
- :c:type:`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
-
-
-.. c:function:: 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
-
-
-.. c:function:: nvme_ns_t nvme_subsystem_first_ns (nvme_subsystem_t s)
-
- Start namespace iterator
-
-**Parameters**
-
-``nvme_subsystem_t s``
- :c:type:`nvme_subsystem_t` object
-
-**Return**
-
-First :c:type:`nvme_ns_t` object of an **s** iterator
-
-
-.. c:function:: nvme_ns_t nvme_subsystem_next_ns (nvme_subsystem_t s, nvme_ns_t n)
-
- Next namespace iterator
-
-**Parameters**
-
-``nvme_subsystem_t s``
- :c:type:`nvme_subsystem_t` object
-
-``nvme_ns_t n``
- Previous :c:type:`nvme_ns_t` iterator
-
-**Return**
-
-Next :c:type:`nvme_ns_t` object of an **s** iterator
-
-
-.. c:macro:: nvme_for_each_host_safe
-
-``nvme_for_each_host_safe (r, h, _h)``
-
- Traverse host list
-
-**Parameters**
-
-``r``
- :c:type:`nvme_root_t` object
-
-``h``
- :c:type:`nvme_host_t` object
-
-``_h``
- Temporary :c:type:`nvme_host_t` object
-
-
-.. c:macro:: nvme_for_each_host
-
-``nvme_for_each_host (r, h)``
-
- Traverse host list
-
-**Parameters**
-
-``r``
- :c:type:`nvme_root_t` object
-
-``h``
- :c:type:`nvme_host_t` object
-
-
-.. c:macro:: nvme_for_each_subsystem_safe
-
-``nvme_for_each_subsystem_safe (h, s, _s)``
-
- Traverse subsystems
-
-**Parameters**
-
-``h``
- :c:type:`nvme_host_t` object
-
-``s``
- :c:type:`nvme_subsystem_t` object
-
-``_s``
- Temporary :c:type:`nvme_subsystem_t` object
-
-
-.. c:macro:: nvme_for_each_subsystem
-
-``nvme_for_each_subsystem (h, s)``
-
- Traverse subsystems
-
-**Parameters**
-
-``h``
- :c:type:`nvme_host_t` object
-
-``s``
- :c:type:`nvme_subsystem_t` object
-
-
-.. c:macro:: nvme_subsystem_for_each_ctrl_safe
-
-``nvme_subsystem_for_each_ctrl_safe (s, c, _c)``
-
- Traverse controllers
-
-**Parameters**
-
-``s``
- :c:type:`nvme_subsystem_t` object
-
-``c``
- Controller instance
-
-``_c``
- A :c:type:`nvme_ctrl_t_node` to use as temporary storage
-
-
-.. c:macro:: nvme_subsystem_for_each_ctrl
-
-``nvme_subsystem_for_each_ctrl (s, c)``
-
- Traverse controllers
-
-**Parameters**
-
-``s``
- :c:type:`nvme_subsystem_t` object
-
-``c``
- Controller instance
-
-
-.. c:macro:: nvme_ctrl_for_each_ns_safe
-
-``nvme_ctrl_for_each_ns_safe (c, n, _n)``
-
- Traverse namespaces
-
-**Parameters**
-
-``c``
- Controller instance
-
-``n``
- :c:type:`nvme_ns_t` object
-
-``_n``
- A :c:type:`nvme_ns_t_node` to use as temporary storage
-
-
-.. c:macro:: nvme_ctrl_for_each_ns
-
-``nvme_ctrl_for_each_ns (c, n)``
-
- Traverse namespaces
-
-**Parameters**
-
-``c``
- Controller instance
-
-``n``
- :c:type:`nvme_ns_t` object
-
-
-.. c:macro:: nvme_ctrl_for_each_path_safe
-
-``nvme_ctrl_for_each_path_safe (c, p, _p)``
-
- Traverse paths
-
-**Parameters**
-
-``c``
- Controller instance
-
-``p``
- :c:type:`nvme_path_t` object
-
-``_p``
- A :c:type:`nvme_path_t_node` to use as temporary storage
-
-
-.. c:macro:: nvme_ctrl_for_each_path
-
-``nvme_ctrl_for_each_path (c, p)``
-
- Traverse paths
-
-**Parameters**
-
-``c``
- Controller instance
-
-``p``
- :c:type:`nvme_path_t` object
-
-
-.. c:macro:: nvme_subsystem_for_each_ns_safe
-
-``nvme_subsystem_for_each_ns_safe (s, n, _n)``
-
- Traverse namespaces
-
-**Parameters**
-
-``s``
- :c:type:`nvme_subsystem_t` object
-
-``n``
- :c:type:`nvme_ns_t` object
-
-``_n``
- A :c:type:`nvme_ns_t_node` to use as temporary storage
-
-
-.. c:macro:: nvme_subsystem_for_each_ns
-
-``nvme_subsystem_for_each_ns (s, n)``
-
- Traverse namespaces
-
-**Parameters**
-
-``s``
- :c:type:`nvme_subsystem_t` object
-
-``n``
- :c:type:`nvme_ns_t` object
-
-
-.. c:macro:: nvme_namespace_for_each_path_safe
-
-``nvme_namespace_for_each_path_safe (n, p, _p)``
-
- Traverse paths
-
-**Parameters**
-
-``n``
- Namespace instance
-
-``p``
- :c:type:`nvme_path_t` object
-
-``_p``
- A :c:type:`nvme_path_t_node` to use as temporary storage
-
-
-.. c:macro:: nvme_namespace_for_each_path
-
-``nvme_namespace_for_each_path (n, p)``
-
- Traverse paths
-
-**Parameters**
-
-``n``
- Namespace instance
-
-``p``
- :c:type:`nvme_path_t` object
-
-
-.. c:function:: int nvme_ns_get_fd (nvme_ns_t n)
-
- Get associated file descriptor
-
-**Parameters**
-
-``nvme_ns_t n``
- Namespace instance
-
-**Return**
-
-File descriptor associated with **n** or -1
-
-
-.. c:function:: int nvme_ns_get_nsid (nvme_ns_t n)
-
- NSID of a namespace
-
-**Parameters**
-
-``nvme_ns_t n``
- Namespace instance
-
-**Return**
-
-NSID of **n**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: nvme_subsystem_t nvme_ns_get_subsystem (nvme_ns_t n)
-
- :c:type:`nvme_subsystem_t` of a namespace
-
-**Parameters**
-
-``nvme_ns_t n``
- Namespace instance
-
-**Return**
-
-nvme_subsystem_t object of **n**
-
-
-.. c:function:: nvme_ctrl_t nvme_ns_get_ctrl (nvme_ns_t n)
-
- :c:type:`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
-
-
-.. c:function:: void nvme_free_ns (struct nvme_ns *n)
-
- Free a namespace object
-
-**Parameters**
-
-``struct nvme_ns *n``
- Namespace instance
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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``
- :c:type:`nvme_id_ns` buffer
-
-**Description**
-
-Writes the data returned by the 'identify namespace' command
-into **ns**.
-
-**Return**
-
-0 on success, -1 on error.
-
-
-.. c:function:: 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.
-
-
-.. c:function:: const char * nvme_path_get_name (nvme_path_t p)
-
- sysfs name of an :c:type:`nvme_path_t` object
-
-**Parameters**
-
-``nvme_path_t p``
- :c:type:`nvme_path_t` object
-
-**Return**
-
-sysfs name of **p**
-
-
-.. c:function:: const char * nvme_path_get_sysfs_dir (nvme_path_t p)
-
- sysfs directory of an nvme_path_t object
-
-**Parameters**
-
-``nvme_path_t p``
- :c:type:`nvme_path_t` object
-
-**Return**
-
-sysfs directory of **p**
-
-
-.. c:function:: const char * nvme_path_get_ana_state (nvme_path_t p)
-
- ANA state of an nvme_path_t object
-
-**Parameters**
-
-``nvme_path_t p``
- :c:type:`nvme_path_t` object
-
-**Return**
-
-ANA (Asynchronous Namespace Access) state of **p**
-
-
-.. c:function:: nvme_ctrl_t nvme_path_get_ctrl (nvme_path_t p)
-
- Parent controller of an nvme_path_t object
-
-**Parameters**
-
-``nvme_path_t p``
- :c:type:`nvme_path_t` object
-
-**Return**
-
-Parent controller if present
-
-
-.. c:function:: nvme_ns_t nvme_path_get_ns (nvme_path_t p)
-
- Parent namespace of an nvme_path_t object
-
-**Parameters**
-
-``nvme_path_t p``
- :c:type:`nvme_path_t` object
-
-**Return**
-
-Parent namespace if present
-
-
-.. c:function:: int nvme_ctrl_get_fd (nvme_ctrl_t c)
-
- Get associated file descriptor
-
-**Parameters**
-
-``nvme_ctrl_t c``
- Controller instance
-
-**Return**
-
-File descriptor associated with **c** or -1
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: const char * nvme_ctrl_get_state (nvme_ctrl_t c)
-
- Running state of an controller
-
-**Parameters**
-
-``nvme_ctrl_t c``
- Controller instance
-
-**Return**
-
-String indicating the running state of **c**
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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)
-
-
-.. c:function:: 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)
-
-
-.. c:function:: 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)
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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
-
-
-.. c:function:: void nvme_rescan_ctrl (nvme_ctrl_t c)
-
- Rescan an existing controller
-
-**Parameters**
-
-``nvme_ctrl_t c``
- Controller instance
-
-
-.. c:function:: 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.
-
-
-.. c:function:: void nvme_free_ctrl (struct nvme_ctrl *c)
-
- Free controller
-
-**Parameters**
-
-``struct nvme_ctrl *c``
- Controller instance
-
-
-.. c:function:: void nvme_unlink_ctrl (struct nvme_ctrl *c)
-
- Unlink controller
-
-**Parameters**
-
-``struct nvme_ctrl *c``
- Controller instance
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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'
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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**
-
-
-.. c:function:: void nvme_free_host (nvme_host_t h)
-
- Free nvme_host_t object
-
-**Parameters**
-
-``nvme_host_t h``
- nvme_host_t object
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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).
-
-
-.. c:function:: 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).
-
-
-.. c:function:: 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).
-
-
-.. c:function:: 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).
-
-
-.. c:function:: 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**
-
-
-.. c:function:: 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).
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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
-
-
+++ /dev/null
-.. _types.h:
-
-**types.h**
-
-
-NVMe standard definitions
-
-.. c:macro:: 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'
-
-
-.. c:macro:: 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'
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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_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
-
-
-.. c:function:: 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.
-
-
-.. c:function:: __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
-
-
-.. c:function:: __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
-
-
-.. c:function:: __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
-
-
-
-
-.. c: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.
-
-
-
-
-.. c:enum:: nvme_psd_ps
-
- Known values for :c:type:`struct nvme_psd <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
-
-
-.. c:function:: 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
-
-
-
-
-.. c:enum:: nvme_psd_workload
-
- Specifies a workload hint in the Power Management Feature (see :c:type:`struct nvme_psd <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.
-
-
-
-
-.. c: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 :c:type:`enum nvme_psd_flags <nvme_psd_flags>`). A value of 0 indicates
- Maximum Power is not reported.
-
-``rsvd2``
- Reserved
-
-``flags``
- Additional decoding flags, see :c:type:`enum nvme_psd_flags <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 :c:type:`struct nvme_id_psd <nvme_id_psd>`.idlp,
- see :c:type:`enum nvme_psd_ps <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 :c:type:`struct
- nvme_id_psd <nvme_id_psd>`.actp, see :c:type:`enum nvme_psd_ps <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 :c:type:`enum nvme_psd_workload <nvme_psd_workload>` for decoding this field.
-
-``rsvd23``
- Reserved
-
-
-
-
-
-.. c: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;
- __u8 rsvd564[204];
- 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 :c:type:`enum nvme_id_ctrl_cmic <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 :c:type:`enum nvme_registers <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 :c:type:`enum nvme_id_ctrl_cntrltype <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 :c:type:`enum nvme_id_ctrl_nvmsr <nvme_id_ctrl_nvmsr>`
-
-``vwci``
- VPD Write Cycle Information, see :c:type:`enum nvme_id_ctrl_vwci <nvme_id_ctrl_vwci>`
-
-``mec``
- Management Endpoint Capabilities, see :c:type:`enum nvme_id_ctrl_mec <nvme_id_ctrl_mec>`
-
-``oacs``
- Optional Admin Command Support,the optional Admin commands and
- features supported by the controller, see :c:type:`enum nvme_id_ctrl_oacs <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 :c:type:`enum nvme_id_ctrl_frmw <nvme_id_ctrl_frmw>`.
-
-``lpa``
- Log Page Attributes, see :c:type:`enum nvme_id_ctrl_lpa <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 :c:type:`struct nvme_id_ctrl <nvme_id_ctrl>`.psd. This is a 0's
- based value.
-
-``avscc``
- Admin Vendor Specific Command Configuration, see
- :c:type:`enum nvme_id_ctrl_avscc <nvme_id_ctrl_avscc>`.
-
-``apsta``
- Autonomous Power State Transition Attributes, see
- :c:type:`enum nvme_id_ctrl_apsta <nvme_id_ctrl_apsta>`.
-
-``wctemp``
- Warning Composite Temperature Threshold indicates
- the minimum Composite Temperature field value (see :c:type:`struct
- nvme_smart_log <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 :c:type:`struct
- nvme_smart_log <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
- :c:type:`enum nvme_id_ctrl_rpmbs <nvme_id_ctrl_rpmbs>`.
-
-``edstt``
- Extended Device Self-test Time, if Device Self-test command is
- supported (see :c:type:`struct nvme_id_ctrl <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 :c:type:`enum nvme_id_ctrl_dsto <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
- :c:type:`enum nvme_id_ctrl_hctm <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 :c:type:`enum nvme_id_ctrl_sanicap <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
- :c:type:`enum nvme_id_ctrl_anacap <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 :c:type:`enum nvme_id_ctrl_sqes <nvme_id_ctrl_sqes>`.
-
-``cqes``
- Completion Queue Entry Size, see :c:type:`enum nvme_id_ctrl_cqes <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 (:c:type:`struct nvme_id_ctrl <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 :c:type:`enum nvme_id_ctrl_oncs <nvme_id_ctrl_oncs>`.
-
-``fuses``
- Fused Operation Support, see :c:type:`enum nvme_id_ctrl_fuses <nvme_id_ctrl_fuses>`.
-
-``fna``
- Format NVM Attributes, see :c:type:`enum nvme_id_ctrl_fna <nvme_id_ctrl_fna>`.
-
-``vwc``
- Volatile Write Cache, see :c:type:`enum nvme_id_ctrl_vwc <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
- :c:type:`enum nvme_id_ctrl_nvscc <nvme_id_ctrl_nvscc>`.
-
-``nwpc``
- Namespace Write Protection Capabilities, see
- :c:type:`enum nvme_id_ctrl_nwpc <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 :c:type:`enum nvme_id_ctrl_sgls <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.
-
-``rsvd564``
- 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 :c:type:`enum nvme_id_ctrl_fcatt <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 :c:type:`enum nvme_id_ctrl_ofcs <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 :c:type:`struct nvme_id_psd <nvme_id_psd>`.
-
-``vs``
- Vendor Specific
-
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c:enum:: nvme_id_ctrl_nvmsr
-
- This field reports information associated with the NVM Subsystem, see :c:type:`struct nvme_id_ctrl <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.
-
-
-
-
-.. c: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 :c:type:`struct nvme_id_ctrl <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.
-
-
-
-
-.. c:enum:: nvme_id_ctrl_mec
-
- Flags indicating the capabilities of the Management Endpoint in the Controller, :c:type:`struct nvme_id_ctrl <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.
-
-
-
-
-.. c:enum:: nvme_id_ctrl_oacs
-
- Flags indicating the optional Admin commands and features supported by the controller, see :c:type:`struct nvme_id_ctrl <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.
-
-
-
-
-.. c:enum:: nvme_id_ctrl_frmw
-
- Flags and values indicates capabilities regarding firmware updates from :c:type:`struct nvme_id_ctrl <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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c:enum:: nvme_id_ctrl_rpmbs
-
- This field indicates if the controller supports one or more Replay Protected Memory Blocks, from :c:type:`struct nvme_id_ctrl <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
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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``.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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
- (:c:type:`struct nvme_id_ns <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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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``
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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 :c:type:`enum nvme_lbaf_rp <nvme_lbaf_rp>`.
-
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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];
- __le64 lbstm;
- __u8 vs[3704];
- };
-
-**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 :c:type:`enum nvme_id_nsfeat <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 :c:type:`struct nvme_id_ns <nvme_id_ns>`.lbaf.
-
-``flbas``
- Formatted LBA Size, see :c:type:`enum nvme_id_ns_flbas <nvme_id_ns_flbas>`.
-
-``mc``
- Metadata Capabilities, see :c:type:`enum nvme_id_ns_mc <nvme_id_ns_mc>`.
-
-``dpc``
- End-to-end Data Protection Capabilities, see
- :c:type:`enum nvme_id_ns_dpc <nvme_id_ns_dpc>`.
-
-``dps``
- End-to-end Data Protection Type Settings, see
- :c:type:`enum nvme_id_ns_dps <nvme_id_ns_dps>`.
-
-``nmic``
- Namespace Multi-path I/O and Namespace Sharing Capabilities, see
- :c:type:`enum nvme_id_ns_nmic <nvme_id_ns_nmic>`.
-
-``rescap``
- Reservation Capabilities, see :c:type:`enum nvme_id_ns_rescap <nvme_id_ns_rescap>`.
-
-``fpi``
- Format Progress Indicator, see :c:type:`enum nvme_nd_ns_fpi <nvme_nd_ns_fpi>`.
-
-``dlfeat``
- Deallocate Logical Block Features, see :c:type:`enum nvme_id_ns_dlfeat <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 :c:type:`enum nvme_id_ns_attr <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 :c:type:`struct nvme_lbaf <nvme_lbaf>`.
-
-``lbstm``
- Logical Block Storage Tag Mask for end-to-end protection
-
-``vs``
- Vendor Specific
-
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
- :c:type:`struct nvme_id_ns <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
- :c:type:`struct nvme_id_ns <nvme_id_ns>`.lbaf.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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 :c:type:`enum nvme_ns_id_desc_nidt <nvme_ns_id_desc_nidt>`
-
-``nidl``
- Namespace Identifier Length contains the length in bytes of the
- :c:type:`struct nvme_id_ns <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 :c:type:`struct nvme_id_ns <nvme_id_ns>`.nidl.
-
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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``
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c:struct:: nvme_ns_list
-
- Namespace List
-
-**Definition**
-
-::
-
- struct nvme_ns_list {
- __le32 ns[NVME_ID_NS_LIST_MAX];
- };
-
-**Members**
-
-``ns``
- Namespace Identifier
-
-
-
-
-
-.. c: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;
- __u32 dmrsl;
- __u64 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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c:struct:: nvme_id_iocs
-
- NVMe Identify IO Command Set data structure
-
-**Definition**
-
-::
-
- struct nvme_id_iocs {
- __u64 iocsc[512];
- };
-
-**Members**
-
-``iocsc``
- List of supported IO Command Set Combination vectors
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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)
-
-
-
-
-.. c: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 rsvd[2];
- __le64 cs;
- __le16 trtype_spec_info;
- __u8 rsvd2[22];
- };
-
-**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 :c:type:`enum nvme_trtype <nvme_trtype>`.
-
-``rsvd``
- Reserved
-
-``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
-
-``rsvd2``
- Reserved
-
-
-
-
-
-.. c: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 :c:type:`enum nvme_smart_crit <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 :c:type:`enum nvme_smart_egcw <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
-
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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 :c:type:`enum nvme_status_result <nvme_status_result>` and :c:type:`enum nvme_st_code <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 :c:type:`enum nvme_st_valid_diag_info <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 :c:type:`enum nvme_status_field <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.
-
-
-
-
-
-.. c: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 :c:type:`struct nvme_st_result <nvme_st_result>`.dsts field.
-
-
-
-
-.. c: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_SHIFT``
- Shift amount to get the code value from the
- :c:type:`struct nvme_st_result <nvme_st_result>`.dsts field.
-
-
-
-
-.. c: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
- :c:type:`struct nvme_self_test_log <nvme_self_test_log>`.current_operation field.
-
-``NVME_ST_CURR_OP_CMPL_MASK``
- Mask to get the current operation completion value
- from the :c:type:`struct nvme_self_test_log <nvme_self_test_log>`.completion field.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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 :c:type:`enum nvme_st_curr_op <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 :c:type:`struct nvme_st_result <nvme_st_result>`.
-
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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.
-
-
-
-
-.. c:struct:: nvme_endurance_group_log
-
- Endurance Group Information Log
-
-**Definition**
-
-::
-
- struct nvme_endurance_group_log {
- __u8 critical_warning;
- __u8 rsvd1[2];
- __u8 avl_spare;
- __u8 avl_spare_threshold;
- __u8 percent_used;
- __u8 rsvd6[26];
- __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 rsvd160[352];
- };
-
-**Members**
-
-``critical_warning``
- Critical Warning
-
-``rsvd1``
- Reserved
-
-``avl_spare``
- Available Spare
-
-``avl_spare_threshold``
- Available Spare Threshold
-
-``percent_used``
- Percentage Used
-
-``rsvd6``
- 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
-
-``rsvd160``
- Reserved
-
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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)
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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 :c:type:`enum nvme_resv_notify_rnlpt <nvme_resv_notify_rnlpt>`.
-
-``nalp``
- Number of Available Log Pages
-
-``rsvd9``
- Reserved
-
-``nsid``
- Namespace ID
-
-``rsvd16``
- Reserved
-
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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 :c:type:`enum nvme_sanitize_sstat <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
-
-
-
-
-
-.. c: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 :c:type:`struct nvme_sanitize_log_page <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
- :c:type:`struct nvme_sanitize_log_page <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.
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c:enum:: nvme_zns_zt
-
- Zone Descriptor Data Structure - Zone Type
-
-**Constants**
-
-``NVME_ZONE_TYPE_SEQWRITE_REQ``
- Sequential Write Required
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c:struct:: nvme_feat_auto_pst
-
- Autonomous Power State Transition
-
-**Definition**
-
-::
-
- struct nvme_feat_auto_pst {
- __le64 apst_entry[32];
- };
-
-**Members**
-
-``apst_entry``
- See :c:type:`enum nvme_apst_entry <nvme_apst_entry>`
-
-
-
-
-
-.. c: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
-
-
-
-
-.. c:struct:: nvme_metadata_element_desc
-
- Metadata Element Descriptor
-
-**Definition**
-
-::
-
- struct nvme_metadata_element_desc {
- __u8 type;
- __u8 rev;
- __u16 len;
- __u8 val[0];
- };
-
-**Members**
-
-``type``
- Element Type (ET)
-
-``rev``
- Element Revision (ER)
-
-``len``
- Element Length (ELEN)
-
-``val``
- Element Value (EVAL), UTF-8 string
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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];
- __u64 slba;
- __u64 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
-
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c:struct:: nvme_feat_host_behavior
-
- Host Behavior Support - Data Structure
-
-**Definition**
-
-::
-
- struct nvme_feat_host_behavior {
- __u8 acre;
- __u8 rsvd1[511];
- };
-
-**Members**
-
-``acre``
- Advanced Command Retry Enable
-
-``rsvd1``
- Reserved
-
-
-
-
-
-.. c:enum:: nvme_host_behavior_support
-
- Enable Advanced Command
-
-**Constants**
-
-``NVME_ENABLE_ACRE``
- Enable Advanced Command Retry Enable
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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 elbatm;
- __le16 elbat;
- };
-
-**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
-
-``elbatm``
- Expected Logical Block Application Tag Mask
-
-``elbat``
- Expected Logical Block Application Tag
-
-
-
-
-
-.. c: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 elbatm;
- __le16 elbat;
- };
-
-**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
-
-``elbatm``
- Expected Logical Block Application Tag Mask
-
-``elbat``
- Expected Logical Block Application Tag
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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];
- __u16 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
-
-
-
-
-
-.. c: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 :c:type:`enum nvmf_trtype <nvmf_trtype>`.
-
-``adrfam``
- Address Family (ADRFAM): Specifies the address family.
- See :c:type:`enum nvmf_addr_family <nvmf_addr_family>`.
-
-``subtype``
- Subsystem Type (SUBTYPE): Specifies the type of the NVM subsystem
- that is indicated in this entry. See :c:type:`enum nvme_subsys_type <nvme_subsys_type>`.
-
-``treq``
- Transport Requirements (TREQ): Indicates requirements for the NVMe
- Transport. See :c:type:`enum nvmf_treq <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 :c:type:`enum nvmf_disc_eflags <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
-
-
-
-
-
-.. c: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 :c:type:`enum nvmf_trtype <nvmf_trtype>`
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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 :c:type:`struct nvmf_disc_log_entry <nvmf_disc_log_entry>`.
-
-
-
-
-
-.. c:enum:: nvmf_dim_tas
-
- Discovery Information Management Task
-
-**Constants**
-
-``NVMF_DIM_TAS_REGISTER``
- Register
-
-``NVMF_DIM_TAS_DEREGISTER``
- Deregister
-
-``NVMF_DIM_TAS_UPDATE``
- Update
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c:enum:: nvmf_exattype
-
- Extended Attribute Type
-
-**Constants**
-
-``NVMF_EXATTYPE_HOSTID``
- Host Identifier
-
-``NVMF_EXATTYPE_SYMNAME``
- Symblic Name
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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 (:c:type:`enum nvmf_trtype <nvmf_trtype>`)
-
-``adrfam``
- Address Family (:c:type:`enum nvmf_addr_family <nvmf_addr_family>`)
-
-``subtype``
- Subsystem Type (:c:type:`enum nvme_subsys_type <nvme_subsys_type>`)
-
-``treq``
- Transport Requirements (:c:type:`enum nvmf_treq <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 (:c:type:`union nvmf_tsas <nvmf_tsas>`)
-
-``tel``
- Total Entry Length
-
-``numexat``
- Number of Extended Attributes
-
-``resv1030``
- Reserved
-
-``exat``
- Extended Attributes 0 (:c:type:`struct nvmf_ext_attr <nvmf_ext_attr>`)
-
-
-
-
-
-.. c: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 (:c:type:`struct nvmf_disc_log_entry <nvmf_disc_log_entry>`)
-
-``extended``
- Extended format (:c:type:`struct nvmf_ext_die <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.
-
-
-
-
-.. c: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 (:c:type:`enum nvmf_dim_entfmt <nvmf_dim_entfmt>`)
-
-``etype``
- Entity Type (:c:type:`enum nvmf_dim_etype <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)
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c:struct:: nvme_mi_osc
-
- Optionally Supported Command Data Structure
-
-**Definition**
-
-::
-
- struct nvme_mi_osc {
- __u8 type;
- __u8 opc;
- };
-
-**Members**
-
-``type``
- Command Type
-
-``opc``
- Opcode
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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
-
-
-
-
-
-.. c: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_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_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.
-
-
-.. c:function:: __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 :c:type:`enum nvme_status_field <nvme_status_field>`
-
-**Return**
-
-status code type
-
-
-.. c:function:: __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 :c:type:`enum nvme_status_field <nvme_status_field>`
-
-**Return**
-
-status code
-
-
-
-
-.. c: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.
-
-
-.. c:function:: __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.
-
-
-.. c:function:: __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.
-
-
-.. c:function:: __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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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_BOOT_PARTITION``
- Boot Partition
-
-``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
-
-
-
-
-.. c: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_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
-
-
-
-
-.. c: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``
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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.
-
-
-
-
-.. c:enum:: nvme_directive_dtype
-
- Directive Types
-
-**Constants**
-
-``NVME_DIRECTIVE_DTYPE_IDENTIFY``
- Identify directive type
-
-``NVME_DIRECTIVE_DTYPE_STREAMS``
- Streams directive type
-
-
-
-
-.. c: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``
-
-
-
-
-.. c: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``
-
-
-
-
-.. c:enum:: nvme_directive_send_identify_endir
-
- Enable Directive
-
-**Constants**
-
-``NVME_DIRECTIVE_SEND_IDENTIFY_ENDIR_DISABLE``
-
-``NVME_DIRECTIVE_SEND_IDENTIFY_ENDIR_ENABLE``
-
-
-
-
-.. c: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.
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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``
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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``
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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_resv_release``
- Reservation Release
-
-``nvme_cmd_copy``
- Copy
-
-``nvme_zns_cmd_mgmt_send``
- Zone Management Send
-
-``nvme_zns_cmd_mgmt_recv``
- Zone Management Receive
-
-``nvme_zns_cmd_append``
- Zone Append
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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``
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c:enum:: nvme_resv_rrela
-
- Reservation Release - Reservation Release Action
-
-**Constants**
-
-``NVME_RESERVATION_RRELA_RELEASE``
- Release
-
-``NVME_RESERVATION_RRELA_CLEAR``
- Clear
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
-
-
-.. c: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
-
-
+++ /dev/null
-.. _util.h:
-
-**util.h**
-
-
-libnvme utility functions
-
-
-
-.. c: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
-
-
-.. c:function:: __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 :c:type:`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.
-
-
-.. c:function:: 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 :c:type:`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.
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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, :c:type:`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().
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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
-
-
-.. c:function:: 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
-
-
-.. c:function:: int nvme_get_feature_length (int fid, __u32 cdw11, __u32 *len)
-
- Retrieve the command payload length for a specific feature identifier
-
-**Parameters**
-
-``int fid``
- Feature identifier, see :c:type:`enum nvme_features_id <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 :c:type:`fid`.
-
-
-.. c:function:: int nvme_get_feature_length2 (int fid, __u32 cdw11, enum nvme_data_tfr dir, __u32 *len)
-
- Retrieve the command payload length for a specific feature identifier
-
-**Parameters**
-
-``int fid``
- Feature identifier, see :c:type:`enum nvme_features_id <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 :c:type:`fid`.
-
-
-.. c:function:: 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 :c:type:`enum nvme_directive_dtype <nvme_directive_dtype>`
-
-``enum nvme_directive_receive_doper doper``
- Directive receive operation, see :c:type:`enum nvme_directive_receive_doper <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 :c:type:`dtype` or :c:type:`doper`.
-
-
-.. c:function:: 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**.
-
-
-.. c:function:: 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**.
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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.
-
-
-.. c:macro:: 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
-
-
-.. c:function:: __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
-
-
-.. c:function:: __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**.
-
-
-.. c:function:: 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.
-
-
-
-
-.. c: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
-
-
-.. c:function:: 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"
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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.
-
-
-.. c:function:: 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.
-
-