diff --git a/doc/html/.buildinfo b/doc/html/.buildinfo deleted file mode 100644 index 87f3cf16..00000000 --- a/doc/html/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: d4b1279bd20667a658a462887c1b9569 -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/doc/html/.doctrees/environment.pickle b/doc/html/.doctrees/environment.pickle deleted file mode 100644 index 741425e2..00000000 Binary files a/doc/html/.doctrees/environment.pickle and /dev/null differ diff --git a/doc/html/.doctrees/libnvme.doctree b/doc/html/.doctrees/libnvme.doctree deleted file mode 100644 index 1e5a24e0..00000000 Binary files a/doc/html/.doctrees/libnvme.doctree and /dev/null differ diff --git a/doc/html/_sources/libnvme.rst.txt b/doc/html/_sources/libnvme.rst.txt deleted file mode 100644 index fdb02f09..00000000 --- a/doc/html/_sources/libnvme.rst.txt +++ /dev/null @@ -1,18498 +0,0 @@ -.. _filters.h: - -**filters.h** - - -libnvme directory filter - -.. c:function:: int nvme_namespace_filter (const struct dirent *d) - - -**Parameters** - -``const struct dirent *d`` - - -.. c:function:: int nvme_paths_filter (const struct dirent *d) - - -**Parameters** - -``const struct dirent *d`` - - -.. c:function:: int nvme_ctrls_filter (const struct dirent *d) - - -**Parameters** - -``const struct dirent *d`` - - -.. c:function:: int nvme_subsys_filter (const struct dirent *d) - - -**Parameters** - -``const struct dirent *d`` - - -.. c:function:: int nvme_scan_subsystems (struct dirent ***subsys) - - -**Parameters** - -``struct dirent ***subsys`` - - -.. c:function:: int nvme_scan_subsystem_namespaces (nvme_subsystem_t s, struct dirent ***namespaces) - - -**Parameters** - -``nvme_subsystem_t s`` - -``struct dirent ***namespaces`` - - -.. c:function:: int nvme_scan_ctrls (struct dirent ***ctrls) - - -**Parameters** - -``struct dirent ***ctrls`` - - -.. c:function:: int nvme_scan_ctrl_namespace_paths (nvme_ctrl_t c, struct dirent ***namespaces) - - -**Parameters** - -``nvme_ctrl_t c`` - -``struct dirent ***namespaces`` - - -.. c:function:: int nvme_scan_ctrl_namespaces (nvme_ctrl_t c, struct dirent ***namespaces) - - -**Parameters** - -``nvme_ctrl_t c`` - -``struct dirent ***namespaces`` - - -.. _ioctl.h: - -**ioctl.h** - - -Linux NVMe ioctl interface functions - - - -.. c:struct:: nvme_passthru_cmd - - -**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 ` and :c:type:`enum nvme_admin_opcodes ` - -``flags`` - Not supported: intended for command flags (eg: SGL, FUSE) - -``rsvd1`` - Reserved for future use - -``nsid`` - Namespace Identifier, or Fabrics type - -``cdw2`` - Command Dword 2 (no spec defined use) - -``cdw3`` - Command Dword 3 (no spec defined use) - -``metadata`` - User space address to metadata buffer (NULL if not used) - -``addr`` - User space address to data buffer (NULL if not used) - -``metadata_len`` - Metadata buffer transfer length - -``data_len`` - Data buffer transfer length - -``cdw10`` - Command Dword 10 (command specific) - -``cdw11`` - Command Dword 11 (command specific) - -``cdw12`` - Command Dword 12 (command specific) - -``cdw13`` - Command Dword 13 (command specific) - -``cdw14`` - Command Dword 14 (command specific) - -``cdw15`` - Command Dword 15 (command specific) - -``timeout_ms`` - If non-zero, overrides system default timeout in milliseconds - -``result`` - Set on completion to the command's CQE DWORD 0 controller response - - - - - -.. c:struct:: nvme_passthru_cmd64 - - -**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 ` and :c:type:`enum nvme_admin_opcodes ` - -``flags`` - Not supported: intended for command flags (eg: SGL, FUSE) - -``rsvd1`` - Reserved for future use - -``nsid`` - Namespace Identifier, or Fabrics type - -``cdw2`` - Command Dword 2 (no spec defined use) - -``cdw3`` - Command Dword 3 (no spec defined use) - -``metadata`` - User space address to metadata buffer (NULL if not used) - -``addr`` - User space address to data buffer (NULL if not used) - -``metadata_len`` - Metadata buffer transfer length - -``data_len`` - Data buffer transfer length - -``cdw10`` - Command Dword 10 (command specific) - -``cdw11`` - Command Dword 11 (command specific) - -``cdw12`` - Command Dword 12 (command specific) - -``cdw13`` - Command Dword 13 (command specific) - -``cdw14`` - Command Dword 14 (command specific) - -``cdw15`` - Command Dword 15 (command specific) - -``timeout_ms`` - If non-zero, overrides system default timeout in milliseconds - -``rsvd2`` - Reserved for future use (and fills an impicit struct pad - -``result`` - Set on completion to the command's CQE DWORD 0-1 controller response - - - -.. 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 `) 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 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`` - Reserevd 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 transfered in this command in bytes - -``void *data`` - Pointer to user address of the data buffer - -``__u32 metadata_len`` - Length of metadata transfered 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 `. - -Known values for **opcode** are defined in :c:type:`enum nvme_admin_opcode `. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 `) 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`` - Reserevd 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 transfered in this command in bytes - -``void *data`` - Pointer to user address of the data buffer - -``__u32 metadata_len`` - Length of metadata transfered 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 `. - -Known values for **opcode** are defined in :c:type:`enum nvme_admin_opcode `. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 `) 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`` - Reserevd 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 transfered in this command in bytes - -``void *data`` - Pointer to user address of the data buffer - -``__u32 metadata_len`` - Length of metadata transfered 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 `. - -Known values for **opcode** are defined in :c:type:`enum nvme_io_opcode `. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 `) 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`` - Reserevd 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 transfered in this command in bytes - -``void *data`` - Pointer to user address of the data buffer - -``__u32 metadata_len`` - Length of metadata transfered 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 `. - -Known values for **opcode** are defined in :c:type:`enum nvme_io_opcode `. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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:struct:: nvme_identify_args - - Arguments for the NVMe Identify command - -**Definition** - -:: - - struct nvme_identify_args { - __u32 *result; - void *data; - int args_size; - int fd; - __u32 timeout; - enum nvme_identify_cns cns; - enum nvme_csi csi; - __u32 nsid; - __u16 cntid; - __u16 cns_specific_id; - __u8 uuidx; - }; - -**Members** - -``result`` - The command completion result from CQE dword0 - -``data`` - User space destination address to transfer the data - -``args_size`` - Size of :c:type:`struct nvme_identify_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms (0 for default timeout) - -``cns`` - The Controller or Namespace structure, see **enum** nvme_identify_cns - -``csi`` - Command Set Identifier - -``nsid`` - Namespace identifier, if applicable - -``cntid`` - The Controller Identifier, if applicable - -``cns_specific_id`` - Identifier that is required for a particular CNS value - -``uuidx`` - UUID Index if controller supports this id selection method - - - -.. 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 ` 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 `) 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 ` for details on the data returned. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 ` for details on the structure returned. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 `) 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 identifer - -``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 ` for the definition of the returned structure. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 identifer - -``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 ` for the definition of the returned structure. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 ` for a definition of the structure returned. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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) - - -**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 is returned containing a controller -identifier greater than or equal to the controller identifier specified in -**cntid**. - -See :c:type:`struct 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 `) 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 destriptors - -``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 arrray of 'struct nvme_ns_id_desc'. - -See :c:type:`struct 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 `) 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 `. 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 ` for the defintion of the returned structure. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 ` for the defintion of the returned structure, **cap**. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 ` for a defintion of the returned -structure. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 ` for the definition of the returned -structure. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 ` for the definition of the returned structure. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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) - - -**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 - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum nvme_status_field `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_identify_ctrl_csi (int fd, enum nvme_csi csi, void *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 - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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) - - -**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 ` for the definition of the returned structure. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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) - - -**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 ` for the definition of the returned structure. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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) - - -**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 - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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) - - -**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`` - *undescribed* - -**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 `) 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) - - -**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`` - *undescribed* - -**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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_nvm_identify_ctrl (int fd, struct nvme_id_ctrl_nvm *id) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``struct nvme_id_ctrl_nvm *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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_identify_domain_list (int fd, __u16 domid, struct nvme_id_domain_list *list) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``__u16 domid`` - Domain ID - -``struct nvme_id_domain_list *list`` - User space destiantion 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 ` for the definition of the -returned structure. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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) - - -**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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_identify_iocs (int fd, __u16 cntlid, struct nvme_id_iocs *iocs) - - -**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 `. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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) - - -**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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_zns_identify_ctrl (int fd, struct nvme_zns_id_ctrl *id) - - -**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 `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_get_log_args - - Arguments for the NVMe Admin Get Log command - -**Definition** - -:: - - struct nvme_get_log_args { - __u64 lpo; - __u32 *result; - void *log; - int args_size; - int fd; - __u32 timeout; - enum nvme_cmd_get_log_lid lid; - __u32 len; - __u32 nsid; - enum nvme_csi csi; - __u16 lsi; - __u8 lsp; - __u8 uuidx; - bool rae; - bool ot; - }; - -**Members** - -``lpo`` - Log page offset for partial log transfers - -``result`` - The command completion result from CQE dword0 - -``log`` - User space destination address to transfer the data - -``args_size`` - Length of the structure - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``lid`` - Log page identifier, see :c:type:`enum nvme_cmd_get_log_lid ` for known - values - -``len`` - Length of provided user buffer to hold the log data in bytes - -``nsid`` - Namespace identifier, if applicable - -``csi`` - Command set identifier, see :c:type:`enum nvme_csi ` for known values - -``lsi`` - Log Specific Identifier - -``lsp`` - Log specific field - -``uuidx`` - UUID selection, if supported - -``rae`` - Retain asynchronous events - -``ot`` - Offset Type; if set **lpo** specifies the index into the list - of data structures, otherwise **lpo** specifies the byte offset - into the log page. - - - -.. 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 ` argument structure - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_log_error (int fd, unsigned nr_entries, bool rae, struct nvme_error_log_page *err_log) - - Retrieve nvme error log - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``unsigned 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 `) 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 `) 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 `) 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 `) 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 `) 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 `) 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 - - -.. c:function:: int nvme_get_log_telemetry_host (int fd, __u64 offset, __u32 len, void *log) - - -**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** - -Retreives 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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_log_telemetry_ctrl (int fd, bool rae, __u64 offset, __u32 len, void *log) - - -**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 - - -.. c:function:: int nvme_get_log_endurance_group (int fd, __u16 endgid, struct nvme_endurance_group_log *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 `) 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) - - -**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 `) 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) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``bool rae`` - Retain asynchronous events - -``__u32 offset`` - -``__u32 len`` - -``void *log`` - - -.. c:function:: int nvme_get_log_ana (int fd, enum nvme_log_ana_lsp lsp, bool rae, __u64 offset, __u32 len, void *log) - - -**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 ` - -``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 ` for the defintion of the returned structure. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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) - - -**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 ` for the defintion of the returned structure. - - -.. c:function:: int nvme_get_log_lba_status (int fd, bool rae, __u64 offset, __u32 len, void *log) - - -**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 - - -.. c:function:: int nvme_get_log_endurance_grp_evt (int fd, bool rae, __u32 offset, __u32 len, void *log) - - -**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 - - -.. c:function:: int nvme_get_log_fid_supported_effects (int fd, bool rae, struct nvme_fid_supported_effects_log *log) - - -**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 `) 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) - - -**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 `) or -1 with errno set otherwise - - -.. c:function:: int nvme_get_log_discovery (int fd, bool rae, __u32 offset, __u32 len, void *log) - - -**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 `) 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) - - -**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 `) 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) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``__u16 domid`` - Domain Identifier selection, if supported - -``struct nvme_supported_cap_config_list_log *cap`` - *undescribed* - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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) - - -**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 - - -.. c:function:: int nvme_get_log_sanitize (int fd, bool rae, struct nvme_sanitize_log_page *log) - - -**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 `) 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) - - -**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 `) 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) - - -**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 - - - - -.. c:struct:: nvme_set_features_args - - Arguments for the NVMe Admin Set Feature command - -**Definition** - -:: - - struct nvme_set_features_args { - __u32 *result; - void *data; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - __u32 cdw11; - __u32 cdw12; - __u32 cdw15; - __u32 data_len; - bool save; - __u8 uuidx; - __u8 fid; - }; - -**Members** - -``result`` - The command completion result from CQE dword0 - -``data`` - User address of feature data, if applicable - -``args_size`` - Size of :c:type:`struct nvme_set_features_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``nsid`` - Namespace ID, if applicable - -``cdw11`` - Value to set the feature to - -``cdw12`` - Feature specific command dword12 field - -``cdw15`` - Feature specific command dword15 field - -``data_len`` - Length of feature data, if applicable, in bytes - -``save`` - Save value across power states - -``uuidx`` - UUID Index for differentiating vendor specific encoding - -``fid`` - Feature identifier - - - -.. 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 ` argument structure - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 - - -.. c:function:: int nvme_set_features_simple (int fd, __u8 fid, __u32 nsid, __u32 cdw11, bool save, __u32 *result) - - Helper functionn 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 - - -.. c:function:: int nvme_set_features_arbitration (int fd, __u8 ab, __u8 lpw, __u8 mpw, __u8 hpw, bool save, __u32 *result) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``__u8 ab`` - -``__u8 lpw`` - -``__u8 mpw`` - -``__u8 hpw`` - -``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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_set_features_power_mgmt (int fd, __u8 ps, __u8 wh, bool save, __u32 *result) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``__u8 ps`` - -``__u8 wh`` - -``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 `) 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) - - -**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 `) 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) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``__u16 tmpth`` - -``__u8 tmpsel`` - -``enum nvme_feat_tmpthresh_thsel thsel`` - -``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 `) 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) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``__u32 nsid`` - Namespace ID - -``__u16 tler`` - Time-limited error recovery value - -``bool dulbe`` - -``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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_set_features_volatile_wc (int fd, bool wce, bool save, __u32 *result) - - -**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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_set_features_irq_coalesce (int fd, __u8 thr, __u8 time, bool save, __u32 *result) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``__u8 thr`` - -``__u8 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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_set_features_irq_config (int fd, __u16 iv, bool cd, bool save, __u32 *result) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``__u16 iv`` - -``bool cd`` - -``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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_set_features_write_atomic (int fd, bool dn, bool save, __u32 *result) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``bool dn`` - -``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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_set_features_async_event (int fd, __u32 events, bool save, __u32 *result) - - -**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 `) 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) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``bool apste`` - -``bool save`` - Save value across power states - -``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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_set_features_timestamp (int fd, bool save, __u64 timestamp) - - -**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 this feature - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``__u16 tmt2`` - -``__u16 tmt1`` - -``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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_set_features_nopsc (int fd, bool noppme, bool save, __u32 *result) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``bool noppme`` - -``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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_set_features_rrl (int fd, __u8 rrl, __u16 nvmsetid, bool save, __u32 *result) - - -**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 `) 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) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``bool enable`` - -``__u16 nvmsetid`` - -``bool save`` - Save value across power states - -``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 `) 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) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``enum nvme_feat_plm_window_select sel`` - -``__u16 nvmsetid`` - -``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 `) 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) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``__u16 lsiri`` - -``__u16 lsipi`` - -``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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_set_features_host_behavior (int fd, bool save, struct nvme_feat_host_behavior *data) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``bool save`` - Save value across power states - -``struct nvme_feat_host_behavior *data`` - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum nvme_status_field `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_set_features_sanitize (int fd, bool nodrm, bool save, __u32 *result) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``bool nodrm`` - -``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 `) 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) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``__u16 endgid`` - -``__u8 egwarn`` - Flags to enable warning, see :c:type:`enum nvme_eg_critical_warning_flags ` - -``bool save`` - Save value across power states - -``__u32 *result`` - The command completion result from CQE dword0 - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``__u8 pbslc`` - -``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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_set_features_host_id (int fd, bool exhid, bool save, __u8 *hostid) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``bool exhid`` - -``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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_set_features_resv_mask (int fd, __u32 mask, bool save, __u32 *result) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``__u32 mask`` - -``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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_set_features_resv_persist (int fd, bool ptpl, bool save, __u32 *result) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``bool ptpl`` - -``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 `) 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) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``enum nvme_feat_nswpcfg_state 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 `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_get_features_args - - Arguments for the NVMe Admin Get Feature command - -**Definition** - -:: - - struct nvme_get_features_args { - __u32 *result; - void *data; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - enum nvme_get_features_sel sel; - __u32 cdw11; - __u32 data_len; - __u8 fid; - __u8 uuidx; - }; - -**Members** - -``result`` - The command completion result from CQE dword0 - -``data`` - User address of feature data, if applicable - -``args_size`` - Size of :c:type:`struct nvme_get_features_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``nsid`` - Namespace ID, if applicable - -``sel`` - Select which type of attribute to return, - see :c:type:`enum nvme_get_features_sel ` - -``cdw11`` - Feature specific command dword11 field - -``data_len`` - Length of feature data, if applicable, in bytes - -``fid`` - Feature identifier, see :c:type:`enum nvme_features_id ` - -``uuidx`` - UUID Index for differentiating vendor specific encoding - - - -.. 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 ` argument structure - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 - - -.. 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 - - -.. c:function:: int nvme_get_features_arbitration (int fd, enum nvme_get_features_sel sel, __u32 *result) - - -**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 ` - -``__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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_features_power_mgmt (int fd, enum nvme_get_features_sel sel, __u32 *result) - - -**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 ` - -``__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 `) 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) - - -**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 ` - -``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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_features_temp_thresh (int fd, enum nvme_get_features_sel sel, __u32 *result) - - -**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 ` - -``__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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_features_err_recovery (int fd, enum nvme_get_features_sel sel, __u32 *result) - - -**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 ` - -``__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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_features_volatile_wc (int fd, enum nvme_get_features_sel sel, __u32 *result) - - -**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 ` - -``__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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_features_num_queues (int fd, enum nvme_get_features_sel sel, __u32 *result) - - -**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 ` - -``__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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_features_irq_coalesce (int fd, enum nvme_get_features_sel sel, __u32 *result) - - -**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 ` - -``__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 `) 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) - - -**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 ` - -``__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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_features_write_atomic (int fd, enum nvme_get_features_sel sel, __u32 *result) - - -**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 ` - -``__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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_features_async_event (int fd, enum nvme_get_features_sel sel, __u32 *result) - - -**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 ` - -``__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 `) 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) - - -**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 ` - -``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 `) 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) - - -**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 ` - -``__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 `) 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) - - -**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 ` - -``struct nvme_timestamp *ts`` - Current timestamp - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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) - - -**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 ` - -``__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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_features_hctm (int fd, enum nvme_get_features_sel sel, __u32 *result) - - -**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 ` - -``__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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_features_nopsc (int fd, enum nvme_get_features_sel sel, __u32 *result) - - -**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 ` - -``__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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_features_rrl (int fd, enum nvme_get_features_sel sel, __u32 *result) - - -**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 ` - -``__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 `) 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) - - -**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 ` - -``__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 `) 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) - - -**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 ` - -``__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 `) 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) - - -**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 ` - -``__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 `) 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) - - -**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 ` - -``struct nvme_feat_host_behavior *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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_features_sanitize (int fd, enum nvme_get_features_sel sel, __u32 *result) - - -**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 ` - -``__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 `) 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) - - -**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 ` - -``__u16 endgid`` - -``__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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_features_sw_progress (int fd, enum nvme_get_features_sel sel, __u32 *result) - - -**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 ` - -``__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 `) 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) - - -**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 ` - -``bool exhid`` - -``__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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_features_resv_mask (int fd, enum nvme_get_features_sel sel, __u32 *result) - - -**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 ` - -``__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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_features_resv_persist (int fd, enum nvme_get_features_sel sel, __u32 *result) - - -**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 ` - -``__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 `) 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) - - -**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 ` - -``__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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_features_iocs_profile (int fd, enum nvme_get_features_sel sel, __u32 *result) - - -**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 ` - -``__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 `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_format_nvm_args - - Arguments for the Format Nvme Namespace command - -**Definition** - -:: - - struct nvme_format_nvm_args { - __u32 *result; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - enum nvme_cmd_format_mset mset; - enum nvme_cmd_format_pi pi; - enum nvme_cmd_format_pil pil; - enum nvme_cmd_format_ses ses; - __u8 lbaf; - }; - -**Members** - -``result`` - The command completion result from CQE dword0 - -``args_size`` - Size of :c:type:`struct nvme_format_nvm_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Set to override default timeout to this value in milliseconds; - useful for long running formats. 0 will use system default. - -``nsid`` - Namespace ID to format - -``mset`` - Metadata settings (extended or separated), true if extended - -``pi`` - Protection information type - -``pil`` - Protection information location (beginning or end), true if end - -``ses`` - Secure erase settings - -``lbaf`` - Logical block address format - - - -.. 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 ` 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 `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_ns_mgmt_args - - Arguments for NVMe Namespace Management command - -**Definition** - -:: - - struct nvme_ns_mgmt_args { - __u32 *result; - struct nvme_id_ns *ns; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - enum nvme_ns_mgmt_sel sel; - __u8 csi; - }; - -**Members** - -``result`` - NVMe command result - -``ns`` - Namespace identication descriptors - -``args_size`` - Size of :c:type:`struct nvme_ns_mgmt_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``nsid`` - Namespace identifier - -``sel`` - Type of management operation to perform - -``csi`` - Command Set Identifier - - - -.. 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 ` Argument structure - - -.. c:function:: int nvme_ns_mgmt_create (int fd, struct nvme_id_ns *ns, __u32 *nsid, __u32 timeout, __u8 csi) - - -**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`` - Overide 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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_ns_mgmt_delete (int fd, __u32 nsid) - - -**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 `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_ns_attach_args - - Arguments for Nvme Namespace Management command - -**Definition** - -:: - - struct nvme_ns_attach_args { - __u32 *result; - struct nvme_ctrl_list *ctrlist; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - enum nvme_ns_attach_sel sel; - }; - -**Members** - -``result`` - NVMe command result - -``ctrlist`` - Controller list to modify attachment state of nsid - -``args_size`` - Size of :c:type:`struct nvme_ns_attach_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``nsid`` - Namespace ID to execute attach selection - -``sel`` - Attachment selection, see :c:type:`enum nvme_ns_attach_sel ` - - - -.. 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 ` Argument structure - - -.. c:function:: int nvme_ns_attach_ctrls (int fd, __u32 nsid, struct nvme_ctrl_list *ctrlist) - - -**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 - - -.. c:function:: int nvme_ns_detach_ctrls (int fd, __u32 nsid, struct nvme_ctrl_list *ctrlist) - - -**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 - - - - -.. c:struct:: nvme_fw_download_args - - Arguments for the NVMe Firmware Download command - -**Definition** - -:: - - struct nvme_fw_download_args { - __u32 *result; - void *data; - int args_size; - int fd; - __u32 timeout; - __u32 offset; - __u32 data_len; - }; - -**Members** - -``result`` - The command completion result from CQE dword0 - -``data`` - Userspace address of the firmware data - -``args_size`` - Size of :c:type:`struct nvme_fw_download_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``offset`` - Offset in the firmware data - -``data_len`` - Length of data in this command in bytes - - - -.. 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 ` 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 `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_fw_commit_args - - Arguments for the NVMe Firmware Commit command - -**Definition** - -:: - - struct nvme_fw_commit_args { - __u32 *result; - int args_size; - int fd; - __u32 timeout; - enum nvme_fw_commit_ca action; - __u8 slot; - bool bpid; - }; - -**Members** - -``result`` - The command completion result from CQE dword0 - -``args_size`` - Size of :c:type:`struct nvme_fw_commit_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``action`` - Action to use for the firmware image, see :c:type:`enum nvme_fw_commit_ca ` - -``slot`` - Firmware slot to commit the downloaded image - -``bpid`` - Set to true to select the boot partition id - - - -.. 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 ` 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 `) or -1 with errno set otherwise. The command -status response may specify additional reset actions required to complete -the commit process. - - - - -.. c:struct:: nvme_security_send_args - - Arguments for the NVMe Security Send command - -**Definition** - -:: - - struct nvme_security_send_args { - __u32 *result; - void *data; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - __u32 tl; - __u32 data_len; - __u8 nssf; - __u8 spsp0; - __u8 spsp1; - __u8 secp; - }; - -**Members** - -``result`` - The command completion result from CQE dword0 - -``data`` - Security data payload to send - -``args_size`` - Size of :c:type:`struct nvme_security_send_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``nsid`` - Namespace ID to issue security command on - -``tl`` - Protocol specific transfer length - -``data_len`` - Data length of the payload in bytes - -``nssf`` - NVMe Security Specific field - -``spsp0`` - Security Protocol Specific field - -``spsp1`` - Security Protocol Specific field - -``secp`` - Security Protocol - - - -.. c:function:: int nvme_security_send (struct nvme_security_send_args *args) - - -**Parameters** - -``struct nvme_security_send_args *args`` - :c:type:`struct nvme_security_send ` argument structure - -**Description** - -The Security Send command transfers security protocol data to the -controller. The data structure transferred to the controller as part of this -command contains security protocol specific commands to be performed by the -controller. The data structure transferred may also contain data or -parameters associated with the security protocol commands. - -The security data is protocol specific and is not defined by the NVMe -specification. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum nvme_status_field `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_security_receive_args - - Arguments for the NVMe Security Receive command - -**Definition** - -:: - - struct nvme_security_receive_args { - __u32 *result; - void *data; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - __u32 al; - __u32 data_len; - __u8 nssf; - __u8 spsp0; - __u8 spsp1; - __u8 secp; - }; - -**Members** - -``result`` - The command completion result from CQE dword0 - -``data`` - Security data payload to send - -``args_size`` - Size of :c:type:`struct nvme_security_receive_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``nsid`` - Namespace ID to issue security command on - -``al`` - Protocol specific allocation length - -``data_len`` - Data length of the payload in bytes - -``nssf`` - NVMe Security Specific field - -``spsp0`` - Security Protocol Specific field - -``spsp1`` - Security Protocol Specific field - -``secp`` - Security Protocol - - - -.. c:function:: int nvme_security_receive (struct nvme_security_receive_args *args) - - -**Parameters** - -``struct nvme_security_receive_args *args`` - :c:type:`struct nvme_security_recevice ` argument structure - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum nvme_status_field `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_get_lba_status_args - - Arguments for the NVMe Get LBA Status command - -**Definition** - -:: - - struct nvme_get_lba_status_args { - __u64 slba; - __u32 *result; - struct nvme_lba_status *lbas; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - __u32 mndw; - enum nvme_lba_status_atype atype; - __u16 rl; - }; - -**Members** - -``slba`` - Starting logical block address to check statuses - -``result`` - The command completion result from CQE dword0 - -``lbas`` - Data payload to return status descriptors - -``args_size`` - Size of :c:type:`struct nvme_get_lba_status_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``nsid`` - Namespace ID to retrieve LBA status - -``mndw`` - Maximum number of dwords to return - -``atype`` - Action type mechanism to determine LBA status desctriptors to - return, see :c:type:`enum nvme_lba_status_atype ` - -``rl`` - Range length from slba to perform the action - - - -.. 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 ` 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 `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_directive_send_args - - Arguments for the NVMe Directive Send command - -**Definition** - -:: - - struct nvme_directive_send_args { - __u32 *result; - void *data; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - enum nvme_directive_send_doper doper; - enum nvme_directive_dtype dtype; - __u32 cdw12; - __u32 data_len; - __u16 dspec; - }; - -**Members** - -``result`` - If successful, the CQE dword0 value - -``data`` - Data payload to to be send - -``args_size`` - Size of :c:type:`struct nvme_directive_send_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``nsid`` - Namespace ID, if applicable - -``doper`` - Directive send operation, see :c:type:`enum nvme_directive_send_doper ` - -``dtype`` - Directive type, see :c:type:`enum nvme_directive_dtype ` - -``cdw12`` - Directive specific command dword12 - -``data_len`` - Length of data payload in bytes - -``dspec`` - Directive specific field - - - -.. 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 ` 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 `) 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) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``__u32 nsid`` - -``bool endir`` - -``enum nvme_directive_dtype dtype`` - -``struct nvme_id_directives *id`` - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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) - - -**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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_directive_send_stream_release_resource (int fd, __u32 nsid) - - -**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 `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_directive_recv_args - - Arguments for the NVMe Directive Receive command - -**Definition** - -:: - - struct nvme_directive_recv_args { - __u32 *result; - void *data; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - enum nvme_directive_receive_doper doper; - enum nvme_directive_dtype dtype; - __u32 cdw12; - __u32 data_len; - __u16 dspec; - }; - -**Members** - -``result`` - If successful, the CQE dword0 value - -``data`` - Usespace address of data payload - -``args_size`` - Size of :c:type:`struct nvme_directive_recv_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``nsid`` - Namespace ID, if applicable - -``doper`` - Directive send operation, see :c:type:`enum nvme_directive_send_doper ` - -``dtype`` - Directive type, see :c:type:`enum nvme_directive_dtype ` - -``cdw12`` - Directive specific command dword12 - -``data_len`` - Length of data payload in bytes - -``dspec`` - Directive specific field - - - -.. 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 ` argument structure - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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) - - -**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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_directive_recv_stream_parameters (int fd, __u32 nsid, struct nvme_streams_directive_params *parms) - - -**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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_directive_recv_stream_status (int fd, __u32 nsid, unsigned nr_entries, struct nvme_streams_directive_status *id) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``__u32 nsid`` - Namespace ID - -``unsigned 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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_directive_recv_stream_allocate (int fd, __u32 nsid, __u16 nsr, __u32 *result) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``__u32 nsid`` - Namespace ID - -``__u16 nsr`` - -``__u32 *result`` - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum nvme_status_field `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_capacity_mgmt_args - - Arguments for the NVMe Capacity Management command - -**Definition** - -:: - - struct nvme_capacity_mgmt_args { - __u32 *result; - int args_size; - int fd; - __u32 timeout; - __u32 cdw11; - __u32 cdw12; - __u16 element_id; - __u8 op; - }; - -**Members** - -``result`` - If successful, the CQE dword0 value - -``args_size`` - Size of :c:type:`struct nvme_capacity_mgmt_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``cdw11`` - Least significant 32 bits of the capacity in bytes of the - Endurance Group or NVM Set to be created - -``cdw12`` - Most significant 32 bits of the capacity in bytes of the - Endurance Group or NVM Set to be created - -``element_id`` - Value specific to the value of the Operation field - -``op`` - Operation to be performed by the controller - - - -.. c:function:: int nvme_capacity_mgmt (struct nvme_capacity_mgmt_args *args) - - -**Parameters** - -``struct nvme_capacity_mgmt_args *args`` - :c:type:`struct nvme_capacity_mgmt_args ` argument structure - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum nvme_status_field `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_lockdown_args - - Arguments for the NVME Lockdown command - -**Definition** - -:: - - struct nvme_lockdown_args { - __u32 *result; - int args_size; - int fd; - __u32 timeout; - __u8 scp; - __u8 prhbt; - __u8 ifc; - __u8 ofi; - __u8 uuidx; - }; - -**Members** - -``result`` - The command completion result from CQE dword0 - -``args_size`` - Size of :c:type:`struct nvme_lockdown_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms (0 for default timeout) - -``scp`` - Scope of the command - -``prhbt`` - Prohibit or allow the command opcode or Set Features command - -``ifc`` - Affected interface - -``ofi`` - Opcode or Feature Identifier - -``uuidx`` - UUID Index if controller supports this id selection method - - - -.. 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 ` argument structure - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum nvme_status_field `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_set_property_args - - Arguments for NVMe Set Property command - -**Definition** - -:: - - struct nvme_set_property_args { - __u64 value; - __u32 *result; - int args_size; - int fd; - __u32 timeout; - int offset; - }; - -**Members** - -``value`` - The value to set the property - -``result`` - The command completion result from CQE dword0 - -``args_size`` - Size of :c:type:`struct nvme_set_property_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``offset`` - Property offset from the base to set - - - -.. 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 ` 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 `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_get_property_args - - Arguments for NVMe Get Property command - -**Definition** - -:: - - struct nvme_get_property_args { - __u64 *value; - int args_size; - int fd; - __u32 timeout; - int offset; - }; - -**Members** - -``value`` - Where the property's value will be stored on success - -``args_size`` - Size of :c:type:`struct nvme_get_property_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``offset`` - Property offset from the base to retrieve - - - -.. 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 ` 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 `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_sanitize_nvm_args - - Arguments for the NVMe Sanitize NVM command - -**Definition** - -:: - - struct nvme_sanitize_nvm_args { - __u32 *result; - int args_size; - int fd; - __u32 timeout; - enum nvme_sanitize_sanact sanact; - __u32 ovrpat; - bool ause; - __u8 owpass; - bool oipbp; - bool nodas; - }; - -**Members** - -``result`` - The command completion result from CQE dword0 - -``args_size`` - Size of :c:type:`struct nvme_sanitize_nvm_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``sanact`` - Sanitize action, see :c:type:`enum nvme_sanitize_sanact ` - -``ovrpat`` - Overwrite pattern - -``ause`` - Set to allow unrestriced sanitize exit - -``owpass`` - Overwrite pass count - -``oipbp`` - Set to overwrite invert pattern between passes - -``nodas`` - Set to not deallocate blocks after sanitizing - - - -.. 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 ` 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 `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_dev_self_test_args - - Arguments for the NVMe Device Self Test command - -**Definition** - -:: - - struct nvme_dev_self_test_args { - __u32 *result; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - enum nvme_dst_stc stc; - }; - -**Members** - -``result`` - The command completion result from CQE dword0 - -``args_size`` - Size of :c:type:`struct nvme_dev_self_test_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``nsid`` - Namespace ID to test - -``stc`` - Self test code, see :c:type:`enum nvme_dst_stc ` - - - -.. 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 ` 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 namepsaces 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 `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_virtual_mgmt_args - - Arguments for the NVMe Virtualization resource management command - -**Definition** - -:: - - struct nvme_virtual_mgmt_args { - __u32 *result; - int args_size; - int fd; - __u32 timeout; - enum nvme_virt_mgmt_act act; - enum nvme_virt_mgmt_rt rt; - __u16 cntlid; - __u16 nr; - }; - -**Members** - -``result`` - If successful, the CQE dword0 - -``args_size`` - Size of :c:type:`struct nvme_virtual_mgmt_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``act`` - Virtual resource action, see :c:type:`enum nvme_virt_mgmt_act ` - -``rt`` - Resource type to modify, see :c:type:`enum nvme_virt_mgmt_rt ` - -``cntlid`` - Controller id for which resources are bing modified - -``nr`` - Number of resources being allocated or assigned - - - -.. 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 ` 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 `) 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 `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_io_args - - Arguments for NVMe I/O commands - -**Definition** - -:: - - struct nvme_io_args { - __u64 slba; - __u64 storage_tag; - __u32 *result; - void *data; - void *metadata; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - __u32 reftag; - __u32 data_len; - __u32 metadata_len; - __u16 nlb; - __u16 control; - __u16 apptag; - __u16 appmask; - __u8 dsm; - __u8 dspec; - }; - -**Members** - -``slba`` - Starting logical block - -``storage_tag`` - This filed specifies Variable Sized Expected Logical Block - Storage Tag (ELBST) and Expected Logical Block Reference - Tag (ELBRT) - -``result`` - The command completion result from CQE dword0 - -``data`` - Pointer to user address of the data buffer - -``metadata`` - Pointer to user address of the metadata buffer - -``args_size`` - Size of :c:type:`struct nvme_io_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``nsid`` - Namespace ID - -``reftag`` - This field specifies the Initial Logical Block Reference Tag - expected value. Used only if the namespace is formatted to use - end-to-end protection information. - -``data_len`` - Length of user buffer, **data**, in bytes - -``metadata_len`` - Length of user buffer, **metadata**, in bytes - -``nlb`` - Number of logical blocks to send (0's based value) - -``control`` - Command control flags, see :c:type:`enum nvme_io_control_flags `. - -``apptag`` - This field specifies the Application Tag Mask expected value. - Used only if the namespace is formatted to use end-to-end - protection information. - -``appmask`` - This field specifies the Application Tag expected value. Used - only if the namespace is formatted to use end-to-end protection - information. - -``dsm`` - Data set management attributes, see :c:type:`enum nvme_io_dsm_flags ` - -``dspec`` - Directive specific value - - - -.. 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 ` argument structure - -``__u8 opcode`` - Opcode to execute - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 ` argument structure - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 ` argument structure - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 ` argument structure - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 ` 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 `) 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 ` 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 `) 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 ` 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 `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_dsm_args - - Arguments for the NVMe Dataset Management command - -**Definition** - -:: - - struct nvme_dsm_args { - __u32 *result; - struct nvme_dsm_range *dsm; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - __u32 attrs; - __u16 nr_ranges; - }; - -**Members** - -``result`` - The command completion result from CQE dword0 - -``dsm`` - The data set management attributes - -``args_size`` - Size of :c:type:`struct nvme_dsm_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``nsid`` - Namespace identifier - -``attrs`` - DSM attributes, see :c:type:`enum nvme_dsm_attributes ` - -``nr_ranges`` - Number of block ranges in the data set management attributes - - - -.. 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 ` 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 `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_copy_args - - Arguments for the NVMe Copy command - -**Definition** - -:: - - struct nvme_copy_args { - __u64 sdlba; - __u32 *result; - struct nvme_copy_range *copy; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - __u32 ilbrt; - int lr; - int fua; - __u16 nr; - __u16 dspec; - __u16 lbatm; - __u16 lbat; - __u8 prinfor; - __u8 prinfow; - __u8 dtype; - __u8 format; - }; - -**Members** - -``sdlba`` - Start destination LBA - -``result`` - The command completion result from CQE dword0 - -``copy`` - Range descriptior - -``args_size`` - Size of :c:type:`struct nvme_copy_args ` - -``fd`` - File descriptor of the nvme device - -``timeout`` - Timeout in ms - -``nsid`` - Namespace identifier - -``ilbrt`` - Initial logical block reference tag - -``lr`` - Limited retry - -``fua`` - Force unit access - -``nr`` - Number of ranges - -``dspec`` - Directive specific value - -``lbatm`` - Logical block application tag mask - -``lbat`` - Logical block application tag - -``prinfor`` - Protection information field for read - -``prinfow`` - Protection information field for write - -``dtype`` - Directive type - -``format`` - Descriptor format - - - -.. c:function:: int nvme_copy (struct nvme_copy_args *args) - - -**Parameters** - -``struct nvme_copy_args *args`` - :c:type:`struct nvme_copy_args ` argument structure - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum nvme_status_field `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_resv_acquire_args - - Arguments for the NVMe Reservation Acquire Comand - -**Definition** - -:: - - struct nvme_resv_acquire_args { - __u64 crkey; - __u64 nrkey; - __u32 *result; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - enum nvme_resv_rtype rtype; - enum nvme_resv_racqa racqa; - bool iekey; - }; - -**Members** - -``crkey`` - The current reservation key associated with the host - -``nrkey`` - The reservation key to be unregistered from the namespace if - the action is preempt - -``result`` - The command completion result from CQE dword0 - -``args_size`` - Size of :c:type:`struct nvme_resv_acquire_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``nsid`` - Namespace identifier - -``rtype`` - The type of reservation to be create, see :c:type:`enum nvme_resv_rtype ` - -``racqa`` - The action that is performed by the command, see :c:type:`enum nvme_resv_racqa ` - -``iekey`` - Set to ignore the existing key - - - -.. 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 ` 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 `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_resv_register_args - - Arguments for the NVMe Reservation Register command - -**Definition** - -:: - - struct nvme_resv_register_args { - __u64 crkey; - __u64 nrkey; - __u32 *result; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - enum nvme_resv_rrega rrega; - enum nvme_resv_cptpl cptpl; - bool iekey; - }; - -**Members** - -``crkey`` - The current reservation key associated with the host - -``nrkey`` - The new reservation key to be register if action is register or - replace - -``result`` - The command completion result from CQE dword0 - -``args_size`` - Size of :c:type:`struct nvme_resv_register_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``nsid`` - Namespace identifier - -``rrega`` - The registration action, see :c:type:`enum nvme_resv_rrega ` - -``cptpl`` - Change persist through power loss, see :c:type:`enum nvme_resv_cptpl ` - -``iekey`` - Set to ignore the existing key - - - -.. 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 ` 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 `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_resv_release_args - - Arguments for the NVMe Reservation Release Command - -**Definition** - -:: - - struct nvme_resv_release_args { - __u64 crkey; - __u32 *result; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - enum nvme_resv_rtype rtype; - enum nvme_resv_rrela rrela; - bool iekey; - }; - -**Members** - -``crkey`` - The current reservation key to release - -``result`` - The command completion result from CQE dword0 - -``args_size`` - Size of :c:type:`struct nvme_resv_release_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``nsid`` - Namespace identifier - -``rtype`` - The type of reservation to be create, see :c:type:`enum nvme_resv_rtype ` - -``rrela`` - Reservation releast action, see :c:type:`enum nvme_resv_rrela ` - -``iekey`` - Set to ignore the existing key - - - -.. 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 ` argument structure - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum nvme_status_field `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_resv_report_args - - Arguments for the NVMe Reservation Report command - -**Definition** - -:: - - struct nvme_resv_report_args { - __u32 *result; - struct nvme_resv_status *report; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - __u32 len; - bool eds; - }; - -**Members** - -``result`` - The command completion result from CQE dword0 - -``report`` - The user space destination address to store the reservation - report - -``args_size`` - Size of :c:type:`struct nvme_resv_report_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``nsid`` - Namespace identifier - -``len`` - Number of bytes to request transfered with this command - -``eds`` - Request extended Data Structure - - - -.. 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 defintion for -the returned structure, :c:type:`struct nvme_reservation_status `, for more details. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum nvme_status_field `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_zns_mgmt_send_args - - Arguments for the NVMe ZNS Management Send command - -**Definition** - -:: - - struct nvme_zns_mgmt_send_args { - __u64 slba; - __u32 *result; - void *data; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - enum nvme_zns_send_action zsa; - __u32 data_len; - bool select_all; - __u8 zsaso; - }; - -**Members** - -``slba`` - Starting logical block address - -``result`` - The command completion result from CQE dword0 - -``data`` - Userspace address of the data - -``args_size`` - Size of :c:type:`struct nvme_zns_mgmt_send_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - timeout in ms - -``nsid`` - Namespace ID - -``zsa`` - Zone send action - -``data_len`` - Length of **data** - -``select_all`` - Select all flag - -``zsaso`` - Zone Send Action Specific Option - - - -.. c:function:: int nvme_zns_mgmt_send (struct nvme_zns_mgmt_send_args *args) - - -**Parameters** - -``struct nvme_zns_mgmt_send_args *args`` - :c:type:`struct nvme_zns_mgmt_send_args ` argument structure - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum nvme_status_field `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_zns_mgmt_recv_args - - Arguments for the NVMe ZNS Management Receive command - -**Definition** - -:: - - struct nvme_zns_mgmt_recv_args { - __u64 slba; - __u32 *result; - void *data; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - enum nvme_zns_recv_action zra; - __u32 data_len; - __u16 zrasf; - bool zras_feat; - }; - -**Members** - -``slba`` - Starting logical block address - -``result`` - The command completion result from CQE dword0 - -``data`` - Userspace address of the data - -``args_size`` - Size of :c:type:`struct nvme_zns_mgmt_recv_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - timeout in ms - -``nsid`` - Namespace ID - -``zra`` - zone receive action - -``data_len`` - Length of **data** - -``zrasf`` - Zone receive action specific field - -``zras_feat`` - Zone receive action specific features - - - -.. c:function:: int nvme_zns_mgmt_recv (struct nvme_zns_mgmt_recv_args *args) - - -**Parameters** - -``struct nvme_zns_mgmt_recv_args *args`` - :c:type:`struct nvme_zns_mgmt_recv_args ` argument structure - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum 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 `) or -1 with errno set otherwise. - - - - -.. c:struct:: nvme_zns_append_args - - Arguments for the NVMe ZNS Append command - -**Definition** - -:: - - struct nvme_zns_append_args { - __u64 zslba; - __u64 *result; - void *data; - void *metadata; - int args_size; - int fd; - __u32 timeout; - __u32 nsid; - __u32 ilbrt; - __u32 data_len; - __u32 metadata_len; - __u16 nlb; - __u16 control; - __u16 lbat; - __u16 lbatm; - }; - -**Members** - -``zslba`` - Zone start logical block address - -``result`` - The command completion result from CQE dword0 - -``data`` - Userspace address of the data - -``metadata`` - Userspace address of the metadata - -``args_size`` - Size of :c:type:`struct nvme_zns_append_args ` - -``fd`` - File descriptor of nvme device - -``timeout`` - Timeout in ms - -``nsid`` - Namespace ID - -``ilbrt`` - Initial logical block reference tag - -``data_len`` - Length of **data** - -``metadata_len`` - Length of **metadata** - -``nlb`` - Number of logical blocks - -``control`` - -``lbat`` - Logical block application tag - -``lbatm`` - Logical block application tag mask - - - -.. 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 ` argument structure - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum nvme_status_field `) or -1 with errno set otherwise. - - -.. _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) - - -**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 downlaod - -``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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_ctrl_telemetry (int fd, bool rae, struct nvme_telemetry_log **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 retreived log. - -**Description** - -The total size allocated can be calculated as: - (:c:type:`struct nvme_telemetry_log `.dalb3 + 1) * ``NVME_LOG_TELEM_BLOCK_SIZE``. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum nvme_status_field `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_host_telemetry (int fd, struct nvme_telemetry_log **log) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``struct nvme_telemetry_log **log`` - On success, set to the value of the allocated and retreived log. - -**Description** - -The total size allocated can be calculated as: - (:c:type:`struct nvme_telemetry_log `.dalb3 + 1) * ``NVME_LOG_TELEM_BLOCK_SIZE``. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum nvme_status_field `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_new_host_telemetry (int fd, struct nvme_telemetry_log **log) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``struct nvme_telemetry_log **log`` - On success, set to the value of the allocated and retreived log. - -**Description** - -The total size allocated can be calculated as: - (:c:type:`struct nvme_telemetry_log `.dalb3 + 1) * ``NVME_LOG_TELEM_BLOCK_SIZE``. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum nvme_status_field `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_log_page (int fd, __u32 nsid, __u8 log_id, bool rae, __u32 xfer_len, __u32 data_len, void *data) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``__u32 nsid`` - Namespace Identifier, if applicable. - -``__u8 log_id`` - Log Identifier, see :c:type:`enum nvme_cmd_get_log_lid `. - -``bool rae`` - Retain asynchronous events - -``__u32 xfer_len`` - Max log transfer size per request to split the total. - -``__u32 data_len`` - Total length of the log to transfer. - -``void *data`` - User address of at least :c:type:`data_len` to store the log. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum nvme_status_field `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_log_page_padded (int fd, __u32 nsid, __u8 log_id, bool rae, __u32 data_len, void *data) - - -**Parameters** - -``int fd`` - File descriptor of nvme device - -``__u32 nsid`` - Namespace Identifier, if applicable. - -``__u8 log_id`` - Log Identifier, see :c:type:`enum nvme_cmd_get_log_lid `. - -``bool rae`` - Retain asynchronous events - -``__u32 data_len`` - Total length of the log to transfer. - -``void *data`` - User address of at least :c:type:`data_len` to store the log. - -**Description** - -Calls nvme_get_log_page() with a default 4k transfer length, as that is -guarnateed by the protocol to be a safe transfer size. - -**Return** - -The nvme command status if a response was received (see -:c:type:`enum nvme_status_field `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_ana_log_len (int fd, size_t *analen) - - Retreive 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 `) 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 `) or -1 with errno set otherwise. - - -.. c:function:: int nvme_get_lba_status_log (int fd, bool rae, struct nvme_lba_status_log **log) - - Retreive 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 retreived log. - - -.. 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 `) 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 `) 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 lenght - -``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. - - -.. _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. - - -.. _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`` - filedescriptor for logging messages - -``int log_level`` - logging level to use - -**Return** - -initialized nvme_root_t object - - -.. c:function:: void nvme_free_tree (nvme_root_t r) - - Free root object - -**Parameters** - -``nvme_root_t r`` - nvme_root_t object - -**Description** - -Free an nvme_root_t object and all attached objects - - -.. c:function:: nvme_host_t nvme_first_host (nvme_root_t r) - - Start host iterator - -**Parameters** - -``nvme_root_t r`` - nvme_root_t object - -**Return** - -first nvme_host_t object in an iterator - - -.. c:function:: nvme_host_t nvme_next_host (nvme_root_t r, nvme_host_t h) - - Next host iterator - -**Parameters** - -``nvme_root_t r`` - nvme_root_t object - -``nvme_host_t h`` - previous nvme_host_t iterator - -**Return** - -next nvme_host_t object in an iterator - - -.. c:function:: nvme_root_t nvme_host_get_root (nvme_host_t h) - - Returns nvme_root_t object - -**Parameters** - -``nvme_host_t h`` - host - -**Return** - -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`` - nvme_root_t object - -``const char *hostnqn`` - Host NQN - -``const char *hostid`` - Host ID - -**Description** - -Lookup a nvme_host_t object based on **hostnqn** and **hostid** -or create one if not found. - -**Return** - -nvme_host_t object - - -.. 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`` - nvme_root_t object - -**Description** - -Initializes the default host object based on the values in -/etc/nvme/hostnqn and /etc/nvme/hostid and attaches it to **r**. - -**Return** - -nvme_host_t object - - -.. c:function:: nvme_subsystem_t nvme_first_subsystem (nvme_host_t h) - - Start subsystem iterator - -**Parameters** - -``nvme_host_t h`` - nvme_host_t object - -**Return** - -first nvme_subsystem_t object in an iterator - - -.. c:function:: nvme_subsystem_t nvme_next_subsystem (nvme_host_t h, nvme_subsystem_t s) - - Next subsystem iterator - -**Parameters** - -``nvme_host_t h`` - nvme_host_t object - -``nvme_subsystem_t s`` - previous nvme_subsystem_t iterator - -**Return** - -next nvme_subsystem_t object in an iterator - - -.. 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`` - nvme_host_t object - -``const char *name`` - Name of the subsystem (may be NULL) - -``const char *subsysnqn`` - Subsystem NQN - -**Description** - -Lookup a nvme_subsystem_t object in **h** base on **name** (if present) -and **subsystemnqn** or create one if not found. - -**Return** - -nvme_subsystme_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** - -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`` - nvme_ctrl_t object - -**Return** - -first 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`` - nvme_ctrl_t object - -``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`` - nvme_ctrl_t object - -**Return** - -First 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`` - nvme_ctrl_t object - -``nvme_path_t p`` - previous 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`` - nvme_subsystem_t object - -**Return** - -First nvme_ctrl_t object 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`` - nvme_subsystem_t object - -``nvme_ctrl_t c`` - previous nvme_ctrl_t object of an **s** iterator - -**Return** - -next nvme_ctrl_t object of an **s** 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`` - 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 nvme_ctrl_t object - -**Description** - -Lookup a nvme_ctrl_t object 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** - -nvme_ctrl_t object - - -.. 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 nvme_ctrl_t object to be used for -nvme_add_ctrl(). - -**Return** - -nvme_ctrl_t object - - -.. c:function:: nvme_ns_t nvme_subsystem_first_ns (nvme_subsystem_t s) - - Start namespace iterator - -**Parameters** - -``nvme_subsystem_t s`` - nvme_subsystem_t object - -**Return** - -First nvme_ns_t object of an **s** iterator - - -.. 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`` - nvme_subsystem_t object - -``nvme_ns_t n`` - previous nvme_ns_t iterator - -**Return** - -Next 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`` - nvme_root_t object - -``h`` - nvme_host_t object - -``_h`` - temporary nvme_host_t object - - -.. c:macro:: nvme_for_each_host - -``nvme_for_each_host (r, h)`` - - Traverse host list - -**Parameters** - -``r`` - nvme_root_t object - -``h`` - nvme_host_t object - - -.. c:macro:: nvme_for_each_subsystem_safe - -``nvme_for_each_subsystem_safe (h, s, _s)`` - - Traverse subsystems - -**Parameters** - -``h`` - nvme_host_t object - -``s`` - nvme_subsystem_t object - -``_s`` - temporary nvme_subsystem_t object - - -.. c:macro:: nvme_for_each_subsystem - -``nvme_for_each_subsystem (h, s)`` - - Traverse subsystems - -**Parameters** - -``h`` - nvme_host_t object - -``s`` - 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`` - nvme_subsystem_t object - -``c`` - nvme_ctrl_t object - -``_c`` - temporary nvme_ctrl_t object - - -.. c:macro:: nvme_subsystem_for_each_ctrl - -``nvme_subsystem_for_each_ctrl (s, c)`` - - traverse controllers - -**Parameters** - -``s`` - nvme_subsystem_t object - -``c`` - nvme_ctrl_t object - - -.. c:macro:: nvme_ctrl_for_each_ns_safe - -``nvme_ctrl_for_each_ns_safe (c, n, _n)`` - - traverse namespaces - -**Parameters** - -``c`` - nvme_ctrl_t object - -``n`` - nvme_ns_t object - -``_n`` - temporary nvme_ns_t object - - -.. c:macro:: nvme_ctrl_for_each_ns - -``nvme_ctrl_for_each_ns (c, n)`` - - traverse namespaces - -**Parameters** - -``c`` - nvme_ctrl_t object - -``n`` - 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`` - nvme_ctrl_t object - -``p`` - nvme_path_t object - -``_p`` - temporary nvme_path_t object - - -.. c:macro:: nvme_ctrl_for_each_path - -``nvme_ctrl_for_each_path (c, p)`` - - Traverse paths - -**Parameters** - -``c`` - nvme_ctrl_t object - -``p`` - 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`` - nvme_subsystem_t object - -``n`` - nvme_ns_t object - -``_n`` - temporary nvme_ns_t object - - -.. c:macro:: nvme_subsystem_for_each_ns - -``nvme_subsystem_for_each_ns (s, n)`` - - Traverse namespaces - -**Parameters** - -``s`` - nvme_subsystem_t object - -``n`` - nvme_ns_t object - - -.. c:function:: int nvme_ns_get_fd (nvme_ns_t n) - - Get associated filedescriptor - -**Parameters** - -``nvme_ns_t n`` - nvme_ns_t object - -**Return** - -Filedescriptor associated with **n** or -1 - - -.. c:function:: int nvme_ns_get_nsid (nvme_ns_t n) - - NSID of an nvme_ns_t object - -**Parameters** - -``nvme_ns_t n`` - nvme_ns_t object - -**Return** - -NSID of **n** - - -.. c:function:: int nvme_ns_get_lba_size (nvme_ns_t n) - - LBA size of an nvme_ns_t object - -**Parameters** - -``nvme_ns_t n`` - nvme_ns_t object - -**Return** - -LBA size of **n** - - -.. c:function:: int nvme_ns_get_meta_size (nvme_ns_t n) - - Metadata size of an nvme_ns_t object - -**Parameters** - -``nvme_ns_t n`` - nvme_ns_t object - -**Return** - -Metadata size of **n** - - -.. c:function:: uint64_t nvme_ns_get_lba_count (nvme_ns_t n) - - LBA count of an nvme_ns_t object - -**Parameters** - -``nvme_ns_t n`` - nvme_ns_t object - -**Return** - -LBA count of **n** - - -.. c:function:: uint64_t nvme_ns_get_lba_util (nvme_ns_t n) - - LBA utilisation of an nvme_ns_t object - -**Parameters** - -``nvme_ns_t n`` - nvme_ns_t object - -**Return** - -LBA utilisation of **n** - - -.. c:function:: enum nvme_csi nvme_ns_get_csi (nvme_ns_t n) - - Command set identifier of an nvme_ns_t object - -**Parameters** - -``nvme_ns_t n`` - nvme_ns_t object - -**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 an nvme_ns_t object - -**Parameters** - -``nvme_ns_t n`` - nvme_ns_t object - -**Description** - -Returns a pointer to the 64-bit eui - - -.. c:function:: const uint8_t * nvme_ns_get_nguid (nvme_ns_t n) - - 128-bit nguid of an nvme_ns_t object - -**Parameters** - -``nvme_ns_t n`` - nvme_ns_t object - -**Description** - -Returns a pointer to the 128-bit nguid - - -.. c:function:: void nvme_ns_get_uuid (nvme_ns_t n, uuid_t out) - - UUID of an nvme_ns_t object - -**Parameters** - -``nvme_ns_t n`` - nvme_ns_t object - -``uuid_t out`` - 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 an nvme_ns_t object - -**Parameters** - -``nvme_ns_t n`` - nvme_ns_t object - -**Return** - -sysfs directory name of **n** - - -.. c:function:: const char * nvme_ns_get_name (nvme_ns_t n) - - sysfs name of an nvme_ns_t object - -**Parameters** - -``nvme_ns_t n`` - nvme_ns_t object - -**Return** - -sysfs name of **n** - - -.. c:function:: const char * nvme_ns_get_generic_name (nvme_ns_t n) - - Returns name of generic namesapce 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 an nvme_ns_t object - -**Parameters** - -``nvme_ns_t n`` - nvme_ns_t object - -**Return** - -Firmware string of **n** - - -.. c:function:: const char * nvme_ns_get_serial (nvme_ns_t n) - - Serial number of an nvme_ns_t object - -**Parameters** - -``nvme_ns_t n`` - nvme_ns_t object - -**Return** - -Serial number string of **n** - - -.. c:function:: const char * nvme_ns_get_model (nvme_ns_t n) - - Model of an nvme_ns_t object - -**Parameters** - -``nvme_ns_t n`` - nvme_ns_t object - -**Return** - -Model string of **n** - - -.. c:function:: nvme_subsystem_t nvme_ns_get_subsystem (nvme_ns_t n) - - nvme_subsystem_t of an nvme_ns_t object - -**Parameters** - -``nvme_ns_t n`` - nvme_ns_t object - -**Return** - -nvme_subsystem_t object of **n** - - -.. c:function:: nvme_ctrl_t nvme_ns_get_ctrl (nvme_ns_t n) - - nvme_ctrl_t of an nvme_ns_t object - -**Parameters** - -``nvme_ns_t n`` - nvme_ns_t object - -**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 an nvme_ns_t object - -**Parameters** - -``struct nvme_ns *n`` - nvme_ns_t object - - -.. 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`` - nvme_ns_t object - -``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`` - nvme_ns_t object - -``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`` - nvme_ns_t object - -``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`` - nvme_ns_t object - -``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`` - nvme_ns_t object - -``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`` - nvme_ns_t object - -``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`` - nvme_ns_t object - -**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`` - nvme_ns_t object - -``struct nvme_id_ns *ns`` - nvme_id_ns buffer - -**Description** - -Writes the data returned by the 'identify namespace' command -into **ns**. - -**Return** - -0 on success, -1 on error. - - -.. 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`` - nvme_ns_t object - -``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 nvme_path_t object - -**Parameters** - -``nvme_path_t p`` - 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`` - 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`` - 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`` - 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`` - nvme_path_t object - -**Return** - -parent namespace if present - - -.. c:function:: int nvme_ctrl_get_fd (nvme_ctrl_t c) - - Get associated filedescriptor - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**Return** - -Filedescriptor associated with **c** or -1 - - -.. c:function:: const char * nvme_ctrl_get_name (nvme_ctrl_t c) - - sysfs name of an nvme_ctrl_t object - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**Return** - -sysfs name of **c** - - -.. c:function:: const char * nvme_ctrl_get_sysfs_dir (nvme_ctrl_t c) - - sysfs directory of an nvme_ctrl_t object - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**Return** - -sysfs directory name of **c** - - -.. c:function:: const char * nvme_ctrl_get_address (nvme_ctrl_t c) - - Address string of an nvme_ctrl_t - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**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 an nvme_ctrl_t object - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**Return** - -Firmware string of **c** - - -.. c:function:: const char * nvme_ctrl_get_model (nvme_ctrl_t c) - - Model of an nvme_ctrl_t object - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**Return** - -Model string of **c** - - -.. c:function:: const char * nvme_ctrl_get_state (nvme_ctrl_t c) - - Running state of an nvme_ctrl_t object - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**Return** - -string indicating the running state of **c** - - -.. c:function:: const char * nvme_ctrl_get_numa_node (nvme_ctrl_t c) - - NUMA node of an nvme_ctrl_t object - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**Return** - -string indicating the NUMA node - - -.. c:function:: const char * nvme_ctrl_get_queue_count (nvme_ctrl_t c) - - Queue count of an nvme_ctrl_t object - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**Return** - -Queue count of **c** - - -.. c:function:: const char * nvme_ctrl_get_serial (nvme_ctrl_t c) - - Serial number of an nvme_ctrl_t object - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**Return** - -Serial number string of **c** - - -.. c:function:: const char * nvme_ctrl_get_sqsize (nvme_ctrl_t c) - - SQ size of an nvme_ctrl_t object - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**Return** - -SQ size (as string) of **c** - - -.. c:function:: const char * nvme_ctrl_get_transport (nvme_ctrl_t c) - - Transport type of an nvme_ctrl_t object - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**Return** - -Transport type of **c** - - -.. c:function:: const char * nvme_ctrl_get_subsysnqn (nvme_ctrl_t c) - - Subsystem NQN of an nvme_ctrl_t object - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**Return** - -Subsystem NQN of **c** - - -.. c:function:: nvme_subsystem_t nvme_ctrl_get_subsystem (nvme_ctrl_t c) - - Parent subsystem of an nvme_ctrl_t object - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**Return** - -Parent nvme_subsystem_t object - - -.. c:function:: const char * nvme_ctrl_get_traddr (nvme_ctrl_t c) - - Transport address of an nvme_ctrl_t object - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**Return** - -Transport address of **c** - - -.. c:function:: const char * nvme_ctrl_get_trsvcid (nvme_ctrl_t c) - - Transport service identifier of an nvme_ctrl_t object - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**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 an nvme_ctrl_t object - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**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 an nvme_ctrl_t object - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**Return** - -Host interface name of **c** (if present) - - -.. 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 returned - -**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 an nvme_ctrl_t object - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -**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`` - nvme_ctrl_t object - -**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`` - nvme_ctrl_t object - -``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`` - nvme_ctrl_t object - -**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`` - nvme_ctrl_t object - -``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`` - nvme_ctrl_t object - -**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 nvme_ctrl_t object - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - - -.. c:function:: int nvme_init_ctrl (nvme_host_t h, nvme_ctrl_t c, int instance) - - Initialize nvme_ctrl_t object for an existing nvme 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) - - -**Parameters** - -``struct nvme_ctrl *c`` - - -.. c:function:: void nvme_unlink_ctrl (struct nvme_ctrl *c) - - -**Parameters** - -``struct nvme_ctrl *c`` - - -.. c:function:: const char * nvme_subsystem_get_nqn (nvme_subsystem_t s) - - -**Parameters** - -``nvme_subsystem_t s`` - - -.. 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`` - Subsystem - -**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) - - Scan NVMe topology and apply filter - -**Parameters** - -``nvme_root_t r`` - nvme_root_t object - -``nvme_scan_filter_t f`` - filter to apply - -**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:: 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** - - -.. 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** - - -.. c:function:: char * nvme_get_ctrl_attr (nvme_ctrl_t c, const char *attr) - - Read controller sysfs attribute - -**Parameters** - -``nvme_ctrl_t c`` - nvme_ctrl_t object - -``const char *attr`` - sysfs attribute name - -**Return** - -string with the contents of **attr** - - -.. 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** - - -.. 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** - - -.. 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. - - -.. _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 - - - - -.. 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 lagest 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_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_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_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. - -Returns 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`` - -**Description** - -Returns 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`` - -**Description** - -Returns 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`` - -**Description** - -Returns 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 ` ``ips`` and ``aps``. Use with nvme_psd_power_scale() to extract the power scale field to match this enum. - -**Constants** - -``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 - - - - -.. c:enum:: nvme_psd_workload - - Specifies a workload hint in the Power Management Feature (see :c:type:`struct nvme_psd `.apw) to inform the NVM subsystem or indicate the conditions for the active power level. - -**Constants** - -``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 - - -**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 `). A value of 0 indicates - Maximum Power is not reported. - -``rsvd2`` - Reserved - -``flags`` - Additional decoding flags, see :c:type:`enum nvme_psd_flags `. - -``enlat`` - Entry Latency indicates the maximum latency in microseconds - associated with entering this power state. A value of 0 indicates - Entry Latency is not reported. - -``exlat`` - Exit Latency indicates the maximum latency in microseconds - associated with exiting this power state. A value of 0 indicates - Exit Latency is not reported. - -``rrt`` - Relative Read Throughput indicates the read throughput rank - associated with this power state relative to others. The value in - this is less than the number of supported power states. - -``rrl`` - Relative Reade 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 `.idlp, - see :c:type:`enum nvme_psd_ps ` for decoding this field. - -``rsvd19`` - Reserved - -``actp`` - Active Power indicates the largest average power consumed by the - NVM subsystem over a 10 second period in this power state with - the workload indicated in the Active Power Workload field. - -``apws`` - Bits 7-6: Active Power Scale(APS) indicates the scale for the :c:type:`struct - nvme_id_psd `.actp, see :c:type:`enum nvme_psd_ps ` for decoding this value. - Bits 2-0: Active Power Workload(APW) indicates the workload - used to calculate maximum power for this power state. - See :c:type:`enum 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 rsvd1806[242]; - 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 `. - -``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_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 ` - -``fguid`` - FRU GUID, a 128-bit value that is globally unique for a given - Field Replaceable Unit - -``crdt1`` - Controller Retry Delay time in 100 millisecod units if CQE CRD - field is 1 - -``crdt2`` - Controller Retry Delay time in 100 millisecod units if CQE CRD - field is 2 - -``crdt3`` - Controller Retry Delay time in 100 millisecod units if CQE CRD - field is 3 - -``rsvd134`` - Reserved - -``nvmsr`` - NVM Subsystem Report, see :c:type:`enum nvme_id_ctrl_nvmsr ` - -``vwci`` - VPD Write Cycle Information, see :c:type:`enum nvme_id_ctrl_vwci ` - -``mec`` - Management Endpoint Capabilities, see :c:type:`enum 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 `. - -``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 `. - -``lpa`` - Log Page Attributes, see :c:type:`enum nvme_id_ctrl_lpa `. - -``elpe`` - Error Log Page Entries, the maximum number of Error Information - log entries that are stored by the controller. This field is a - 0's based value. - -``npss`` - Number of Power States Supported, the number of NVM Express - power states supported by the controller, indicating the number - of valid entries in :c:type:`struct 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 `. - -``apsta`` - Autonomous Power State Transition Attributes, see - :c:type:`enum nvme_id_ctrl_apsta `. - -``wctemp`` - Warning Composite Temperature Threshold indicates - the minimum Composite Temperature field value (see :c:type:`struct - nvme_smart_log `.critical_comp_time) that indicates an overheating - condition during which controller operation continues. - -``cctemp`` - Critical Composite Temperature Threshold, field indicates the - minimum Composite Temperature field value (see :c:type:`struct - nvme_smart_log `.critical_comp_time) that indicates a critical - overheating condition. - -``mtfa`` - Maximum Time for Firmware Activation indicates the maximum time - the controller temporarily stops processing commands to activate - the firmware image, specified in 100 millisecond units. This - field is always valid if the controller supports firmware - activation without a reset. - -``hmpre`` - Host Memory Buffer Preferred Size indicates the preferred size - that the host is requested to allocate for the Host Memory - Buffer feature in 4 KiB units. - -``hmmin`` - Host Memory Buffer Minimum Size indicates the minimum size that - the host is requested to allocate for the Host Memory Buffer - feature in 4 KiB units. - -``tnvmcap`` - Total NVM Capacity, the total NVM capacity in the NVM subsystem. - The value is in bytes. - -``unvmcap`` - Unallocated NVM Capacity, the unallocated NVM capacity in the - NVM subsystem. The value is in bytes. - -``rpmbs`` - Replay Protected Memory Block Support, see - :c:type:`enum nvme_id_ctrl_rpmbs `. - -``edstt`` - Extended Device Self-test Time, if Device Self-test command is - supported (see :c:type:`struct nvme_id_ctrl `.oacs, ``NVME_CTRL_OACS_SELF_TEST``), - then this field indicates the nominal amount of time in one - minute units that the controller takes to complete an extended - device self-test operation when in power state 0. - -``dsto`` - Device Self-test Options, see :c:type:`enum nvme_id_ctrl_dsto `. - -``fwug`` - Firmware Update Granularity indicates the granularity and - alignment requirement of the firmware image being updated by the - Firmware Image Download command. The value is reported in 4 KiB - units. A value of 0h indicates no information on granularity is - provided. A value of FFh indicates no restriction - -``kas`` - Keep Alive Support indicates the granularity of the Keep Alive - Timer in 100 millisecond units. - -``hctma`` - Host Controlled Thermal Management Attributes, see - :c:type:`enum nvme_id_ctrl_hctm `. - -``mntmt`` - Minimum Thermal Management Temperature indicates the minimum - temperature, in degrees Kelvin, that the host may request in the - Thermal Management Temperature 1 field and Thermal Management - Temperature 2 field of a Set Features command with the Feature - Identifier field set to ``NVME_FEAT_FID_HCTM``. - -``mxtmt`` - Maximum Thermal Management Temperature indicates the maximum - temperature, in degrees Kelvin, that the host may request in the - Thermal Management Temperature 1 field and Thermal Management - Temperature 2 field of the Set Features command with the Feature - Identifier set to ``NVME_FEAT_FID_HCTM``. - -``sanicap`` - Sanitize Capabilities, see :c:type:`enum nvme_id_ctrl_sanicap ` - -``hmminds`` - Host Memory Buffer Minimum Descriptor Entry Size indicates the - minimum usable size of a Host Memory Buffer Descriptor Entry in - 4 KiB units. - -``hmmaxd`` - Host Memory Maximum Descriptors Entries indicates the number of - usable Host Memory Buffer Descriptor Entries. - -``nsetidmax`` - NVM Set Identifier Maximum, defines the maximum value of a valid - NVM Set Identifier for any controller in the NVM subsystem. - -``endgidmax`` - Endurance Group Identifier Maximum, defines the maximum value of - a valid Endurance Group Identifier for any controller in the NVM - subsystem. - -``anatt`` - ANA Transition Time indicates the maximum amount of time, in - seconds, for a transition between ANA states or the maximum - amount of time, in seconds, that the controller reports the ANA - change state. - -``anacap`` - Asymmetric Namespace Access Capabilities, see - :c:type:`enum nvme_id_ctrl_anacap `. - -``anagrpmax`` - ANA Group Identifier Maximum indicates the maximum value of a - valid ANA Group Identifier for any controller in the NVM - subsystem. - -``nanagrpid`` - Number of ANA Group Identifiers indicates the number of ANA - groups supported by this controller. - -``pels`` - Persistent Event Log Size indicates the maximum reportable size - for the Persistent Event Log. - -``domainid`` - Domain Identifier indicates the identifier of the domain - that contains this controller. - -``rsvd358`` - Reserved - -``megcap`` - Max Endurance Group Capacity indicates the maximum capacity - of a single Endurance Group. - -``rsvd384`` - Reserved - -``sqes`` - Submission Queue Entry Size, see :c:type:`enum nvme_id_ctrl_sqes `. - -``cqes`` - Completion Queue Entry Size, see :c:type:`enum nvme_id_ctrl_cqes `. - -``maxcmd`` - Maximum Outstanding Commands indicates the maximum number of - commands that the controller processes at one time for a - particular queue. - -``nn`` - Number of Namespaces indicates the maximum value of a valid - nsid for the NVM subsystem. If the MNAN (:c:type:`struct nvme_id_ctrl `.mnan - field is cleared to 0h, then this field also indicates the - maximum number of namespaces supported by the NVM subsystem. - -``oncs`` - Optional NVM Command Support, see :c:type:`enum nvme_id_ctrl_oncs `. - -``fuses`` - Fused Operation Support, see :c:type:`enum nvme_id_ctrl_fuses `. - -``fna`` - Format NVM Attributes, see :c:type:`enum nvme_id_ctrl_fna `. - -``vwc`` - Volatile Write Cache, see :c:type:`enum nvme_id_ctrl_vwc `. - -``awun`` - Atomic Write Unit Normal indicates the size of the write - operation guaranteed to be written atomically to the NVM across - all namespaces with any supported namespace format during normal - operation. This field is specified in logical blocks and is a - 0's based value. - -``awupf`` - Atomic Write Unit Power Fail indicates the size of the write - operation guaranteed to be written atomically to the NVM across - all namespaces with any supported namespace format during a - power fail or error condition. This field is specified in - logical blocks and is a 0’s based value. - -``icsvscc`` - NVM Vendor Specific Command Configuration, see - :c:type:`enum nvme_id_ctrl_nvscc `. - -``nwpc`` - Namespace Write Protection Capabilities, see - :c:type:`enum nvme_id_ctrl_nwpc `. - -``acwu`` - Atomic Compare & Write Unit indicates the size of the write - operation guaranteed to be written atomically to the NVM across - all namespaces with any supported namespace format for a Compare - and Write fused operation. This field is specified in logical - blocks and is a 0’s based value. - -``ocfs`` - Optional Copy Formats Supported, each bit n means controller - supports Copy Format n. - -``sgls`` - SGL Support, see :c:type:`enum nvme_id_ctrl_sgls ` - -``mnan`` - Maximum Number of Allowed Namespaces indicates the maximum - number of namespaces supported by the NVM subsystem. - -``maxdna`` - Maximum Domain Namespace Attachments indicates the maximum - of the sum of the numver 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 `. - -``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 `. - -``rsvd1806`` - Reserved - -``psd`` - Power State Descriptors, see :c:type:`struct 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 Managment 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_nvmsr - - This field reports information associated with the NVM Subsystem, see :c:type:`struct nvme_id_ctrl `.nvmsr. - -**Constants** - -``NVME_CTRL_NVMSR_NVMESD`` - If set, then the NVM Subsystem is part of an NVMe - Storage Device; if cleared, then the NVM Subsystem - is not part of an NVMe Storage Device. - -``NVME_CTRL_NVMSR_NVMEE`` - If set’, then the NVM Subsystem is part of an NVMe - Enclosure; if cleared, then the NVM Subsystem is - not part of an NVMe Enclosure. - - - - -.. 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 `.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 indicatings the capabilities of the Management Endpoint in the Controller, :c:type:`struct nvme_id_ctrl `.mec. - -**Constants** - -``NVME_CTRL_MEC_SMBUSME`` - If set, then the NVM Subsystem contains a Management - Endpoint on an SMBus/I2C port. - -``NVME_CTRL_MEC_PCIEME`` - If set, then the NVM Subsystem contains a Management - Endpoint on a PCIe port. - - - - -.. 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 `.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. - - - - -.. c:enum:: nvme_id_ctrl_frmw - - Flags and values indicates capabilities regarding firmware updates from :c:type:`struct nvme_id_ctrl `.frmw. - -**Constants** - -``NVME_CTRL_FRMW_1ST_RO`` - If set, the first firmware slot is readonly - -``NVME_CTRL_FRMW_NR_SLOTS`` - Mask to get the value of the number of - firmware slots that the controller supports. - -``NVME_CTRL_FRMW_FW_ACT_NO_RESET`` - If set, the controller supports firmware - activation without a reset. - - - - -.. 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`` - -``NVME_CTRL_LPA_CMD_EFFECTS`` - -``NVME_CTRL_LPA_EXTENDED`` - -``NVME_CTRL_LPA_TELEMETRY`` - -``NVME_CTRL_LPA_PERSETENT_EVENT`` - - - - -.. 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 `.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 `.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. - - - - -.. 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. - - - - -.. c:enum:: nvme_id_ctrl_vwc - - -**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 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 `. - - - - - -.. 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]; - __u8 vs[3712]; - }; - -**Members** - -``nsze`` - Namespace Size indicates the total size of the namespace in - logical blocks. The number of logical blocks is based on the - formatted LBA size. - -``ncap`` - Namespace Capacity indicates the maximum number of logical blocks - that may be allocated in the namespace at any point in time. The - number of logical blocks is based on the formatted LBA size. - -``nuse`` - Namespace Utilization indicates the current number of logical - blocks allocated in the namespace. This field is smaller than or - equal to the Namespace Capacity. The number of logical blocks is - based on the formatted LBA size. - -``nsfeat`` - Namespace Features, see :c:type:`enum nvme_id_nsfeat `. - -``nlbaf`` - Number of LBA Formats defines the number of supported LBA data - size and metadata size combinations supported by the namespace - and the highest possible index to :c:type:`struct nvme_id_ns `.lbaf. - -``flbas`` - Formatted LBA Size, see :c:type:`enum nvme_id_ns_flbas `. - -``mc`` - Metadata Capabilities, see :c:type:`enum nvme_id_ns_mc `. - -``dpc`` - End-to-end Data Protection Capabilities, see - :c:type:`enum nvme_id_ns_dpc `. - -``dps`` - End-to-end Data Protection Type Settings, see - :c:type:`enum nvme_id_ns_dps `. - -``nmic`` - Namespace Multi-path I/O and Namespace Sharing Capabilities, see - :c:type:`enum nvme_id_ns_nmic `. - -``rescap`` - Reservation Capabilities, see :c:type:`enum nvme_id_ns_rescap `. - -``fpi`` - Format Progress Indicator, see :c:type:`enum nvme_nd_ns_fpi `. - -``dlfeat`` - Deallocate Logical Block Features, see :c:type:`enum nvme_id_ns_dlfeat `. - -``nawun`` - Namespace Atomic Write Unit Normal indicates the - namespace specific size of the write operation guaranteed to be - written atomically to the NVM during normal operation. - -``nawupf`` - Namespace Atomic Write Unit Power Fail indicates the - namespace specific size of the write operation guaranteed to be - written atomically to the NVM during a power fail or error - condition. - -``nacwu`` - Namespace Atomic Compare & Write Unit indicates the namespace - specific size of the write operation guaranteed to be written - atomically to the NVM for a Compare and Write fused command. - -``nabsn`` - Namespace Atomic Boundary Size Normal indicates the atomic - boundary size for this namespace for the NAWUN value. This field - is specified in logical blocks. - -``nabo`` - Namespace Atomic Boundary Offset indicates the LBA on this - namespace where the first atomic boundary starts. - -``nabspf`` - Namespace Atomic Boundary Size Power Fail indicates the atomic - boundary size for this namespace specific to the Namespace Atomic - Write Unit Power Fail value. This field is specified in logical - blocks. - -``noiob`` - Namespace Optimal I/O Boundary indicates the optimal I/O boundary - for this namespace. This field is specified in logical blocks. - The host should construct Read and Write commands that do not - cross the I/O boundary to achieve optimal performance. - -``nvmcap`` - NVM Capacity indicates the total size of the NVM allocated to - this namespace. The value is in bytes. - -``npwg`` - Namespace Preferred Write Granularity indicates the smallest - recommended write granularity in logical blocks for this - namespace. This is a 0's based value. - -``npwa`` - Namespace Preferred Write Alignment indicates the recommended - write alignment in logical blocks for this namespace. This is a - 0's based value. - -``npdg`` - Namespace Preferred Deallocate Granularity indicates the - recommended granularity in logical blocks for the Dataset - Management command with the Attribute - Deallocate bit. - -``npda`` - Namespace Preferred Deallocate Alignment indicates the - recommended alignment in logical blocks for the Dataset - Management command with the Attribute - Deallocate bit - -``nows`` - Namespace Optimal Write Size indicates the size in logical blocks - for optimal write performance for this namespace. This is a 0's - based value. - -``mssrl`` - Maximum Single Source Range Length indicates the maximum number - of logical blocks that may be specified in each valid Source Range - field of a Copy command. - -``mcl`` - Maximum Copy Length indicates the maximum number of logical - blocks that may be specified in a Copy command. - -``msrc`` - Maximum Source Range Count indicates the maximum number of Source - Range entries that may be used to specify source data in a Copy - command. This is a 0’s based value. - -``rsvd81`` - Reserved - -``nulbaf`` - Number of Unique Capability LBA Formats defines the number of - supported user data size and metadata size combinations supported - by the namespace that may not share the same capabilities. LBA - formats shall be allocated in order and packed sequentially. - -``rsvd83`` - Reserved - -``anagrpid`` - ANA Group Identifier indicates the ANA Group Identifier of the - ANA group of which the namespace is a member. - -``rsvd96`` - Reserved - -``nsattr`` - Namespace Attributes, see :c:type:`enum nvme_id_ns_attr `. - -``nvmsetid`` - NVM Set Identifier indicates the NVM Set with which this - namespace is associated. - -``endgid`` - Endurance Group Identifier indicates the Endurance Group with - which this namespace is associated. - -``nguid`` - Namespace Globally Unique Identifier contains a 128-bit value - that is globally unique and assigned to the namespace when the - namespace is created. This field remains fixed throughout the - life of the namespace and is preserved across namespace and - controller operations - -``eui64`` - IEEE Extended Unique Identifier contains a 64-bit IEEE Extended - Unique Identifier (EUI-64) that is globally unique and assigned - to the namespace when the namespace is created. This field - remains fixed throughout the life of the namespace and is - preserved across namespace and controller operations - -``lbaf`` - LBA Format, see :c:type:`struct nvme_lbaf `. - -``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 `.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 `.lbaf. - - - - -.. 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 - - -**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 ` - -``nidl`` - Namespace Identifier Length contains the length in bytes of the - :c:type:`struct nvme_id_ns `.nid. - -``rsvd`` - Reserved - -``nid`` - Namespace Identifier contains a value that is globally unique and - assigned to the namespace when the namespace is created. The length - is defined in :c:type:`struct 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 indentifier. - - - - -.. 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 - - -**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 - - -**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`` - -``nmic`` - -``rescap`` - -``fpi`` - -``anagrpid`` - -``nsattr`` - -``rsvd9`` - -``nvmsetid`` - -``endgid`` - -``nstat`` - -``rsvd15`` - - - - - -.. c:struct:: nvme_id_ns_granularity_desc - - -**Definition** - -:: - - struct nvme_id_ns_granularity_desc { - __le64 nszegran; - __le64 ncapgran; - }; - -**Members** - -``nszegran`` - -``ncapgran`` - - - - - -.. c:struct:: nvme_id_ns_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`` - -``num_descriptors`` - -``rsvd5`` - -``entry`` - -``rsvd288`` - - - - - -.. c:struct:: nvme_id_uuid_list_entry - - -**Definition** - -:: - - struct nvme_id_uuid_list_entry { - __u8 header; - __u8 rsvd1[15]; - __u8 uuid[16]; - }; - -**Members** - -``header`` - -``rsvd1`` - -``uuid`` - - - - - -.. c:enum:: nvme_id_uuid - - -**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 - - -**Definition** - -:: - - struct nvme_id_uuid_list { - __u8 rsvd0[32]; - struct nvme_id_uuid_list_entry entry[NVME_ID_UUID_LIST_MAX]; - }; - -**Members** - -``rsvd0`` - -``entry`` - - - - - -.. c:struct:: nvme_ctrl_list - - -**Definition** - -:: - - struct nvme_ctrl_list { - __le16 num; - __le16 identifier[NVME_ID_CTRL_LIST_MAX]; - }; - -**Members** - -``num`` - -``identifier`` - - - - - -.. c:struct:: nvme_ns_list - - -**Definition** - -:: - - struct nvme_ns_list { - __le32 ns[NVME_ID_NS_LIST_MAX]; - }; - -**Members** - -``ns`` - - - - - -.. c:struct:: nvme_id_ctrl_nvm - - -**Definition** - -:: - - struct nvme_id_ctrl_nvm { - __u8 vsl; - __u8 wzsl; - __u8 wusl; - __u8 dmrl; - __u32 dmrsl; - __u64 dmsl; - __u8 rsvd16[4080]; - }; - -**Members** - -``vsl`` - -``wzsl`` - -``wusl`` - -``dmrl`` - -``dmrsl`` - -``dmsl`` - -``rsvd16`` - - - - - -.. c:struct:: nvme_nvm_id_ns - - -**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 - - -**Definition** - -:: - - struct nvme_zns_lbafe { - __le64 zsze; - __u8 zdes; - __u8 rsvd9[7]; - }; - -**Members** - -``zsze`` - -``zdes`` - -``rsvd9`` - - - - - -.. 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 - - -**Definition** - -:: - - struct nvme_zns_id_ctrl { - __u8 zasl; - __u8 rsvd1[4095]; - }; - -**Members** - -``zasl`` - -``rsvd1`` - Reserved - - - - - -.. c:struct:: nvme_primary_ctrl_cap - - -**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`` - -``portid`` - -``crt`` - -``rsvd5`` - -``vqfrt`` - -``vqrfa`` - -``vqrfap`` - -``vqprt`` - -``vqfrsm`` - -``vqgran`` - -``rsvd48`` - -``vifrt`` - -``virfa`` - -``virfap`` - -``viprt`` - -``vifrsm`` - -``vigran`` - -``rsvd80`` - - - - - -.. c:struct:: nvme_secondary_ctrl - - -**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`` - -``pcid`` - -``scs`` - -``rsvd5`` - -``vfn`` - -``nvq`` - -``nvi`` - -``rsvd14`` - - - - - -.. c:struct:: nvme_secondary_ctrl_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`` - -``rsvd`` - -``sc_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`` - -``rsvd2`` - -``dom_cap`` - -``unalloc_dom_cap`` - -``max_egrp_dom_cap`` - -``rsvd64`` - - - - - -.. c:struct:: nvme_id_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 - - -**Definition** - -:: - - struct nvme_id_endurance_group_list { - __le16 num; - __le16 identifier[NVME_ID_ENDURANCE_GROUP_LIST_MAX]; - }; - -**Members** - -``num`` - -``identifier`` - - - - - -.. c:struct:: nvme_supported_log_pages - - -**Definition** - -:: - - struct nvme_supported_log_pages { - __le32 lid_support[NVME_LOG_SUPPORTED_LOG_PAGES_MAX]; - }; - -**Members** - -``lid_support`` - - -**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 `. - -``rsvd`` - Reserved - -``cs`` - Command Specific Information: This field contains command - specific information. If used, the command definition - specifies the information returned. - -``trtype_spec_info`` - -``rsvd2`` - - - - - -.. c:enum:: nvme_err_pel - - -**Constants** - -``NVME_ERR_PEL_BYTE_MASK`` - -``NVME_ERR_PEL_BIT_MASK`` - - - - -.. 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 `). - -``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 `). - -``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 - - -**Definition** - -:: - - struct nvme_firmware_slot { - __u8 afi; - __u8 rsvd1[7]; - char frs[7][8]; - __u8 rsvd2[448]; - }; - -**Members** - -``afi`` - -``rsvd1`` - -``frs`` - -``rsvd2`` - - - - - -.. c:struct:: nvme_cmd_effects_log - - -**Definition** - -:: - - struct nvme_cmd_effects_log { - __le32 acs[256]; - __le32 iocs[256]; - __u8 rsvd[2048]; - }; - -**Members** - -``acs`` - -``iocs`` - -``rsvd`` - - - - - -.. c:enum:: nvme_cmd_effects - - -**Constants** - -``NVME_CMD_EFFECTS_CSUPP`` - -``NVME_CMD_EFFECTS_LBCC`` - -``NVME_CMD_EFFECTS_NCC`` - -``NVME_CMD_EFFECTS_NIC`` - -``NVME_CMD_EFFECTS_CCC`` - -``NVME_CMD_EFFECTS_CSE_MASK`` - -``NVME_CMD_EFFECTS_UUID_SEL`` - - - - -.. 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 ` and :c:type:`enum nvme_st_code `). - -``seg`` - Segment Number: Iindicates the segment number where the first self-test - failure occurred. If Device Self-test Status (**dsts**) is not set to - #NVME_ST_RESULT_KNOWN_SEG_FAIL, then this field should be ignored. - -``vdi`` - Valid Diagnostic Information: Indicates the diagnostic failure - information that is reported. See :c:type:`enum nvme_st_valid_diag_info `. - -``rsvd`` - Reserved - -``poh`` - Power On Hours (POH): Indicates the number of power-on hours at the - time the device self-test operation was completed or aborted. This - does not include time that the controller was powered and in a low - power state condition. - -``nsid`` - Namespace Identifier (NSID): Indicates the namespace that the Failing - LBA occurred on. Valid only when the NSID Valid bit - (#NVME_ST_VALID_DIAG_INFO_NSID) is set in the Valid Diagnostic - Information (**vdi**) field. - -``flba`` - Failing LBA: indicates the LBA of the logical block that caused the - test to fail. If the device encountered more than one failed logical - block during the test, then this field only indicates one of those - failed logical blocks. Valid only when the NSID Valid bit - (#NVME_ST_VALID_DIAG_INFO_FLBA) is set in the Valid Diagnostic - Information (**vdi**) field. - -``sct`` - Status Code Type: This field may contain additional information related - to errors or conditions. Bits 2:0 may contain additional information - relating to errors or conditions that occurred during the device - self-test operation represented in the same format used in the Status - Code Type field of the completion queue entry (refer to :c:type:`enum nvme_status_field `). - Valid only when the NSID Valid bit (#NVME_ST_VALID_DIAG_INFO_SCT) is - set in the Valid Diagnostic Information (**vdi**) field. - -``sc`` - Status Code: This field may contain additional information relating - to errors or conditions that occurred during the device self-test - operation represented in the same format used in the Status Code field - of the completion queue entry. Valid only when the SCT Valid bit - (#NVME_ST_VALID_DIAG_INFO_SC) is set in the Valid Diagnostic - Information (**vdi**) field. - -``vs`` - Vendor Specific. - - - - - -.. 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 `.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 `.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 `.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 `.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 `. - -``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 `. - - - - - -.. c:enum:: nvme_cmd_get_log_telemetry_host_lsp - - -**Constants** - -``NVME_LOG_TELEM_HOST_LSP_RETAIN`` - -``NVME_LOG_TELEM_HOST_LSP_CREATE`` - - - - -.. 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[362]; - __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 - -``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 Identifieris 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 - - -**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`` - -``rsvd1`` - -``avl_spare`` - -``avl_spare_threshold`` - -``percent_used`` - -``rsvd6`` - -``endurance_estimate`` - -``data_units_read`` - -``data_units_written`` - -``media_units_written`` - -``host_read_cmds`` - -``host_write_cmds`` - -``media_data_integrity_err`` - -``num_err_info_log_entries`` - -``rsvd160`` - - - - - -.. c:enum:: nvme_eg_critical_warning_flags - - -**Constants** - -``NVME_EG_CRITICAL_WARNING_SPARE`` - -``NVME_EG_CRITICAL_WARNING_DEGRADED`` - -``NVME_EG_CRITICAL_WARNING_READ_ONLY`` - - - - -.. c:struct:: nvme_aggregate_endurance_group_event - - -**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 - - -**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`` - -``rsvd1`` - -``event_type`` - -``rsvd4`` - -``dtwin_rt`` - -``dtwin_wt`` - -``dtwin_tmax`` - -``ndwin_tmin_hi`` - -``ndwin_tmin_lo`` - -``rsvd72`` - -``dtwin_re`` - -``dtwin_we`` - -``dtwin_te`` - -``rsvd152`` - - - - - -.. c:enum:: nvme_nvmeset_pl_status - - -**Constants** - -``NVME_NVMSET_PL_STATUS_DISABLED`` - -``NVME_NVMSET_PL_STATUS_DTWIN`` - -``NVME_NVMSET_PL_STATUS_NDWIN`` - - - - -.. c:enum:: nvme_nvmset_pl_events - - -**Constants** - -``NVME_NVMSET_PL_EVENT_DTWIN_READ_WARN`` - -``NVME_NVMSET_PL_EVENT_DTWIN_WRITE_WARN`` - -``NVME_NVMSET_PL_EVENT_DTWIN_TIME_WARN`` - -``NVME_NVMSET_PL_EVENT_DTWIN_EXCEEDED`` - -``NVME_NVMSET_PL_EVENT_DTWIN_EXCURSION`` - - - - -.. c:struct:: nvme_aggregate_predictable_lat_event - - -**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 - - -**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 - - -**Constants** - -``NVME_ANA_STATE_OPTIMIZED`` - -``NVME_ANA_STATE_NONOPTIMIZED`` - -``NVME_ANA_STATE_INACCESSIBLE`` - -``NVME_ANA_STATE_PERSISTENT_LOSS`` - -``NVME_ANA_STATE_CHANGE`` - - - - -.. c:struct:: nvme_ana_log - - -**Definition** - -:: - - struct nvme_ana_log { - __le64 chgcnt; - __le16 ngrps; - __u8 rsvd10[6]; - struct nvme_ana_group_desc descs[]; - }; - -**Members** - -``chgcnt`` - -``ngrps`` - -``rsvd10`` - -``descs`` - - - - - -.. c:struct:: nvme_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`` - -``rsvd1`` - -``tnev`` - -``tll`` - -``rv`` - -``rsvd17`` - -``lhl`` - -``ts`` - -``poh`` - -``pcc`` - -``vid`` - -``ssvid`` - -``sn`` - -``mn`` - -``subnqn`` - -``gen_number`` - -``rci`` - -``rsvd378`` - -``seb`` - - - - - -.. c:struct:: nvme_persistent_event_entry - - -**Definition** - -:: - - struct nvme_persistent_event_entry { - __u8 etype; - __u8 etype_rev; - __u8 ehl; - __u8 rsvd3; - __le16 cntlid; - __le64 ets; - __u8 rsvd14[6]; - __le16 vsil; - __le16 el; - }; - -**Members** - -``etype`` - -``etype_rev`` - -``ehl`` - -``rsvd3`` - -``cntlid`` - -``ets`` - -``rsvd14`` - -``vsil`` - -``el`` - - - - - -.. c:enum:: nvme_persistent_event_types - - -**Constants** - -``NVME_PEL_SMART_HEALTH_EVENT`` - -``NVME_PEL_FW_COMMIT_EVENT`` - -``NVME_PEL_TIMESTAMP_EVENT`` - -``NVME_PEL_POWER_ON_RESET_EVENT`` - -``NVME_PEL_NSS_HW_ERROR_EVENT`` - -``NVME_PEL_CHANGE_NS_EVENT`` - -``NVME_PEL_FORMAT_START_EVENT`` - -``NVME_PEL_FORMAT_COMPLETION_EVENT`` - -``NVME_PEL_SANITIZE_START_EVENT`` - -``NVME_PEL_SANITIZE_COMPLETION_EVENT`` - -``NVME_PEL_SET_FEATURE_EVENT`` - -``NVME_PEL_TELEMETRY_CRT`` - -``NVME_PEL_THERMAL_EXCURSION_EVENT`` - - - - -.. c:struct:: nvme_fw_commit_event - - -**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`` - -``new_fw_rev`` - -``fw_commit_action`` - -``fw_slot`` - -``sct_fw`` - -``sc_fw`` - -``vndr_assign_fw_commit_rc`` - - - - - -.. c:struct:: nvme_time_stamp_change_event - - -**Definition** - -:: - - struct nvme_time_stamp_change_event { - __le64 previous_timestamp; - __le64 ml_secs_since_reset; - }; - -**Members** - -``previous_timestamp`` - -``ml_secs_since_reset`` - - - - - -.. c:struct:: nvme_power_on_reset_info_list - - -**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`` - -``fw_act`` - -``op_in_prog`` - -``rsvd4`` - -``ctrl_power_cycle`` - -``power_on_ml_seconds`` - -``ctrl_time_stamp`` - - - - - -.. c:struct:: nvme_nss_hw_err_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`` - -``rsvd2`` - -``add_hw_err_info`` - - - - - -.. c:struct:: nvme_change_ns_event - - -**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`` - -``rsvd4`` - -``nsze`` - -``rsvd16`` - -``nscap`` - -``flbas`` - -``dps`` - -``nmic`` - -``rsvd35`` - -``ana_grp_id`` - -``nvmset_id`` - -``rsvd42`` - -``nsid`` - - - - - -.. c:struct:: nvme_format_nvm_start_event - - -**Definition** - -:: - - struct nvme_format_nvm_start_event { - __le32 nsid; - __u8 fna; - __u8 rsvd5[3]; - __le32 format_nvm_cdw10; - }; - -**Members** - -``nsid`` - -``fna`` - -``rsvd5`` - -``format_nvm_cdw10`` - - - - - -.. c:struct:: nvme_format_nvm_compln_event - - -**Definition** - -:: - - struct nvme_format_nvm_compln_event { - __le32 nsid; - __u8 smallest_fpi; - __u8 format_nvm_status; - __le16 compln_info; - __le32 status_field; - }; - -**Members** - -``nsid`` - -``smallest_fpi`` - -``format_nvm_status`` - -``compln_info`` - -``status_field`` - - - - - -.. c:struct:: nvme_sanitize_start_event - - -**Definition** - -:: - - struct nvme_sanitize_start_event { - __le32 sani_cap; - __le32 sani_cdw10; - __le32 sani_cdw11; - }; - -**Members** - -``sani_cap`` - -``sani_cdw10`` - -``sani_cdw11`` - - - - - -.. c:struct:: nvme_sanitize_compln_event - - -**Definition** - -:: - - struct nvme_sanitize_compln_event { - __le16 sani_prog; - __le16 sani_status; - __le16 cmpln_info; - __u8 rsvd6[2]; - }; - -**Members** - -``sani_prog`` - -``sani_status`` - -``cmpln_info`` - -``rsvd6`` - - - - - -.. c:struct:: nvme_set_feature_event - - -**Definition** - -:: - - struct nvme_set_feature_event { - __le32 layout; - __le32 cdw_mem[0]; - }; - -**Members** - -``layout`` - -``cdw_mem`` - - - - - -.. c:struct:: nvme_thermal_exc_event - - -**Definition** - -:: - - struct nvme_thermal_exc_event { - __u8 over_temp; - __u8 threshold; - }; - -**Members** - -``over_temp`` - -``threshold`` - - - - - -.. c:struct:: nvme_lba_rd - - -**Definition** - -:: - - struct nvme_lba_rd { - __le64 rslba; - __le32 rnlb; - __u8 rsvd12[4]; - }; - -**Members** - -``rslba`` - -``rnlb`` - -``rsvd12`` - - - - - -.. c:struct:: nvme_lbas_ns_element - - -**Definition** - -:: - - struct nvme_lbas_ns_element { - __le32 neid; - __le32 nlrd; - __u8 ratype; - __u8 rsvd8[7]; - struct nvme_lba_rd lba_rd[]; - }; - -**Members** - -``neid`` - -``nlrd`` - -``ratype`` - -``rsvd8`` - -``lba_rd`` - - - - - -.. c:enum:: nvme_lba_status_atype - - -**Constants** - -``NVME_LBA_STATUS_ATYPE_SCAN_UNTRACKED`` - -``NVME_LBA_STATUS_ATYPE_SCAN_TRACKED`` - - - - -.. c:struct:: nvme_lba_status_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`` - -``nlslne`` - -``estulb`` - -``rsvd12`` - -``lsgc`` - -``elements`` - - - - - -.. c:struct:: nvme_eg_event_aggregate_log - - -**Definition** - -:: - - struct nvme_eg_event_aggregate_log { - __le64 nr_entries; - __le16 egids[]; - }; - -**Members** - -``nr_entries`` - -``egids`` - - - - - -.. c:enum:: nvme_fid_supported_effects - - -**Constants** - -``NVME_FID_SUPPORTED_EFFECTS_FSUPP`` - -``NVME_FID_SUPPORTED_EFFECTS_UDCC`` - -``NVME_FID_SUPPORTED_EFFECTS_NCC`` - -``NVME_FID_SUPPORTED_EFFECTS_NIC`` - -``NVME_FID_SUPPORTED_EFFECTS_CCC`` - -``NVME_FID_SUPPORTED_EFFECTS_UUID_SEL`` - -``NVME_FID_SUPPORTED_EFFECTS_SCOPE_SHIFT`` - -``NVME_FID_SUPPORTED_EFFECTS_SCOPE_MASK`` - -``NVME_FID_SUPPORTED_EFFECTS_SCOPE_NS`` - -``NVME_FID_SUPPORTED_EFFECTS_SCOPE_CTRL`` - -``NVME_FID_SUPPORTED_EFFECTS_SCOPE_NVM_SET`` - -``NVME_FID_SUPPORTED_EFFECTS_SCOPE_ENDGRP`` - -``NVME_FID_SUPPORTED_EFFECTS_SCOPE_DOMAIN`` - -``NVME_FID_SUPPORTED_EFFECTS_SCOPE_NSS`` - -**Description** - -FID Supported and Effects Data Structure definitions - - - - -.. c:struct:: nvme_fid_supported_effects_log - - -**Definition** - -:: - - struct nvme_fid_supported_effects_log { - __le32 fid_support[NVME_LOG_FID_SUPPORTED_EFFECTS_MAX]; - }; - -**Members** - -``fid_support`` - - -**Description** - -Feature Identifiers Supported and Effects (Log Identifier 12h) - - - - -.. c:struct:: nvme_boot_partition - - -**Definition** - -:: - - struct nvme_boot_partition { - __u8 lid; - __u8 rsvd1[3]; - __le32 bpinfo; - __u8 rsvd8[8]; - __u8 boot_partition_data[]; - }; - -**Members** - -``lid`` - -``rsvd1`` - -``bpinfo`` - -``rsvd8`` - -``boot_partition_data`` - - - - - -.. c:struct:: nvme_media_unit_stat_desc - - -**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 - - -**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 - - -**Definition** - -:: - - struct nvme_media_unit_config_desc { - __le16 muid; - __u8 rsvd2[4]; - __le16 mudl; - }; - -**Members** - -``muid`` - Media Unit Identifier - -``mudl`` - Media Unit Descriptor Length - - -**Description** - -Media Unit Configuration Descriptor -Structure Definitions - - - - -.. c:struct:: nvme_channel_config_desc - - -**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 - - -**Description** - -Channel Configuration Descriptor -Structure Definitions - - - - -.. c:struct:: nvme_end_grp_chan_desc - - -**Definition** - -:: - - struct nvme_end_grp_chan_desc { - __le16 egchans; - struct nvme_channel_config_desc chan_config_desc[]; - }; - -**Members** - -``egchans`` - Number of Channels - - -**Description** - -Endurance group Channel Configuration Descriptor -Structure Definitions - - - - -.. c:struct:: nvme_end_grp_config_desc - - -**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 - -``tegcap`` - Total Endurance Group Capacity - -``segcap`` - Spare Endurance Group Capacity - -``end_est`` - Endurance Estimate - -``egsets`` - Number of NVM Sets - -``nvmsetid`` - NVM Set Identifier - - -**Description** - -Endurance Group Configuration Descriptor -Structure Definitions - - - - -.. c:struct:: nvme_supported_cap_config_list_log - - -**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 - - -**Description** - -Supported Capacity Configuration list log page -structure definitions - - - - -.. c:struct:: nvme_resv_notification_log - - -**Definition** - -:: - - struct nvme_resv_notification_log { - __le64 lpc; - __u8 rnlpt; - __u8 nalp; - __u8 rsvd9[2]; - __le32 nsid; - __u8 rsvd16[48]; - }; - -**Members** - -``lpc`` - -``rnlpt`` - See :c:type:`enum nvme_resv_notify_rnlpt `. - -``nalp`` - -``rsvd9`` - -``nsid`` - -``rsvd16`` - - - - - -.. c:enum:: nvme_resv_notify_rnlpt - - -**Constants** - -``NVME_RESV_NOTIFY_RNLPT_EMPTY`` - -``NVME_RESV_NOTIFY_RNLPT_REGISTRATION_PREEMPTED`` - -``NVME_RESV_NOTIFY_RNLPT_RESERVATION_RELEASED`` - -``NVME_RESV_NOTIFY_RNLPT_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 `. - -``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 `.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 `.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`` - -``rsvd2`` - -``zid`` - - - - - -.. c:enum:: nvme_zns_zt - - -**Constants** - -``NVME_ZONE_TYPE_SEQWRITE_REQ`` - - - - -.. c:enum:: nvme_zns_za - - -**Constants** - -``NVME_ZNS_ZA_ZFC`` - -``NVME_ZNS_ZA_FZR`` - -``NVME_ZNS_ZA_RZR`` - -``NVME_ZNS_ZA_ZRWAV`` - -``NVME_ZNS_ZA_ZDEV`` - - - - -.. c:enum:: nvme_zns_zs - - -**Constants** - -``NVME_ZNS_ZS_EMPTY`` - -``NVME_ZNS_ZS_IMPL_OPEN`` - -``NVME_ZNS_ZS_EXPL_OPEN`` - -``NVME_ZNS_ZS_CLOSED`` - -``NVME_ZNS_ZS_READ_ONLY`` - -``NVME_ZNS_ZS_FULL`` - -``NVME_ZNS_ZS_OFFLINE`` - - - - -.. c:struct:: nvme_zns_desc - - -**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`` - -``zs`` - -``za`` - -``zai`` - -``rsvd4`` - -``zcap`` - -``zslba`` - -``wp`` - -``rsvd32`` - - - - - -.. c:struct:: nvme_zone_report - - -**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 - - -**Definition** - -:: - - struct nvme_lba_status_desc { - __le64 dslba; - __le32 nlb; - __u8 rsvd12; - __u8 status; - __u8 rsvd14[2]; - }; - -**Members** - -``dslba`` - -``nlb`` - -``rsvd12`` - -``status`` - -``rsvd14`` - - - - - -.. c:struct:: nvme_lba_status - - -**Definition** - -:: - - struct nvme_lba_status { - __le32 nlsd; - __u8 cmpc; - __u8 rsvd5[3]; - struct nvme_lba_status_desc descs[]; - }; - -**Members** - -``nlsd`` - -``cmpc`` - -``rsvd5`` - -``descs`` - - - - - -.. c:struct:: nvme_feat_auto_pst - - -**Definition** - -:: - - struct nvme_feat_auto_pst { - __le64 apst_entry[32]; - }; - -**Members** - -``apst_entry`` - See :c:type:`enum nvme_apst_entry ` - - - - - -.. c:enum:: nvme_apst_entry - - -**Constants** - -``NVME_APST_ENTRY_ITPS_SHIFT`` - -``NVME_APST_ENTRY_ITPT_SHIFT`` - -``NVME_APST_ENTRY_ITPS_MASK`` - -``NVME_APST_ENTRY_ITPT_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`` - Chipsset 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 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 - - -**Definition** - -:: - - struct nvme_timestamp { - __u8 timestamp[6]; - __u8 attr; - __u8 rsvd; - }; - -**Members** - -``timestamp`` - -``attr`` - -``rsvd`` - - - - - -.. c:struct:: nvme_lba_range_type_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`` - -``attributes`` - -``rsvd2`` - -``slba`` - -``nlb`` - -``guid`` - -``rsvd48`` - - - - - -.. c:enum:: nvme_lbart - - -**Constants** - -``NVME_LBART_TYPE_GP`` - -``NVME_LBART_TYPE_FS`` - -``NVME_LBART_TYPE_RAID`` - -``NVME_LBART_TYPE_CACHE`` - -``NVME_LBART_TYPE_SWAP`` - -``NVME_LBART_ATTRIB_TEMP`` - -``NVME_LBART_ATTRIB_HIDE`` - - - - -.. c:struct:: nvme_lba_range_type - - -**Definition** - -:: - - struct nvme_lba_range_type { - struct nvme_lba_range_type_entry entry[NVME_FEAT_LBA_RANGE_MAX]; - }; - -**Members** - -``entry`` - - - - - -.. c:struct:: nvme_plm_config - - -**Definition** - -:: - - struct nvme_plm_config { - __le16 ee; - __u8 rsvd2[30]; - __le64 dtwinrt; - __le64 dtwinwt; - __le64 dtwintt; - __u8 rsvd56[456]; - }; - -**Members** - -``ee`` - -``rsvd2`` - -``dtwinrt`` - -``dtwinwt`` - -``dtwintt`` - -``rsvd56`` - - - - - -.. c:struct:: nvme_feat_host_behavior - - -**Definition** - -:: - - struct nvme_feat_host_behavior { - __u8 acre; - __u8 rsvd1[511]; - }; - -**Members** - -``acre`` - -``rsvd1`` - - - - - -.. c:enum:: nvme_host_behavior_support - - -**Constants** - -``NVME_ENABLE_ACRE`` - - - - -.. c:struct:: nvme_dsm_range - - -**Definition** - -:: - - struct nvme_dsm_range { - __le32 cattr; - __le32 nlb; - __le64 slba; - }; - -**Members** - -``cattr`` - -``nlb`` - -``slba`` - - - - - -.. c:struct:: nvme_copy_range - - -**Definition** - -:: - - struct nvme_copy_range { - __u8 rsvd0[8]; - __le64 slba; - __le16 nlb; - __u8 rsvd18[6]; - __le32 eilbrt; - __le16 elbatm; - __le16 elbat; - }; - -**Members** - -``rsvd0`` - -``slba`` - -``nlb`` - -``rsvd18`` - -``eilbrt`` - -``elbatm`` - -``elbat`` - - - - - -.. c:struct:: nvme_registered_ctrl - - -**Definition** - -:: - - struct nvme_registered_ctrl { - __le16 cntlid; - __u8 rcsts; - __u8 rsvd3[5]; - __le64 hostid; - __le64 rkey; - }; - -**Members** - -``cntlid`` - -``rcsts`` - -``rsvd3`` - -``hostid`` - -``rkey`` - - - - - -.. c:struct:: nvme_registered_ctrl_ext - - -**Definition** - -:: - - struct nvme_registered_ctrl_ext { - __le16 cntlid; - __u8 rcsts; - __u8 rsvd3[5]; - __le64 rkey; - __u8 hostid[16]; - __u8 rsvd32[32]; - }; - -**Members** - -``cntlid`` - -``rcsts`` - -``rsvd3`` - -``rkey`` - -``hostid`` - -``rsvd32`` - - - - - -.. c:struct:: nvme_resv_status - - -**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`` - -``rtype`` - -``regctl`` - -``rsvd7`` - -``ptpls`` - -``rsvd10`` - -``{unnamed_union}`` - anonymous - -``{unnamed_struct}`` - anonymous - -``rsvd24`` - -``regctl_eds`` - -``regctl_ds`` - - - - - -.. c:struct:: nvme_streams_directive_params - - -**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`` - -``nssa`` - -``nsso`` - -``nssc`` - -``rsvd`` - -``sws`` - -``sgs`` - -``nsa`` - -``nso`` - -``rsvd2`` - - - - - -.. c:struct:: nvme_streams_directive_status - - -**Definition** - -:: - - struct nvme_streams_directive_status { - __le16 osc; - __le16 sid[]; - }; - -**Members** - -``osc`` - -``sid`` - - - - - -.. c:struct:: nvme_id_directives - - -**Definition** - -:: - - struct nvme_id_directives { - __u8 supported[32]; - __u8 enabled[32]; - __u8 rsvd64[4032]; - }; - -**Members** - -``supported`` - -``enabled`` - -``rsvd64`` - - - - - -.. c:enum:: nvme_directive_types - - -**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 - - -**Definition** - -:: - - struct nvme_host_mem_buf_attrs { - __le32 hsize; - __le32 hmdlal; - __le32 hmdlau; - __le32 hmdlec; - __u8 rsvd16[4080]; - }; - -**Members** - -``hsize`` - -``hmdlal`` - -``hmdlau`` - -``hmdlec`` - -``rsvd16`` - - - - - -.. c:enum:: nvme_ae_type - - -**Constants** - -``NVME_AER_ERROR`` - -``NVME_AER_SMART`` - -``NVME_AER_NOTICE`` - -``NVME_AER_CSS`` - -``NVME_AER_VS`` - - - - -.. c:enum:: nvme_ae_info_error - - -**Constants** - -``NVME_AER_ERROR_INVALID_DB_REG`` - -``NVME_AER_ERROR_INVALID_DB_VAL`` - -``NVME_AER_ERROR_DIAG_FAILURE`` - -``NVME_AER_ERROR_PERSISTENT_INTERNAL_ERROR`` - -``NVME_AER_ERROR_TRANSIENT_INTERNAL_ERROR`` - -``NVME_AER_ERROR_FW_IMAGE_LOAD_ERROR`` - - - - -.. c:enum:: nvme_ae_info_smart - - -**Constants** - -``NVME_AER_SMART_SUBSYSTEM_RELIABILITY`` - -``NVME_AER_SMART_TEMPERATURE_THRESHOLD`` - -``NVME_AER_SMART_SPARE_THRESHOLD`` - - - - -.. c:enum:: nvme_ae_info_css_nvm - - -**Constants** - -``NVME_AER_CSS_NVM_RESERVATION`` - -``NVME_AER_CSS_NVM_SANITIZE_COMPLETED`` - -``NVME_AER_CSS_NVM_UNEXPECTED_SANITIZE_DEALLOC`` - - - - -.. c:enum:: nvme_ae_info_notice - - -**Constants** - -``NVME_AER_NOTICE_NS_CHANGED`` - -``NVME_AER_NOTICE_FW_ACT_STARTING`` - -``NVME_AER_NOTICE_TELEMETRY`` - -``NVME_AER_NOTICE_ANA`` - -``NVME_AER_NOTICE_PL_EVENT`` - -``NVME_AER_NOTICE_LBA_STATUS_ALERT`` - -``NVME_AER_NOTICE_EG_EVENT`` - -``NVME_AER_NOTICE_DISC_CHANGED`` - - - - -.. 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_BOTH`` - Indicates that both the DUPRETINFO and EPCSD - features are supported. - - - - -.. 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 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; - } tsas; - }; - -**Members** - -``trtype`` - Transport Type (TRTYPE): Specifies the NVMe Transport type. - See :c:type:`enum nvmf_trtype `. - -``adrfam`` - Address Family (ADRFAM): Specifies the address family. - See :c:type:`enum 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 `. - -``treq`` - Transport Requirements (TREQ): Indicates requirements for the NVMe - Transport. See :c:type:`enum nvmf_treq `. - -``portid`` - Port ID (PORTID): Specifies a particular NVM subsystem port. - Different NVMe Transports or address families may utilize the same - Port ID value (e.g. a Port ID may support both iWARP and RoCE). - -``cntlid`` - Controller ID (CNTLID): Specifies the controller ID. If the NVM - subsystem uses a dynamic controller model, then this field shall - be set to FFFFh. If the NVM subsystem uses a static controller model, - then this field may be set to a specific controller ID (values 0h - to FFEFh are valid). If the NVM subsystem uses a static controller - model and the value indicated is FFFEh, then the host should remember - the Controller ID returned as part of the Fabrics Connect command - in order to re-establish an association in the future with the same - controller. - -``asqsz`` - Admin Max SQ Size (ASQSZ): Specifies the maximum size of an Admin - Submission Queue. This applies to all controllers in the NVM - subsystem. The value shall be a minimum of 32 entries. - -``eflags`` - Entry Flags (EFLAGS): Indicates additional information related to - the current entry. See :c:type:`enum nvmf_disc_eflags `. - -``rsvd12`` - Reserved - -``trsvcid`` - Transport Service Identifier (TRSVCID): Specifies the NVMe Transport - service identifier as an ASCII string. The NVMe Transport service - identifier is specified by the associated NVMe Transport binding - specification. - -``rsvd64`` - Reserved - -``subnqn`` - NVM Subsystem Qualified Name (SUBNQN): NVMe Qualified Name (NQN) - that uniquely identifies the NVM subsystem. For a subsystem, if that - Discovery subsystem has a unique NQN (i.e., the NVM Subsystem NVMe - Qualified Name (SUBNQN) field in that Discovery subsystem's Identify - Controller data structure contains a unique NQN value), then the - value returned shall be that unique NQN. If the Discovery subsystem - does not have a unique NQN, then the value returned shall be the - well-known Discovery Service NQN (nqn.2014-08.org.nvmexpress.discovery). - -``traddr`` - Transport Address (TRADDR): Specifies the address of the NVM subsystem - that may be used for a Connect command as an ASCII string. The - Address Family field describes the reference for parsing this field. - -``tsas`` - Transport specific attribute settings - - - - - -.. 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 ` - - - - -.. 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: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 `. - - - - - -.. 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 - - -**Definition** - -:: - - struct nvme_mi_read_nvm_ss_info { - __u8 nump; - __u8 mjr; - __u8 mnr; - __u8 rsvd3[29]; - }; - -**Members** - -``nump`` - -``mjr`` - -``mnr`` - -``rsvd3`` - - - - - -.. c:struct:: nvme_mi_port_pcie - - -**Definition** - -:: - - struct nvme_mi_port_pcie { - __u8 mps; - __u8 sls; - __u8 cls; - __u8 mlw; - __u8 nlw; - __u8 pn; - __u8 rsvd14[18]; - }; - -**Members** - -``mps`` - -``sls`` - -``cls`` - -``mlw`` - -``nlw`` - -``pn`` - -``rsvd14`` - - - - - -.. c:struct:: nvme_mi_port_smb - - -**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`` - -``mvpd_freq`` - -``mme_addr`` - -``mme_freq`` - -``nvmebm`` - -``rsvd13`` - - - - - -.. c:struct:: nvme_mi_read_port_info - - -**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`` - -``rsvd1`` - -``mmctptus`` - -``meb`` - -``{unnamed_union}`` - anonymous - -``pcie`` - -``smb`` - - - - - -.. c:struct:: nvme_mi_read_ctrl_info - - -**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`` - -``rsvd1`` - -``prii`` - -``pri`` - -``vid`` - -``did`` - -``ssvid`` - -``ssid`` - -``rsvd16`` - - - - - -.. c:struct:: nvme_mi_osc - - -**Definition** - -:: - - struct nvme_mi_osc { - __u8 type; - __u8 opc; - }; - -**Members** - -``type`` - -``opc`` - - - - - -.. c:struct:: nvme_mi_read_sc_list - - -**Definition** - -:: - - struct nvme_mi_read_sc_list { - __le16 numcmd; - struct nvme_mi_osc cmds[]; - }; - -**Members** - -``numcmd`` - -``cmds`` - - - - - -.. c:struct:: nvme_mi_nvm_ss_health_status - - -**Definition** - -:: - - struct nvme_mi_nvm_ss_health_status { - __u8 nss; - __u8 sw; - __u8 ctemp; - __u8 pdlu; - __le16 ccs; - __u8 rsvd8[2]; - }; - -**Members** - -``nss`` - -``sw`` - -``ctemp`` - -``pdlu`` - -``ccs`` - -``rsvd8`` - - - - - -.. c:enum:: nvme_mi_css - - -**Constants** - -``NVME_MI_CCS_RDY`` - -``NVME_MI_CSS_CFS`` - -``NVME_MI_CSS_SHST`` - -``NVME_MI_CSS_NSSRO`` - -``NVME_MI_CSS_CECO`` - -``NVME_MI_CSS_NAC`` - -``NVME_MI_CSS_FA`` - -``NVME_MI_CSS_CSTS`` - -``NVME_MI_CSS_CTEMP`` - -``NVME_MI_CSS_PDLU`` - -``NVME_MI_CSS_SPARE`` - -``NVME_MI_CSS_CCWARN`` - - - - -.. c:struct:: nvme_mi_ctrl_health_status - - -**Definition** - -:: - - struct nvme_mi_ctrl_health_status { - __le16 ctlid; - __le16 csts; - __le16 ctemp; - __u8 pdlu; - __u8 spare; - __u8 cwarn; - __u8 rsvd9[7]; - }; - -**Members** - -``ctlid`` - -``csts`` - -``ctemp`` - -``pdlu`` - -``spare`` - -``cwarn`` - -``rsvd9`` - - - - - -.. c:enum:: nvme_mi_csts - - -**Constants** - -``NVME_MI_CSTS_RDY`` - -``NVME_MI_CSTS_CFS`` - -``NVME_MI_CSTS_SHST`` - -``NVME_MI_CSTS_NSSRO`` - -``NVME_MI_CSTS_CECO`` - -``NVME_MI_CSTS_NAC`` - -``NVME_MI_CSTS_FA`` - - - - -.. c:enum:: nvme_mi_cwarn - - -**Constants** - -``NVME_MI_CWARN_ST`` - -``NVME_MI_CWARN_TAUT`` - -``NVME_MI_CWARN_RD`` - -``NVME_MI_CWARN_RO`` - -``NVME_MI_CWARN_VMBF`` - - - - -.. c:struct:: nvme_mi_vpd_mra - - -**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`` - -``ff`` - -``rsvd7`` - -``i18vpwr`` - -``m18vpwr`` - -``i33vpwr`` - -``m33vpwr`` - -``rsvd17`` - -``m33vapsr`` - -``i5vapsr`` - -``m5vapsr`` - -``i12vapsr`` - -``m12vapsr`` - -``mtl`` - -``tnvmcap`` - -``rsvd37`` - - - - - -.. c:struct:: nvme_mi_vpd_ppmra - - -**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`` - -``pn`` - -``ppi`` - -``ls`` - -``mlw`` - -``mctp`` - -``refccap`` - -``pi`` - -``rsvd13`` - - - - - -.. c:struct:: nvme_mi_vpd_telem - - -**Definition** - -:: - - struct nvme_mi_vpd_telem { - __u8 type; - __u8 rev; - __u8 len; - __u8 data[0]; - }; - -**Members** - -``type`` - -``rev`` - -``len`` - -``data`` - - - - - -.. c:enum:: nvme_mi_elem - - -**Constants** - -``NVME_MI_ELEM_EED`` - -``NVME_MI_ELEM_USCE`` - -``NVME_MI_ELEM_ECED`` - -``NVME_MI_ELEM_LED`` - -``NVME_MI_ELEM_SMBMED`` - -``NVME_MI_ELEM_PCIESED`` - -``NVME_MI_ELEM_NVMED`` - - - - -.. c:struct:: nvme_mi_vpd_tra - - -**Definition** - -:: - - struct nvme_mi_vpd_tra { - __u8 vn; - __u8 rsvd6; - __u8 ec; - struct nvme_mi_vpd_telem elems[0]; - }; - -**Members** - -``vn`` - -``rsvd6`` - -``ec`` - -``elems`` - - - - - -.. c:struct:: nvme_mi_vpd_mr_common - - -**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`` - -``rf`` - -``rlen`` - -``rchksum`` - -``hchksum`` - -``{unnamed_union}`` - anonymous - -``nmra`` - -``ppmra`` - -``tmra`` - - - - - -.. c:struct:: nvme_mi_vpd_hdr - - -**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`` - -``iuaoff`` - -``ciaoff`` - -``biaoff`` - -``piaoff`` - -``mrioff`` - -``rsvd6`` - -``chchk`` - -``vpd`` - - - - - -.. 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_SC_MASK`` - Mask 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_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 - -**Description** - -See :c:type:`enum nvme_status_field ` - - -.. 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 - -**Description** - -See :c:type:`enum nvme_status_field ` - - - - -.. c:enum:: nvme_admin_opcode - - Known NVMe admin opcodes - -**Constants** - -``nvme_admin_delete_sq`` - -``nvme_admin_create_sq`` - -``nvme_admin_get_log_page`` - -``nvme_admin_delete_cq`` - -``nvme_admin_create_cq`` - -``nvme_admin_identify`` - -``nvme_admin_abort_cmd`` - -``nvme_admin_set_features`` - -``nvme_admin_get_features`` - -``nvme_admin_async_event`` - -``nvme_admin_ns_mgmt`` - -``nvme_admin_fw_commit`` - -``nvme_admin_fw_activate`` - -``nvme_admin_fw_download`` - -``nvme_admin_dev_self_test`` - -``nvme_admin_ns_attach`` - -``nvme_admin_keep_alive`` - -``nvme_admin_directive_send`` - -``nvme_admin_directive_recv`` - -``nvme_admin_virtual_mgmt`` - -``nvme_admin_nvme_mi_send`` - -``nvme_admin_nvme_mi_recv`` - -``nvme_admin_capacity_mgmt`` - -``nvme_admin_lockdown`` - -``nvme_admin_dbbuf`` - -``nvme_admin_fabrics`` - -``nvme_admin_format_nvm`` - -``nvme_admin_security_send`` - -``nvme_admin_security_recv`` - -``nvme_admin_sanitize_nvm`` - -``nvme_admin_get_lba_status`` - - - - -.. c:enum:: nvme_identify_cns - - -**Constants** - -``NVME_IDENTIFY_CNS_NS`` - -``NVME_IDENTIFY_CNS_CTRL`` - -``NVME_IDENTIFY_CNS_NS_ACTIVE_LIST`` - -``NVME_IDENTIFY_CNS_NS_DESC_LIST`` - -``NVME_IDENTIFY_CNS_NVMSET_LIST`` - -``NVME_IDENTIFY_CNS_CSI_NS`` - -``NVME_IDENTIFY_CNS_CSI_CTRL`` - -``NVME_IDENTIFY_CNS_CSI_NS_ACTIVE_LIST`` - -``NVME_IDENTIFY_CNS_CSI_INDEPENDENT_ID_NS`` - -``NVME_IDENTIFY_CNS_NS_USER_DATA_FORMAT`` - *undescribed* - -``NVME_IDENTIFY_CNS_CSI_NS_USER_DATA_FORMAT`` - *undescribed* - -``NVME_IDENTIFY_CNS_ALLOCATED_NS_LIST`` - -``NVME_IDENTIFY_CNS_ALLOCATED_NS`` - -``NVME_IDENTIFY_CNS_NS_CTRL_LIST`` - -``NVME_IDENTIFY_CNS_CTRL_LIST`` - -``NVME_IDENTIFY_CNS_PRIMARY_CTRL_CAP`` - -``NVME_IDENTIFY_CNS_SECONDARY_CTRL_LIST`` - -``NVME_IDENTIFY_CNS_NS_GRANULARITY`` - -``NVME_IDENTIFY_CNS_UUID_LIST`` - -``NVME_IDENTIFY_CNS_DOMAIN_LIST`` - -``NVME_IDENTIFY_CNS_ENDURANCE_GROUP_ID`` - -``NVME_IDENTIFY_CNS_CSS_ALLOCATED_NS_LIST`` - -``NVME_IDENTIFY_CNS_COMMAND_SET_STRUCTURE`` - Base Specification 2.0a section 5.17.2.21 - - - - -.. c:enum:: nvme_cmd_get_log_lid - - -**Constants** - -``NVME_LOG_LID_SUPPORTED_LOG_PAGES`` - -``NVME_LOG_LID_ERROR`` - -``NVME_LOG_LID_SMART`` - -``NVME_LOG_LID_FW_SLOT`` - -``NVME_LOG_LID_CHANGED_NS`` - -``NVME_LOG_LID_CMD_EFFECTS`` - -``NVME_LOG_LID_DEVICE_SELF_TEST`` - -``NVME_LOG_LID_TELEMETRY_HOST`` - -``NVME_LOG_LID_TELEMETRY_CTRL`` - -``NVME_LOG_LID_ENDURANCE_GROUP`` - -``NVME_LOG_LID_PREDICTABLE_LAT_NVMSET`` - -``NVME_LOG_LID_PREDICTABLE_LAT_AGG`` - -``NVME_LOG_LID_ANA`` - -``NVME_LOG_LID_PERSISTENT_EVENT`` - -``NVME_LOG_LID_LBA_STATUS`` - -``NVME_LOG_LID_ENDURANCE_GRP_EVT`` - -``NVME_LOG_LID_MEDIA_UNIT_STATUS`` - -``NVME_LOG_LID_SUPPORTED_CAP_CONFIG_LIST`` - -``NVME_LOG_LID_FID_SUPPORTED_EFFECTS`` - -``NVME_LOG_LID_BOOT_PARTITION`` - -``NVME_LOG_LID_DISCOVER`` - -``NVME_LOG_LID_RESERVATION`` - -``NVME_LOG_LID_SANITIZE`` - -``NVME_LOG_LID_ZNS_CHANGED_ZONES`` - - - - -.. c:enum:: nvme_features_id - - -**Constants** - -``NVME_FEAT_FID_ARBITRATION`` - -``NVME_FEAT_FID_POWER_MGMT`` - -``NVME_FEAT_FID_LBA_RANGE`` - -``NVME_FEAT_FID_TEMP_THRESH`` - -``NVME_FEAT_FID_ERR_RECOVERY`` - -``NVME_FEAT_FID_VOLATILE_WC`` - -``NVME_FEAT_FID_NUM_QUEUES`` - -``NVME_FEAT_FID_IRQ_COALESCE`` - -``NVME_FEAT_FID_IRQ_CONFIG`` - -``NVME_FEAT_FID_WRITE_ATOMIC`` - -``NVME_FEAT_FID_ASYNC_EVENT`` - -``NVME_FEAT_FID_AUTO_PST`` - -``NVME_FEAT_FID_HOST_MEM_BUF`` - -``NVME_FEAT_FID_TIMESTAMP`` - -``NVME_FEAT_FID_KATO`` - -``NVME_FEAT_FID_HCTM`` - -``NVME_FEAT_FID_NOPSC`` - -``NVME_FEAT_FID_RRL`` - -``NVME_FEAT_FID_PLM_CONFIG`` - -``NVME_FEAT_FID_PLM_WINDOW`` - -``NVME_FEAT_FID_LBA_STS_INTERVAL`` - -``NVME_FEAT_FID_HOST_BEHAVIOR`` - -``NVME_FEAT_FID_SANITIZE`` - -``NVME_FEAT_FID_ENDURANCE_EVT_CFG`` - -``NVME_FEAT_FID_IOCS_PROFILE`` - -``NVME_FEAT_FID_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`` - -``NVME_FEAT_FID_HOST_ID`` - -``NVME_FEAT_FID_RESV_MASK`` - -``NVME_FEAT_FID_RESV_PERSIST`` - -``NVME_FEAT_FID_WRITE_PROTECT`` - - - - -.. c:enum:: nvme_feat - - -**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 - - -**Constants** - -``NVME_GET_FEATURES_SEL_CURRENT`` - -``NVME_GET_FEATURES_SEL_DEFAULT`` - -``NVME_GET_FEATURES_SEL_SAVED`` - -``NVME_GET_FEATURES_SEL_SUPPORTED`` - - - - -.. 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 - - -**Constants** - -``NVME_NS_MGMT_SEL_CREATE`` - -``NVME_NS_MGMT_SEL_DELETE`` - - - - -.. c:enum:: nvme_ns_attach_sel - - -**Constants** - -``NVME_NS_ATTACH_SEL_CTRL_ATTACH`` - -``NVME_NS_ATTACH_SEL_CTRL_DEATTACH`` - - - - -.. c:enum:: nvme_fw_commit_ca - - -**Constants** - -``NVME_FW_COMMIT_CA_REPLACE`` - -``NVME_FW_COMMIT_CA_REPLACE_AND_ACTIVATE`` - -``NVME_FW_COMMIT_CA_SET_ACTIVE`` - -``NVME_FW_COMMIT_CA_REPLACE_AND_ACTIVATE_IMMEDIATE`` - -``NVME_FW_COMMIT_CA_REPLACE_BOOT_PARTITION`` - -``NVME_FW_COMMIT_CA_ACTIVATE_BOOT_PARTITION`` - - - - -.. c:enum:: nvme_directive_dtype - - -**Constants** - -``NVME_DIRECTIVE_DTYPE_IDENTIFY`` - -``NVME_DIRECTIVE_DTYPE_STREAMS`` - - - - -.. c:enum:: nvme_directive_receive_doper - - -**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 - - -**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 - - -**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 - - -**Constants** - -``NVME_VIRT_MGMT_ACT_PRIM_CTRL_FLEX_ALLOC`` - -``NVME_VIRT_MGMT_ACT_OFFLINE_SEC_CTRL`` - -``NVME_VIRT_MGMT_ACT_ASSIGN_SEC_CTRL`` - -``NVME_VIRT_MGMT_ACT_ONLINE_SEC_CTRL`` - - - - -.. c:enum:: nvme_virt_mgmt_rt - - -**Constants** - -``NVME_VIRT_MGMT_RT_VQ_RESOURCE`` - -``NVME_VIRT_MGMT_RT_VI_RESOURCE`` - - - - -.. c:enum:: nvme_ns_write_protect_cfg - - -**Constants** - -``NVME_NS_WP_CFG_NONE`` - -``NVME_NS_WP_CFG_PROTECT`` - -``NVME_NS_WP_CFG_PROTECT_POWER_CYCLE`` - -``NVME_NS_WP_CFG_PROTECT_PERMANENT`` - - - - -.. c:enum:: nvme_log_ana_lsp - - -**Constants** - -``NVME_LOG_ANA_LSP_RGO_NAMESPACES`` - -``NVME_LOG_ANA_LSP_RGO_GROUPS_ONLY`` - - - - -.. c:enum:: nvme_pevent_log_action - - -**Constants** - -``NVME_PEVENT_LOG_READ`` - -``NVME_PEVENT_LOG_EST_CTX_AND_READ`` - -``NVME_PEVENT_LOG_RELEASE_CTX`` - - - - -.. c:enum:: nvme_feat_tmpthresh_thsel - - -**Constants** - -``NVME_FEATURE_TEMPTHRESH_THSEL_OVER`` - -``NVME_FEATURE_TEMPTHRESH_THSEL_UNDER`` - - - - -.. c:enum:: nvme_features_async_event_config_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 - - -**Constants** - -``NVME_FEATURE_PLM_DTWIN`` - -``NVME_FEATURE_PLM_NDWIN`` - - - - -.. c:enum:: nvme_feat_resv_notify_flags - - -**Constants** - -``NVME_FEAT_RESV_NOTIFY_REGPRE`` - -``NVME_FEAT_RESV_NOTIFY_RESREL`` - -``NVME_FEAT_RESV_NOTIFY_RESPRE`` - - - - -.. c:enum:: nvme_feat_nswpcfg_state - - -**Constants** - -``NVME_FEAT_NS_NO_WRITE_PROTECT`` - -``NVME_FEAT_NS_WRITE_PROTECT`` - -``NVME_FEAT_NS_WRITE_PROTECT_PWR_CYCLE`` - -``NVME_FEAT_NS_WRITE_PROTECT_PERMANENT`` - - - - -.. c:enum:: nvme_fctype - - -**Constants** - -``nvme_fabrics_type_property_set`` - -``nvme_fabrics_type_connect`` - -``nvme_fabrics_type_property_get`` - -``nvme_fabrics_type_auth_send`` - -``nvme_fabrics_type_auth_receive`` - -``nvme_fabrics_type_disconnect`` - - - - -.. c:enum:: nvme_io_opcode - - -**Constants** - -``nvme_cmd_flush`` - -``nvme_cmd_write`` - -``nvme_cmd_read`` - -``nvme_cmd_write_uncor`` - -``nvme_cmd_compare`` - -``nvme_cmd_write_zeroes`` - -``nvme_cmd_dsm`` - -``nvme_cmd_verify`` - -``nvme_cmd_resv_register`` - -``nvme_cmd_resv_report`` - -``nvme_cmd_resv_acquire`` - -``nvme_cmd_resv_release`` - -``nvme_cmd_copy`` - -``nvme_zns_cmd_mgmt_send`` - -``nvme_zns_cmd_mgmt_recv`` - -``nvme_zns_cmd_append`` - - - - -.. c:enum:: nvme_io_control_flags - - -**Constants** - -``NVME_IO_DTYPE_STREAMS`` - -``NVME_IO_DEAC`` - -``NVME_IO_ZNS_APPEND_PIREMAP`` - -``NVME_IO_PRINFO_PRCHK_REF`` - -``NVME_IO_PRINFO_PRCHK_APP`` - -``NVME_IO_PRINFO_PRCHK_GUARD`` - -``NVME_IO_PRINFO_PRACT`` - -``NVME_IO_FUA`` - -``NVME_IO_LR`` - - - - -.. c:enum:: nvme_io_dsm_flags - - -**Constants** - -``NVME_IO_DSM_FREQ_UNSPEC`` - -``NVME_IO_DSM_FREQ_TYPICAL`` - -``NVME_IO_DSM_FREQ_RARE`` - -``NVME_IO_DSM_FREQ_READS`` - -``NVME_IO_DSM_FREQ_WRITES`` - -``NVME_IO_DSM_FREQ_RW`` - -``NVME_IO_DSM_FREQ_ONCE`` - -``NVME_IO_DSM_FREQ_PREFETCH`` - -``NVME_IO_DSM_FREQ_TEMP`` - -``NVME_IO_DSM_LATENCY_NONE`` - -``NVME_IO_DSM_LATENCY_IDLE`` - -``NVME_IO_DSM_LATENCY_NORM`` - -``NVME_IO_DSM_LATENCY_LOW`` - -``NVME_IO_DSM_SEQ_REQ`` - -``NVME_IO_DSM_COMPRESSED`` - - - - -.. c:enum:: nvme_dsm_attributes - - -**Constants** - -``NVME_DSMGMT_IDR`` - -``NVME_DSMGMT_IDW`` - -``NVME_DSMGMT_AD`` - - - - -.. c:enum:: nvme_resv_rtype - - -**Constants** - -``NVME_RESERVATION_RTYPE_WE`` - -``NVME_RESERVATION_RTYPE_EA`` - -``NVME_RESERVATION_RTYPE_WERO`` - -``NVME_RESERVATION_RTYPE_EARO`` - -``NVME_RESERVATION_RTYPE_WEAR`` - -``NVME_RESERVATION_RTYPE_EAAR`` - - - - -.. c:enum:: nvme_resv_racqa - - -**Constants** - -``NVME_RESERVATION_RACQA_ACQUIRE`` - -``NVME_RESERVATION_RACQA_PREEMPT`` - -``NVME_RESERVATION_RACQA_PREEMPT_AND_ABORT`` - - - - -.. c:enum:: nvme_resv_rrega - - -**Constants** - -``NVME_RESERVATION_RREGA_REGISTER_KEY`` - -``NVME_RESERVATION_RREGA_UNREGISTER_KEY`` - -``NVME_RESERVATION_RREGA_REPLACE_KEY`` - - - - -.. c:enum:: nvme_resv_cptpl - - -**Constants** - -``NVME_RESERVATION_CPTPL_NO_CHANGE`` - -``NVME_RESERVATION_CPTPL_CLEAR`` - -``NVME_RESERVATION_CPTPL_PERSIST`` - - - - -.. c:enum:: nvme_resv_rrela - - -**Constants** - -``NVME_RESERVATION_RRELA_RELEASE`` - -``NVME_RESERVATION_RRELA_CLEAR`` - - - - -.. c:enum:: nvme_zns_send_action - - -**Constants** - -``NVME_ZNS_ZSA_CLOSE`` - -``NVME_ZNS_ZSA_FINISH`` - -``NVME_ZNS_ZSA_OPEN`` - -``NVME_ZNS_ZSA_RESET`` - -``NVME_ZNS_ZSA_OFFLINE`` - -``NVME_ZNS_ZSA_SET_DESC_EXT`` - -``NVME_ZNS_ZSA_ZRWA_FLUSH`` - - - - -.. c:enum:: nvme_zns_recv_action - - -**Constants** - -``NVME_ZNS_ZRA_REPORT_ZONES`` - -``NVME_ZNS_ZRA_EXTENDED_REPORT_ZONES`` - - - - -.. c:enum:: nvme_zns_report_options - - -**Constants** - -``NVME_ZNS_ZRAS_REPORT_ALL`` - -``NVME_ZNS_ZRAS_REPORT_EMPTY`` - -``NVME_ZNS_ZRAS_REPORT_IMPL_OPENED`` - -``NVME_ZNS_ZRAS_REPORT_EXPL_OPENED`` - -``NVME_ZNS_ZRAS_REPORT_CLOSED`` - -``NVME_ZNS_ZRAS_REPORT_FULL`` - -``NVME_ZNS_ZRAS_REPORT_READ_ONLY`` - -``NVME_ZNS_ZRAS_REPORT_OFFLINE`` - - -.. _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:: 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`` - Discover controller to use - -``struct nvmf_discovery_log **logp`` - Pointer to the log page to be returned - -``int max_retries`` - maximum number of log page entries to be returned - -**Return** - -0 on success; on failure -1 is returned 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 configurationn 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:: void nvme_chomp (char *s, int l) - - Strip trailing white space - -**Parameters** - -``char *s`` - String to strip - -``int l`` - Maximum length of string - - -.. _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 - - -.. 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 commmand - -``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 commmand - -``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_id_ns (struct nvme_id_ns *ns, __u64 nsze, __u64 ncap, __u8 flbas, __u8 dps, __u8 nmic, __u32 anagrpid, __u16 nvmsetid) - - Initialize an Identify Namepsace structure for creation. - -**Parameters** - -``struct nvme_id_ns *ns`` - Address of the Identify Namespace structure to initialize - -``__u64 nsze`` - Namespace size - -``__u64 ncap`` - namespace capacity - -``__u8 flbas`` - formatted logical block size settings - -``__u8 dps`` - Data protection settings - -``__u8 nmic`` - Namespace sharing capabilities - -``__u32 anagrpid`` - ANA group identifier - -``__u16 nvmsetid`` - NVM Set identifer - -**Description** - -This is intended to be used with a namespace management "create", see -nvme_ns_mgmt_create(). - - -.. 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:: int nvme_get_feature_length (int fid, __u32 cdw11, __u32 *len) - - Retreive the command payload length for a specific feature identifier - -**Parameters** - -``int fid`` - Feature identifier, see :c:type:`enum nvme_features_id `. - -``__u32 cdw11`` - The cdw11 value may affect the transfer (only known fid is - ``NVME_FEAT_FID_HOST_ID``) - -``__u32 *len`` - On success, set to this features payload length in bytes. - -**Return** - -0 on success, -1 with errno set to EINVAL if the function did not -recognize :c:type:`fid`. - - -.. c:function:: int nvme_get_directive_receive_length (enum nvme_directive_dtype dtype, enum nvme_directive_receive_doper doper, __u32 *len) - - -**Parameters** - -``enum nvme_directive_dtype dtype`` - Directive type, see :c:type:`enum nvme_directive_dtype ` - -``enum nvme_directive_receive_doper doper`` - Directive receive operation, see :c:type:`enum nvme_directive_receive_doper ` - -``__u32 *len`` - On success, set to this directives payload length in bytes. - -**Return** - -0 on success, -1 with errno set to EINVAL if the function did not -recognize :c:type:`dtype` or :c:type:`doper`. - - diff --git a/doc/html/_static/basic.css b/doc/html/_static/basic.css deleted file mode 100644 index bf18350b..00000000 --- a/doc/html/_static/basic.css +++ /dev/null @@ -1,906 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -div.section::after { - display: block; - content: ''; - clear: left; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox form.search { - overflow: hidden; -} - -div.sphinxsidebar #searchbox input[type="text"] { - float: left; - width: 80%; - padding: 0.25em; - box-sizing: border-box; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - float: left; - width: 20%; - border-left: none; - padding: 0.25em; - box-sizing: border-box; -} - - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li p.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body { - min-width: 450px; - max-width: 800px; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} - -a.brackets:before, -span.brackets > a:before{ - content: "["; -} - -a.brackets:after, -span.brackets > a:after { - content: "]"; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, figure.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, figure.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, figure.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -img.align-default, figure.align-default, .figure.align-default { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-default { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar, -aside.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px; - background-color: #ffe; - width: 40%; - float: right; - clear: right; - overflow-x: auto; -} - -p.sidebar-title { - font-weight: bold; -} - -div.admonition, div.topic, blockquote { - clear: left; -} - -/* -- topics ---------------------------------------------------------------- */ - -div.topic { - border: 1px solid #ccc; - padding: 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- content of sidebars/topics/admonitions -------------------------------- */ - -div.sidebar > :last-child, -aside.sidebar > :last-child, -div.topic > :last-child, -div.admonition > :last-child { - margin-bottom: 0; -} - -div.sidebar::after, -aside.sidebar::after, -div.topic::after, -div.admonition::after, -blockquote::after { - display: block; - content: ''; - clear: both; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - margin-top: 10px; - margin-bottom: 10px; - border: 0; - border-collapse: collapse; -} - -table.align-center { - margin-left: auto; - margin-right: auto; -} - -table.align-default { - margin-left: auto; - margin-right: auto; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -table.footnote td, table.footnote th { - border: 0 !important; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -th > :first-child, -td > :first-child { - margin-top: 0px; -} - -th > :last-child, -td > :last-child { - margin-bottom: 0px; -} - -/* -- figures --------------------------------------------------------------- */ - -div.figure, figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption, figcaption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number, -figcaption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text, -figcaption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -/* -- hlist styles ---------------------------------------------------------- */ - -table.hlist { - margin: 1em 0; -} - -table.hlist td { - vertical-align: top; -} - -/* -- object description styles --------------------------------------------- */ - -.sig { - font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; -} - -.sig-name, code.descname { - background-color: transparent; - font-weight: bold; -} - -.sig-name { - font-size: 1.1em; -} - -code.descname { - font-size: 1.2em; -} - -.sig-prename, code.descclassname { - background-color: transparent; -} - -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - -.sig-param.n { - font-style: italic; -} - -/* C++ specific styling */ - -.sig-inline.c-texpr, -.sig-inline.cpp-texpr { - font-family: unset; -} - -.sig.c .k, .sig.c .kt, -.sig.cpp .k, .sig.cpp .kt { - color: #0033B3; -} - -.sig.c .m, -.sig.cpp .m { - color: #1750EB; -} - -.sig.c .s, .sig.c .sc, -.sig.cpp .s, .sig.cpp .sc { - color: #067D17; -} - - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -:not(li) > ol > li:first-child > :first-child, -:not(li) > ul > li:first-child > :first-child { - margin-top: 0px; -} - -:not(li) > ol > li:last-child > :last-child, -:not(li) > ul > li:last-child > :last-child { - margin-bottom: 0px; -} - -ol.simple ol p, -ol.simple ul p, -ul.simple ol p, -ul.simple ul p { - margin-top: 0; -} - -ol.simple > li:not(:first-child) > p, -ul.simple > li:not(:first-child) > p { - margin-top: 0; -} - -ol.simple p, -ul.simple p { - margin-bottom: 0; -} - -dl.footnote > dt, -dl.citation > dt { - float: left; - margin-right: 0.5em; -} - -dl.footnote > dd, -dl.citation > dd { - margin-bottom: 0em; -} - -dl.footnote > dd:after, -dl.citation > dd:after { - content: ""; - clear: both; -} - -dl.field-list { - display: grid; - grid-template-columns: fit-content(30%) auto; -} - -dl.field-list > dt { - font-weight: bold; - word-break: break-word; - padding-left: 0.5em; - padding-right: 5px; -} - -dl.field-list > dt:after { - content: ":"; -} - -dl.field-list > dd { - padding-left: 0.5em; - margin-top: 0em; - margin-left: 0em; - margin-bottom: 0em; -} - -dl { - margin-bottom: 15px; -} - -dd > :first-child { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -dl > dd:last-child, -dl > dd:last-child > :last-child { - margin-bottom: 0; -} - -dt:target, span.highlighted { - background-color: #fbe54e; -} - -rect.highlighted { - fill: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -.classifier:before { - font-style: normal; - margin: 0 0.5em; - content: ":"; - display: inline-block; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -pre, div[class*="highlight-"] { - clear: both; -} - -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; - white-space: nowrap; -} - -div[class*="highlight-"] { - margin: 1em 0; -} - -td.linenos pre { - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - display: block; -} - -table.highlighttable tbody { - display: block; -} - -table.highlighttable tr { - display: flex; -} - -table.highlighttable td { - margin: 0; - padding: 0; -} - -table.highlighttable td.linenos { - padding-right: 0.5em; -} - -table.highlighttable td.code { - flex: 1; - overflow: hidden; -} - -.highlight .hll { - display: block; -} - -div.highlight pre, -table.highlighttable pre { - margin: 0; -} - -div.code-block-caption + div { - margin-top: 0; -} - -div.code-block-caption { - margin-top: 1em; - padding: 2px 5px; - font-size: small; -} - -div.code-block-caption code { - background-color: transparent; -} - -table.highlighttable td.linenos, -span.linenos, -div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; - -webkit-user-select: text; /* Safari fallback only */ - -webkit-user-select: none; /* Chrome/Safari */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* IE10+ */ -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - margin: 1em 0; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: absolute; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} \ No newline at end of file diff --git a/doc/html/_static/css/badge_only.css b/doc/html/_static/css/badge_only.css deleted file mode 100644 index e380325b..00000000 --- a/doc/html/_static/css/badge_only.css +++ /dev/null @@ -1 +0,0 @@ -.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/doc/html/_static/css/fonts/Roboto-Slab-Bold.woff b/doc/html/_static/css/fonts/Roboto-Slab-Bold.woff deleted file mode 100644 index 6cb60000..00000000 Binary files a/doc/html/_static/css/fonts/Roboto-Slab-Bold.woff and /dev/null differ diff --git a/doc/html/_static/css/fonts/Roboto-Slab-Bold.woff2 b/doc/html/_static/css/fonts/Roboto-Slab-Bold.woff2 deleted file mode 100644 index 7059e231..00000000 Binary files a/doc/html/_static/css/fonts/Roboto-Slab-Bold.woff2 and /dev/null differ diff --git a/doc/html/_static/css/fonts/Roboto-Slab-Regular.woff b/doc/html/_static/css/fonts/Roboto-Slab-Regular.woff deleted file mode 100644 index f815f63f..00000000 Binary files a/doc/html/_static/css/fonts/Roboto-Slab-Regular.woff and /dev/null differ diff --git a/doc/html/_static/css/fonts/Roboto-Slab-Regular.woff2 b/doc/html/_static/css/fonts/Roboto-Slab-Regular.woff2 deleted file mode 100644 index f2c76e5b..00000000 Binary files a/doc/html/_static/css/fonts/Roboto-Slab-Regular.woff2 and /dev/null differ diff --git a/doc/html/_static/css/fonts/fontawesome-webfont.eot b/doc/html/_static/css/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca9..00000000 Binary files a/doc/html/_static/css/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/doc/html/_static/css/fonts/fontawesome-webfont.svg b/doc/html/_static/css/fonts/fontawesome-webfont.svg deleted file mode 100644 index 855c845e..00000000 --- a/doc/html/_static/css/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,2671 +0,0 @@ - - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/html/_static/css/fonts/fontawesome-webfont.ttf b/doc/html/_static/css/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2f..00000000 Binary files a/doc/html/_static/css/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/doc/html/_static/css/fonts/fontawesome-webfont.woff b/doc/html/_static/css/fonts/fontawesome-webfont.woff deleted file mode 100644 index 400014a4..00000000 Binary files a/doc/html/_static/css/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/doc/html/_static/css/fonts/fontawesome-webfont.woff2 b/doc/html/_static/css/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc60..00000000 Binary files a/doc/html/_static/css/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/doc/html/_static/css/fonts/lato-bold-italic.woff b/doc/html/_static/css/fonts/lato-bold-italic.woff deleted file mode 100644 index 88ad05b9..00000000 Binary files a/doc/html/_static/css/fonts/lato-bold-italic.woff and /dev/null differ diff --git a/doc/html/_static/css/fonts/lato-bold-italic.woff2 b/doc/html/_static/css/fonts/lato-bold-italic.woff2 deleted file mode 100644 index c4e3d804..00000000 Binary files a/doc/html/_static/css/fonts/lato-bold-italic.woff2 and /dev/null differ diff --git a/doc/html/_static/css/fonts/lato-bold.woff b/doc/html/_static/css/fonts/lato-bold.woff deleted file mode 100644 index c6dff51f..00000000 Binary files a/doc/html/_static/css/fonts/lato-bold.woff and /dev/null differ diff --git a/doc/html/_static/css/fonts/lato-bold.woff2 b/doc/html/_static/css/fonts/lato-bold.woff2 deleted file mode 100644 index bb195043..00000000 Binary files a/doc/html/_static/css/fonts/lato-bold.woff2 and /dev/null differ diff --git a/doc/html/_static/css/fonts/lato-normal-italic.woff b/doc/html/_static/css/fonts/lato-normal-italic.woff deleted file mode 100644 index 76114bc0..00000000 Binary files a/doc/html/_static/css/fonts/lato-normal-italic.woff and /dev/null differ diff --git a/doc/html/_static/css/fonts/lato-normal-italic.woff2 b/doc/html/_static/css/fonts/lato-normal-italic.woff2 deleted file mode 100644 index 3404f37e..00000000 Binary files a/doc/html/_static/css/fonts/lato-normal-italic.woff2 and /dev/null differ diff --git a/doc/html/_static/css/fonts/lato-normal.woff b/doc/html/_static/css/fonts/lato-normal.woff deleted file mode 100644 index ae1307ff..00000000 Binary files a/doc/html/_static/css/fonts/lato-normal.woff and /dev/null differ diff --git a/doc/html/_static/css/fonts/lato-normal.woff2 b/doc/html/_static/css/fonts/lato-normal.woff2 deleted file mode 100644 index 3bf98433..00000000 Binary files a/doc/html/_static/css/fonts/lato-normal.woff2 and /dev/null differ diff --git a/doc/html/_static/css/theme.css b/doc/html/_static/css/theme.css deleted file mode 100644 index 0d9ae7e1..00000000 --- a/doc/html/_static/css/theme.css +++ /dev/null @@ -1,4 +0,0 @@ -html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,.wy-nav-top a,.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/doc/html/_static/doctools.js b/doc/html/_static/doctools.js deleted file mode 100644 index e509e483..00000000 --- a/doc/html/_static/doctools.js +++ /dev/null @@ -1,326 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Sphinx JavaScript utilities for all documentation. - * - * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/** - * select a different prefix for underscore - */ -$u = _.noConflict(); - -/** - * make the code below compatible with browsers without - * an installed firebug like debugger -if (!window.console || !console.firebug) { - var names = ["log", "debug", "info", "warn", "error", "assert", "dir", - "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", - "profile", "profileEnd"]; - window.console = {}; - for (var i = 0; i < names.length; ++i) - window.console[names[i]] = function() {}; -} - */ - -/** - * small helper function to urldecode strings - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL - */ -jQuery.urldecode = function(x) { - if (!x) { - return x - } - return decodeURIComponent(x.replace(/\+/g, ' ')); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; - } - return result; -}; - -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - if (isInSVG) { - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - var bbox = node.parentElement.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute('class', className); - addItems.push({ - "parent": node.parentNode, - "target": rect}); - } - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this, addItems); - }); - } - } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); - }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); - } - return result; -}; - -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} - -/** - * Small JavaScript module for the documentation. - */ -var Documentation = { - - init : function() { - this.fixFirefoxAnchorBug(); - this.highlightSearchWords(); - this.initIndexTable(); - if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { - this.initOnKeyListeners(); - } - }, - - /** - * i18n support - */ - TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, - LOCALE : 'unknown', - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext : function(string) { - var translated = Documentation.TRANSLATIONS[string]; - if (typeof translated === 'undefined') - return string; - return (typeof translated === 'string') ? translated : translated[0]; - }, - - ngettext : function(singular, plural, n) { - var translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated === 'undefined') - return (n == 1) ? singular : plural; - return translated[Documentation.PLURALEXPR(n)]; - }, - - addTranslations : function(catalog) { - for (var key in catalog.messages) - this.TRANSLATIONS[key] = catalog.messages[key]; - this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); - this.LOCALE = catalog.locale; - }, - - /** - * add context elements like header anchor links - */ - addContextElements : function() { - $('div[id] > :header:first').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this headline')). - appendTo(this); - }); - $('dt[id]').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this definition')). - appendTo(this); - }); - }, - - /** - * workaround a firefox stupidity - * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 - */ - fixFirefoxAnchorBug : function() { - if (document.location.hash && $.browser.mozilla) - window.setTimeout(function() { - document.location.href += ''; - }, 10); - }, - - /** - * highlight the search words provided in the url in the text - */ - highlightSearchWords : function() { - var params = $.getQueryParameters(); - var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; - if (terms.length) { - var body = $('div.body'); - if (!body.length) { - body = $('body'); - } - window.setTimeout(function() { - $.each(terms, function() { - body.highlightText(this.toLowerCase(), 'highlighted'); - }); - }, 10); - $('') - .appendTo($('#searchbox')); - } - }, - - /** - * init the domain index toggle buttons - */ - initIndexTable : function() { - var togglers = $('img.toggler').click(function() { - var src = $(this).attr('src'); - var idnum = $(this).attr('id').substr(7); - $('tr.cg-' + idnum).toggle(); - if (src.substr(-9) === 'minus.png') - $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); - else - $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); - }).css('display', ''); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { - togglers.click(); - } - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords : function() { - $('#searchbox .highlight-link').fadeOut(300); - $('span.highlighted').removeClass('highlighted'); - var url = new URL(window.location); - url.searchParams.delete('highlight'); - window.history.replaceState({}, '', url); - }, - - /** - * make the url absolute - */ - makeURL : function(relativeURL) { - return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; - }, - - /** - * get the current relative url - */ - getCurrentURL : function() { - var path = document.location.pathname; - var parts = path.split(/\//); - $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { - if (this === '..') - parts.pop(); - }); - var url = parts.join('/'); - return path.substring(url.lastIndexOf('/') + 1, path.length - 1); - }, - - initOnKeyListeners: function() { - $(document).keydown(function(event) { - var activeElementType = document.activeElement.tagName; - // don't navigate when in search box, textarea, dropdown or button - if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' - && activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey - && !event.shiftKey) { - switch (event.keyCode) { - case 37: // left - var prevHref = $('link[rel="prev"]').prop('href'); - if (prevHref) { - window.location.href = prevHref; - return false; - } - break; - case 39: // right - var nextHref = $('link[rel="next"]').prop('href'); - if (nextHref) { - window.location.href = nextHref; - return false; - } - break; - } - } - }); - } -}; - -// quick alias for translations -_ = Documentation.gettext; - -$(document).ready(function() { - Documentation.init(); -}); diff --git a/doc/html/_static/documentation_options.js b/doc/html/_static/documentation_options.js deleted file mode 100644 index 8839ac8c..00000000 --- a/doc/html/_static/documentation_options.js +++ /dev/null @@ -1,12 +0,0 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.1', - LANGUAGE: 'None', - COLLAPSE_INDEX: false, - BUILDER: 'html', - FILE_SUFFIX: '.html', - LINK_SUFFIX: '.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false -}; \ No newline at end of file diff --git a/doc/html/_static/file.png b/doc/html/_static/file.png deleted file mode 100644 index a858a410..00000000 Binary files a/doc/html/_static/file.png and /dev/null differ diff --git a/doc/html/_static/jquery-3.5.1.js b/doc/html/_static/jquery-3.5.1.js deleted file mode 100644 index 50937333..00000000 --- a/doc/html/_static/jquery-3.5.1.js +++ /dev/null @@ -1,10872 +0,0 @@ -/*! - * jQuery JavaScript Library v3.5.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2020-05-04T22:49Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.5.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return flat( ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.5 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2020-03-14 - */ -( function( window ) { -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ( {} ).hasOwnProperty, - arr = [], - pop = arr.pop, - pushNative = arr.push, - push = arr.push, - slice = arr.slice, - - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[ i ] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + - "ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] - // or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + - whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + - "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - return nonHex ? - - // Strip the backslash prefix from a non-hex escape sequence - nonHex : - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + - ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), - preferredDoc.childNodes - ); - - // Support: Android<4.0 - // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - pushNative.apply( target, slice.call( els ) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - - // Can't trust NodeList.length - while ( ( target[ j++ ] = els[ i++ ] ) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - setDocument( context ); - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { - - // ID selector - if ( ( m = match[ 1 ] ) ) { - - // Document context - if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[ 2 ] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && - - // Support: IE 8 only - // Exclude object elements - ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - if ( newContext !== context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); - } - newSelector = groups.join( "," ); - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return ( cache[ key + " " ] = value ); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement( "fieldset" ); - - try { - return !!fn( el ); - } catch ( e ) { - return false; - } finally { - - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split( "|" ), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[ i ] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( ( cur = cur.nextSibling ) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return ( name === "input" || name === "button" ) && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { - argument = +argument; - return markFunction( function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); - } - } - } ); - } ); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = ( elem.ownerDocument || elem ).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, - // Safari 4 - 5 only, Opera <=11.6 - 12.x only - // IE/Edge & older browsers don't support the :scope pseudo-class. - // Support: Safari 6.0 only - // Safari 6.0 supports :scope but it's an alias of :root there. - support.scope = assert( function( el ) { - docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); - return typeof el.querySelectorAll !== "undefined" && - !el.querySelectorAll( ":scope fieldset div" ).length; - } ); - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert( function( el ) { - el.className = "i"; - return !el.getAttribute( "className" ); - } ); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert( function( el ) { - el.appendChild( document.createComment( "" ) ); - return !el.getElementsByTagName( "*" ).length; - } ); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - } ); - - // ID filter and find - if ( support.getById ) { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute( "id" ) === attrId; - }; - }; - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find[ "TAG" ] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Firefox <=3.6 - 5 only - // Old Firefox doesn't throw on a badly-escaped identifier. - el.querySelectorAll( "\\\f" ); - rbuggyQSA.push( "[\\r\\n\\f]" ); - } ); - - assert( function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll( "[name=d]" ).length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: Opera 10 - 11 only - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll( "*,:x" ); - rbuggyQSA.push( ",.*:" ); - } ); - } - - if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector ) ) ) ) { - - assert( function( el ) { - - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - } ); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); - } : - function( a, b ) { - if ( b ) { - while ( ( b = b.parentNode ) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { - - // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a == document || a.ownerDocument == preferredDoc && - contains( preferredDoc, a ) ) { - return -1; - } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b == document || b.ownerDocument == preferredDoc && - contains( preferredDoc, b ) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - return a == document ? -1 : - b == document ? 1 : - /* eslint-enable eqeqeq */ - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( ( cur = cur.parentNode ) ) { - ap.unshift( cur ); - } - cur = b; - while ( ( cur = cur.parentNode ) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[ i ] === bp[ i ] ) { - i++; - } - - return i ? - - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[ i ], bp[ i ] ) : - - // Otherwise nodes in our document sort first - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - ap[ i ] == preferredDoc ? -1 : - bp[ i ] == preferredDoc ? 1 : - /* eslint-enable eqeqeq */ - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - setDocument( elem ); - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || - match[ 5 ] || "" ).replace( runescape, funescape ); - - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - - // nth-* requires argument - if ( !match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - - // other types prohibit arguments - } else if ( match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[ 6 ] && match[ 2 ]; - - if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - - // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { - - // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { - return true; - } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - ( pattern = new RegExp( "(^|" + whitespace + - ")" + className + "(" + whitespace + "|$)" ) ) && classCache( - className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - /* eslint-disable max-len */ - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - /* eslint-enable max-len */ - - }; - }, - - "CHILD": function( type, what, _argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, _context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( ( node = node[ dir ] ) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( ( node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - - // Use previously-cached element index if available - if ( useCache ) { - - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); - } - } ) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - - // Potentially complex pseudos - "not": markFunction( function( selector ) { - - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); - } - } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; - matcher( input, null, xml, results ); - - // Don't keep the element (issue #299) - input[ 0 ] = null; - return !results.pop(); - }; - } ), - - "has": markFunction( function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - } ), - - "contains": markFunction( function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - } ), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( ( elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); - return false; - }; - } ), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && - ( !document.hasFocus || document.hasFocus() ) && - !!( elem.type || elem.href || ~elem.tabIndex ); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return ( nodeName === "input" && !!elem.checked ) || - ( nodeName === "option" && !!elem.selected ); - }, - - "selected": function( elem ) { - - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos[ "empty" ]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo( function() { - return [ 0 ]; - } ), - - "last": createPositionalPseudo( function( _matchIndexes, length ) { - return [ length - 1 ]; - } ), - - "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - } ), - - "even": createPositionalPseudo( function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "odd": createPositionalPseudo( function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ) - } -}; - -Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { - if ( match ) { - - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; - } - groups.push( ( tokens = [] ) ); - } - - matched = false; - - // Combinators - if ( ( match = rcombinators.exec( soFar ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrim, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[ i ].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || - ( outerCache[ elem.uniqueID ] = {} ); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( ( oldCache = uniqueCache[ key ] ) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); - } else { - - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[ 0 ]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[ i ], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( - selector || "*", - context.nodeType ? [ context ] : context, - [] - ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - - // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); - } - } - postFinder( null, ( matcherOut = [] ), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { - - seed[ temp ] = !( results[ temp ] = elem ); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - } ); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - ( checkContext = context ).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens - .slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), - - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), - len = elems.length; - - if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( - selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) - ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - - context = ( Expr.find[ "ID" ]( token.matches[ 0 ] - .replace( runescape, funescape ), context ) || [] )[ 0 ]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[ i ]; - - // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { - break; - } - if ( ( find = Expr.find[ type ] ) ) { - - // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || - context - ) ) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert( function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute( "href" ) === "#"; -} ) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - } ); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert( function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -} ) ) { - addHandle( "value", function( elem, _name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - } ); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert( function( el ) { - return el.getAttribute( "disabled" ) == null; -} ) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; - } - } ); -} - -return Sizzle; - -} )( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, _i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, _i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, _i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( elem.contentDocument != null && - - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { - - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, _key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
" ], - col: [ 2, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - return result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px"; - tr.style.height = "1px"; - trChild.style.height = "9px"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( - dataPriv.get( cur, "events" ) || Object.create( null ) - )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( _i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Use a noop converter for missing script - if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { - s.converters[ "text script" ] = function() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - - - - - - - - -
- - -
- -
-
-
-
    -
  • »
  • -
  • Index
  • -
  • -
  • -
-
-
-
-
- - -

Index

- -
- N - -
-

N

- - - -
- - - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/doc/html/libnvme.html b/doc/html/libnvme.html deleted file mode 100644 index 124b124f..00000000 --- a/doc/html/libnvme.html +++ /dev/null @@ -1,14713 +0,0 @@ - - - - - - <no title> — libnvme 0.1 documentation - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -

filters.h

-

libnvme directory filter

-
-
-int nvme_namespace_filter(const struct dirent *d)
-
- -

Parameters

-

const struct dirent *d

-
-
-int nvme_paths_filter(const struct dirent *d)
-
- -

Parameters

-

const struct dirent *d

-
-
-int nvme_ctrls_filter(const struct dirent *d)
-
- -

Parameters

-

const struct dirent *d

-
-
-int nvme_subsys_filter(const struct dirent *d)
-
- -

Parameters

-

const struct dirent *d

-
-
-int nvme_scan_subsystems(struct dirent ***subsys)
-
- -

Parameters

-

struct dirent ***subsys

-
-
-int nvme_scan_subsystem_namespaces(nvme_subsystem_t s, struct dirent ***namespaces)
-
- -

Parameters

-

nvme_subsystem_t s

-

struct dirent ***namespaces

-
-
-int nvme_scan_ctrls(struct dirent ***ctrls)
-
- -

Parameters

-

struct dirent ***ctrls

-
-
-int nvme_scan_ctrl_namespace_paths(nvme_ctrl_t c, struct dirent ***namespaces)
-
- -

Parameters

-

nvme_ctrl_t c

-

struct dirent ***namespaces

-
-
-int nvme_scan_ctrl_namespaces(nvme_ctrl_t c, struct dirent ***namespaces)
-
- -

Parameters

-

nvme_ctrl_t c

-

struct dirent ***namespaces

-

ioctl.h

-

Linux NVMe ioctl interface functions

-
-
-struct nvme_passthru_cmd
-
- -

Definition

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

Members

-
-
opcode

Operation code, see enum nvme_io_opcodes and enum nvme_admin_opcodes

-
-
flags

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

-
-
rsvd1

Reserved for future use

-
-
nsid

Namespace Identifier, or Fabrics type

-
-
cdw2

Command Dword 2 (no spec defined use)

-
-
cdw3

Command Dword 3 (no spec defined use)

-
-
metadata

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

-
-
addr

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

-
-
metadata_len

Metadata buffer transfer length

-
-
data_len

Data buffer transfer length

-
-
cdw10

Command Dword 10 (command specific)

-
-
cdw11

Command Dword 11 (command specific)

-
-
cdw12

Command Dword 12 (command specific)

-
-
cdw13

Command Dword 13 (command specific)

-
-
cdw14

Command Dword 14 (command specific)

-
-
cdw15

Command Dword 15 (command specific)

-
-
timeout_ms

If non-zero, overrides system default timeout in milliseconds

-
-
result

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

-
-
-
-
-struct nvme_passthru_cmd64
-
- -

Definition

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

Members

-
-
opcode

Operation code, see enum nvme_io_opcodes and enum nvme_admin_opcodes

-
-
flags

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

-
-
rsvd1

Reserved for future use

-
-
nsid

Namespace Identifier, or Fabrics type

-
-
cdw2

Command Dword 2 (no spec defined use)

-
-
cdw3

Command Dword 3 (no spec defined use)

-
-
metadata

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

-
-
addr

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

-
-
metadata_len

Metadata buffer transfer length

-
-
data_len

Data buffer transfer length

-
-
cdw10

Command Dword 10 (command specific)

-
-
cdw11

Command Dword 11 (command specific)

-
-
cdw12

Command Dword 12 (command specific)

-
-
cdw13

Command Dword 13 (command specific)

-
-
cdw14

Command Dword 14 (command specific)

-
-
cdw15

Command Dword 15 (command specific)

-
-
timeout_ms

If non-zero, overrides system default timeout in milliseconds

-
-
rsvd2

Reserved for future use (and fills an impicit struct pad

-
-
result

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

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

Submit a 64-bit nvme passthrough admin command

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
struct nvme_passthru_cmd64 *cmd

The nvme admin command to send

-
-
__u64 *result

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

-
-
-

Description

-

Uses NVME_IOCTL_ADMIN64_CMD for the ioctl request.

-

Return

-

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

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

Submit 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

Reserevd 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 transfered in this command in bytes

-
-
void *data

Pointer to user address of the data buffer

-
-
__u32 metadata_len

Length of metadata transfered in this command

-
-
void *metadata

Pointer to user address of the metadata buffer

-
-
__u32 timeout_ms

How long the kernel waits for the command to complete

-
-
__u64 *result

Optional field to return the result from the CQE dword 0

-
-
-

Description

-

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

-

Known values for opcode are defined in enum nvme_admin_opcode.

-

Return

-

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

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

Submit an nvme passthrough admin command

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
struct nvme_passthru_cmd *cmd

The nvme admin command to send

-
-
__u32 *result

Optional field to return the result from the CQE DW0

-
-
-

Description

-

Uses NVME_IOCTL_ADMIN_CMD for the ioctl request.

-

Return

-

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

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

Submit an nvme passthrough command

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u8 opcode

The nvme io command to send

-
-
__u8 flags

NVMe command flags (not used)

-
-
__u16 rsvd

Reserevd 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 transfered in this command in bytes

-
-
void *data

Pointer to user address of the data buffer

-
-
__u32 metadata_len

Length of metadata transfered in this command

-
-
void *metadata

Pointer to user address of the metadata buffer

-
-
__u32 timeout_ms

How long the kernel waits for the command to complete

-
-
__u32 *result

Optional field to return the result from the CQE dword 0

-
-
-

Description

-

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

-

Known values for opcode are defined in enum nvme_admin_opcode.

-

Return

-

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

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

Submit a 64-bit nvme passthrough command

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
struct nvme_passthru_cmd64 *cmd

The nvme io command to send

-
-
__u64 *result

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

-
-
-

Description

-

Uses NVME_IOCTL_IO64_CMD for the ioctl request.

-

Return

-

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

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

Submit an nvme io passthrough command

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u8 opcode

The nvme io command to send

-
-
__u8 flags

NVMe command flags (not used)

-
-
__u16 rsvd

Reserevd 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 transfered in this command in bytes

-
-
void *data

Pointer to user address of the data buffer

-
-
__u32 metadata_len

Length of metadata transfered in this command

-
-
void *metadata

Pointer to user address of the metadata buffer

-
-
__u32 timeout_ms

How long the kernel waits for the command to complete

-
-
__u64 *result

Optional field to return the result from the CQE dword 0

-
-
-

Description

-

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

-

Known values for opcode are defined in enum nvme_io_opcode.

-

Return

-

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

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

Submit an nvme passthrough command

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
struct nvme_passthru_cmd *cmd

The nvme io command to send

-
-
__u32 *result

Optional field to return the result from the CQE DW0

-
-
-

Description

-

Uses NVME_IOCTL_IO_CMD for the ioctl request.

-

Return

-

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

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

Submit an nvme io passthrough command

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u8 opcode

The nvme io command to send

-
-
__u8 flags

NVMe command flags (not used)

-
-
__u16 rsvd

Reserevd 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 transfered in this command in bytes

-
-
void *data

Pointer to user address of the data buffer

-
-
__u32 metadata_len

Length of metadata transfered in this command

-
-
void *metadata

Pointer to user address of the metadata buffer

-
-
__u32 timeout_ms

How long the kernel waits for the command to complete

-
-
__u32 *result

Optional field to return the result from the CQE dword 0

-
-
-

Description

-

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

-

Known values for opcode are defined in enum nvme_io_opcode.

-

Return

-

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

-
-
-int nvme_subsystem_reset(int fd)
-

Initiate a subsystem reset

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

Description

-

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

-

Return

-

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

-
-
-int nvme_ctrl_reset(int fd)
-

Initiate a controller reset

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

Description

-

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

-

Return

-

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

-
-
-int nvme_ns_rescan(int fd)
-

Initiate a controller rescan

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

Description

-

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

-

Return

-

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

-
-
-int nvme_get_nsid(int fd, __u32 *nsid)
-

Retrieve the NSID from a namespace file descriptor

-
- -

Parameters

-
-
int fd

File descriptor of nvme namespace

-
-
__u32 *nsid

User pointer to namespace id

-
-
-

Description

-

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

-

Return

-

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

-
-
-struct nvme_identify_args
-

Arguments for the NVMe Identify command

-
- -

Definition

-
struct nvme_identify_args {
-  __u32 *result;
-  void *data;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  enum nvme_identify_cns cns;
-  enum nvme_csi csi;
-  __u32 nsid;
-  __u16 cntid;
-  __u16 cns_specific_id;
-  __u8 uuidx;
-};
-
-
-

Members

-
-
result

The command completion result from CQE dword0

-
-
data

User space destination address to transfer the data

-
-
args_size

Size of struct nvme_identify_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms (0 for default timeout)

-
-
cns

The Controller or Namespace structure, see enum nvme_identify_cns

-
-
csi

Command Set Identifier

-
-
nsid

Namespace identifier, if applicable

-
-
cntid

The Controller Identifier, if applicable

-
-
cns_specific_id

Identifier that is required for a particular CNS value

-
-
uuidx

UUID Index if controller supports this id selection method

-
-
-
-
-int nvme_identify(struct nvme_identify_args *args)
-

Send the NVMe Identify command

-
- -

Parameters

-
-
struct nvme_identify_args *args

struct nvme_identify_args argument structure

-
-
-

Description

-

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

-

Return

-

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

-
-
-int nvme_identify_ctrl(int fd, struct nvme_id_ctrl *id)
-

Retrieves nvme identify controller

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
struct nvme_id_ctrl *id

User space destination address to transfer the data,

-
-
-

Description

-

Sends nvme identify with CNS value NVME_IDENTIFY_CNS_CTRL.

-

See struct nvme_id_ctrl for details on the data returned.

-

Return

-

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

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

Retrieves nvme identify namespace

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace to identify

-
-
struct nvme_id_ns *ns

User space destination address to transfer the data

-
-
-

Description

-

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

-

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

-

See struct nvme_id_ns for details on the structure returned.

-

Return

-

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

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

Same as nvme_identify_ns, but only for allocated namespaces

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace to identify

-
-
struct nvme_id_ns *ns

User space destination address to transfer the data

-
-
-

Return

-

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

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

Retrieves active namespaces id list

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Return namespaces greater than this identifer

-
-
struct nvme_ns_list *list

User space destination address to transfer the data

-
-
-

Description

-

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

-

See struct nvme_ns_list for the definition of the returned structure.

-

Return

-

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

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

Retrieves allocated namespace id list

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Return namespaces greater than this identifer

-
-
struct nvme_ns_list *list

User space destination address to transfer the data

-
-
-

Description

-

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

-

See struct nvme_ns_list for the definition of the returned structure.

-

Return

-

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

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

Retrieves identify controller list

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u16 cntid

Starting CNTLID to return in the list

-
-
struct nvme_ctrl_list *cntlist

User space destination address to transfer the data

-
-
-

Description

-

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

-

See struct nvme_ctrl_list for a definition of the structure returned.

-

Return

-

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

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

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 is returned containing a controller -identifier greater than or equal to the controller identifier specified in -cntid.

-

See struct nvme_ctrl_list for a definition of the structure returned.

-

Return

-

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

-
-
-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 destriptors

-
-
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 arrray of ‘struct nvme_ns_id_desc’.

-

See struct nvme_ns_id_desc for the definition of the returned structure.

-

Return

-

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

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

Retrieves NVM Set List

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u16 nvmsetid

NVM Set Identifier

-
-
struct nvme_id_nvmset_list *nvmset

User space destination address to transfer the data

-
-
-

Description

-

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

-

See struct nvme_id_nvmset_list for the defintion of the returned structure.

-

Return

-

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

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

Retrieve NVMe Primary Controller identification

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u16 cntid

Return controllers starting at this identifier

-
-
struct nvme_primary_ctrl_cap *cap

User space destination buffer address to transfer the data

-
-
-

Description

-

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

-

Return

-

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

-
-
-int nvme_identify_secondary_ctrl_list(int fd, __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 struct nvme_secondary_ctrls_list for a defintion of the returned -structure.

-

Return

-

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

-
-
-int nvme_identify_ns_granularity(int fd, struct nvme_id_ns_granularity_list *gr_list)
-

Retrieves namespace granularity identification

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
struct nvme_id_ns_granularity_list *gr_list

User space destination address to transfer the data

-
-
-

Description

-

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

-

See struct nvme_id_ns_granularity_list for the definition of the returned -structure.

-

Return

-

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

-
-
-int nvme_identify_uuid(int fd, struct nvme_id_uuid_list *uuid_list)
-

Retrieves device’s UUIDs

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
struct nvme_id_uuid_list *uuid_list

User space destination address to transfer the data

-
-
-

Description

-

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

-

See struct nvme_id_uuid_list for the definition of the returned structure.

-

Return

-

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

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

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

-
-
-

Return

-

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

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

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

-
-
-

Return

-

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

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

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Return namespaces greater than this identifier

-
-
enum nvme_csi csi

Command Set Identifier

-
-
struct nvme_ns_list *ns_list

User space destination address to transfer the data

-
-
-

Description

-

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

-

See struct nvme_ns_list for the definition of the returned structure.

-

Return

-

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

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

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Return namespaces greater than this identifier

-
-
enum nvme_csi csi

Command Set Identifier

-
-
struct nvme_ns_list *ns_list

User space destination address to transfer the data

-
-
-

Description

-

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

-

See struct nvme_ns_list for the definition of the returned structure.

-

Return

-

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

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

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

-
-
-

Return

-

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

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

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

undescribed

-
-
-

Description

-

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

-

Return

-

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

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

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

undescribed

-
-
-

Description

-

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

-

Return

-

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

-
-
-int nvme_nvm_identify_ctrl(int fd, struct nvme_id_ctrl_nvm *id)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
struct nvme_id_ctrl_nvm *id

User space destination address to transfer the data

-
-
-

Return

-

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

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

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u16 domid

Domain ID

-
-
struct nvme_id_domain_list *list

User space destiantion address to transfer data

-
-
-

Description

-

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

-

See struct nvme_identify_domain_attr for the definition of the -returned structure.

-

Return

-

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

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

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u16 endgrp_id

Endurance group identifier

-
-
struct nvme_id_endurance_group_list *list

Array of endurance group identifiers

-
-
-

Return

-

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

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

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u16 cntlid

Controller ID

-
-
struct nvme_id_iocs *iocs

User space destination address to transfer the data

-
-
-

Description

-

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

-

Return

-

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

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

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace to identify

-
-
struct nvme_zns_id_ns *data

User space destination address to transfer the data

-
-
-

Return

-

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

-
-
-int nvme_zns_identify_ctrl(int fd, struct nvme_zns_id_ctrl *id)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
struct nvme_zns_id_ctrl *id

User space destination address to transfer the data

-
-
-

Return

-

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

-
-
-struct nvme_get_log_args
-

Arguments for the NVMe Admin Get Log command

-
- -

Definition

-
struct nvme_get_log_args {
-  __u64 lpo;
-  __u32 *result;
-  void *log;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  enum nvme_cmd_get_log_lid lid;
-  __u32 len;
-  __u32 nsid;
-  enum nvme_csi csi;
-  __u16 lsi;
-  __u8 lsp;
-  __u8 uuidx;
-  bool rae;
-  bool ot;
-};
-
-
-

Members

-
-
lpo

Log page offset for partial log transfers

-
-
result

The command completion result from CQE dword0

-
-
log

User space destination address to transfer the data

-
-
args_size

Length of the structure

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
lid

Log page identifier, see enum nvme_cmd_get_log_lid for known -values

-
-
len

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

-
-
nsid

Namespace identifier, if applicable

-
-
csi

Command set identifier, see enum nvme_csi for known values

-
-
lsi

Log Specific Identifier

-
-
lsp

Log specific field

-
-
uuidx

UUID selection, if supported

-
-
rae

Retain asynchronous events

-
-
ot

Offset Type; if set lpo specifies the index into the list -of data structures, otherwise lpo specifies the byte offset -into the log page.

-
-
-
-
-int nvme_get_log(struct nvme_get_log_args *args)
-

NVMe Admin Get Log command

-
- -

Parameters

-
-
struct nvme_get_log_args *args

struct nvme_get_log_args argument structure

-
-
-

Return

-

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

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

Retrieve nmve supported log pages

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
bool rae

Retain asynchronous events

-
-
struct nvme_supported_log_pages *log

Array of LID supported and Effects data structures

-
-
-

Return

-

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

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

Retrieve nvme error log

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
unsigned nr_entries

Number of error log entries allocated

-
-
bool rae

Retain asynchronous events

-
-
struct nvme_error_log_page *err_log

Array of error logs of size ‘entries’

-
-
-

Description

-

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

-

Return

-

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

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

Retrieve nvme smart log

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Optional namespace identifier

-
-
bool rae

Retain asynchronous events

-
-
struct nvme_smart_log *smart_log

User address to store the smart log

-
-
-

Description

-

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

-

Return

-

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

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

Retrieves the controller firmware log

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
bool rae

Retain asynchronous events

-
-
struct nvme_firmware_slot *fw_log

User address to store the log page

-
-
-

Description

-

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

-

Return

-

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

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

Retrieve namespace changed list

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
bool rae

Retain asynchronous events

-
-
struct nvme_ns_list *ns_log

User address to store the log page

-
-
-

Description

-

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

-

Return

-

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

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

Retrieve nvme command effects log

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_csi csi

Command Set Identifier

-
-
struct nvme_cmd_effects_log *effects_log

User address to store the effects log

-
-
-

Description

-

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

-

Return

-

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

-
-
-int nvme_get_log_device_self_test(int fd, struct nvme_self_test_log *log)
-

Retrieve the device self test log

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
struct nvme_self_test_log *log

Userspace address of the log payload

-
-
-

Description

-

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

-

Return

-

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

-
-
-int nvme_get_log_create_telemetry_host(int fd, struct nvme_telemetry_log *log)
-

Create host telemetry log

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
struct nvme_telemetry_log *log

Userspace address of the log payload

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

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

-

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

-

Return

-

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

-
-
-int nvme_get_log_telemetry_ctrl(int fd, bool rae, __u64 offset, __u32 len, void *log)
-
- -

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

-
-
-
-
-int nvme_get_log_endurance_group(int fd, __u16 endgid, struct nvme_endurance_group_log *log)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u16 endgid

Starting group identifier to return in the list

-
-
struct nvme_endurance_group_log *log

User address to store the endurance log

-
-
-

Description

-

This log page indicates if an Endurance Group Event has occurred for a -particular Endurance Group. If an Endurance Group Event has occurred, the -details of the particular event are included in the Endurance Group -Information log page for that Endurance Group. An asynchronous event is -generated when an entry for an Endurance Group is newly added to this log -page.

-

Return

-

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

-
-
-int nvme_get_log_predictable_lat_nvmset(int fd, __u16 nvmsetid, struct nvme_nvmset_predictable_lat_log *log)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u16 nvmsetid

NVM set id

-
-
struct nvme_nvmset_predictable_lat_log *log

User address to store the predictable latency log

-
-
-

Return

-

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

-
-
-int nvme_get_log_predictable_lat_event(int fd, bool rae, __u32 offset, __u32 len, void *log)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
bool rae

Retain asynchronous events

-
-
-

__u32 offset

-

__u32 len

-

void *log

-
-
-int nvme_get_log_ana(int fd, enum nvme_log_ana_lsp lsp, bool rae, __u64 offset, __u32 len, void *log)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_log_ana_lsp lsp

Log specific, see enum nvme_get_log_ana_lsp

-
-
bool rae

Retain asynchronous events

-
-
__u64 offset

Offset to the start of the log page

-
-
__u32 len

The allocated length of the log page

-
-
void *log

User address to store the ana log

-
-
-

Description

-

This log consists of a header describing the log and descriptors containing -the asymmetric namespace access information for ANA Groups that contain -namespaces that are attached to the controller processing the command.

-

See struct nvme_ana_rsp_hdr for the defintion of the returned structure.

-

Return

-

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

-
-
-int nvme_get_log_ana_groups(int fd, bool rae, __u32 len, struct nvme_ana_group_desc *log)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
bool rae

Retain asynchronous events

-
-
__u32 len

The allocated length of the log page

-
-
struct nvme_ana_group_desc *log

User address to store the ana group log

-
-
-

Description

-

See struct nvme_ana_group_desc for the defintion of the returned structure.

-
-
-int nvme_get_log_lba_status(int fd, bool rae, __u64 offset, __u32 len, void *log)
-
- -

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

-
-
-
-
-int nvme_get_log_endurance_grp_evt(int fd, bool rae, __u32 offset, __u32 len, void *log)
-
- -

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

-
-
-
-
-int nvme_get_log_fid_supported_effects(int fd, bool rae, struct nvme_fid_supported_effects_log *log)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
bool rae

Retain asynchronous events

-
-
struct nvme_fid_supported_effects_log *log

FID Supported and Effects data structure

-
-
-

Return

-

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

-
-
-int nvme_get_log_boot_partition(int fd, bool rae, __u8 lsp, __u32 len, struct nvme_boot_partition *part)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
bool rae

Retain asynchronous events

-
-
__u8 lsp

The log specified field of LID

-
-
__u32 len

The allocated size, minimum -struct nvme_boot_partition

-
-
struct nvme_boot_partition *part

User address to store the log page

-
-
-

Return

-

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

-
-
-int nvme_get_log_discovery(int fd, bool rae, __u32 offset, __u32 len, void *log)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
bool rae

Retain asynchronous events

-
-
__u32 offset

Offset of this log to retrieve

-
-
__u32 len

The allocated size for this portion of the log

-
-
void *log

User address to store the discovery log

-
-
-

Description

-

Supported only by fabrics discovery controllers, returning discovery -records.

-

Return

-

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

-
-
-int nvme_get_log_media_unit_stat(int fd, __u16 domid, struct nvme_media_unit_stat_log *mus)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u16 domid

Domain Identifier selection, if supported

-
-
struct nvme_media_unit_stat_log *mus

User address to store the Media Unit statistics log

-
-
-

Return

-

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

-
-
-int nvme_get_log_support_cap_config_list(int fd, __u16 domid, struct nvme_supported_cap_config_list_log *cap)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u16 domid

Domain Identifier selection, if supported

-
-
struct nvme_supported_cap_config_list_log *cap

undescribed

-
-
-

Return

-

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

-
-
-int nvme_get_log_reservation(int fd, bool rae, struct nvme_resv_notification_log *log)
-
- -

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

-
-
-
-
-int nvme_get_log_sanitize(int fd, bool rae, struct nvme_sanitize_log_page *log)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
bool rae

Retain asynchronous events

-
-
struct nvme_sanitize_log_page *log

User address to store the sanitize log

-
-
-

Description

-

The Sanitize Status log page reports sanitize operation time estimates and -information about the most recent sanitize operation.

-

Return

-

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

-
-
-int nvme_get_log_zns_changed_zones(int fd, __u32 nsid, bool rae, struct nvme_zns_changed_zone_log *log)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace ID

-
-
bool rae

Retain asynchronous events

-
-
struct nvme_zns_changed_zone_log *log

User address to store the changed zone log

-
-
-

Description

-

The list of zones that have changed state due to an exceptional event.

-

Return

-

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

-
-
-int nvme_get_log_persistent_event(int fd, enum nvme_pevent_log_action action, __u32 size, void *pevent_log)
-
- -

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

-
-
-
-
-struct nvme_set_features_args
-

Arguments for the NVMe Admin Set Feature command

-
- -

Definition

-
struct nvme_set_features_args {
-  __u32 *result;
-  void *data;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  __u32 cdw11;
-  __u32 cdw12;
-  __u32 cdw15;
-  __u32 data_len;
-  bool save;
-  __u8 uuidx;
-  __u8 fid;
-};
-
-
-

Members

-
-
result

The command completion result from CQE dword0

-
-
data

User address of feature data, if applicable

-
-
args_size

Size of struct nvme_set_features_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
nsid

Namespace ID, if applicable

-
-
cdw11

Value to set the feature to

-
-
cdw12

Feature specific command dword12 field

-
-
cdw15

Feature specific command dword15 field

-
-
data_len

Length of feature data, if applicable, in bytes

-
-
save

Save value across power states

-
-
uuidx

UUID Index for differentiating vendor specific encoding

-
-
fid

Feature identifier

-
-
-
-
-int nvme_set_features(struct nvme_set_features_args *args)
-

Set a feature attribute

-
- -

Parameters

-
-
struct nvme_set_features_args *args

struct nvme_set_features_args argument structure

-
-
-

Return

-

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

-
-
-int nvme_set_features_data(int fd, __u8 fid, __u32 nsid, __u32 cdw11, bool save, __u32 data_len, void *data, __u32 *result)
-

Helper function for nvme_set_features()

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u8 fid

Feature identifier

-
-
__u32 nsid

Namespace ID, if applicable

-
-
__u32 cdw11

Value to set the feature to

-
-
bool save

Save value across power states

-
-
__u32 data_len

Length of feature data, if applicable, in bytes

-
-
void *data

User address of feature data, if applicable

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-
-
-int nvme_set_features_simple(int fd, __u8 fid, __u32 nsid, __u32 cdw11, bool save, __u32 *result)
-

Helper functionn 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

-
-
-
-
-int nvme_set_features_arbitration(int fd, __u8 ab, __u8 lpw, __u8 mpw, __u8 hpw, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

__u8 ab

-

__u8 lpw

-

__u8 mpw

-

__u8 hpw

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_power_mgmt(int fd, __u8 ps, __u8 wh, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

__u8 ps

-

__u8 wh

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_lba_range(int fd, __u32 nsid, __u32 nr_ranges, bool save, struct nvme_lba_range_type *data, __u32 *result)
-
- -

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 -enum nvme_status_field) or -1 with errno set otherwise.

-
-
-int nvme_set_features_temp_thresh(int fd, __u16 tmpth, __u8 tmpsel, enum nvme_feat_tmpthresh_thsel thsel, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

__u16 tmpth

-

__u8 tmpsel

-

enum nvme_feat_tmpthresh_thsel thsel

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_err_recovery(int fd, __u32 nsid, __u16 tler, bool dulbe, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace ID

-
-
__u16 tler

Time-limited error recovery value

-
-
-

bool dulbe

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_volatile_wc(int fd, bool wce, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
bool wce

Write cache enable

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_irq_coalesce(int fd, __u8 thr, __u8 time, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

__u8 thr

-

__u8 time

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_irq_config(int fd, __u16 iv, bool cd, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

__u16 iv

-

bool cd

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_write_atomic(int fd, bool dn, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

bool dn

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_async_event(int fd, __u32 events, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 events

Events to enable

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_auto_pst(int fd, bool apste, bool save, struct nvme_feat_auto_pst *apst, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

bool apste

-
-
bool save

Save value across power states

-
-
-

struct nvme_feat_auto_pst *apst

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_timestamp(int fd, bool save, __u64 timestamp)
-
- -

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 this feature

-
-
-

Return

-

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

-
-
-int nvme_set_features_hctm(int fd, __u16 tmt2, __u16 tmt1, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

__u16 tmt2

-

__u16 tmt1

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_nopsc(int fd, bool noppme, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

bool noppme

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_rrl(int fd, __u8 rrl, __u16 nvmsetid, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u8 rrl

Read recovery level setting

-
-
__u16 nvmsetid

NVM set id

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_plm_config(int fd, bool enable, __u16 nvmsetid, bool save, struct nvme_plm_config *data, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

bool enable

-

__u16 nvmsetid

-
-
bool save

Save value across power states

-
-
-

struct nvme_plm_config *data

-
-
__u32*result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_plm_window(int fd, enum nvme_feat_plm_window_select sel, __u16 nvmsetid, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

enum nvme_feat_plm_window_select sel

-

__u16 nvmsetid

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_lba_sts_interval(int fd, __u16 lsiri, __u16 lsipi, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

__u16 lsiri

-

__u16 lsipi

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_host_behavior(int fd, bool save, struct nvme_feat_host_behavior *data)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
bool save

Save value across power states

-
-
-

struct nvme_feat_host_behavior *data

-

Return

-

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

-
-
-int nvme_set_features_sanitize(int fd, bool nodrm, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

bool nodrm

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_endurance_evt_cfg(int fd, __u16 endgid, __u8 egwarn, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

__u16 endgid

-
-
__u8 egwarn

Flags to enable warning, see enum nvme_eg_critical_warning_flags

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_sw_progress(int fd, __u8 pbslc, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

__u8 pbslc

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_host_id(int fd, bool exhid, bool save, __u8 *hostid)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

bool exhid

-
-
bool save

Save value across power states

-
-
__u8 *hostid

Host ID to set

-
-
-

Return

-

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

-
-
-int nvme_set_features_resv_mask(int fd, __u32 mask, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

__u32 mask

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_resv_persist(int fd, bool ptpl, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

bool ptpl

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_set_features_write_protect(int fd, enum nvme_feat_nswpcfg_state state, bool save, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

enum nvme_feat_nswpcfg_state state

-
-
bool save

Save value across power states

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-struct nvme_get_features_args
-

Arguments for the NVMe Admin Get Feature command

-
- -

Definition

-
struct nvme_get_features_args {
-  __u32 *result;
-  void *data;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  enum nvme_get_features_sel sel;
-  __u32 cdw11;
-  __u32 data_len;
-  __u8 fid;
-  __u8 uuidx;
-};
-
-
-

Members

-
-
result

The command completion result from CQE dword0

-
-
data

User address of feature data, if applicable

-
-
args_size

Size of struct nvme_get_features_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
nsid

Namespace ID, if applicable

-
-
sel

Select which type of attribute to return, -see enum nvme_get_features_sel

-
-
cdw11

Feature specific command dword11 field

-
-
data_len

Length of feature data, if applicable, in bytes

-
-
fid

Feature identifier, see enum nvme_features_id

-
-
uuidx

UUID Index for differentiating vendor specific encoding

-
-
-
-
-int nvme_get_features(struct nvme_get_features_args *args)
-

Retrieve a feature attribute

-
- -

Parameters

-
-
struct nvme_get_features_args *args

struct nvme_get_features_args argument structure

-
-
-

Return

-

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

-
-
-int nvme_get_features_data(int fd, enum nvme_features_id fid, __u32 nsid, __u32 data_len, void *data, __u32 *result)
-

Helper function for nvme_get_features()

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_features_id fid

Feature identifier

-
-
__u32 nsid

Namespace ID, if applicable

-
-
__u32 data_len

Length of feature data, if applicable, in bytes

-
-
void *data

User address of feature data, if applicable

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-
-
-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

-
-
-
-
-int nvme_get_features_arbitration(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_power_mgmt(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_lba_range(int fd, enum nvme_get_features_sel sel, struct nvme_lba_range_type *data, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
struct nvme_lba_range_type *data

User address of feature data, if applicable

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_temp_thresh(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_err_recovery(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_volatile_wc(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_num_queues(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_irq_coalesce(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_irq_config(int fd, enum nvme_get_features_sel sel, __u16 iv, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
-

__u16 iv

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_write_atomic(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_async_event(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_auto_pst(int fd, enum nvme_get_features_sel sel, struct nvme_feat_auto_pst *apst, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
-

struct nvme_feat_auto_pst *apst

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_host_mem_buf(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_timestamp(int fd, enum nvme_get_features_sel sel, struct nvme_timestamp *ts)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
struct nvme_timestamp *ts

Current timestamp

-
-
-

Return

-

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

-
-
-int nvme_get_features_kato(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_hctm(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_nopsc(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_rrl(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_plm_config(int fd, enum nvme_get_features_sel sel, __u16 nvmsetid, struct nvme_plm_config *data, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u16 nvmsetid

NVM set id

-
-
-

struct nvme_plm_config *data

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_plm_window(int fd, enum nvme_get_features_sel sel, __u16 nvmsetid, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u16 nvmsetid

NVM set id

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_lba_sts_interval(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_host_behavior(int fd, enum nvme_get_features_sel sel, struct nvme_feat_host_behavior *data, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
-

struct nvme_feat_host_behavior *data

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_sanitize(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_endurance_event_cfg(int fd, enum nvme_get_features_sel sel, __u16 endgid, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
-

__u16 endgid

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_sw_progress(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_host_id(int fd, enum nvme_get_features_sel sel, bool exhid, __u32 len, __u8 *hostid)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
-

bool exhid

-
-
__u32 len

Length of hostid

-
-
__u8 *hostid

Buffer for returned host ID

-
-
-

Return

-

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

-
-
-int nvme_get_features_resv_mask(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_resv_persist(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_write_protect(int fd, __u32 nsid, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace ID

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-int nvme_get_features_iocs_profile(int fd, enum nvme_get_features_sel sel, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
enum nvme_get_features_sel sel

Select which type of attribute to return, see enum nvme_get_features_sel

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-struct nvme_format_nvm_args
-

Arguments for the Format Nvme Namespace command

-
- -

Definition

-
struct nvme_format_nvm_args {
-  __u32 *result;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  enum nvme_cmd_format_mset mset;
-  enum nvme_cmd_format_pi pi;
-  enum nvme_cmd_format_pil pil;
-  enum nvme_cmd_format_ses ses;
-  __u8 lbaf;
-};
-
-
-

Members

-
-
result

The command completion result from CQE dword0

-
-
args_size

Size of struct nvme_format_nvm_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Set to override default timeout to this value in milliseconds; -useful for long running formats. 0 will use system default.

-
-
nsid

Namespace ID to format

-
-
mset

Metadata settings (extended or separated), true if extended

-
-
pi

Protection information type

-
-
pil

Protection information location (beginning or end), true if end

-
-
ses

Secure erase settings

-
-
lbaf

Logical block address format

-
-
-
-
-int nvme_format_nvm(struct nvme_format_nvm_args *args)
-

Format nvme namespace(s)

-
- -

Parameters

-
-
struct nvme_format_nvm_args *args

struct nvme_format_nvme_args argument structure

-
-
-

Description

-

The Format NVM command low level formats the NVM media. This command is used -by the host to change the LBA data size and/or metadata size. A low level -format may destroy all data and metadata associated with all namespaces or -only the specific namespace associated with the command

-

Return

-

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

-
-
-struct nvme_ns_mgmt_args
-

Arguments for NVMe Namespace Management command

-
- -

Definition

-
struct nvme_ns_mgmt_args {
-  __u32 *result;
-  struct nvme_id_ns *ns;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  enum nvme_ns_mgmt_sel sel;
-  __u8 csi;
-};
-
-
-

Members

-
-
result

NVMe command result

-
-
ns

Namespace identication descriptors

-
-
args_size

Size of struct nvme_ns_mgmt_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
nsid

Namespace identifier

-
-
sel

Type of management operation to perform

-
-
csi

Command Set Identifier

-
-
-
-
-int nvme_ns_mgmt(struct nvme_ns_mgmt_args *args)
-

Issue a Namespace management command

-
- -

Parameters

-
-
struct nvme_ns_mgmt_args *args

struct nvme_ns_mgmt_args Argument structure

-
-
-
-
-int nvme_ns_mgmt_create(int fd, struct nvme_id_ns *ns, __u32 *nsid, __u32 timeout, __u8 csi)
-
- -

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

Overide 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 -enum nvme_status_field) or -1 with errno set otherwise.

-
-
-int nvme_ns_mgmt_delete(int fd, __u32 nsid)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace identifier to delete

-
-
-

Description

-

It is recommended that a namespace being deleted is not attached to any -controller. Use the nvme_ns_detach_ctrls() first if the namespace is still -attached.

-

Return

-

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

-
-
-struct nvme_ns_attach_args
-

Arguments for Nvme Namespace Management command

-
- -

Definition

-
struct nvme_ns_attach_args {
-  __u32 *result;
-  struct nvme_ctrl_list *ctrlist;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  enum nvme_ns_attach_sel sel;
-};
-
-
-

Members

-
-
result

NVMe command result

-
-
ctrlist

Controller list to modify attachment state of nsid

-
-
args_size

Size of struct nvme_ns_attach_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
nsid

Namespace ID to execute attach selection

-
-
sel

Attachment selection, see enum nvme_ns_attach_sel

-
-
-
-
-int nvme_ns_attach(struct nvme_ns_attach_args *args)
-

Attach or detach namespace to controller(s)

-
- -

Parameters

-
-
struct nvme_ns_attach_args *args

struct nvme_ns_attach_args Argument structure

-
-
-
-
-int nvme_ns_attach_ctrls(int fd, __u32 nsid, struct nvme_ctrl_list *ctrlist)
-
- -

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

-
-
-
-
-int nvme_ns_detach_ctrls(int fd, __u32 nsid, struct nvme_ctrl_list *ctrlist)
-
- -

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

-
-
-
-
-struct nvme_fw_download_args
-

Arguments for the NVMe Firmware Download command

-
- -

Definition

-
struct nvme_fw_download_args {
-  __u32 *result;
-  void *data;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 offset;
-  __u32 data_len;
-};
-
-
-

Members

-
-
result

The command completion result from CQE dword0

-
-
data

Userspace address of the firmware data

-
-
args_size

Size of struct nvme_fw_download_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
offset

Offset in the firmware data

-
-
data_len

Length of data in this command in bytes

-
-
-
-
-int nvme_fw_download(struct nvme_fw_download_args *args)
-

Download part or all of a firmware image to the controller

-
- -

Parameters

-
-
struct nvme_fw_download_args *args

struct nvme_fw_download_args argument structure

-
-
-

Description

-

The Firmware Image Download command downloads all or a portion of an image -for a future update to the controller. The Firmware Image Download command -downloads a new image (in whole or in part) to the controller.

-

The image may be constructed of multiple pieces that are individually -downloaded with separate Firmware Image Download commands. Each Firmware -Image Download command includes a Dword Offset and Number of Dwords that -specify a dword range.

-

The new firmware image is not activated as part of the Firmware Image -Download command. Use the nvme_fw_commit() to activate a newly downloaded -image.

-

Return

-

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

-
-
-struct nvme_fw_commit_args
-

Arguments for the NVMe Firmware Commit command

-
- -

Definition

-
struct nvme_fw_commit_args {
-  __u32 *result;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  enum nvme_fw_commit_ca action;
-  __u8 slot;
-  bool bpid;
-};
-
-
-

Members

-
-
result

The command completion result from CQE dword0

-
-
args_size

Size of struct nvme_fw_commit_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
action

Action to use for the firmware image, see enum nvme_fw_commit_ca

-
-
slot

Firmware slot to commit the downloaded image

-
-
bpid

Set to true to select the boot partition id

-
-
-
-
-int nvme_fw_commit(struct nvme_fw_commit_args *args)
-

Commit firmware using the specified action

-
- -

Parameters

-
-
struct nvme_fw_commit_args *args

struct nvme_fw_commit_args argument structure

-
-
-

Description

-

The Firmware Commit command modifies the firmware image or Boot Partitions.

-

Return

-

The nvme command status if a response was received (see -enum nvme_status_field) or -1 with errno set otherwise. The command -status response may specify additional reset actions required to complete -the commit process.

-
-
-struct nvme_security_send_args
-

Arguments for the NVMe Security Send command

-
- -

Definition

-
struct nvme_security_send_args {
-  __u32 *result;
-  void *data;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  __u32 tl;
-  __u32 data_len;
-  __u8 nssf;
-  __u8 spsp0;
-  __u8 spsp1;
-  __u8 secp;
-};
-
-
-

Members

-
-
result

The command completion result from CQE dword0

-
-
data

Security data payload to send

-
-
args_size

Size of struct nvme_security_send_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
nsid

Namespace ID to issue security command on

-
-
tl

Protocol specific transfer length

-
-
data_len

Data length of the payload in bytes

-
-
nssf

NVMe Security Specific field

-
-
spsp0

Security Protocol Specific field

-
-
spsp1

Security Protocol Specific field

-
-
secp

Security Protocol

-
-
-
-
-int nvme_security_send(struct nvme_security_send_args *args)
-
- -

Parameters

-
-
struct nvme_security_send_args *args

struct nvme_security_send argument structure

-
-
-

Description

-

The Security Send command transfers security protocol data to the -controller. The data structure transferred to the controller as part of this -command contains security protocol specific commands to be performed by the -controller. The data structure transferred may also contain data or -parameters associated with the security protocol commands.

-

The security data is protocol specific and is not defined by the NVMe -specification.

-

Return

-

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

-
-
-struct nvme_security_receive_args
-

Arguments for the NVMe Security Receive command

-
- -

Definition

-
struct nvme_security_receive_args {
-  __u32 *result;
-  void *data;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  __u32 al;
-  __u32 data_len;
-  __u8 nssf;
-  __u8 spsp0;
-  __u8 spsp1;
-  __u8 secp;
-};
-
-
-

Members

-
-
result

The command completion result from CQE dword0

-
-
data

Security data payload to send

-
-
args_size

Size of struct nvme_security_receive_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
nsid

Namespace ID to issue security command on

-
-
al

Protocol specific allocation length

-
-
data_len

Data length of the payload in bytes

-
-
nssf

NVMe Security Specific field

-
-
spsp0

Security Protocol Specific field

-
-
spsp1

Security Protocol Specific field

-
-
secp

Security Protocol

-
-
-
-
-int nvme_security_receive(struct nvme_security_receive_args *args)
-
- -

Parameters

-
-
struct nvme_security_receive_args *args

struct nvme_security_recevice argument structure

-
-
-

Return

-

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

-
-
-struct nvme_get_lba_status_args
-

Arguments for the NVMe Get LBA Status command

-
- -

Definition

-
struct nvme_get_lba_status_args {
-  __u64 slba;
-  __u32 *result;
-  struct nvme_lba_status *lbas;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  __u32 mndw;
-  enum nvme_lba_status_atype atype;
-  __u16 rl;
-};
-
-
-

Members

-
-
slba

Starting logical block address to check statuses

-
-
result

The command completion result from CQE dword0

-
-
lbas

Data payload to return status descriptors

-
-
args_size

Size of struct nvme_get_lba_status_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
nsid

Namespace ID to retrieve LBA status

-
-
mndw

Maximum number of dwords to return

-
-
atype

Action type mechanism to determine LBA status desctriptors to -return, see enum nvme_lba_status_atype

-
-
rl

Range length from slba to perform the action

-
-
-
-
-int nvme_get_lba_status(struct nvme_get_lba_status_args *args)
-

Retrieve information on possibly unrecoverable LBAs

-
- -

Parameters

-
-
struct nvme_get_lba_status_args *args

struct nvme_get_lba_status_args argument structure

-
-
-

Description

-

The Get LBA Status command requests information about Potentially -Unrecoverable LBAs. Refer to the specification for action type descriptions.

-

Return

-

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

-
-
-struct nvme_directive_send_args
-

Arguments for the NVMe Directive Send command

-
- -

Definition

-
struct nvme_directive_send_args {
-  __u32 *result;
-  void *data;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  enum nvme_directive_send_doper doper;
-  enum nvme_directive_dtype dtype;
-  __u32 cdw12;
-  __u32 data_len;
-  __u16 dspec;
-};
-
-
-

Members

-
-
result

If successful, the CQE dword0 value

-
-
data

Data payload to to be send

-
-
args_size

Size of struct nvme_directive_send_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
nsid

Namespace ID, if applicable

-
-
doper

Directive send operation, see enum nvme_directive_send_doper

-
-
dtype

Directive type, see enum nvme_directive_dtype

-
-
cdw12

Directive specific command dword12

-
-
data_len

Length of data payload in bytes

-
-
dspec

Directive specific field

-
-
-
-
-int nvme_directive_send(struct nvme_directive_send_args *args)
-

Send directive command

-
- -

Parameters

-
-
struct nvme_directive_send_args *args

struct nvme_directive_send_args argument structure

-
-
-

Description

-

Directives is a mechanism to enable host and NVM subsystem or controller -information exchange. The Directive Send command transfers data related to a -specific Directive Type from the host to the controller.

-

See the NVMe specification for more information.

-

Return

-

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

-
-
-int nvme_directive_send_id_endir(int fd, __u32 nsid, bool endir, enum nvme_directive_dtype dtype, struct nvme_id_directives *id)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
-

__u32 nsid

-

bool endir

-

enum nvme_directive_dtype dtype

-

struct nvme_id_directives *id

-

Return

-

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

-
-
-int nvme_directive_send_stream_release_identifier(int fd, __u32 nsid, __u16 stream_id)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace ID

-
-
__u16 stream_id

Stream identifier

-
-
-

Return

-

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

-
-
-int nvme_directive_send_stream_release_resource(int fd, __u32 nsid)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace ID

-
-
-

Return

-

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

-
-
-struct nvme_directive_recv_args
-

Arguments for the NVMe Directive Receive command

-
- -

Definition

-
struct nvme_directive_recv_args {
-  __u32 *result;
-  void *data;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  enum nvme_directive_receive_doper doper;
-  enum nvme_directive_dtype dtype;
-  __u32 cdw12;
-  __u32 data_len;
-  __u16 dspec;
-};
-
-
-

Members

-
-
result

If successful, the CQE dword0 value

-
-
data

Usespace address of data payload

-
-
args_size

Size of struct nvme_directive_recv_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
nsid

Namespace ID, if applicable

-
-
doper

Directive send operation, see enum nvme_directive_send_doper

-
-
dtype

Directive type, see enum nvme_directive_dtype

-
-
cdw12

Directive specific command dword12

-
-
data_len

Length of data payload in bytes

-
-
dspec

Directive specific field

-
-
-
-
-int nvme_directive_recv(struct nvme_directive_recv_args *args)
-

Receive directive specific data

-
- -

Parameters

-
-
struct nvme_directive_recv_args *args

struct nvme_directive_recv_args argument structure

-
-
-

Return

-

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

-
-
-int nvme_directive_recv_identify_parameters(int fd, __u32 nsid, struct nvme_id_directives *id)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace ID

-
-
struct nvme_id_directives *id

Identify parameters buffer

-
-
-

Return

-

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

-
-
-int nvme_directive_recv_stream_parameters(int fd, __u32 nsid, struct nvme_streams_directive_params *parms)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace ID

-
-
struct nvme_streams_directive_params *parms

Streams directive parameters buffer

-
-
-

Return

-

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

-
-
-int nvme_directive_recv_stream_status(int fd, __u32 nsid, unsigned nr_entries, struct nvme_streams_directive_status *id)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace ID

-
-
unsigned nr_entries

Number of streams to receive

-
-
struct nvme_streams_directive_status *id

Stream status buffer

-
-
-

Return

-

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

-
-
-int nvme_directive_recv_stream_allocate(int fd, __u32 nsid, __u16 nsr, __u32 *result)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace ID

-
-
-

__u16 nsr

-

__u32 *result

-

Return

-

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

-
-
-struct nvme_capacity_mgmt_args
-

Arguments for the NVMe Capacity Management command

-
- -

Definition

-
struct nvme_capacity_mgmt_args {
-  __u32 *result;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 cdw11;
-  __u32 cdw12;
-  __u16 element_id;
-  __u8 op;
-};
-
-
-

Members

-
-
result

If successful, the CQE dword0 value

-
-
args_size

Size of struct nvme_capacity_mgmt_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
cdw11

Least significant 32 bits of the capacity in bytes of the -Endurance Group or NVM Set to be created

-
-
cdw12

Most significant 32 bits of the capacity in bytes of the -Endurance Group or NVM Set to be created

-
-
element_id

Value specific to the value of the Operation field

-
-
op

Operation to be performed by the controller

-
-
-
-
-int nvme_capacity_mgmt(struct nvme_capacity_mgmt_args *args)
-
- -

Parameters

-
-
struct nvme_capacity_mgmt_args *args

struct nvme_capacity_mgmt_args argument structure

-
-
-

Return

-

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

-
-
-struct nvme_lockdown_args
-

Arguments for the NVME Lockdown command

-
- -

Definition

-
struct nvme_lockdown_args {
-  __u32 *result;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u8 scp;
-  __u8 prhbt;
-  __u8 ifc;
-  __u8 ofi;
-  __u8 uuidx;
-};
-
-
-

Members

-
-
result

The command completion result from CQE dword0

-
-
args_size

Size of struct nvme_lockdown_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms (0 for default timeout)

-
-
scp

Scope of the command

-
-
prhbt

Prohibit or allow the command opcode or Set Features command

-
-
ifc

Affected interface

-
-
ofi

Opcode or Feature Identifier

-
-
uuidx

UUID Index if controller supports this id selection method

-
-
-
-
-int nvme_lockdown(struct nvme_lockdown_args *args)
-

Issue lockdown command

-
- -

Parameters

-
-
struct nvme_lockdown_args *args

struct nvme_lockdown_args argument structure

-
-
-

Return

-

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

-
-
-struct nvme_set_property_args
-

Arguments for NVMe Set Property command

-
- -

Definition

-
struct nvme_set_property_args {
-  __u64 value;
-  __u32 *result;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  int offset;
-};
-
-
-

Members

-
-
value

The value to set the property

-
-
result

The command completion result from CQE dword0

-
-
args_size

Size of struct nvme_set_property_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
offset

Property offset from the base to set

-
-
-
-
-int nvme_set_property(struct nvme_set_property_args *args)
-

Set controller property

-
- -

Parameters

-
-
struct nvme_set_property_args *args

struct nvme_set_property_args argument structure

-
-
-

Description

-

This is an NVMe-over-Fabrics specific command, not applicable to PCIe. These -properties align to the PCI MMIO controller registers.

-

Return

-

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

-
-
-struct nvme_get_property_args
-

Arguments for NVMe Get Property command

-
- -

Definition

-
struct nvme_get_property_args {
-  __u64 *value;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  int offset;
-};
-
-
-

Members

-
-
value

Where the property’s value will be stored on success

-
-
args_size

Size of struct nvme_get_property_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
offset

Property offset from the base to retrieve

-
-
-
-
-int nvme_get_property(struct nvme_get_property_args *args)
-

Get a controller property

-
- -

Parameters

-
-
struct nvme_get_property_args *args

struct nvme_get_propert_args argument structure

-
-
-

Description

-

This is an NVMe-over-Fabrics specific command, not applicable to PCIe. These -properties align to the PCI MMIO controller registers.

-

Return

-

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

-
-
-struct nvme_sanitize_nvm_args
-

Arguments for the NVMe Sanitize NVM command

-
- -

Definition

-
struct nvme_sanitize_nvm_args {
-  __u32 *result;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  enum nvme_sanitize_sanact sanact;
-  __u32 ovrpat;
-  bool ause;
-  __u8 owpass;
-  bool oipbp;
-  bool nodas;
-};
-
-
-

Members

-
-
result

The command completion result from CQE dword0

-
-
args_size

Size of struct nvme_sanitize_nvm_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
sanact

Sanitize action, see enum nvme_sanitize_sanact

-
-
ovrpat

Overwrite pattern

-
-
ause

Set to allow unrestriced sanitize exit

-
-
owpass

Overwrite pass count

-
-
oipbp

Set to overwrite invert pattern between passes

-
-
nodas

Set to not deallocate blocks after sanitizing

-
-
-
-
-int nvme_sanitize_nvm(struct nvme_sanitize_nvm_args *args)
-

Start a sanitize operation

-
- -

Parameters

-
-
struct nvme_sanitize_nvm_args *args

struct nvme_sanitize_nvm_args argument structure

-
-
-

Description

-

A sanitize operation alters all user data in the NVM subsystem such that -recovery of any previous user data from any cache, the non-volatile media, -or any Controller Memory Buffer is not possible.

-

The Sanitize command starts a sanitize operation or to recover from a -previously failed sanitize operation. The sanitize operation types that may -be supported are Block Erase, Crypto Erase, and Overwrite. All sanitize -operations are processed in the background, i.e., completion of the sanitize -command does not indicate completion of the sanitize operation.

-

Return

-

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

-
-
-struct nvme_dev_self_test_args
-

Arguments for the NVMe Device Self Test command

-
- -

Definition

-
struct nvme_dev_self_test_args {
-  __u32 *result;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  enum nvme_dst_stc stc;
-};
-
-
-

Members

-
-
result

The command completion result from CQE dword0

-
-
args_size

Size of struct nvme_dev_self_test_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
nsid

Namespace ID to test

-
-
stc

Self test code, see enum nvme_dst_stc

-
-
-
-
-int nvme_dev_self_test(struct nvme_dev_self_test_args *args)
-

Start or abort a self test

-
- -

Parameters

-
-
struct nvme_dev_self_test_args *args

struct nvme_dev_self_test argument structure

-
-
-

Description

-

The Device Self-test command starts a device self-test operation or abort a -device self-test operation. A device self-test operation is a diagnostic -testing sequence that tests the integrity and functionality of the -controller and may include testing of the media associated with namespaces. -The controller may return a response to this command immediately while -running the self-test in the background.

-

Set the ‘nsid’ field to 0 to not include namepsaces in the test. Set to -0xffffffff to test all namespaces. All other values tests a specific -namespace, if present.

-

Return

-

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

-
-
-struct nvme_virtual_mgmt_args
-

Arguments for the NVMe Virtualization resource management command

-
- -

Definition

-
struct nvme_virtual_mgmt_args {
-  __u32 *result;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  enum nvme_virt_mgmt_act act;
-  enum nvme_virt_mgmt_rt rt;
-  __u16 cntlid;
-  __u16 nr;
-};
-
-
-

Members

-
-
result

If successful, the CQE dword0

-
-
args_size

Size of struct nvme_virtual_mgmt_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
act

Virtual resource action, see enum nvme_virt_mgmt_act

-
-
rt

Resource type to modify, see enum nvme_virt_mgmt_rt

-
-
cntlid

Controller id for which resources are bing modified

-
-
nr

Number of resources being allocated or assigned

-
-
-
-
-int nvme_virtual_mgmt(struct nvme_virtual_mgmt_args *args)
-

Virtualization resource management

-
- -

Parameters

-
-
struct nvme_virtual_mgmt_args *args

struct nvme_virtual_mgmt_args argument structure

-
-
-

Description

-

The Virtualization Management command is supported by primary controllers -that support the Virtualization Enhancements capability. This command is -used for several functions:

-
-
    -
  • Modifying Flexible Resource allocation for the primary controller

  • -
  • Assigning Flexible Resources for secondary controllers

  • -
  • Setting the Online and Offline state for secondary controllers

  • -
-
-

Return

-

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

-
-
-int nvme_flush(int fd, __u32 nsid)
-

Send an nvme flush command

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace identifier

-
-
-

Description

-

The Flush command requests that the contents of volatile write cache be made -non-volatile.

-

Return

-

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

-
-
-struct nvme_io_args
-

Arguments for NVMe I/O commands

-
- -

Definition

-
struct nvme_io_args {
-  __u64 slba;
-  __u64 storage_tag;
-  __u32 *result;
-  void *data;
-  void *metadata;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  __u32 reftag;
-  __u32 data_len;
-  __u32 metadata_len;
-  __u16 nlb;
-  __u16 control;
-  __u16 apptag;
-  __u16 appmask;
-  __u8 dsm;
-  __u8 dspec;
-};
-
-
-

Members

-
-
slba

Starting logical block

-
-
storage_tag

This filed specifies Variable Sized Expected Logical Block -Storage Tag (ELBST) and Expected Logical Block Reference -Tag (ELBRT)

-
-
result

The command completion result from CQE dword0

-
-
data

Pointer to user address of the data buffer

-
-
metadata

Pointer to user address of the metadata buffer

-
-
args_size

Size of struct nvme_io_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
nsid

Namespace ID

-
-
reftag

This field specifies the Initial Logical Block Reference Tag -expected value. Used only if the namespace is formatted to use -end-to-end protection information.

-
-
data_len

Length of user buffer, data, in bytes

-
-
metadata_len

Length of user buffer, metadata, in bytes

-
-
nlb

Number of logical blocks to send (0’s based value)

-
-
control

Command control flags, see enum nvme_io_control_flags.

-
-
apptag

This field specifies the Application Tag Mask expected value. -Used only if the namespace is formatted to use end-to-end -protection information.

-
-
appmask

This field specifies the Application Tag expected value. Used -only if the namespace is formatted to use end-to-end protection -information.

-
-
dsm

Data set management attributes, see enum nvme_io_dsm_flags

-
-
dspec

Directive specific value

-
-
-
-
-int nvme_io(struct nvme_io_args *args, __u8 opcode)
-

Submit an nvme user I/O command

-
- -

Parameters

-
-
struct nvme_io_args *args

struct nvme_io_args argument structure

-
-
__u8 opcode

Opcode to execute

-
-
-

Return

-

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

-
-
-int nvme_read(struct nvme_io_args *args)
-

Submit an nvme user read command

-
- -

Parameters

-
-
struct nvme_io_args *args

struct nvme_io_args argument structure

-
-
-

Return

-

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

-
-
-int nvme_write(struct nvme_io_args *args)
-

Submit an nvme user write command

-
- -

Parameters

-
-
struct nvme_io_args *args

struct nvme_io_args argument structure

-
-
-

Return

-

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

-
-
-int nvme_compare(struct nvme_io_args *args)
-

Submit an nvme user compare command

-
- -

Parameters

-
-
struct nvme_io_args *args

struct nvme_io_args argument structure

-
-
-

Return

-

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

-
-
-int nvme_write_zeros(struct nvme_io_args *args)
-

Submit an nvme write zeroes command

-
- -

Parameters

-
-
struct nvme_io_args *args

struct nvme_io_args argument structure

-
-
-

Description

-

The Write Zeroes command sets a range of logical blocks to zero. After -successful completion of this command, the value returned by subsequent -reads of logical blocks in this range shall be all bytes cleared to 0h until -a write occurs to this LBA range.

-

Return

-

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

-
-
-int nvme_write_uncorrectable(struct nvme_io_args *args)
-

Submit an nvme write uncorrectable command

-
- -

Parameters

-
-
struct nvme_io_args *args

struct nvme_io_args argument structure

-
-
-

Description

-

The Write Uncorrectable command marks a range of logical blocks as invalid. -When the specified logical block(s) are read after this operation, a failure -is returned with Unrecovered Read Error status. To clear the invalid logical -block status, a write operation on those logical blocks is required.

-

Return

-

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

-
-
-int nvme_verify(struct nvme_io_args *args)
-

Send an nvme verify command

-
- -

Parameters

-
-
struct nvme_io_args *args

struct nvme_io_args argument structure

-
-
-

Description

-

The Verify command verifies integrity of stored information by reading data -and metadata, if applicable, for the LBAs indicated without transferring any -data or metadata to the host.

-

Return

-

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

-
-
-struct nvme_dsm_args
-

Arguments for the NVMe Dataset Management command

-
- -

Definition

-
struct nvme_dsm_args {
-  __u32 *result;
-  struct nvme_dsm_range *dsm;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  __u32 attrs;
-  __u16 nr_ranges;
-};
-
-
-

Members

-
-
result

The command completion result from CQE dword0

-
-
dsm

The data set management attributes

-
-
args_size

Size of struct nvme_dsm_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
nsid

Namespace identifier

-
-
attrs

DSM attributes, see enum nvme_dsm_attributes

-
-
nr_ranges

Number of block ranges in the data set management attributes

-
-
-
-
-int nvme_dsm(struct nvme_dsm_args *args)
-

Send an nvme data set management command

-
- -

Parameters

-
-
struct nvme_dsm_args *args

struct nvme_dsm_args argument structure

-
-
-

Description

-

The Dataset Management command is used by the host to indicate attributes -for ranges of logical blocks. This includes attributes like frequency that -data is read or written, access size, and other information that may be used -to optimize performance and reliability, and may be used to -deallocate/unmap/trim those logical blocks.

-

Return

-

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

-
-
-struct nvme_copy_args
-

Arguments for the NVMe Copy command

-
- -

Definition

-
struct nvme_copy_args {
-  __u64 sdlba;
-  __u32 *result;
-  struct nvme_copy_range *copy;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  __u32 ilbrt;
-  int lr;
-  int fua;
-  __u16 nr;
-  __u16 dspec;
-  __u16 lbatm;
-  __u16 lbat;
-  __u8 prinfor;
-  __u8 prinfow;
-  __u8 dtype;
-  __u8 format;
-};
-
-
-

Members

-
-
sdlba

Start destination LBA

-
-
result

The command completion result from CQE dword0

-
-
copy

Range descriptior

-
-
args_size

Size of struct nvme_copy_args

-
-
fd

File descriptor of the nvme device

-
-
timeout

Timeout in ms

-
-
nsid

Namespace identifier

-
-
ilbrt

Initial logical block reference tag

-
-
lr

Limited retry

-
-
fua

Force unit access

-
-
nr

Number of ranges

-
-
dspec

Directive specific value

-
-
lbatm

Logical block application tag mask

-
-
lbat

Logical block application tag

-
-
prinfor

Protection information field for read

-
-
prinfow

Protection information field for write

-
-
dtype

Directive type

-
-
format

Descriptor format

-
-
-
-
-int nvme_copy(struct nvme_copy_args *args)
-
- -

Parameters

-
-
struct nvme_copy_args *args

struct nvme_copy_args argument structure

-
-
-

Return

-

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

-
-
-struct nvme_resv_acquire_args
-

Arguments for the NVMe Reservation Acquire Comand

-
- -

Definition

-
struct nvme_resv_acquire_args {
-  __u64 crkey;
-  __u64 nrkey;
-  __u32 *result;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  enum nvme_resv_rtype rtype;
-  enum nvme_resv_racqa racqa;
-  bool iekey;
-};
-
-
-

Members

-
-
crkey

The current reservation key associated with the host

-
-
nrkey

The reservation key to be unregistered from the namespace if -the action is preempt

-
-
result

The command completion result from CQE dword0

-
-
args_size

Size of struct nvme_resv_acquire_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
nsid

Namespace identifier

-
-
rtype

The type of reservation to be create, see enum nvme_resv_rtype

-
-
racqa

The action that is performed by the command, see enum nvme_resv_racqa

-
-
iekey

Set to ignore the existing key

-
-
-
-
-int nvme_resv_acquire(struct nvme_resv_acquire_args *args)
-

Send an nvme reservation acquire

-
- -

Parameters

-
-
struct nvme_resv_acquire_args *args

struct nvme_resv_acquire argument structure

-
-
-

Description

-

The Reservation Acquire command acquires a reservation on a namespace, -preempt a reservation held on a namespace, and abort a reservation held on a -namespace.

-

Return

-

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

-
-
-struct nvme_resv_register_args
-

Arguments for the NVMe Reservation Register command

-
- -

Definition

-
struct nvme_resv_register_args {
-  __u64 crkey;
-  __u64 nrkey;
-  __u32 *result;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  enum nvme_resv_rrega rrega;
-  enum nvme_resv_cptpl cptpl;
-  bool iekey;
-};
-
-
-

Members

-
-
crkey

The current reservation key associated with the host

-
-
nrkey

The new reservation key to be register if action is register or -replace

-
-
result

The command completion result from CQE dword0

-
-
args_size

Size of struct nvme_resv_register_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
nsid

Namespace identifier

-
-
rrega

The registration action, see enum nvme_resv_rrega

-
-
cptpl

Change persist through power loss, see enum nvme_resv_cptpl

-
-
iekey

Set to ignore the existing key

-
-
-
-
-int nvme_resv_register(struct nvme_resv_register_args *args)
-

Send an nvme reservation register

-
- -

Parameters

-
-
struct nvme_resv_register_args *args

struct nvme_resv_register_args argument structure

-
-
-

Description

-

The Reservation Register command registers, unregisters, or replaces a -reservation key.

-

Return

-

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

-
-
-struct nvme_resv_release_args
-

Arguments for the NVMe Reservation Release Command

-
- -

Definition

-
struct nvme_resv_release_args {
-  __u64 crkey;
-  __u32 *result;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  enum nvme_resv_rtype rtype;
-  enum nvme_resv_rrela rrela;
-  bool iekey;
-};
-
-
-

Members

-
-
crkey

The current reservation key to release

-
-
result

The command completion result from CQE dword0

-
-
args_size

Size of struct nvme_resv_release_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
nsid

Namespace identifier

-
-
rtype

The type of reservation to be create, see enum nvme_resv_rtype

-
-
rrela

Reservation releast action, see enum nvme_resv_rrela

-
-
iekey

Set to ignore the existing key

-
-
-
-
-int nvme_resv_release(struct nvme_resv_release_args *args)
-

Send an nvme reservation release

-
- -

Parameters

-
-
struct nvme_resv_release_args *args

struct nvme_resv_release_args argument structure

-
-
-

Return

-

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

-
-
-struct nvme_resv_report_args
-

Arguments for the NVMe Reservation Report command

-
- -

Definition

-
struct nvme_resv_report_args {
-  __u32 *result;
-  struct nvme_resv_status *report;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  __u32 len;
-  bool eds;
-};
-
-
-

Members

-
-
result

The command completion result from CQE dword0

-
-
report

The user space destination address to store the reservation -report

-
-
args_size

Size of struct nvme_resv_report_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
nsid

Namespace identifier

-
-
len

Number of bytes to request transfered with this command

-
-
eds

Request extended Data Structure

-
-
-
-
-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 defintion for -the returned structure, struct nvme_reservation_status, for more details.

-

Return

-

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

-
-
-struct nvme_zns_mgmt_send_args
-

Arguments for the NVMe ZNS Management Send command

-
- -

Definition

-
struct nvme_zns_mgmt_send_args {
-  __u64 slba;
-  __u32 *result;
-  void *data;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  enum nvme_zns_send_action zsa;
-  __u32 data_len;
-  bool select_all;
-  __u8 zsaso;
-};
-
-
-

Members

-
-
slba

Starting logical block address

-
-
result

The command completion result from CQE dword0

-
-
data

Userspace address of the data

-
-
args_size

Size of struct nvme_zns_mgmt_send_args

-
-
fd

File descriptor of nvme device

-
-
timeout

timeout in ms

-
-
nsid

Namespace ID

-
-
zsa

Zone send action

-
-
data_len

Length of data

-
-
select_all

Select all flag

-
-
zsaso

Zone Send Action Specific Option

-
-
-
-
-int nvme_zns_mgmt_send(struct nvme_zns_mgmt_send_args *args)
-
- -

Parameters

-
-
struct nvme_zns_mgmt_send_args *args

struct nvme_zns_mgmt_send_args argument structure

-
-
-

Return

-

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

-
-
-struct nvme_zns_mgmt_recv_args
-

Arguments for the NVMe ZNS Management Receive command

-
- -

Definition

-
struct nvme_zns_mgmt_recv_args {
-  __u64 slba;
-  __u32 *result;
-  void *data;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  enum nvme_zns_recv_action zra;
-  __u32 data_len;
-  __u16 zrasf;
-  bool zras_feat;
-};
-
-
-

Members

-
-
slba

Starting logical block address

-
-
result

The command completion result from CQE dword0

-
-
data

Userspace address of the data

-
-
args_size

Size of struct nvme_zns_mgmt_recv_args

-
-
fd

File descriptor of nvme device

-
-
timeout

timeout in ms

-
-
nsid

Namespace ID

-
-
zra

zone receive action

-
-
data_len

Length of data

-
-
zrasf

Zone receive action specific field

-
-
zras_feat

Zone receive action specific features

-
-
-
-
-int nvme_zns_mgmt_recv(struct nvme_zns_mgmt_recv_args *args)
-
- -

Parameters

-
-
struct nvme_zns_mgmt_recv_args *args

struct nvme_zns_mgmt_recv_args argument structure

-
-
-

Return

-

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

-
-
-int nvme_zns_report_zones(int fd, __u32 nsid, __u64 slba, enum nvme_zns_report_options opts, bool extended, bool partial, __u32 data_len, void *data, __u32 timeout, __u32 *result)
-

Return the list of zones

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace ID

-
-
__u64 slba

Starting LBA

-
-
enum nvme_zns_report_options opts

Reporting options

-
-
bool extended

Extended report

-
-
bool partial

Partial report requested

-
-
__u32 data_len

Length of the data buffer

-
-
void *data

Userspace address of the report zones data

-
-
__u32 timeout

timeout in ms

-
-
__u32 *result

The command completion result from CQE dword0

-
-
-

Return

-

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

-
-
-struct nvme_zns_append_args
-

Arguments for the NVMe ZNS Append command

-
- -

Definition

-
struct nvme_zns_append_args {
-  __u64 zslba;
-  __u64 *result;
-  void *data;
-  void *metadata;
-  int args_size;
-  int fd;
-  __u32 timeout;
-  __u32 nsid;
-  __u32 ilbrt;
-  __u32 data_len;
-  __u32 metadata_len;
-  __u16 nlb;
-  __u16 control;
-  __u16 lbat;
-  __u16 lbatm;
-};
-
-
-

Members

-
-
zslba

Zone start logical block address

-
-
result

The command completion result from CQE dword0

-
-
data

Userspace address of the data

-
-
metadata

Userspace address of the metadata

-
-
args_size

Size of struct nvme_zns_append_args

-
-
fd

File descriptor of nvme device

-
-
timeout

Timeout in ms

-
-
nsid

Namespace ID

-
-
ilbrt

Initial logical block reference tag

-
-
data_len

Length of data

-
-
metadata_len

Length of metadata

-
-
nlb

Number of logical blocks

-
-
-

control

-
-
lbat

Logical block application tag

-
-
lbatm

Logical block application tag mask

-
-
-
-
-int nvme_zns_append(struct nvme_zns_append_args *args)
-

Append data to a zone

-
- -

Parameters

-
-
struct nvme_zns_append_args *args

struct nvme_zns_append_args argument structure

-
-
-

Return

-

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

-

linux.h

-

linux-specific utility functions

-
-
-int nvme_fw_download_seq(int fd, __u32 size, __u32 xfer, __u32 offset, void *buf)
-
- -

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 downlaod

-
-
void *buf

Address of buffer containing all or part of the firmware image.

-
-
-

Return

-

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

-
-
-int nvme_get_ctrl_telemetry(int fd, bool rae, struct nvme_telemetry_log **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 retreived log.

-
-
-

Description

-
-
The total size allocated can be calculated as:

(struct nvme_telemetry_log.dalb3 + 1) * NVME_LOG_TELEM_BLOCK_SIZE.

-
-
-

Return

-

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

-
-
-int nvme_get_host_telemetry(int fd, struct nvme_telemetry_log **log)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
struct nvme_telemetry_log **log

On success, set to the value of the allocated and retreived log.

-
-
-

Description

-
-
The total size allocated can be calculated as:

(struct nvme_telemetry_log.dalb3 + 1) * NVME_LOG_TELEM_BLOCK_SIZE.

-
-
-

Return

-

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

-
-
-int nvme_get_new_host_telemetry(int fd, struct nvme_telemetry_log **log)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
struct nvme_telemetry_log **log

On success, set to the value of the allocated and retreived log.

-
-
-

Description

-
-
The total size allocated can be calculated as:

(struct nvme_telemetry_log.dalb3 + 1) * NVME_LOG_TELEM_BLOCK_SIZE.

-
-
-

Return

-

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

-
-
-int nvme_get_log_page(int fd, __u32 nsid, __u8 log_id, bool rae, __u32 xfer_len, __u32 data_len, void *data)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace Identifier, if applicable.

-
-
__u8 log_id

Log Identifier, see enum nvme_cmd_get_log_lid.

-
-
bool rae

Retain asynchronous events

-
-
__u32 xfer_len

Max log transfer size per request to split the total.

-
-
__u32 data_len

Total length of the log to transfer.

-
-
void *data

User address of at least data_len to store the log.

-
-
-

Return

-

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

-
-
-int nvme_get_log_page_padded(int fd, __u32 nsid, __u8 log_id, bool rae, __u32 data_len, void *data)
-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace Identifier, if applicable.

-
-
__u8 log_id

Log Identifier, see enum nvme_cmd_get_log_lid.

-
-
bool rae

Retain asynchronous events

-
-
__u32 data_len

Total length of the log to transfer.

-
-
void *data

User address of at least data_len to store the log.

-
-
-

Description

-

Calls nvme_get_log_page() with a default 4k transfer length, as that is -guarnateed by the protocol to be a safe transfer size.

-

Return

-

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

-
-
-int nvme_get_ana_log_len(int fd, size_t *analen)
-

Retreive size of the current ANA log

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
size_t *analen

Pointer to where the length will be set on success

-
-
-

Return

-

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

-
-
-int nvme_get_logical_block_size(int fd, __u32 nsid, int *blksize)
-

Retrieve block size

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace id

-
-
int *blksize

Pointer to where the block size will be set on success

-
-
-

Return

-

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

-
-
-int nvme_get_lba_status_log(int fd, bool rae, struct nvme_lba_status_log **log)
-

Retreive 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 retreived log.

-
-
-
-
-int nvme_namespace_attach_ctrls(int fd, __u32 nsid, __u16 num_ctrls, __u16 *ctrlist)
-

Attach namespace to controller(s)

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace ID to attach

-
-
__u16 num_ctrls

Number of controllers in ctrlist

-
-
__u16 *ctrlist

List of controller IDs to perform the attach action

-
-
-

Return

-

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

-
-
-int nvme_namespace_detach_ctrls(int fd, __u32 nsid, __u16 num_ctrls, __u16 *ctrlist)
-

Detach namespace from controller(s)

-
- -

Parameters

-
-
int fd

File descriptor of nvme device

-
-
__u32 nsid

Namespace ID to detach

-
-
__u16 num_ctrls

Number of controllers in ctrlist

-
-
__u16 *ctrlist

List of controller IDs to perform the detach action

-
-
-

Return

-

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

-
-
-int nvme_open(const char *name)
-

Open an nvme controller or namespace device

-
- -

Parameters

-
-
const char *name

The basename of the device to open

-
-
-

Description

-

This will look for the handle in /dev/ and validate the name and filetype -match linux conventions.

-

Return

-

A file descriptor for the device on a successful open, or -1 with -errno set otherwise.

-
-
-enum nvme_hmac_alg
-

HMAC algorithm

-
- -

Constants

-
-
NVME_HMAC_ALG_NONE

No HMAC algorithm

-
-
NVME_HMAC_ALG_SHA2_256

SHA2-256

-
-
NVME_HMAC_ALG_SHA2_384

SHA2-384

-
-
NVME_HMAC_ALG_SHA2_512

SHA2-512

-
-
-
-
-int nvme_gen_dhchap_key(char *hostnqn, enum nvme_hmac_alg hmac, unsigned int key_len, unsigned char *secret, unsigned char *key)
-

DH-HMAC-CHAP key generation

-
- -

Parameters

-
-
char *hostnqn

Host NVMe Qualified Name

-
-
enum nvme_hmac_alg hmac

HMAC algorithm

-
-
unsigned int key_len

Output key lenght

-
-
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.

-

log.h

-

logging functions

-
-
-void nvme_init_logging(nvme_root_t r, int lvl, bool log_pid, bool log_tstamp)
-

initialize logging

-
- -

Parameters

-
-
nvme_root_t r

nvme_root_t context

-
-
int lvl

logging level to set

-
-
bool log_pid

boolean to enable logging of the PID

-
-
bool log_tstamp

boolean to enable logging of the timestamp

-
-
-

Description

-

Sets the default logging variables for the library.

-

tree.h

-

libnvme tree object interface

-
-
-nvme_root_t nvme_create_root(FILE *fp, int log_level)
-

Initialize root object

-
- -

Parameters

-
-
FILE *fp

filedescriptor for logging messages

-
-
int log_level

logging level to use

-
-
-

Return

-

initialized nvme_root_t object

-
-
-void nvme_free_tree(nvme_root_t r)
-

Free root object

-
- -

Parameters

-
-
nvme_root_t r

nvme_root_t object

-
-
-

Description

-

Free an nvme_root_t object and all attached objects

-
-
-nvme_host_t nvme_first_host(nvme_root_t r)
-

Start host iterator

-
- -

Parameters

-
-
nvme_root_t r

nvme_root_t object

-
-
-

Return

-

first nvme_host_t object in an iterator

-
-
-nvme_host_t nvme_next_host(nvme_root_t r, nvme_host_t h)
-

Next host iterator

-
- -

Parameters

-
-
nvme_root_t r

nvme_root_t object

-
-
nvme_host_t h

previous nvme_host_t iterator

-
-
-

Return

-

next nvme_host_t object in an iterator

-
-
-nvme_root_t nvme_host_get_root(nvme_host_t h)
-

Returns nvme_root_t object

-
- -

Parameters

-
-
nvme_host_t h

host

-
-
-

Return

-

nvme_root_t object from h

-
-
-nvme_host_t nvme_lookup_host(nvme_root_t r, const char *hostnqn, const char *hostid)
-

Lookup nvme_host_t object

-
- -

Parameters

-
-
nvme_root_t r

nvme_root_t object

-
-
const char *hostnqn

Host NQN

-
-
const char *hostid

Host ID

-
-
-

Description

-

Lookup a nvme_host_t object based on hostnqn and hostid -or create one if not found.

-

Return

-

nvme_host_t object

-
-
-const char *nvme_host_get_dhchap_key(nvme_host_t h)
-

return host key

-
- -

Parameters

-
-
nvme_host_t h

Host for which the key should be returned

-
-
-

Return

-

DH-HMAC-CHAP host key or NULL if not set

-
-
-void nvme_host_set_dhchap_key(nvme_host_t h, const char *key)
-

set host key

-
- -

Parameters

-
-
nvme_host_t h

Host for which the key should be set

-
-
const char *key

DH-HMAC-CHAP Key to set or NULL to clear existing key

-
-
-
-
-nvme_host_t nvme_default_host(nvme_root_t r)
-

Initializes the default host

-
- -

Parameters

-
-
nvme_root_t r

nvme_root_t object

-
-
-

Description

-

Initializes the default host object based on the values in -/etc/nvme/hostnqn and /etc/nvme/hostid and attaches it to r.

-

Return

-

nvme_host_t object

-
-
-nvme_subsystem_t nvme_first_subsystem(nvme_host_t h)
-

Start subsystem iterator

-
- -

Parameters

-
-
nvme_host_t h

nvme_host_t object

-
-
-

Return

-

first nvme_subsystem_t object in an iterator

-
-
-nvme_subsystem_t nvme_next_subsystem(nvme_host_t h, nvme_subsystem_t s)
-

Next subsystem iterator

-
- -

Parameters

-
-
nvme_host_t h

nvme_host_t object

-
-
nvme_subsystem_t s

previous nvme_subsystem_t iterator

-
-
-

Return

-

next nvme_subsystem_t object in an iterator

-
-
-nvme_subsystem_t nvme_lookup_subsystem(struct nvme_host *h, const char *name, const char *subsysnqn)
-

Lookup nvme_subsystem_t object

-
- -

Parameters

-
-
struct nvme_host *h

nvme_host_t object

-
-
const char *name

Name of the subsystem (may be NULL)

-
-
const char *subsysnqn

Subsystem NQN

-
-
-

Description

-

Lookup a nvme_subsystem_t object in h base on name (if present) -and subsystemnqn or create one if not found.

-

Return

-

nvme_subsystme_t object

-
-
-void nvme_free_subsystem(struct nvme_subsystem *s)
-

Free a subsystem

-
- -

Parameters

-
-
struct nvme_subsystem *s

subsystem

-
-
-

Description

-

Frees s and all related objects.

-
-
-nvme_host_t nvme_subsystem_get_host(nvme_subsystem_t s)
-

Returns nvme_host_t object

-
- -

Parameters

-
-
nvme_subsystem_t s

subsystem

-
-
-

Return

-

nvme_host_t object from s

-
-
-nvme_ns_t nvme_ctrl_first_ns(nvme_ctrl_t c)
-

Start namespace iterator

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

first nvme_ns_t object of an c iterator

-
-
-nvme_ns_t nvme_ctrl_next_ns(nvme_ctrl_t c, nvme_ns_t n)
-

Next namespace iterator

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
nvme_ns_t n

previous nvme_ns_t iterator

-
-
-

Return

-

next nvme_ns_t object of an c iterator

-
-
-nvme_path_t nvme_ctrl_first_path(nvme_ctrl_t c)
-

Start path iterator

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

First nvme_path_t object of an c iterator

-
-
-nvme_path_t nvme_ctrl_next_path(nvme_ctrl_t c, nvme_path_t p)
-

Next path iterator

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
nvme_path_t p

previous nvme_path_t object of an c iterator

-
-
-
-
-nvme_ctrl_t nvme_subsystem_first_ctrl(nvme_subsystem_t s)
-

First ctrl iterator

-
- -

Parameters

-
-
nvme_subsystem_t s

nvme_subsystem_t object

-
-
-

Return

-

First nvme_ctrl_t object of an s iterator

-
-
-nvme_ctrl_t nvme_subsystem_next_ctrl(nvme_subsystem_t s, nvme_ctrl_t c)
-

Next ctrl iterator

-
- -

Parameters

-
-
nvme_subsystem_t s

nvme_subsystem_t object

-
-
nvme_ctrl_t c

previous nvme_ctrl_t object of an s iterator

-
-
-

Return

-

next nvme_ctrl_t object of an s iterator

-
-
-nvme_ctrl_t nvme_lookup_ctrl(nvme_subsystem_t s, const char *transport, const char *traddr, const char *host_traddr, const char *host_iface, const char *trsvcid, nvme_ctrl_t p)
-

Lookup nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_subsystem_t s

nvme_subsystem_t object

-
-
const char *transport

transport name

-
-
const char *traddr

transport address

-
-
const char *host_traddr

host transport address

-
-
const char *host_iface

host interface name

-
-
const char *trsvcid

transport service identifier

-
-
nvme_ctrl_t p

previous nvme_ctrl_t object

-
-
-

Description

-

Lookup a nvme_ctrl_t object 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

-

nvme_ctrl_t object

-
-
-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 nvme_ctrl_t object to be used for -nvme_add_ctrl().

-

Return

-

nvme_ctrl_t object

-
-
-nvme_ns_t nvme_subsystem_first_ns(nvme_subsystem_t s)
-

Start namespace iterator

-
- -

Parameters

-
-
nvme_subsystem_t s

nvme_subsystem_t object

-
-
-

Return

-

First nvme_ns_t object of an s iterator

-
-
-nvme_ns_t nvme_subsystem_next_ns(nvme_subsystem_t s, nvme_ns_t n)
-

Next namespace iterator

-
- -

Parameters

-
-
nvme_subsystem_t s

nvme_subsystem_t object

-
-
nvme_ns_t n

previous nvme_ns_t iterator

-
-
-

Return

-

Next nvme_ns_t object of an s iterator

-
-
-nvme_for_each_host_safe
-
- -

nvme_for_each_host_safe (r, h, _h)

-
-

Traverse host list

-
-

Parameters

-
-
r

nvme_root_t object

-
-
h

nvme_host_t object

-
-
_h

temporary nvme_host_t object

-
-
-
-
-nvme_for_each_host
-
- -

nvme_for_each_host (r, h)

-
-

Traverse host list

-
-

Parameters

-
-
r

nvme_root_t object

-
-
h

nvme_host_t object

-
-
-
-
-nvme_for_each_subsystem_safe
-
- -

nvme_for_each_subsystem_safe (h, s, _s)

-
-

Traverse subsystems

-
-

Parameters

-
-
h

nvme_host_t object

-
-
s

nvme_subsystem_t object

-
-
_s

temporary nvme_subsystem_t object

-
-
-
-
-nvme_for_each_subsystem
-
- -

nvme_for_each_subsystem (h, s)

-
-

Traverse subsystems

-
-

Parameters

-
-
h

nvme_host_t object

-
-
s

nvme_subsystem_t object

-
-
-
-
-nvme_subsystem_for_each_ctrl_safe
-
- -

nvme_subsystem_for_each_ctrl_safe (s, c, _c)

-
-

Traverse controllers

-
-

Parameters

-
-
s

nvme_subsystem_t object

-
-
c

nvme_ctrl_t object

-
-
_c

temporary nvme_ctrl_t object

-
-
-
-
-nvme_subsystem_for_each_ctrl
-
- -

nvme_subsystem_for_each_ctrl (s, c)

-
-

traverse controllers

-
-

Parameters

-
-
s

nvme_subsystem_t object

-
-
c

nvme_ctrl_t object

-
-
-
-
-nvme_ctrl_for_each_ns_safe
-
- -

nvme_ctrl_for_each_ns_safe (c, n, _n)

-
-

traverse namespaces

-
-

Parameters

-
-
c

nvme_ctrl_t object

-
-
n

nvme_ns_t object

-
-
_n

temporary nvme_ns_t object

-
-
-
-
-nvme_ctrl_for_each_ns
-
- -

nvme_ctrl_for_each_ns (c, n)

-
-

traverse namespaces

-
-

Parameters

-
-
c

nvme_ctrl_t object

-
-
n

nvme_ns_t object

-
-
-
-
-nvme_ctrl_for_each_path_safe
-
- -

nvme_ctrl_for_each_path_safe (c, p, _p)

-
-

Traverse paths

-
-

Parameters

-
-
c

nvme_ctrl_t object

-
-
p

nvme_path_t object

-
-
_p

temporary nvme_path_t object

-
-
-
-
-nvme_ctrl_for_each_path
-
- -

nvme_ctrl_for_each_path (c, p)

-
-

Traverse paths

-
-

Parameters

-
-
c

nvme_ctrl_t object

-
-
p

nvme_path_t object

-
-
-
-
-nvme_subsystem_for_each_ns_safe
-
- -

nvme_subsystem_for_each_ns_safe (s, n, _n)

-
-

Traverse namespaces

-
-

Parameters

-
-
s

nvme_subsystem_t object

-
-
n

nvme_ns_t object

-
-
_n

temporary nvme_ns_t object

-
-
-
-
-nvme_subsystem_for_each_ns
-
- -

nvme_subsystem_for_each_ns (s, n)

-
-

Traverse namespaces

-
-

Parameters

-
-
s

nvme_subsystem_t object

-
-
n

nvme_ns_t object

-
-
-
-
-int nvme_ns_get_fd(nvme_ns_t n)
-

Get associated filedescriptor

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
-

Return

-

Filedescriptor associated with n or -1

-
-
-int nvme_ns_get_nsid(nvme_ns_t n)
-

NSID of an nvme_ns_t object

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
-

Return

-

NSID of n

-
-
-int nvme_ns_get_lba_size(nvme_ns_t n)
-

LBA size of an nvme_ns_t object

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
-

Return

-

LBA size of n

-
-
-int nvme_ns_get_meta_size(nvme_ns_t n)
-

Metadata size of an nvme_ns_t object

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
-

Return

-

Metadata size of n

-
-
-uint64_t nvme_ns_get_lba_count(nvme_ns_t n)
-

LBA count of an nvme_ns_t object

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
-

Return

-

LBA count of n

-
-
-uint64_t nvme_ns_get_lba_util(nvme_ns_t n)
-

LBA utilisation of an nvme_ns_t object

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
-

Return

-

LBA utilisation of n

-
-
-enum nvme_csi nvme_ns_get_csi(nvme_ns_t n)
-

Command set identifier of an nvme_ns_t object

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
-

Return

-

The namespace’s command set identifier in use

-
-
-const uint8_t *nvme_ns_get_eui64(nvme_ns_t n)
-

64-bit eui of an nvme_ns_t object

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
-

Description

-

Returns a pointer to the 64-bit eui

-
-
-const uint8_t *nvme_ns_get_nguid(nvme_ns_t n)
-

128-bit nguid of an nvme_ns_t object

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
-

Description

-

Returns a pointer to the 128-bit nguid

-
-
-void nvme_ns_get_uuid(nvme_ns_t n, uuid_t out)
-

UUID of an nvme_ns_t object

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
uuid_t out

buffer for the UUID

-
-
-

Description

-

Copies the namespace’s uuid into out

-
-
-const char *nvme_ns_get_sysfs_dir(nvme_ns_t n)
-

sysfs directory of an nvme_ns_t object

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
-

Return

-

sysfs directory name of n

-
-
-const char *nvme_ns_get_name(nvme_ns_t n)
-

sysfs name of an nvme_ns_t object

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
-

Return

-

sysfs name of n

-
-
-const char *nvme_ns_get_generic_name(nvme_ns_t n)
-

Returns name of generic namesapce chardev.

-
- -

Parameters

-
-
nvme_ns_t n

Namespace instance

-
-
-

Return

-

Name of generic namespace chardev

-
-
-const char *nvme_ns_get_firmware(nvme_ns_t n)
-

Firmware string of an nvme_ns_t object

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
-

Return

-

Firmware string of n

-
-
-const char *nvme_ns_get_serial(nvme_ns_t n)
-

Serial number of an nvme_ns_t object

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
-

Return

-

Serial number string of n

-
-
-const char *nvme_ns_get_model(nvme_ns_t n)
-

Model of an nvme_ns_t object

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
-

Return

-

Model string of n

-
-
-nvme_subsystem_t nvme_ns_get_subsystem(nvme_ns_t n)
-

nvme_subsystem_t of an nvme_ns_t object

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
-

Return

-

nvme_subsystem_t object of n

-
-
-nvme_ctrl_t nvme_ns_get_ctrl(nvme_ns_t n)
-

nvme_ctrl_t of an nvme_ns_t object

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
-

Description

-

nvme_ctrl_t object may be NULL for a multipathed namespace

-

Return

-

nvme_ctrl_t object of n if present

-
-
-void nvme_free_ns(struct nvme_ns *n)
-

free an nvme_ns_t object

-
- -

Parameters

-
-
struct nvme_ns *n

nvme_ns_t object

-
-
-
-
-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

nvme_ns_t object

-
-
void *buf

buffer into which the data will be transferred

-
-
off_t offset

LBA offset of n

-
-
size_t count

Number of sectors in buf

-
-
-

Return

-

Number of sectors read or -1 on error.

-
-
-int nvme_ns_write(nvme_ns_t n, void *buf, off_t offset, size_t count)
-

Write to a namespace

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
void *buf

buffer with data to be written

-
-
off_t offset

LBA offset of n

-
-
size_t count

Number of sectors in buf

-
-
-

Return

-

Number of sectors written or -1 on error

-
-
-int nvme_ns_verify(nvme_ns_t n, off_t offset, size_t count)
-

Verify data on a namespace

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
off_t offset

LBA offset of n

-
-
size_t count

Number of sectors to be verified

-
-
-

Return

-

Number of sectors verified

-
-
-int nvme_ns_compare(nvme_ns_t n, void *buf, off_t offset, size_t count)
-

Compare data on a namespace

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
void *buf

buffer with data to be compared

-
-
off_t offset

LBA offset of n

-
-
size_t count

Number of sectors in buf

-
-
-

Return

-

Number of sectors compared

-
-
-int nvme_ns_write_zeros(nvme_ns_t n, off_t offset, size_t count)
-

Write zeros to a namespace

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
off_t offset

LBA offset in n

-
-
size_t count

Number of sectors to be written

-
-
-

Return

-

Number of sectors written

-
-
-int nvme_ns_write_uncorrectable(nvme_ns_t n, off_t offset, size_t count)
-

Issus a ‘write uncorrectable’ command

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
off_t offset

LBA offset in n

-
-
size_t count

Number of sectors to be written

-
-
-

Return

-

Number of sectors written

-
-
-int nvme_ns_flush(nvme_ns_t n)
-

Flush data to a namespace

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
-

Return

-

0 on success, -1 on error.

-
-
-int nvme_ns_identify(nvme_ns_t n, struct nvme_id_ns *ns)
-

Issue an ‘identify namespace’ command

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
struct nvme_id_ns *ns

nvme_id_ns buffer

-
-
-

Description

-

Writes the data returned by the ‘identify namespace’ command -into ns.

-

Return

-

0 on success, -1 on error.

-
-
-int nvme_ns_identify_descs(nvme_ns_t n, struct nvme_ns_id_desc *descs)
-

Issue an ‘identify descriptors’ command

-
- -

Parameters

-
-
nvme_ns_t n

nvme_ns_t object

-
-
struct nvme_ns_id_desc *descs

list of identify descriptors

-
-
-

Description

-

Writes the data returned by the ‘identify descriptors’ command -into descs.

-

Return

-

0 on success, -1 on error.

-
-
-const char *nvme_path_get_name(nvme_path_t p)
-

sysfs name of an nvme_path_t object

-
- -

Parameters

-
-
nvme_path_t p

nvme_path_t object

-
-
-

Return

-

sysfs name of p

-
-
-const char *nvme_path_get_sysfs_dir(nvme_path_t p)
-

sysfs directory of an nvme_path_t object

-
- -

Parameters

-
-
nvme_path_t p

nvme_path_t object

-
-
-

Return

-

sysfs directory of p

-
-
-const char *nvme_path_get_ana_state(nvme_path_t p)
-

ANA state of an nvme_path_t object

-
- -

Parameters

-
-
nvme_path_t p

nvme_path_t object

-
-
-

Return

-

ANA (Asynchronous Namespace Access) state of p

-
-
-nvme_ctrl_t nvme_path_get_ctrl(nvme_path_t p)
-

parent controller of an nvme_path_t object

-
- -

Parameters

-
-
nvme_path_t p

nvme_path_t object

-
-
-

Return

-

parent controller if present

-
-
-nvme_ns_t nvme_path_get_ns(nvme_path_t p)
-

parent namespace of an nvme_path_t object

-
- -

Parameters

-
-
nvme_path_t p

nvme_path_t object

-
-
-

Return

-

parent namespace if present

-
-
-int nvme_ctrl_get_fd(nvme_ctrl_t c)
-

Get associated filedescriptor

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

Filedescriptor associated with c or -1

-
-
-const char *nvme_ctrl_get_name(nvme_ctrl_t c)
-

sysfs name of an nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

sysfs name of c

-
-
-const char *nvme_ctrl_get_sysfs_dir(nvme_ctrl_t c)
-

sysfs directory of an nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

sysfs directory name of c

-
-
-const char *nvme_ctrl_get_address(nvme_ctrl_t c)
-

Address string of an nvme_ctrl_t

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

NVMe-over-Fabrics address string of c or empty string -of no address is present.

-
-
-const char *nvme_ctrl_get_firmware(nvme_ctrl_t c)
-

Firmware string of an nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

Firmware string of c

-
-
-const char *nvme_ctrl_get_model(nvme_ctrl_t c)
-

Model of an nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

Model string of c

-
-
-const char *nvme_ctrl_get_state(nvme_ctrl_t c)
-

Running state of an nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

string indicating the running state of c

-
-
-const char *nvme_ctrl_get_numa_node(nvme_ctrl_t c)
-

NUMA node of an nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

string indicating the NUMA node

-
-
-const char *nvme_ctrl_get_queue_count(nvme_ctrl_t c)
-

Queue count of an nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

Queue count of c

-
-
-const char *nvme_ctrl_get_serial(nvme_ctrl_t c)
-

Serial number of an nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

Serial number string of c

-
-
-const char *nvme_ctrl_get_sqsize(nvme_ctrl_t c)
-

SQ size of an nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

SQ size (as string) of c

-
-
-const char *nvme_ctrl_get_transport(nvme_ctrl_t c)
-

Transport type of an nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

Transport type of c

-
-
-const char *nvme_ctrl_get_subsysnqn(nvme_ctrl_t c)
-

Subsystem NQN of an nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

Subsystem NQN of c

-
-
-nvme_subsystem_t nvme_ctrl_get_subsystem(nvme_ctrl_t c)
-

Parent subsystem of an nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

Parent nvme_subsystem_t object

-
-
-const char *nvme_ctrl_get_traddr(nvme_ctrl_t c)
-

Transport address of an nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

Transport address of c

-
-
-const char *nvme_ctrl_get_trsvcid(nvme_ctrl_t c)
-

Transport service identifier of an nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

Transport service identifier of c (if present)

-
-
-const char *nvme_ctrl_get_host_traddr(nvme_ctrl_t c)
-

Host transport address of an nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

Host transport address of c (if present)

-
-
-const char *nvme_ctrl_get_host_iface(nvme_ctrl_t c)
-

Host interface name of an nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

Host interface name of c (if present)

-
-
-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 returned

-
-
-

Return

-

DH-HMAC-CHAP controller key or NULL if not set

-
-
-void nvme_ctrl_set_dhchap_key(nvme_ctrl_t c, const char *key)
-

set controller key

-
- -

Parameters

-
-
nvme_ctrl_t c

Controller for which the key should be set

-
-
const char *key

DH-HMAC-CHAP Key to set or NULL to clear existing key

-
-
-
-
-struct nvme_fabrics_config *nvme_ctrl_get_config(nvme_ctrl_t c)
-

Fabrics configuration of an nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

Fabrics configuration of c

-
-
-void nvme_ctrl_set_discovered(nvme_ctrl_t c, bool discovered)
-

Set the ‘discovered’ flag

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
bool discovered

value of the ‘discovered’ flag

-
-
-

Description

-

Set the ‘discovered’ flag of c to discovered

-
-
-bool nvme_ctrl_is_discovered(nvme_ctrl_t c)
-

Returns the value of the ‘discovered’ flag

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

Value of the ‘discovered’ flag of c

-
-
-void nvme_ctrl_set_persistent(nvme_ctrl_t c, bool persistent)
-

Set the ‘persistent’ flag

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
bool persistent

value of the ‘persistent’ flag

-
-
-

Description

-

Set the ‘persistent’ flag of c to persistent

-
-
-bool nvme_ctrl_is_persistent(nvme_ctrl_t c)
-

Returns the value of the ‘persistent’ flag

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Return

-

Value of the ‘persistent’ flag of c

-
-
-void nvme_ctrl_set_discovery_ctrl(nvme_ctrl_t c, bool discovery)
-

Set the ‘discovery_ctrl’ flag

-
- -

Parameters

-
-
nvme_ctrl_t c

Controller to be modified

-
-
bool discovery

value of the discovery_ctrl flag

-
-
-

Description

-

Sets the ‘discovery_ctrl’ flag in c to specify whether -c connects to a discovery subsystem.

-
-
-bool nvme_ctrl_is_discovery_ctrl(nvme_ctrl_t c)
-

Check the ‘discovery_ctrl’ flag

-
- -

Parameters

-
-
nvme_ctrl_t c

Controller to be checked

-
-
-

Description

-

Returns the value of the ‘discovery_ctrl’ flag which specifies whether -c connects to a discovery subsystem.

-

Return

-

value of the ‘discover_ctrl’ flag

-
-
-int nvme_ctrl_identify(nvme_ctrl_t c, struct nvme_id_ctrl *id)
-

Issues an ‘identify controller’ command

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
struct nvme_id_ctrl *id

identify controller data structure

-
-
-

Description

-

Issues an ‘identify controller’ command to c and copies the -data into id.

-

Return

-

0 on success or -1 on failure.

-
-
-int nvme_disconnect_ctrl(nvme_ctrl_t c)
-

Disconnect a controller

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-

Description

-

Issues a ‘disconnect’ fabrics command to c

-

Return

-

0 on success, -1 on failure.

-
-
-nvme_ctrl_t nvme_scan_ctrl(nvme_root_t r, const char *name)
-

Scan on a controller

-
- -

Parameters

-
-
nvme_root_t r

nvme_root_t object

-
-
const char *name

name of the controller

-
-
-

Description

-

Scans a controller with sysfs name name and add it to r.

-

Return

-

nvme_ctrl_t object

-
-
-void nvme_rescan_ctrl(nvme_ctrl_t c)
-

Rescan an existing nvme_ctrl_t object

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
-
-
-int nvme_init_ctrl(nvme_host_t h, nvme_ctrl_t c, int instance)
-

Initialize nvme_ctrl_t object for an existing nvme controller.

-
- -

Parameters

-
-
nvme_host_t h

nvme_host_t object

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
int instance

Instance number (e.g. 1 for nvme1)

-
-
-

Return

-

The ioctl() return code. Typically 0 on success.

-
-
-void nvme_free_ctrl(struct nvme_ctrl *c)
-
- -

Parameters

-

struct nvme_ctrl *c

-
- -
- -

Parameters

-

struct nvme_ctrl *c

-
-
-const char *nvme_subsystem_get_nqn(nvme_subsystem_t s)
-
- -

Parameters

-

nvme_subsystem_t s

-
-
-const char *nvme_subsystem_get_sysfs_dir(nvme_subsystem_t s)
-

sysfs directory of an nvme_subsystem_t object

-
- -

Parameters

-
-
nvme_subsystem_t s

nvme_subsystem_t object

-
-
-

Return

-

sysfs directory name of s

-
-
-const char *nvme_subsystem_get_name(nvme_subsystem_t s)
-

sysfs name of an nvme_subsystem_t object

-
- -

Parameters

-
-
nvme_subsystem_t s

nvme_subsystem_t object

-
-
-

Return

-

sysfs name of s

-
-
-const char *nvme_subsystem_get_type(nvme_subsystem_t s)
-

Returns the type of a subsystem

-
- -

Parameters

-
-
nvme_subsystem_t s

Subsystem

-
-
-

Description

-

Returns the subsystem type of s.

-

Return

-

‘nvm’ or ‘discovery’

-
-
-int nvme_scan_topology(nvme_root_t r, nvme_scan_filter_t f)
-

Scan NVMe topology and apply filter

-
- -

Parameters

-
-
nvme_root_t r

nvme_root_t object

-
-
nvme_scan_filter_t f

filter to apply

-
-
-

Description

-

Scans the NVMe topology and filters out the resulting elements -by applying f.

-

Return

-

Number of elements scanned

-
-
-const char *nvme_host_get_hostnqn(nvme_host_t h)
-

Host NQN of an nvme_host_t object

-
- -

Parameters

-
-
nvme_host_t h

nvme_host_t object

-
-
-

Return

-

Host NQN of h

-
-
-const char *nvme_host_get_hostid(nvme_host_t h)
-

Host ID of an nvme_host_t object

-
- -

Parameters

-
-
nvme_host_t h

nvme_host_t object

-
-
-

Return

-

Host ID of h

-
-
-void nvme_free_host(nvme_host_t h)
-

Free nvme_host_t object

-
- -

Parameters

-
-
nvme_host_t h

nvme_host_t object

-
-
-
-
-nvme_root_t nvme_scan(const char *config_file)
-

Scan NVMe topology

-
- -

Parameters

-
-
const char *config_file

configuration file

-
-
-

Return

-

nvme_root_t object of found elements

-
-
-int nvme_read_config(nvme_root_t r, const char *config_file)
-

Read NVMe json configuration file

-
- -

Parameters

-
-
nvme_root_t r

nvme_root_t object

-
-
const char *config_file

json configuration file

-
-
-

Description

-

Read in the contents of config_file and merge them with -the elements in r.

-

Return

-

0 on success, -1 on failure with errno set.

-
-
-void nvme_refresh_topology(nvme_root_t r)
-

refresh nvme_root_t object contents

-
- -

Parameters

-
-
nvme_root_t r

nvme_root_t object

-
-
-

Description

-

Removes all elements in r and rescans the existing topology.

-
-
-int nvme_update_config(nvme_root_t r)
-

Update JSON configuration

-
- -

Parameters

-
-
nvme_root_t r

nvme_root_t object

-
-
-

Description

-

Updates the JSON configuration file with the contents of r.

-

Return

-

0 on success, -1 on failure.

-
-
-int nvme_dump_config(nvme_root_t r)
-

Print the JSON configuration

-
- -

Parameters

-
-
nvme_root_t r

nvme_root_t object

-
-
-

Description

-

Prints the current contents of the JSON configuration -file to stdout.

-

Return

-

0 on success, -1 on failure.

-
-
-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

-
-
-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

-
-
-char *nvme_get_ctrl_attr(nvme_ctrl_t c, const char *attr)
-

Read controller sysfs attribute

-
- -

Parameters

-
-
nvme_ctrl_t c

nvme_ctrl_t object

-
-
const char *attr

sysfs attribute name

-
-
-

Return

-

string with the contents of attr

-
-
-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

-
-
-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

-
-
-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

-
-
-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.

-

types.h

-

NVMe standard definitions

-
-
-NVME_GET
-
- -

NVME_GET (value, name)

-
-

extract field from complex value

-
-

Parameters

-
-
value

The original value of a complex field

-
-
name

The name of the sub-field within an nvme value

-
-
-

Description

-

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

-

Return

-

The ‘name’ field from ‘value’

-
-
-NVME_SET
-
- -

NVME_SET (value, name)

-
-

set field into complex value

-
-

Parameters

-
-
value

The value to be set in its completed position

-
-
name

The name of the sub-field within an nvme value

-
-
-

Return

-

The

-
-
-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 lagest 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_DSM_MAX_RANGES

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

-
-
NVME_NQN_LENGTH

Max length for NVMe Qualified Name

-
-
NVMF_TRADDR_SIZE

Max Transport Address size

-
-
NVMF_TSAS_SIZE

Max Transport Specific Address Subtype size

-
-
NVME_ZNS_CHANGED_ZONES_MAX

Max number of zones in the changed zones log -page

-
-
-
-
-enum nvme_csi
-

Defined command set indicators

-
- -

Constants

-
-
NVME_CSI_NVM

NVM Command Set Indicator

-
-
NVME_CSI_ZNS

Zoned Namespace Command Set

-
-
-
-
-enum nvme_register_offsets
-

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

-
- -

Constants

-
-
NVME_REG_CAP

Controller Capabilities

-
-
NVME_REG_VS

Version

-
-
NVME_REG_INTMS

Interrupt Mask Set

-
-
NVME_REG_INTMC

Interrupt Mask Clear

-
-
NVME_REG_CC

Controller Configuration

-
-
NVME_REG_CSTS

Controller Status

-
-
NVME_REG_NSSR

NVM Subsystem Reset

-
-
NVME_REG_AQA

Admin Queue Attributes

-
-
NVME_REG_ASQ

Admin SQ Base Address

-
-
NVME_REG_ACQ

Admin CQ Base Address

-
-
NVME_REG_CMBLOC

Controller Memory Buffer Location

-
-
NVME_REG_CMBSZ

Controller Memory Buffer Size

-
-
NVME_REG_BPINFO

Boot Partition Information

-
-
NVME_REG_BPRSEL

Boot Partition Read Select

-
-
NVME_REG_BPMBL

Boot Partition Memory Buffer Location

-
-
NVME_REG_CMBMSC

Controller Memory Buffer Memory Space Control

-
-
NVME_REG_CMBSTS

Controller Memory Buffer Status

-
-
NVME_REG_PMRCAP

Persistent Memory Capabilities

-
-
NVME_REG_PMRCTL

Persistent Memory Region Control

-
-
NVME_REG_PMRSTS

Persistent Memory Region Status

-
-
NVME_REG_PMREBS

Persistent Memory Region Elasticity Buffer Size

-
-
NVME_REG_PMRSWTP

Memory Region Sustained Write Throughput

-
-
NVME_REG_PMRMSCL

Persistent Memory Region Controller Memory Space Control Lower

-
-
NVME_REG_PMRMSCU

Persistent Memory Region Controller Memory Space Control Upper

-
-
-
-
-bool nvme_is_64bit_reg(__u32 offset)
-

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

-
- -

Parameters

-
-
__u32 offset

Offset of controller register field in bytes

-
-
-

Description

-

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

-

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

-
-
-__u64 nvme_cmb_size(__u32 cmbsz)
-

Calculate size of the controller memory buffer

-
- -

Parameters

-
-
__u32 cmbsz

Value from controller register NVME_REG_CMBSZ

-
-
-

Description

-

Returns size of controller memory buffer in bytes

-
-
-__u64 nvme_pmr_size(__u32 pmrebs)
-

Calculate size of persistent memory region elasticity buffer

-
- -

Parameters

-
-
__u32 pmrebs

Value from controller register NVME_REG_PMREBS

-
-
-

Description

-

Returns size of controller persistent memory buffer in bytes

-
-
-__u64 nvme_pmr_throughput(__u32 pmrswtp)
-

Calculate throughput of persistent memory buffer

-
- -

Parameters

-
-
__u32 pmrswtp

Value from controller register NVME_REG_PMRSWTP

-
-
-

Description

-

Returns throughput of controller persistent memory buffer in bytes/second

-
-
-enum nvme_psd_flags
-

Possible flag values in nvme power state descriptor

-
- -

Constants

-
-
NVME_PSD_FLAGS_MXPS

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

-
-
NVME_PSD_FLAGS_NOPS

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

-
-
-
-
-enum nvme_psd_ps
-

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

-
- -

Constants

-
-
NVME_PSD_PS_100_MICRO_WATT

0.0001 watt scale

-
-
NVME_PSD_PS_10_MILLI_WATT

0.01 watt scale

-
-
-
-
-unsigned int nvme_psd_power_scale(__u8 ps)
-

power scale occupies the upper 3 bits

-
- -

Parameters

-
-
__u8 ps

power scale value

-
-
-
-
-enum nvme_psd_workload
-

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

-
- -

Constants

-
-
NVME_PSD_WORKLOAD_1

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

-
-
NVME_PSD_WORKLOAD_2

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

-
-
-
-
-struct nvme_id_psd
-
- -

Definition

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

Members

-
-
mp

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

-
-
rsvd2

Reserved

-
-
flags

Additional decoding flags, see enum nvme_psd_flags.

-
-
enlat

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

-
-
exlat

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

-
-
rrt

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

-
-
rrl

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

-
-
rwt

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

-
-
rwl

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

-
-
idlp

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

-
-
ips

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

-
-
rsvd19

Reserved

-
-
actp

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

-
-
apws

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

-
-
rsvd23

Reserved

-
-
-
-
-struct nvme_id_ctrl
-

Identify Controller data structure

-
- -

Definition

-
struct nvme_id_ctrl {
-  __le16 vid;
-  __le16 ssvid;
-  char sn[20];
-  char mn[40];
-  char fr[8];
-  __u8 rab;
-  __u8 ieee[3];
-  __u8 cmic;
-  __u8 mdts;
-  __le16 cntlid;
-  __le32 ver;
-  __le32 rtd3r;
-  __le32 rtd3e;
-  __le32 oaes;
-  __le32 ctratt;
-  __le16 rrls;
-  __u8 rsvd102[9];
-  __u8 cntrltype;
-  __u8 fguid[16];
-  __le16 crdt1;
-  __le16 crdt2;
-  __le16 crdt3;
-  __u8 rsvd134[119];
-  __u8 nvmsr;
-  __u8 vwci;
-  __u8 mec;
-  __le16 oacs;
-  __u8 acl;
-  __u8 aerl;
-  __u8 frmw;
-  __u8 lpa;
-  __u8 elpe;
-  __u8 npss;
-  __u8 avscc;
-  __u8 apsta;
-  __le16 wctemp;
-  __le16 cctemp;
-  __le16 mtfa;
-  __le32 hmpre;
-  __le32 hmmin;
-  __u8 tnvmcap[16];
-  __u8 unvmcap[16];
-  __le32 rpmbs;
-  __le16 edstt;
-  __u8 dsto;
-  __u8 fwug;
-  __le16 kas;
-  __le16 hctma;
-  __le16 mntmt;
-  __le16 mxtmt;
-  __le32 sanicap;
-  __le32 hmminds;
-  __le16 hmmaxd;
-  __le16 nsetidmax;
-  __le16 endgidmax;
-  __u8 anatt;
-  __u8 anacap;
-  __le32 anagrpmax;
-  __le32 nanagrpid;
-  __le32 pels;
-  __le16 domainid;
-  __u8 rsvd358[10];
-  __u8 megcap[16];
-  __u8 rsvd384[128];
-  __u8 sqes;
-  __u8 cqes;
-  __le16 maxcmd;
-  __le32 nn;
-  __le16 oncs;
-  __le16 fuses;
-  __u8 fna;
-  __u8 vwc;
-  __le16 awun;
-  __le16 awupf;
-  __u8 icsvscc;
-  __u8 nwpc;
-  __le16 acwu;
-  __le16 ocfs;
-  __le32 sgls;
-  __le32 mnan;
-  __u8 maxdna[16];
-  __le32 maxcna;
-  __u8 rsvd564[204];
-  char subnqn[NVME_NQN_LENGTH];
-  __u8 rsvd1024[768];
-  __le32 ioccsz;
-  __le32 iorcsz;
-  __le16 icdoff;
-  __u8 fcatt;
-  __u8 msdbd;
-  __le16 ofcs;
-  __u8 rsvd1806[242];
-  struct nvme_id_psd      psd[32];
-  __u8 vs[1024];
-};
-
-
-

Members

-
-
vid

PCI Vendor ID, the company vendor identifier that is assigned by -the PCI SIG.

-
-
ssvid

PCI Subsystem Vendor ID, the company vendor identifier that is -assigned by the PCI SIG for the subsystem.

-
-
sn

Serial Number in ascii

-
-
mn

Model Number in ascii

-
-
fr

Firmware Revision in ascii, the currently active firmware -revision for the NVM subsystem

-
-
rab

Recommended Arbitration Burst, reported as a power of two

-
-
ieee

IEEE assigned Organization Unique Identifier

-
-
cmic

Controller Multipath IO and Namespace Sharing Capabilities of -the controller and NVM subsystem. See enum nvme_id_ctrl_cmic.

-
-
mdts

Max Data Transfer Size is the largest data transfer size. The -host should not submit a command that exceeds this maximum data -transfer size. The value is in units of the minimum memory page -size (CAP.MPSMIN) and is reported as a power of two

-
-
cntlid

Controller ID, the NVM subsystem unique controller identifier -associated with the controller.

-
-
ver

Version, this field contains the value reported in the Version -register, or property (see enum nvme_registers NVME_REG_VS).

-
-
rtd3r

RTD3 Resume Latency, the expected latency in microseconds to resume -from Runtime D3

-
-
rtd3e

RTD3 Exit Latency, the typical latency in microseconds to enter -Runtime D3.

-
-
oaes

Optional Async Events Supported, see enum nvme_id_ctrl_oaes.

-
-
ctratt

Controller Attributes, see enum nvme_id_ctrl_ctratt.

-
-
rrls

Read Recovery Levels. If a bit is set, then the corresponding -Read Recovery Level is supported. If a bit is cleared, then the -corresponding Read Recovery Level is not supported.

-
-
rsvd102

Reserved

-
-
cntrltype

Controller Type, see enum nvme_id_ctrl_cntrltype

-
-
fguid

FRU GUID, a 128-bit value that is globally unique for a given -Field Replaceable Unit

-
-
crdt1

Controller Retry Delay time in 100 millisecod units if CQE CRD -field is 1

-
-
crdt2

Controller Retry Delay time in 100 millisecod units if CQE CRD -field is 2

-
-
crdt3

Controller Retry Delay time in 100 millisecod units if CQE CRD -field is 3

-
-
rsvd134

Reserved

-
-
nvmsr

NVM Subsystem Report, see enum nvme_id_ctrl_nvmsr

-
-
vwci

VPD Write Cycle Information, see enum nvme_id_ctrl_vwci

-
-
mec

Management Endpoint Capabilities, see enum nvme_id_ctrl_mec

-
-
oacs

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

-
-
acl

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

-
-
aerl

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

-
-
frmw

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

-
-
lpa

Log Page Attributes, see enum nvme_id_ctrl_lpa.

-
-
elpe

Error Log Page Entries, the maximum number of Error Information -log entries that are stored by the controller. This field is a -0’s based value.

-
-
npss

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

-
-
avscc

Admin Vendor Specific Command Configuration, see -enum nvme_id_ctrl_avscc.

-
-
apsta

Autonomous Power State Transition Attributes, see -enum nvme_id_ctrl_apsta.

-
-
wctemp

Warning Composite Temperature Threshold indicates -the minimum Composite Temperature field value (see struct -nvme_smart_log.critical_comp_time) that indicates an overheating -condition during which controller operation continues.

-
-
cctemp

Critical Composite Temperature Threshold, field indicates the -minimum Composite Temperature field value (see struct -nvme_smart_log.critical_comp_time) that indicates a critical -overheating condition.

-
-
mtfa

Maximum Time for Firmware Activation indicates the maximum time -the controller temporarily stops processing commands to activate -the firmware image, specified in 100 millisecond units. This -field is always valid if the controller supports firmware -activation without a reset.

-
-
hmpre

Host Memory Buffer Preferred Size indicates the preferred size -that the host is requested to allocate for the Host Memory -Buffer feature in 4 KiB units.

-
-
hmmin

Host Memory Buffer Minimum Size indicates the minimum size that -the host is requested to allocate for the Host Memory Buffer -feature in 4 KiB units.

-
-
tnvmcap

Total NVM Capacity, the total NVM capacity in the NVM subsystem. -The value is in bytes.

-
-
unvmcap

Unallocated NVM Capacity, the unallocated NVM capacity in the -NVM subsystem. The value is in bytes.

-
-
rpmbs

Replay Protected Memory Block Support, see -enum nvme_id_ctrl_rpmbs.

-
-
edstt

Extended Device Self-test Time, if Device Self-test command is -supported (see struct nvme_id_ctrl.oacs, NVME_CTRL_OACS_SELF_TEST), -then this field indicates the nominal amount of time in one -minute units that the controller takes to complete an extended -device self-test operation when in power state 0.

-
-
dsto

Device Self-test Options, see enum nvme_id_ctrl_dsto.

-
-
fwug

Firmware Update Granularity indicates the granularity and -alignment requirement of the firmware image being updated by the -Firmware Image Download command. The value is reported in 4 KiB -units. A value of 0h indicates no information on granularity is -provided. A value of FFh indicates no restriction

-
-
kas

Keep Alive Support indicates the granularity of the Keep Alive -Timer in 100 millisecond units.

-
-
hctma

Host Controlled Thermal Management Attributes, see -enum nvme_id_ctrl_hctm.

-
-
mntmt

Minimum Thermal Management Temperature indicates the minimum -temperature, in degrees Kelvin, that the host may request in the -Thermal Management Temperature 1 field and Thermal Management -Temperature 2 field of a Set Features command with the Feature -Identifier field set to NVME_FEAT_FID_HCTM.

-
-
mxtmt

Maximum Thermal Management Temperature indicates the maximum -temperature, in degrees Kelvin, that the host may request in the -Thermal Management Temperature 1 field and Thermal Management -Temperature 2 field of the Set Features command with the Feature -Identifier set to NVME_FEAT_FID_HCTM.

-
-
sanicap

Sanitize Capabilities, see enum nvme_id_ctrl_sanicap

-
-
hmminds

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

-
-
hmmaxd

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

-
-
nsetidmax

NVM Set Identifier Maximum, defines the maximum value of a valid -NVM Set Identifier for any controller in the NVM subsystem.

-
-
endgidmax

Endurance Group Identifier Maximum, defines the maximum value of -a valid Endurance Group Identifier for any controller in the NVM -subsystem.

-
-
anatt

ANA Transition Time indicates the maximum amount of time, in -seconds, for a transition between ANA states or the maximum -amount of time, in seconds, that the controller reports the ANA -change state.

-
-
anacap

Asymmetric Namespace Access Capabilities, see -enum nvme_id_ctrl_anacap.

-
-
anagrpmax

ANA Group Identifier Maximum indicates the maximum value of a -valid ANA Group Identifier for any controller in the NVM -subsystem.

-
-
nanagrpid

Number of ANA Group Identifiers indicates the number of ANA -groups supported by this controller.

-
-
pels

Persistent Event Log Size indicates the maximum reportable size -for the Persistent Event Log.

-
-
domainid

Domain Identifier indicates the identifier of the domain -that contains this controller.

-
-
rsvd358

Reserved

-
-
megcap

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

-
-
rsvd384

Reserved

-
-
sqes

Submission Queue Entry Size, see enum nvme_id_ctrl_sqes.

-
-
cqes

Completion Queue Entry Size, see enum nvme_id_ctrl_cqes.

-
-
maxcmd

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

-
-
nn

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

-
-
oncs

Optional NVM Command Support, see enum nvme_id_ctrl_oncs.

-
-
fuses

Fused Operation Support, see enum nvme_id_ctrl_fuses.

-
-
fna

Format NVM Attributes, see enum nvme_id_ctrl_fna.

-
-
vwc

Volatile Write Cache, see enum nvme_id_ctrl_vwc.

-
-
awun

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

-
-
awupf

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

-
-
icsvscc

NVM Vendor Specific Command Configuration, see -enum nvme_id_ctrl_nvscc.

-
-
nwpc

Namespace Write Protection Capabilities, see -enum nvme_id_ctrl_nwpc.

-
-
acwu

Atomic Compare & Write Unit indicates the size of the write -operation guaranteed to be written atomically to the NVM across -all namespaces with any supported namespace format for a Compare -and Write fused operation. This field is specified in logical -blocks and is a 0’s based value.

-
-
ocfs

Optional Copy Formats Supported, each bit n means controller -supports Copy Format n.

-
-
sgls

SGL Support, see enum nvme_id_ctrl_sgls

-
-
mnan

Maximum Number of Allowed Namespaces indicates the maximum -number of namespaces supported by the NVM subsystem.

-
-
maxdna

Maximum Domain Namespace Attachments indicates the maximum -of the sum of the numver 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 enum nvme_id_ctrl_fcatt.

-
-
msdbd

Maximum SGL Data Block Descriptors indicates the maximum -number of SGL Data Block or Keyed SGL Data Block descriptors -that a host is allowed to place in a capsule. A value of 0h -indicates no limit.

-
-
ofcs

Optional Fabric Commands Support, see enum nvme_id_ctrl_ofcs.

-
-
rsvd1806

Reserved

-
-
psd

Power State Descriptors, see struct nvme_id_psd.

-
-
vs

Vendor Specific

-
-
-
-
-enum nvme_id_ctrl_cmic
-

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

-
- -

Constants

-
-
NVME_CTRL_CMIC_MULTI_PORT

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

-
-
NVME_CTRL_CMIC_MULTI_CTRL

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

-
-
NVME_CTRL_CMIC_MULTI_SRIOV

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

-
-
NVME_CTRL_CMIC_MULTI_ANA_REPORTING

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

-
-
-
-
-enum nvme_id_ctrl_oaes
-

Optional Asynchronous Events Supported

-
- -

Constants

-
-
NVME_CTRL_OAES_NA

Namespace Attribute Notices event supported

-
-
NVME_CTRL_OAES_FA

Firmware Activation Notices event supported

-
-
NVME_CTRL_OAES_ANA

ANA Change Notices supported

-
-
NVME_CTRL_OAES_PLEA

Predictable Latency Event Aggregate Log -Change Notices event supported

-
-
NVME_CTRL_OAES_LBAS

LBA Status Information Notices event supported

-
-
NVME_CTRL_OAES_EGE

Endurance Group Events Aggregate Log Change -Notices event supported

-
-
NVME_CTRL_OAES_NS

Normal NVM Subsystem Shutdown event supported

-
-
NVME_CTRL_OAES_ZD

Zone Descriptor Change Notifications supported

-
-
NVME_CTRL_OAES_DL

Discover Log Page Change Notifications supported

-
-
-
-
-enum nvme_id_ctrl_ctratt
-

Controller attributes

-
- -

Constants

-
-
NVME_CTRL_CTRATT_128_ID

128-bit Host Identifier supported

-
-
NVME_CTRL_CTRATT_NON_OP_PSP

Non-Operational Poser State Permissive Mode -supported

-
-
NVME_CTRL_CTRATT_NVM_SETS

NVM Sets supported

-
-
NVME_CTRL_CTRATT_READ_RECV_LVLS

Read Recovery Levels supported

-
-
NVME_CTRL_CTRATT_ENDURANCE_GROUPS

Endurance Groups supported

-
-
NVME_CTRL_CTRATT_PREDICTABLE_LAT

Predictable Latency Mode supported

-
-
NVME_CTRL_CTRATT_TBKAS

Traffic Based Keep Alive Support

-
-
NVME_CTRL_CTRATT_NAMESPACE_GRANULARITY

Namespace Granularity reporting -supported

-
-
NVME_CTRL_CTRATT_SQ_ASSOCIATIONS

SQ Associations supported

-
-
NVME_CTRL_CTRATT_UUID_LIST

UUID List reporting supported

-
-
NVME_CTRL_CTRATT_MDS

Multi-Domain Subsystem supported

-
-
NVME_CTRL_CTRATT_FIXED_CAP

Fixed Capacity Management supported

-
-
NVME_CTRL_CTRATT_VARIABLE_CAP

Variable Capacity Managment 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

-
-
-
-
-enum nvme_id_ctrl_cntrltype
-

Controller types

-
- -

Constants

-
-
NVME_CTRL_CNTRLTYPE_IO

NVM I/O controller

-
-
NVME_CTRL_CNTRLTYPE_DISCOVERY

Discovery controller

-
-
NVME_CTRL_CNTRLTYPE_ADMIN

Admin controller

-
-
-
-
-enum nvme_id_ctrl_nvmsr
-

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

-
- -

Constants

-
-
NVME_CTRL_NVMSR_NVMESD

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

-
-
NVME_CTRL_NVMSR_NVMEE

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

-
-
-
-
-enum nvme_id_ctrl_vwci
-

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

-
- -

Constants

-
-
NVME_CTRL_VWCI_VWCR

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

-
-
NVME_CTRL_VWCI_VWCRV

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

-
-
-
-
-enum nvme_id_ctrl_mec
-

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

-
- -

Constants

-
-
NVME_CTRL_MEC_SMBUSME

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

-
-
NVME_CTRL_MEC_PCIEME

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

-
-
-
-
-enum nvme_id_ctrl_oacs
-

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

-
- -

Constants

-
-
NVME_CTRL_OACS_SECURITY

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

-
-
NVME_CTRL_OACS_FORMAT

If set then the controller supports the Format -NVM command.

-
-
NVME_CTRL_OACS_FW

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

-
-
NVME_CTRL_OACS_NS_MGMT

If set, then the controller supports the -Namespace Management capability

-
-
NVME_CTRL_OACS_SELF_TEST

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

-
-
NVME_CTRL_OACS_DIRECTIVES

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

-
-
NVME_CTRL_OACS_NVME_MI

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

-
-
NVME_CTRL_OACS_VIRT_MGMT

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

-
-
NVME_CTRL_OACS_DBBUF_CFG

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

-
-
NVME_CTRL_OACS_LBA_STATUS

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

-
-
-
-
-enum nvme_id_ctrl_frmw
-

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

-
- -

Constants

-
-
NVME_CTRL_FRMW_1ST_RO

If set, the first firmware slot is readonly

-
-
NVME_CTRL_FRMW_NR_SLOTS

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

-
-
NVME_CTRL_FRMW_FW_ACT_NO_RESET

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

-
-
-
-
-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

-

NVME_CTRL_LPA_CMD_EFFECTS

-

NVME_CTRL_LPA_EXTENDED

-

NVME_CTRL_LPA_TELEMETRY

-

NVME_CTRL_LPA_PERSETENT_EVENT

-
-
-enum nvme_id_ctrl_avscc
-

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

-
- -

Constants

-
-
NVME_CTRL_AVSCC_AVS

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

-
-
-
-
-enum nvme_id_ctrl_apsta
-

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

-
- -

Constants

-
-
NVME_CTRL_APSTA_APST

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

-
-
-
-
-enum nvme_id_ctrl_rpmbs
-

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

-
- -

Constants

-
-
NVME_CTRL_RPMBS_NR_UNITS

Mask to get the value of the Number of RPMB Units

-
-
NVME_CTRL_RPMBS_AUTH_METHOD

Mask to get the value of the Authentication Method

-
-
NVME_CTRL_RPMBS_TOTAL_SIZE

Mask to get the value of Total Size

-
-
NVME_CTRL_RPMBS_ACCESS_SIZE

Mask to get the value of Access Size

-
-
-
-
-enum nvme_id_ctrl_dsto
-

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

-
- -

Constants

-
-
NVME_CTRL_DSTO_ONE_DST

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

-
-
-
-
-enum nvme_id_ctrl_hctm
-

Flags indicate the attributes of the host controlled thermal management feature

-
- -

Constants

-
-
NVME_CTRL_HCTMA_HCTM

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

-
-
-
-
-enum nvme_id_ctrl_sanicap
-

Indicates attributes for sanitize operations.

-
- -

Constants

-
-
NVME_CTRL_SANICAP_CES

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

-
-
NVME_CTRL_SANICAP_BES

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

-
-
NVME_CTRL_SANICAP_OWS

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

-
-
NVME_CTRL_SANICAP_NDI

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

-
-
NVME_CTRL_SANICAP_NODMMAS

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

-
-
-
-
-enum nvme_id_ctrl_anacap
-

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

-
- -

Constants

-
-
NVME_CTRL_ANACAP_OPT

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

-
-
NVME_CTRL_ANACAP_NON_OPT

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

-
-
NVME_CTRL_ANACAP_INACCESSIBLE

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

-
-
NVME_CTRL_ANACAP_PERSISTENT_LOSS

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

-
-
NVME_CTRL_ANACAP_CHANGE

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

-
-
NVME_CTRL_ANACAP_GRPID_NO_CHG

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

-
-
NVME_CTRL_ANACAP_GRPID_MGMT

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

-
-
-
-
-enum nvme_id_ctrl_sqes
-

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

-
- -

Constants

-
-
NVME_CTRL_SQES_MIN

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

-
-
NVME_CTRL_SQES_MAX

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

-
-
-
-
-enum nvme_id_ctrl_cqes
-

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

-
- -

Constants

-
-
NVME_CTRL_CQES_MIN

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

-
-
NVME_CTRL_CQES_MAX

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

-
-
-
-
-enum nvme_id_ctrl_oncs
-

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

-
- -

Constants

-
-
NVME_CTRL_ONCS_COMPARE

If set, then the controller supports -the Compare command.

-
-
NVME_CTRL_ONCS_WRITE_UNCORRECTABLE

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

-
-
NVME_CTRL_ONCS_DSM

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

-
-
NVME_CTRL_ONCS_WRITE_ZEROES

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

-
-
NVME_CTRL_ONCS_SAVE_FEATURES

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

-
-
NVME_CTRL_ONCS_RESERVATIONS

If set, then the controller supports -reservations.

-
-
NVME_CTRL_ONCS_TIMESTAMP

If set, then the controller supports -the Timestamp feature.

-
-
NVME_CTRL_ONCS_VERIFY

If set, then the controller supports -the Verify command.

-
-
-
-
-enum nvme_id_ctrl_fuses
-

This field indicates the fused operations that the controller supports.

-
- -

Constants

-
-
NVME_CTRL_FUSES_COMPARE_AND_WRITE

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

-
-
-
-
-enum nvme_id_ctrl_fna
-

This field indicates attributes for the Format NVM command.

-
- -

Constants

-
-
NVME_CTRL_FNA_FMT_ALL_NAMESPACES

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

-
-
NVME_CTRL_FNA_SEC_ALL_NAMESPACES

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

-
-
NVME_CTRL_FNA_CRYPTO_ERASE

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

-
-
-
-
-enum nvme_id_ctrl_vwc
-
- -

Constants

-
-
NVME_CTRL_VWC_PRESENT

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

-
-
NVME_CTRL_VWC_FLUSH

Mask to get the value of the flush command behavior.

-
-
-
-
-enum nvme_id_ctrl_nvscc
-

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

-
- -

Constants

-
-
NVME_CTRL_NVSCC_FMT

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

-
-
-
-
-enum nvme_id_ctrl_nwpc
-

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

-
- -

Constants

-
-
NVME_CTRL_NWPC_WRITE_PROTECT

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

-
-
NVME_CTRL_NWPC_WRITE_PROTECT_POWER_CYCLE

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

-
-
NVME_CTRL_NWPC_WRITE_PROTECT_PERMANENT

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

-
-
-
-
-enum nvme_id_ctrl_sgls
-

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

-
- -

Constants

-

NVME_CTRL_SGLS_SUPPORTED

-

NVME_CTRL_SGLS_KEYED

-

NVME_CTRL_SGLS_BIT_BUCKET

-

NVME_CTRL_SGLS_MPTR_BYTE_ALIGNED

-

NVME_CTRL_SGLS_OVERSIZE

-

NVME_CTRL_SGLS_MPTR_SGL

-

NVME_CTRL_SGLS_OFFSET

-

NVME_CTRL_SGLS_TPORT

-
-
-enum nvme_id_ctrl_fcatt
-

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

-
- -

Constants

-
-
NVME_CTRL_FCATT_DYNAMIC

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

-
-
-
-
-enum nvme_id_ctrl_ofcs
-

Indicate whether the controller supports optional fabric commands.

-
- -

Constants

-
-
NVME_CTRL_OFCS_DISCONNECT

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

-
-
-
-
-struct nvme_lbaf
-

LBA Format Data Structure

-
- -

Definition

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

Members

-
-
ms

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

-
-
ds

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

-
-
rp

Relative Performance, see enum nvme_lbaf_rp.

-
-
-
-
-enum nvme_lbaf_rp
-

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

-
- -

Constants

-
-
NVME_LBAF_RP_BEST

Best performance

-
-
NVME_LBAF_RP_BETTER

Better performance

-
-
NVME_LBAF_RP_GOOD

Good performance

-
-
NVME_LBAF_RP_DEGRADED

Degraded performance

-
-
NVME_LBAF_RP_MASK

Mask to get the relative performance value from the -field

-
-
-
-
-struct nvme_id_ns
-

Identify Namespace data structure

-
- -

Definition

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

Members

-
-
nsze

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

-
-
ncap

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

-
-
nuse

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

-
-
nsfeat

Namespace Features, see enum nvme_id_nsfeat.

-
-
nlbaf

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

-
-
flbas

Formatted LBA Size, see enum nvme_id_ns_flbas.

-
-
mc

Metadata Capabilities, see enum nvme_id_ns_mc.

-
-
dpc

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

-
-
dps

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

-
-
nmic

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

-
-
rescap

Reservation Capabilities, see enum nvme_id_ns_rescap.

-
-
fpi

Format Progress Indicator, see enum nvme_nd_ns_fpi.

-
-
dlfeat

Deallocate Logical Block Features, see enum nvme_id_ns_dlfeat.

-
-
nawun

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

-
-
nawupf

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

-
-
nacwu

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

-
-
nabsn

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

-
-
nabo

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

-
-
nabspf

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

-
-
noiob

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

-
-
nvmcap

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

-
-
npwg

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

-
-
npwa

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

-
-
npdg

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

-
-
npda

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

-
-
nows

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

-
-
mssrl

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

-
-
mcl

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

-
-
msrc

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

-
-
rsvd81

Reserved

-
-
nulbaf

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

-
-
rsvd83

Reserved

-
-
anagrpid

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

-
-
rsvd96

Reserved

-
-
nsattr

Namespace Attributes, see enum nvme_id_ns_attr.

-
-
nvmsetid

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

-
-
endgid

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

-
-
nguid

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

-
-
eui64

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

-
-
lbaf

LBA Format, see struct nvme_lbaf.

-
-
vs

Vendor Specific

-
-
-
-
-enum nvme_id_nsfeat
-

This field defines features of the namespace.

-
- -

Constants

-
-
NVME_NS_FEAT_THIN

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

-
-
NVME_NS_FEAT_NATOMIC

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

-
-
NVME_NS_FEAT_DULBE

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

-
-
NVME_NS_FEAT_ID_REUSE

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

-
-
NVME_NS_FEAT_IO_OPT

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

-
-
-
-
-enum nvme_id_ns_flbas
-

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

-
- -

Constants

-
-
NVME_NS_FLBAS_LOWER_MASK

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

-
-
NVME_NS_FLBAS_META_EXT

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

-
-
NVME_NS_FLBAS_HIGHER_MASK

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

-
-
-
-
-enum nvme_id_ns_mc
-

This field indicates the capabilities for metadata.

-
- -

Constants

-
-
NVME_NS_MC_EXTENDED

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

-
-
NVME_NS_MC_SEPARATE

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

-
-
-
-
-enum nvme_id_ns_dpc
-

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

-
- -

Constants

-
-
NVME_NS_DPC_PI_TYPE1

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

-
-
NVME_NS_DPC_PI_TYPE2

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

-
-
NVME_NS_DPC_PI_TYPE3

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

-
-
NVME_NS_DPC_PI_FIRST

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

-
-
NVME_NS_DPC_PI_LAST

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

-
-
-
-
-enum nvme_id_ns_dps
-

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

-
- -

Constants

-
-
NVME_NS_DPS_PI_NONE

Protection information is not enabled

-
-
NVME_NS_DPS_PI_TYPE1

Protection information is enabled, Type 1

-
-
NVME_NS_DPS_PI_TYPE2

Protection information is enabled, Type 2

-
-
NVME_NS_DPS_PI_TYPE3

Protection information is enabled, Type 3

-
-
NVME_NS_DPS_PI_MASK

Mask to get the value of the PI type

-
-
NVME_NS_DPS_PI_FIRST

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

-
-
-
-
-enum nvme_id_ns_nmic
-

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

-
- -

Constants

-
-
NVME_NS_NMIC_SHARED

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

-
-
-
-
-enum nvme_id_ns_rescap
-

This field indicates the reservation capabilities of the namespace.

-
- -

Constants

-
-
NVME_NS_RESCAP_PTPL

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

-
-
NVME_NS_RESCAP_WE

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

-
-
NVME_NS_RESCAP_EA

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

-
-
NVME_NS_RESCAP_WERO

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

-
-
NVME_NS_RESCAP_EARO

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

-
-
NVME_NS_RESCAP_WEAR

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

-
-
NVME_NS_RESCAP_EAAR

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

-
-
NVME_NS_RESCAP_IEK_13

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

-
-
-
-
-enum nvme_nd_ns_fpi
-

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

-
- -

Constants

-
-
NVME_NS_FPI_REMAINING

Mask to get the format percent remaining value

-
-
NVME_NS_FPI_SUPPORTED

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

-
-
-
-
-enum nvme_id_ns_dlfeat
-

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

-
- -

Constants

-
-
NVME_NS_DLFEAT_RB

Mask to get the value of the read behavior

-
-
NVME_NS_DLFEAT_RB_NR

Read behvaior is not reported

-
-
NVME_NS_DLFEAT_RB_ALL_0S

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

-
-
NVME_NS_DLFEAT_RB_ALL_FS

A deallocated logical block returns all bytes -set to FFh.

-
-
NVME_NS_DLFEAT_WRITE_ZEROES

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

-
-
NVME_NS_DLFEAT_CRC_GUARD

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

-
-
-
-
-enum nvme_id_ns_attr
-

Specifies attributes of the namespace.

-
- -

Constants

-
-
NVME_NS_NSATTR_WRITE_PROTECTED

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

-
-
-
-
-struct nvme_ns_id_desc
-
- -

Definition

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

Members

-
-
nidt

Namespace Identifier Type, see enum nvme_ns_id_desc_nidt

-
-
nidl

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

-
-
rsvd

Reserved

-
-
nid

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

-
-
-
-
-enum nvme_ns_id_desc_nidt
-

Known namespace identifier types

-
- -

Constants

-
-
NVME_NIDT_EUI64

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

-
-
NVME_NIDT_NGUID

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

-
-
NVME_NIDT_UUID

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

-
-
NVME_NIDT_CSI

The NID field contains the command set indentifier.

-
-
-
-
-struct nvme_nvmset_attr
-

NVM Set Attributes Entry

-
- -

Definition

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

Members

-
-
nvmsetid

NVM Set Identifier

-
-
endgid

Endurance Group Identifier

-
-
rsvd4

Reserved

-
-
rr4kt

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

-
-
ows

Optimal Write Size

-
-
tnvmsetcap

Total NVM Set Capacity

-
-
unvmsetcap

Unallocated NVM Set Capacity

-
-
rsvd48

Reserved

-
-
-
-
-struct nvme_id_nvmset_list
-
- -

Definition

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

Members

-
-
nid

Nvmset id

-
-
rsvd1

Reserved

-
-
ent

nvmset id list

-
-
-
-
-struct nvme_id_independent_id_ns
-
- -

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

-

nmic

-

rescap

-

fpi

-

anagrpid

-

nsattr

-

rsvd9

-

nvmsetid

-

endgid

-

nstat

-

rsvd15

-
-
-struct nvme_id_ns_granularity_desc
-
- -

Definition

-
struct nvme_id_ns_granularity_desc {
-  __le64 nszegran;
-  __le64 ncapgran;
-};
-
-
-

Members

-

nszegran

-

ncapgran

-
-
-struct nvme_id_ns_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

-

num_descriptors

-

rsvd5

-

entry

-

rsvd288

-
-
-struct nvme_id_uuid_list_entry
-
- -

Definition

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

Members

-

header

-

rsvd1

-

uuid

-
-
-enum nvme_id_uuid
-
- -

Constants

-

NVME_ID_UUID_HDR_ASSOCIATION_MASK

-

NVME_ID_UUID_ASSOCIATION_NONE

-

NVME_ID_UUID_ASSOCIATION_VENDOR

-

NVME_ID_UUID_ASSOCIATION_SUBSYSTEM_VENDOR

-
-
-struct nvme_id_uuid_list
-
- -

Definition

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

Members

-

rsvd0

-

entry

-
-
-struct nvme_ctrl_list
-
- -

Definition

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

Members

-

num

-

identifier

-
-
-struct nvme_ns_list
-
- -

Definition

-
struct nvme_ns_list {
-  __le32 ns[NVME_ID_NS_LIST_MAX];
-};
-
-
-

Members

-

ns

-
-
-struct nvme_id_ctrl_nvm
-
- -

Definition

-
struct nvme_id_ctrl_nvm {
-  __u8 vsl;
-  __u8 wzsl;
-  __u8 wusl;
-  __u8 dmrl;
-  __u32 dmrsl;
-  __u64 dmsl;
-  __u8 rsvd16[4080];
-};
-
-
-

Members

-

vsl

-

wzsl

-

wusl

-

dmrl

-

dmrsl

-

dmsl

-

rsvd16

-
-
-struct nvme_nvm_id_ns
-
- -

Definition

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

Members

-
-
lbstm

Logical Block Storage Tag Mask

-
-
pic

Protection Information Capabilities

-
-
rsvd9

Reserved

-
-
elbaf

List of Extended LBA Format Support

-
-
rsvd268

Reserved

-
-
-
-
-struct nvme_zns_lbafe
-
- -

Definition

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

Members

-

zsze

-

zdes

-

rsvd9

-
-
-struct nvme_zns_id_ns
-

Zoned Namespace Command Set Specific Identify Namespace Data Structure

-
- -

Definition

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

Members

-
-
zoc

Zone Operation Characteristics

-
-
ozcs

Optional Zoned Command Support

-
-
mar

Maximum Active Resources

-
-
mor

Maximum Open Resources

-
-
rrl

Reset Recommended Limit

-
-
frl

Finish Recommended Limit

-
-
rrl1

Reset Recommended Limit 1

-
-
rrl2

Reset Recommended Limit 2

-
-
rrl3

Reset Recommended Limit 3

-
-
frl1

Finish Recommended Limit 1

-
-
frl2

Finish Recommended Limit 2

-
-
frl3

Finish Recommended Limit 3

-
-
numzrwa

Number of ZRWA Resources

-
-
zrwafg

ZRWA Flush Granularity

-
-
zrwasz

ZRWA Size

-
-
zrwacap

ZRWA Capability

-
-
rsvd53

Reserved

-
-
lbafe

LBA Format Extension

-
-
vs

Vendor Specific

-
-
-
-
-struct nvme_zns_id_ctrl
-
- -

Definition

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

Members

-

zasl

-
-
rsvd1

Reserved

-
-
-
-
-struct nvme_primary_ctrl_cap
-
- -

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

-

portid

-

crt

-

rsvd5

-

vqfrt

-

vqrfa

-

vqrfap

-

vqprt

-

vqfrsm

-

vqgran

-

rsvd48

-

vifrt

-

virfa

-

virfap

-

viprt

-

vifrsm

-

vigran

-

rsvd80

-
-
-struct nvme_secondary_ctrl
-
- -

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

-

pcid

-

scs

-

rsvd5

-

vfn

-

nvq

-

nvi

-

rsvd14

-
-
-struct nvme_secondary_ctrl_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

-

rsvd

-

sc_entry

-
-
-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

-
-
-
-
-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

-

rsvd2

-

dom_cap

-

unalloc_dom_cap

-

max_egrp_dom_cap

-

rsvd64

-
-
-struct nvme_id_domain_list
-
- -

Definition

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

Members

-
-
num

Number of domain attributes

-
-
rsvd

Reserved

-
-
domain_attr

List of domain attributes

-
-
-
-
-struct nvme_id_endurance_group_list
-
- -

Definition

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

Members

-

num

-

identifier

-
-
-struct nvme_supported_log_pages
-
- -

Definition

-
struct nvme_supported_log_pages {
-  __le32 lid_support[NVME_LOG_SUPPORTED_LOG_PAGES_MAX];
-};
-
-
-

Members

-

lid_support

-

Description

-

Supported Log Pages (Log Identifier 00h)

-
-
-struct nvme_error_log_page
-

Error Information Log Entry (Log Identifier 01h)

-
- -

Definition

-
struct nvme_error_log_page {
-  __le64 error_count;
-  __le16 sqid;
-  __le16 cmdid;
-  __le16 status_field;
-  __le16 parm_error_location;
-  __le64 lba;
-  __le32 nsid;
-  __u8 vs;
-  __u8 trtype;
-  __u8 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 enum 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

-

rsvd2

-
-
-enum nvme_err_pel
-
- -

Constants

-

NVME_ERR_PEL_BYTE_MASK

-

NVME_ERR_PEL_BIT_MASK

-
-
-struct nvme_smart_log
-

SMART / Health Information Log (Log Identifier 02h)

-
- -

Definition

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

Members

-
-
critical_warning

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

-
-
temperature

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

-
-
avail_spare

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

-
-
spare_thresh

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

-
-
percent_used

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

-
-
endu_grp_crit_warn_sumry

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

-
-
rsvd7

Reserved

-
-
data_units_read

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

-
-
data_units_written

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

-
-
host_reads

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

-
-
host_writes

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

-
-
ctrl_busy_time

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

-
-
power_cycles

Power Cycles: Contains the number of power cycles.

-
-
power_on_hours

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

-
-
unsafe_shutdowns

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

-
-
media_errors

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

-
-
num_err_log_entries

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

-
-
warning_temp_time

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

-
-
critical_comp_time

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

-
-
temp_sensor

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

-
-
thm_temp1_trans_count

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

-
-
thm_temp2_trans_count

Thermal Management Temperature 2 Transition Count

-
-
thm_temp1_total_time

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

-
-
thm_temp2_total_time

Total Time For Thermal Management Temperature 2

-
-
rsvd232

Reserved

-
-
-
-
-enum nvme_smart_crit
-

Critical Warning

-
- -

Constants

-
-
NVME_SMART_CRIT_SPARE

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

-
-
NVME_SMART_CRIT_TEMPERATURE

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

-
-
NVME_SMART_CRIT_DEGRADED

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

-
-
NVME_SMART_CRIT_MEDIA

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

-
-
NVME_SMART_CRIT_VOLATILE_MEMORY

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

-
-
NVME_SMART_CRIT_PMR_RO

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

-
-
-
-
-enum nvme_smart_egcw
-

Endurance Group Critical Warning Summary

-
- -

Constants

-
-
NVME_SMART_EGCW_SPARE

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

-
-
NVME_SMART_EGCW_DEGRADED

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

-
-
NVME_SMART_EGCW_RO

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

-
-
-
-
-struct nvme_firmware_slot
-
- -

Definition

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

Members

-

afi

-

rsvd1

-

frs

-

rsvd2

-
-
-struct nvme_cmd_effects_log
-
- -

Definition

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

Members

-

acs

-

iocs

-

rsvd

-
-
-enum nvme_cmd_effects
-
- -

Constants

-

NVME_CMD_EFFECTS_CSUPP

-

NVME_CMD_EFFECTS_LBCC

-

NVME_CMD_EFFECTS_NCC

-

NVME_CMD_EFFECTS_NIC

-

NVME_CMD_EFFECTS_CCC

-

NVME_CMD_EFFECTS_CSE_MASK

-

NVME_CMD_EFFECTS_UUID_SEL

-
-
-struct nvme_st_result
-

Self-test Result

-
- -

Definition

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

Members

-
-
dsts

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

-
-
seg

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

-
-
vdi

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

-
-
rsvd

Reserved

-
-
poh

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

-
-
nsid

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

-
-
flba

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

-
-
sct

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

-
-
sc

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

-
-
vs

Vendor Specific.

-
-
-
-
-enum nvme_status_result
-

Result of the device self-test operation

-
- -

Constants

-
-
NVME_ST_RESULT_NO_ERR

Operation completed without error.

-
-
NVME_ST_RESULT_ABORTED

Operation was aborted by a Device Self-test command.

-
-
NVME_ST_RESULT_CLR

Operation was aborted by a Controller Level Reset.

-
-
NVME_ST_RESULT_NS_REMOVED

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

-
-
NVME_ST_RESULT_ABORTED_FORMAT

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

-
-
NVME_ST_RESULT_FATAL_ERR

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

-
-
NVME_ST_RESULT_UNKNOWN_SEG_FAIL

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

-
-
NVME_ST_RESULT_KNOWN_SEG_FAIL

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

-
-
NVME_ST_RESULT_ABORTED_UNKNOWN

Operation was aborted for unknown reason.

-
-
NVME_ST_RESULT_ABORTED_SANITIZE

Operation was aborted due to a sanitize operation.

-
-
NVME_ST_RESULT_NOT_USED

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

-
-
NVME_ST_RESULT_MASK

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

-
-
-
-
-enum nvme_st_code
-

Self-test Code value

-
- -

Constants

-
-
NVME_ST_CODE_RESERVED

Reserved.

-
-
NVME_ST_CODE_SHORT

Short device self-test operation.

-
-
NVME_ST_CODE_EXTENDED

Extended device self-test operation.

-
-
NVME_ST_CODE_VS

Vendor specific.

-
-
NVME_ST_CODE_SHIFT

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

-
-
-
-
-enum nvme_st_curr_op
-

Current Device Self-Test Operation

-
- -

Constants

-
-
NVME_ST_CURR_OP_NOT_RUNNING

No device self-test operation in progress.

-
-
NVME_ST_CURR_OP_SHORT

Short device self-test operation in progress.

-
-
NVME_ST_CURR_OP_EXTENDED

Extended device self-test operation in progress.

-
-
NVME_ST_CURR_OP_VS

Vendor specific.

-
-
NVME_ST_CURR_OP_RESERVED

Reserved.

-
-
NVME_ST_CURR_OP_MASK

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

-
-
NVME_ST_CURR_OP_CMPL_MASK

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

-
-
-
-
-enum nvme_st_valid_diag_info
-

Valid Diagnostic Information

-
- -

Constants

-
-
NVME_ST_VALID_DIAG_INFO_NSID

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

-
-
NVME_ST_VALID_DIAG_INFO_FLBA

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

-
-
NVME_ST_VALID_DIAG_INFO_SCT

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

-
-
NVME_ST_VALID_DIAG_INFO_SC

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

-
-
-
-
-struct nvme_self_test_log
-

Device Self-test (Log Identifier 06h)

-
- -

Definition

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

Members

-
-
current_operation

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

-
-
completion

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

-
-
rsvd

Reserved

-
-
result

Self-test Result Data Structures, see struct nvme_st_result.

-
-
-
-
-enum nvme_cmd_get_log_telemetry_host_lsp
-
- -

Constants

-

NVME_LOG_TELEM_HOST_LSP_RETAIN

-

NVME_LOG_TELEM_HOST_LSP_CREATE

-
-
-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[362];
-  __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

-
-
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 Identifieris a vendor specific identifier that describes -the operating conditions of the controller at the time of -capture.

-
-
data_area

Telemetry data blocks, vendor specific information data.

-
-
-

Description

-

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

-
-
-struct nvme_endurance_group_log
-
- -

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

-

rsvd1

-

avl_spare

-

avl_spare_threshold

-

percent_used

-

rsvd6

-

endurance_estimate

-

data_units_read

-

data_units_written

-

media_units_written

-

host_read_cmds

-

host_write_cmds

-

media_data_integrity_err

-

num_err_info_log_entries

-

rsvd160

-
-
-enum nvme_eg_critical_warning_flags
-
- -

Constants

-

NVME_EG_CRITICAL_WARNING_SPARE

-

NVME_EG_CRITICAL_WARNING_DEGRADED

-

NVME_EG_CRITICAL_WARNING_READ_ONLY

-
-
-struct nvme_aggregate_endurance_group_event
-
- -

Definition

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

Members

-
-
num_entries

Number or entries

-
-
entries

List of entries

-
-
-
-
-struct nvme_nvmset_predictable_lat_log
-
- -

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

-

rsvd1

-

event_type

-

rsvd4

-

dtwin_rt

-

dtwin_wt

-

dtwin_tmax

-

ndwin_tmin_hi

-

ndwin_tmin_lo

-

rsvd72

-

dtwin_re

-

dtwin_we

-

dtwin_te

-

rsvd152

-
-
-enum nvme_nvmeset_pl_status
-
- -

Constants

-

NVME_NVMSET_PL_STATUS_DISABLED

-

NVME_NVMSET_PL_STATUS_DTWIN

-

NVME_NVMSET_PL_STATUS_NDWIN

-
-
-enum nvme_nvmset_pl_events
-
- -

Constants

-

NVME_NVMSET_PL_EVENT_DTWIN_READ_WARN

-

NVME_NVMSET_PL_EVENT_DTWIN_WRITE_WARN

-

NVME_NVMSET_PL_EVENT_DTWIN_TIME_WARN

-

NVME_NVMSET_PL_EVENT_DTWIN_EXCEEDED

-

NVME_NVMSET_PL_EVENT_DTWIN_EXCURSION

-
-
-struct nvme_aggregate_predictable_lat_event
-
- -

Definition

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

Members

-
-
num_entries

Number of entries

-
-
entries

Entry list

-
-
-
-
-struct nvme_ana_group_desc
-
- -

Definition

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

Members

-
-
grpid

ANA group id

-
-
nnsids

Number of namespaces in nsids

-
-
chgcnt

Change counter

-
-
state

ANA state

-
-
rsvd17

Reserved

-
-
nsids

List of namespaces

-
-
-
-
-enum nvme_ana_state
-
- -

Constants

-

NVME_ANA_STATE_OPTIMIZED

-

NVME_ANA_STATE_NONOPTIMIZED

-

NVME_ANA_STATE_INACCESSIBLE

-

NVME_ANA_STATE_PERSISTENT_LOSS

-

NVME_ANA_STATE_CHANGE

-
-
-struct nvme_ana_log
-
- -

Definition

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

Members

-

chgcnt

-

ngrps

-

rsvd10

-

descs

-
-
-struct nvme_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

-

rsvd1

-

tnev

-

tll

-

rv

-

rsvd17

-

lhl

-

ts

-

poh

-

pcc

-

vid

-

ssvid

-

sn

-

mn

-

subnqn

-

gen_number

-

rci

-

rsvd378

-

seb

-
-
-struct nvme_persistent_event_entry
-
- -

Definition

-
struct nvme_persistent_event_entry {
-  __u8 etype;
-  __u8 etype_rev;
-  __u8 ehl;
-  __u8 rsvd3;
-  __le16 cntlid;
-  __le64 ets;
-  __u8 rsvd14[6];
-  __le16 vsil;
-  __le16 el;
-};
-
-
-

Members

-

etype

-

etype_rev

-

ehl

-

rsvd3

-

cntlid

-

ets

-

rsvd14

-

vsil

-

el

-
-
-enum nvme_persistent_event_types
-
- -

Constants

-

NVME_PEL_SMART_HEALTH_EVENT

-

NVME_PEL_FW_COMMIT_EVENT

-

NVME_PEL_TIMESTAMP_EVENT

-

NVME_PEL_POWER_ON_RESET_EVENT

-

NVME_PEL_NSS_HW_ERROR_EVENT

-

NVME_PEL_CHANGE_NS_EVENT

-

NVME_PEL_FORMAT_START_EVENT

-

NVME_PEL_FORMAT_COMPLETION_EVENT

-

NVME_PEL_SANITIZE_START_EVENT

-

NVME_PEL_SANITIZE_COMPLETION_EVENT

-

NVME_PEL_SET_FEATURE_EVENT

-

NVME_PEL_TELEMETRY_CRT

-

NVME_PEL_THERMAL_EXCURSION_EVENT

-
-
-struct nvme_fw_commit_event
-
- -

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

-

new_fw_rev

-

fw_commit_action

-

fw_slot

-

sct_fw

-

sc_fw

-

vndr_assign_fw_commit_rc

-
-
-struct nvme_time_stamp_change_event
-
- -

Definition

-
struct nvme_time_stamp_change_event {
-  __le64 previous_timestamp;
-  __le64 ml_secs_since_reset;
-};
-
-
-

Members

-

previous_timestamp

-

ml_secs_since_reset

-
-
-struct nvme_power_on_reset_info_list
-
- -

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

-

fw_act

-

op_in_prog

-

rsvd4

-

ctrl_power_cycle

-

power_on_ml_seconds

-

ctrl_time_stamp

-
-
-struct nvme_nss_hw_err_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

-

rsvd2

-

add_hw_err_info

-
-
-struct nvme_change_ns_event
-
- -

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

-

rsvd4

-

nsze

-

rsvd16

-

nscap

-

flbas

-

dps

-

nmic

-

rsvd35

-

ana_grp_id

-

nvmset_id

-

rsvd42

-

nsid

-
-
-struct nvme_format_nvm_start_event
-
- -

Definition

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

Members

-

nsid

-

fna

-

rsvd5

-

format_nvm_cdw10

-
-
-struct nvme_format_nvm_compln_event
-
- -

Definition

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

Members

-

nsid

-

smallest_fpi

-

format_nvm_status

-

compln_info

-

status_field

-
-
-struct nvme_sanitize_start_event
-
- -

Definition

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

Members

-

sani_cap

-

sani_cdw10

-

sani_cdw11

-
-
-struct nvme_sanitize_compln_event
-
- -

Definition

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

Members

-

sani_prog

-

sani_status

-

cmpln_info

-

rsvd6

-
-
-struct nvme_set_feature_event
-
- -

Definition

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

Members

-

layout

-

cdw_mem

-
-
-struct nvme_thermal_exc_event
-
- -

Definition

-
struct nvme_thermal_exc_event {
-  __u8 over_temp;
-  __u8 threshold;
-};
-
-
-

Members

-

over_temp

-

threshold

-
-
-struct nvme_lba_rd
-
- -

Definition

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

Members

-

rslba

-

rnlb

-

rsvd12

-
-
-struct nvme_lbas_ns_element
-
- -

Definition

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

Members

-

neid

-

nlrd

-

ratype

-

rsvd8

-

lba_rd

-
-
-enum nvme_lba_status_atype
-
- -

Constants

-

NVME_LBA_STATUS_ATYPE_SCAN_UNTRACKED

-

NVME_LBA_STATUS_ATYPE_SCAN_TRACKED

-
-
-struct nvme_lba_status_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

-

nlslne

-

estulb

-

rsvd12

-

lsgc

-

elements

-
-
-struct nvme_eg_event_aggregate_log
-
- -

Definition

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

Members

-

nr_entries

-

egids

-
-
-enum nvme_fid_supported_effects
-
- -

Constants

-

NVME_FID_SUPPORTED_EFFECTS_FSUPP

-

NVME_FID_SUPPORTED_EFFECTS_UDCC

-

NVME_FID_SUPPORTED_EFFECTS_NCC

-

NVME_FID_SUPPORTED_EFFECTS_NIC

-

NVME_FID_SUPPORTED_EFFECTS_CCC

-

NVME_FID_SUPPORTED_EFFECTS_UUID_SEL

-

NVME_FID_SUPPORTED_EFFECTS_SCOPE_SHIFT

-

NVME_FID_SUPPORTED_EFFECTS_SCOPE_MASK

-

NVME_FID_SUPPORTED_EFFECTS_SCOPE_NS

-

NVME_FID_SUPPORTED_EFFECTS_SCOPE_CTRL

-

NVME_FID_SUPPORTED_EFFECTS_SCOPE_NVM_SET

-

NVME_FID_SUPPORTED_EFFECTS_SCOPE_ENDGRP

-

NVME_FID_SUPPORTED_EFFECTS_SCOPE_DOMAIN

-

NVME_FID_SUPPORTED_EFFECTS_SCOPE_NSS

-

Description

-

FID Supported and Effects Data Structure definitions

-
-
-struct nvme_fid_supported_effects_log
-
- -

Definition

-
struct nvme_fid_supported_effects_log {
-  __le32 fid_support[NVME_LOG_FID_SUPPORTED_EFFECTS_MAX];
-};
-
-
-

Members

-

fid_support

-

Description

-

Feature Identifiers Supported and Effects (Log Identifier 12h)

-
-
-struct nvme_boot_partition
-
- -

Definition

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

Members

-

lid

-

rsvd1

-

bpinfo

-

rsvd8

-

boot_partition_data

-
-
-struct nvme_media_unit_stat_desc
-
- -

Definition

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

Members

-
-
muid

Media Unit Identifier

-
-
domainid

Domain Identifier

-
-
endgid

Endurance Group Identifier

-
-
nvmsetid

NVM Set Identifier

-
-
cap_adj_fctr

Capacity Adjustment Factor

-
-
avl_spare

Available Spare

-
-
percent_used

Percentage Used

-
-
mucs

Number of Channels attached to media units

-
-
cio

Channel Identifiers Offset

-
-
-
-
-struct nvme_media_unit_stat_log
-
- -

Definition

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

Members

-
-
nmu

Number unit status descriptor

-
-
cchans

Number of Channels

-
-
sel_config

Selected Configuration

-
-
rsvd6

Reserved

-
-
mus_desc

Media unit statistic descriptors

-
-
-
-
-struct nvme_media_unit_config_desc
-
- -

Definition

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

Members

-
-
muid

Media Unit Identifier

-
-
mudl

Media Unit Descriptor Length

-
-
-

Description

-

Media Unit Configuration Descriptor -Structure Definitions

-
-
-struct nvme_channel_config_desc
-
- -

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

-
-
-

Description

-

Channel Configuration Descriptor -Structure Definitions

-
-
-struct nvme_end_grp_chan_desc
-
- -

Definition

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

Members

-
-
egchans

Number of Channels

-
-
-

Description

-

Endurance group Channel Configuration Descriptor -Structure Definitions

-
-
-struct nvme_end_grp_config_desc
-
- -

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

-
-
tegcap

Total Endurance Group Capacity

-
-
segcap

Spare Endurance Group Capacity

-
-
end_est

Endurance Estimate

-
-
egsets

Number of NVM Sets

-
-
nvmsetid

NVM Set Identifier

-
-
-

Description

-

Endurance Group Configuration Descriptor -Structure Definitions

-
-
-struct nvme_supported_cap_config_list_log
-
- -

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

-
-
-

Description

-

Supported Capacity Configuration list log page -structure definitions

-
-
-struct nvme_resv_notification_log
-
- -

Definition

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

Members

-

lpc

-
-
rnlpt

See enum nvme_resv_notify_rnlpt.

-
-
-

nalp

-

rsvd9

-

nsid

-

rsvd16

-
-
-enum nvme_resv_notify_rnlpt
-
- -

Constants

-

NVME_RESV_NOTIFY_RNLPT_EMPTY

-

NVME_RESV_NOTIFY_RNLPT_REGISTRATION_PREEMPTED

-

NVME_RESV_NOTIFY_RNLPT_RESERVATION_RELEASED

-

NVME_RESV_NOTIFY_RNLPT_RESERVATION_PREEMPTED

-
-
-struct nvme_sanitize_log_page
-

Sanitize Status (Log Identifier 81h)

-
- -

Definition

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

Members

-
-
sprog

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

-
-
sstat

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

-
-
scdw10

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

-
-
eto

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

-
-
etbe

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

-
-
etce

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

-
-
etond

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

-
-
etbend

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

-
-
etcend

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

-
-
rsvd32

Reserved

-
-
-
-
-enum nvme_sanitize_sstat
-

Sanitize Status (SSTAT)

-
- -

Constants

-
-
NVME_SANITIZE_SSTAT_STATUS_SHIFT

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

-
-
NVME_SANITIZE_SSTAT_STATUS_MASK

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

-
-
NVME_SANITIZE_SSTAT_STATUS_NEVER_SANITIZED

The NVM subsystem has never been -sanitized.

-
-
NVME_SANITIZE_SSTAT_STATUS_COMPLETE_SUCCESS

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

-
-
NVME_SANITIZE_SSTAT_STATUS_IN_PROGESS

A sanitize operation is currently in progress.

-
-
NVME_SANITIZE_SSTAT_STATUS_COMPLETED_FAILED

The most recent sanitize operation -failed.

-
-
NVME_SANITIZE_SSTAT_STATUS_ND_COMPLETE_SUCCESS

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

-
-
NVME_SANITIZE_SSTAT_COMPLETED_PASSES_SHIFT

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

-
-
NVME_SANITIZE_SSTAT_COMPLETED_PASSES_MASK

Mask to get the number of completed -passes.

-
-
NVME_SANITIZE_SSTAT_GLOBAL_DATA_ERASED_SHIFT

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

-
-
NVME_SANITIZE_SSTAT_GLOBAL_DATA_ERASED_MASK

Mask to get the Global Data Erased -value.

-
-
NVME_SANITIZE_SSTAT_GLOBAL_DATA_ERASED

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

-
-
-
-
-struct nvme_zns_changed_zone_log
-

ZNS Changed Zone List log

-
- -

Definition

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

Members

-

nrzid

-

rsvd2

-

zid

-
-
-enum nvme_zns_zt
-
- -

Constants

-

NVME_ZONE_TYPE_SEQWRITE_REQ

-
-
-enum nvme_zns_za
-
- -

Constants

-

NVME_ZNS_ZA_ZFC

-

NVME_ZNS_ZA_FZR

-

NVME_ZNS_ZA_RZR

-

NVME_ZNS_ZA_ZRWAV

-

NVME_ZNS_ZA_ZDEV

-
-
-enum nvme_zns_zs
-
- -

Constants

-

NVME_ZNS_ZS_EMPTY

-

NVME_ZNS_ZS_IMPL_OPEN

-

NVME_ZNS_ZS_EXPL_OPEN

-

NVME_ZNS_ZS_CLOSED

-

NVME_ZNS_ZS_READ_ONLY

-

NVME_ZNS_ZS_FULL

-

NVME_ZNS_ZS_OFFLINE

-
-
-struct nvme_zns_desc
-
- -

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

-

zs

-

za

-

zai

-

rsvd4

-

zcap

-

zslba

-

wp

-

rsvd32

-
-
-struct nvme_zone_report
-
- -

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

-
-
-
-
-struct nvme_lba_status_desc
-
- -

Definition

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

Members

-

dslba

-

nlb

-

rsvd12

-

status

-

rsvd14

-
-
-struct nvme_lba_status
-
- -

Definition

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

Members

-

nlsd

-

cmpc

-

rsvd5

-

descs

-
-
-struct nvme_feat_auto_pst
-
- -

Definition

-
struct nvme_feat_auto_pst {
-  __le64 apst_entry[32];
-};
-
-
-

Members

-
-
apst_entry

See enum nvme_apst_entry

-
-
-
-
-enum nvme_apst_entry
-
- -

Constants

-

NVME_APST_ENTRY_ITPS_SHIFT

-

NVME_APST_ENTRY_ITPT_SHIFT

-

NVME_APST_ENTRY_ITPS_MASK

-

NVME_APST_ENTRY_ITPT_MASK

-
-
-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

-
-
-
-
-struct nvme_host_metadata
-

Host Metadata Data Structure

-
- -

Definition

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

Members

-
-
ndesc

Number of metadata element descriptors

-
-
rsvd1

Reserved

-
-
{unnamed_union}

anonymous

-
-
descs

Metadata element descriptors

-
-
descs_buf

Metadata element descriptor buffer

-
-
-
-
-enum nvme_ctrl_metadata_type
-

Controller Metadata Element Types

-
- -

Constants

-
-
NVME_CTRL_METADATA_OS_CTRL_NAME

Name of the controller in -the operating system.

-
-
NVME_CTRL_METADATA_OS_DRIVER_NAME

Name of the driver in the -operating system.

-
-
NVME_CTRL_METADATA_OS_DRIVER_VER

Version of the driver in -the operating system.

-
-
NVME_CTRL_METADATA_PRE_BOOT_CTRL_NAME

Name of the controller in -the pre-boot environment.

-
-
NVME_CTRL_METADATA_PRE_BOOT_DRIVER_NAME

Name of the driver in the -pre-boot environment.

-
-
NVME_CTRL_METADATA_PRE_BOOT_DRIVER_VER

Version of the driver in the -pre-boot environment.

-
-
NVME_CTRL_METADATA_SYS_PROC_MODEL

Model of the processor.

-
-
NVME_CTRL_METADATA_CHIPSET_DRV_NAME

Chipset driver name.

-
-
NVME_CTRL_METADATA_CHIPSET_DRV_VERSION

Chipsset driver version.

-
-
NVME_CTRL_METADATA_OS_NAME_AND_BUILD

Operating system name and build.

-
-
NVME_CTRL_METADATA_SYS_PROD_NAME

System product name.

-
-
NVME_CTRL_METADATA_FIRMWARE_VERSION

Host firmware (e.g UEFI) version.

-
-
NVME_CTRL_METADATA_OS_DRIVER_FILENAME

Operating system driver filename.

-
-
NVME_CTRL_METADATA_DISPLAY_DRV_NAME

Display driver name.

-
-
NVME_CTRL_METADATA_DISPLAY_DRV_VERSION

Display driver version.

-
-
NVME_CTRL_METADATA_HOST_DET_FAIL_REC

Failure record.

-
-
-
-
-enum nvme_ns_metadata_type
-

Namespace Metadata Element Types

-
- -

Constants

-
-
NVME_NS_METADATA_OS_NS_NAME

Name of the namespace in the the -operating system

-
-
NVME_NS_METADATA_PRE_BOOT_NS_NAME

Name of the namespace in the pre-boot -environment.

-
-
NVME_NS_METADATA_OS_NS_QUAL_1

First qualifier of the Operating System -Namespace Name.

-
-
NVME_NS_METADATA_OS_NS_QUAL_2

Second qualifier of the Operating System -Namespace Name.

-
-
-
-
-struct nvme_timestamp
-
- -

Definition

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

Members

-

timestamp

-

attr

-

rsvd

-
-
-struct nvme_lba_range_type_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

-

attributes

-

rsvd2

-

slba

-

nlb

-

guid

-

rsvd48

-
-
-enum nvme_lbart
-
- -

Constants

-

NVME_LBART_TYPE_GP

-

NVME_LBART_TYPE_FS

-

NVME_LBART_TYPE_RAID

-

NVME_LBART_TYPE_CACHE

-

NVME_LBART_TYPE_SWAP

-

NVME_LBART_ATTRIB_TEMP

-

NVME_LBART_ATTRIB_HIDE

-
-
-struct nvme_lba_range_type
-
- -

Definition

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

Members

-

entry

-
-
-struct nvme_plm_config
-
- -

Definition

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

Members

-

ee

-

rsvd2

-

dtwinrt

-

dtwinwt

-

dtwintt

-

rsvd56

-
-
-struct nvme_feat_host_behavior
-
- -

Definition

-
struct nvme_feat_host_behavior {
-  __u8 acre;
-  __u8 rsvd1[511];
-};
-
-
-

Members

-

acre

-

rsvd1

-
-
-enum nvme_host_behavior_support
-
- -

Constants

-

NVME_ENABLE_ACRE

-
-
-struct nvme_dsm_range
-
- -

Definition

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

Members

-

cattr

-

nlb

-

slba

-
-
-struct nvme_copy_range
-
- -

Definition

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

Members

-

rsvd0

-

slba

-

nlb

-

rsvd18

-

eilbrt

-

elbatm

-

elbat

-
-
-struct nvme_registered_ctrl
-
- -

Definition

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

Members

-

cntlid

-

rcsts

-

rsvd3

-

hostid

-

rkey

-
-
-struct nvme_registered_ctrl_ext
-
- -

Definition

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

Members

-

cntlid

-

rcsts

-

rsvd3

-

rkey

-

hostid

-

rsvd32

-
-
-struct nvme_resv_status
-
- -

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

-

rtype

-

regctl

-

rsvd7

-

ptpls

-

rsvd10

-
-
{unnamed_union}

anonymous

-
-
{unnamed_struct}

anonymous

-
-
-

rsvd24

-

regctl_eds

-

regctl_ds

-
-
-struct nvme_streams_directive_params
-
- -

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

-

nssa

-

nsso

-

nssc

-

rsvd

-

sws

-

sgs

-

nsa

-

nso

-

rsvd2

-
-
-struct nvme_streams_directive_status
-
- -

Definition

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

Members

-

osc

-

sid

-
-
-struct nvme_id_directives
-
- -

Definition

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

Members

-

supported

-

enabled

-

rsvd64

-
-
-enum nvme_directive_types
-
- -

Constants

-
-
NVME_ID_DIR_ID_BIT

Identify directive is supported

-
-
NVME_ID_DIR_SD_BIT

Streams directive is supported

-
-
-
-
-struct nvme_host_mem_buf_attrs
-
- -

Definition

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

Members

-

hsize

-

hmdlal

-

hmdlau

-

hmdlec

-

rsvd16

-
-
-enum nvme_ae_type
-
- -

Constants

-

NVME_AER_ERROR

-

NVME_AER_SMART

-

NVME_AER_NOTICE

-

NVME_AER_CSS

-

NVME_AER_VS

-
-
-enum nvme_ae_info_error
-
- -

Constants

-

NVME_AER_ERROR_INVALID_DB_REG

-

NVME_AER_ERROR_INVALID_DB_VAL

-

NVME_AER_ERROR_DIAG_FAILURE

-

NVME_AER_ERROR_PERSISTENT_INTERNAL_ERROR

-

NVME_AER_ERROR_TRANSIENT_INTERNAL_ERROR

-

NVME_AER_ERROR_FW_IMAGE_LOAD_ERROR

-
-
-enum nvme_ae_info_smart
-
- -

Constants

-

NVME_AER_SMART_SUBSYSTEM_RELIABILITY

-

NVME_AER_SMART_TEMPERATURE_THRESHOLD

-

NVME_AER_SMART_SPARE_THRESHOLD

-
-
-enum nvme_ae_info_css_nvm
-
- -

Constants

-

NVME_AER_CSS_NVM_RESERVATION

-

NVME_AER_CSS_NVM_SANITIZE_COMPLETED

-

NVME_AER_CSS_NVM_UNEXPECTED_SANITIZE_DEALLOC

-
-
-enum nvme_ae_info_notice
-
- -

Constants

-

NVME_AER_NOTICE_NS_CHANGED

-

NVME_AER_NOTICE_FW_ACT_STARTING

-

NVME_AER_NOTICE_TELEMETRY

-

NVME_AER_NOTICE_ANA

-

NVME_AER_NOTICE_PL_EVENT

-

NVME_AER_NOTICE_LBA_STATUS_ALERT

-

NVME_AER_NOTICE_EG_EVENT

-

NVME_AER_NOTICE_DISC_CHANGED

-
-
-enum nvme_subsys_type
-

Type of the NVM subsystem.

-
- -

Constants

-
-
NVME_NQN_DISC

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

-
-
NVME_NQN_NVME

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

-
-
NVME_NQN_CURR

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

-
-
-
-
-enum nvmf_disc_eflags
-

Discovery Log Page entry flags.

-
- -

Constants

-
-
NVMF_DISC_EFLAGS_NONE

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

-
-
NVMF_DISC_EFLAGS_DUPRETINFO

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

-
-
NVMF_DISC_EFLAGS_EPCSD

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

-
-
NVMF_DISC_EFLAGS_BOTH

Indicates that both the DUPRETINFO and EPCSD -features are supported.

-
-
-
-
-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 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;
-  } tsas;
-};
-
-
-

Members

-
-
trtype

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

-
-
adrfam

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

-
-
subtype

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

-
-
treq

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

-
-
portid

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

-
-
cntlid

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

-
-
asqsz

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

-
-
eflags

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

-
-
rsvd12

Reserved

-
-
trsvcid

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

-
-
rsvd64

Reserved

-
-
subnqn

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

-
-
traddr

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

-
-
tsas

Transport specific attribute settings

-
-
-
-
-enum nvmf_trtype
-

Transport Type codes for Discovery Log Page entry TRTYPE field

-
- -

Constants

-
-
NVMF_TRTYPE_UNSPECIFIED

Not indicated

-
-
NVMF_TRTYPE_RDMA

RDMA

-
-
NVMF_TRTYPE_FC

Fibre Channel

-
-
NVMF_TRTYPE_TCP

TCP

-
-
NVMF_TRTYPE_LOOP

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

-
-
NVMF_TRTYPE_MAX

Maximum value for enum nvmf_trtype

-
-
-
-
-enum nvmf_addr_family
-

Address Family codes for Discovery Log Page entry ADRFAM field

-
- -

Constants

-
-
NVMF_ADDR_FAMILY_PCI

PCIe

-
-
NVMF_ADDR_FAMILY_IP4

AF_INET: IPv4 address family.

-
-
NVMF_ADDR_FAMILY_IP6

AF_INET6: IPv6 address family.

-
-
NVMF_ADDR_FAMILY_IB

AF_IB: InfiniBand address family.

-
-
NVMF_ADDR_FAMILY_FC

Fibre Channel address family.

-
-
NVMF_ADDR_FAMILY_LOOP

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

-
-
-
-
-enum nvmf_treq
-

Transport Requirements codes for Discovery Log Page entry TREQ field

-
- -

Constants

-
-
NVMF_TREQ_NOT_SPECIFIED

Not specified

-
-
NVMF_TREQ_REQUIRED

Required

-
-
NVMF_TREQ_NOT_REQUIRED

Not Required

-
-
NVMF_TREQ_DISABLE_SQFLOW

SQ flow control disable supported

-
-
-
-
-enum nvmf_rdma_qptype
-

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

-
- -

Constants

-
-
NVMF_RDMA_QPTYPE_CONNECTED

Reliable Connected

-
-
NVMF_RDMA_QPTYPE_DATAGRAM

Reliable Datagram

-
-
-
-
-enum nvmf_rdma_prtype
-

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

-
- -

Constants

-
-
NVMF_RDMA_PRTYPE_NOT_SPECIFIED

No Provider Specified

-
-
NVMF_RDMA_PRTYPE_IB

InfiniBand

-
-
NVMF_RDMA_PRTYPE_ROCE

InfiniBand RoCE

-
-
NVMF_RDMA_PRTYPE_ROCEV2

InfiniBand RoCEV2

-
-
NVMF_RDMA_PRTYPE_IWARP

iWARP

-
-
-
-
-enum nvmf_rdma_cms
-

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

-
- -

Constants

-
-
NVMF_RDMA_CMS_RDMA_CM

Sockets based endpoint addressing

-
-
-
-
-enum nvmf_tcp_sectype
-

Transport Specific Address Subtype Definition for NVMe/TCP Transport

-
- -

Constants

-
-
NVMF_TCP_SECTYPE_NONE

No Security

-
-
NVMF_TCP_SECTYPE_TLS

Transport Layer Security version 1.2

-
-
NVMF_TCP_SECTYPE_TLS13

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

-
-
-
-
-struct nvmf_discovery_log
-

Discovery Log Page (Log Identifier 70h)

-
- -

Definition

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

Members

-
-
genctr

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

-
-
numrec

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

-
-
recfmt

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

-
-
rsvd14

Reserved

-
-
entries

Discovery Log Page Entries - see struct nvmf_disc_log_entry.

-
-
-
-
-struct nvmf_connect_data
-

Data payload for the ‘connect’ command

-
- -

Definition

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

Members

-
-
hostid

Host ID of the connecting host

-
-
cntlid

Requested controller ID

-
-
rsvd4

Reserved

-
-
subsysnqn

Subsystem NQN to connect to

-
-
hostnqn

Host NQN of the connecting host

-
-
rsvd5

Reserved

-
-
-
-
-struct nvme_mi_read_nvm_ss_info
-
- -

Definition

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

Members

-

nump

-

mjr

-

mnr

-

rsvd3

-
-
-struct nvme_mi_port_pcie
-
- -

Definition

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

Members

-

mps

-

sls

-

cls

-

mlw

-

nlw

-

pn

-

rsvd14

-
-
-struct nvme_mi_port_smb
-
- -

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

-

mvpd_freq

-

mme_addr

-

mme_freq

-

nvmebm

-

rsvd13

-
-
-struct nvme_mi_read_port_info
-
- -

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

-

rsvd1

-

mmctptus

-

meb

-
-
{unnamed_union}

anonymous

-
-
-

pcie

-

smb

-
-
-struct nvme_mi_read_ctrl_info
-
- -

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

-

rsvd1

-

prii

-

pri

-

vid

-

did

-

ssvid

-

ssid

-

rsvd16

-
-
-struct nvme_mi_osc
-
- -

Definition

-
struct nvme_mi_osc {
-  __u8 type;
-  __u8 opc;
-};
-
-
-

Members

-

type

-

opc

-
-
-struct nvme_mi_read_sc_list
-
- -

Definition

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

Members

-

numcmd

-

cmds

-
-
-struct nvme_mi_nvm_ss_health_status
-
- -

Definition

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

Members

-

nss

-

sw

-

ctemp

-

pdlu

-

ccs

-

rsvd8

-
-
-enum nvme_mi_css
-
- -

Constants

-

NVME_MI_CCS_RDY

-

NVME_MI_CSS_CFS

-

NVME_MI_CSS_SHST

-

NVME_MI_CSS_NSSRO

-

NVME_MI_CSS_CECO

-

NVME_MI_CSS_NAC

-

NVME_MI_CSS_FA

-

NVME_MI_CSS_CSTS

-

NVME_MI_CSS_CTEMP

-

NVME_MI_CSS_PDLU

-

NVME_MI_CSS_SPARE

-

NVME_MI_CSS_CCWARN

-
-
-struct nvme_mi_ctrl_health_status
-
- -

Definition

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

Members

-

ctlid

-

csts

-

ctemp

-

pdlu

-

spare

-

cwarn

-

rsvd9

-
-
-enum nvme_mi_csts
-
- -

Constants

-

NVME_MI_CSTS_RDY

-

NVME_MI_CSTS_CFS

-

NVME_MI_CSTS_SHST

-

NVME_MI_CSTS_NSSRO

-

NVME_MI_CSTS_CECO

-

NVME_MI_CSTS_NAC

-

NVME_MI_CSTS_FA

-
-
-enum nvme_mi_cwarn
-
- -

Constants

-

NVME_MI_CWARN_ST

-

NVME_MI_CWARN_TAUT

-

NVME_MI_CWARN_RD

-

NVME_MI_CWARN_RO

-

NVME_MI_CWARN_VMBF

-
-
-struct nvme_mi_vpd_mra
-
- -

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

-

ff

-

rsvd7

-

i18vpwr

-

m18vpwr

-

i33vpwr

-

m33vpwr

-

rsvd17

-

m33vapsr

-

i5vapsr

-

m5vapsr

-

i12vapsr

-

m12vapsr

-

mtl

-

tnvmcap

-

rsvd37

-
-
-struct nvme_mi_vpd_ppmra
-
- -

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

-

pn

-

ppi

-

ls

-

mlw

-

mctp

-

refccap

-

pi

-

rsvd13

-
-
-struct nvme_mi_vpd_telem
-
- -

Definition

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

Members

-

type

-

rev

-

len

-

data

-
-
-enum nvme_mi_elem
-
- -

Constants

-

NVME_MI_ELEM_EED

-

NVME_MI_ELEM_USCE

-

NVME_MI_ELEM_ECED

-

NVME_MI_ELEM_LED

-

NVME_MI_ELEM_SMBMED

-

NVME_MI_ELEM_PCIESED

-

NVME_MI_ELEM_NVMED

-
-
-struct nvme_mi_vpd_tra
-
- -

Definition

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

Members

-

vn

-

rsvd6

-

ec

-

elems

-
-
-struct nvme_mi_vpd_mr_common
-
- -

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

-

rf

-

rlen

-

rchksum

-

hchksum

-
-
{unnamed_union}

anonymous

-
-
-

nmra

-

ppmra

-

tmra

-
-
-struct nvme_mi_vpd_hdr
-
- -

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

-

iuaoff

-

ciaoff

-

biaoff

-

piaoff

-

mrioff

-

rsvd6

-

chchk

-

vpd

-
-
-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_SC_MASK

Mask 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_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.

-
-
-
-
-__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

-
-
-

Description

-

See enum nvme_status_field

-
-
-__u16 nvme_status_code(__u16 status_field)
-

Returns the NVMe Status Code

-
- -

Parameters

-
-
__u16 status_field

The NVMe Completion Queue Entry’s Status Field

-
-
-

Description

-

See enum nvme_status_field

-
-
-enum nvme_admin_opcode
-

Known NVMe admin opcodes

-
- -

Constants

-

nvme_admin_delete_sq

-

nvme_admin_create_sq

-

nvme_admin_get_log_page

-

nvme_admin_delete_cq

-

nvme_admin_create_cq

-

nvme_admin_identify

-

nvme_admin_abort_cmd

-

nvme_admin_set_features

-

nvme_admin_get_features

-

nvme_admin_async_event

-

nvme_admin_ns_mgmt

-

nvme_admin_fw_commit

-

nvme_admin_fw_activate

-

nvme_admin_fw_download

-

nvme_admin_dev_self_test

-

nvme_admin_ns_attach

-

nvme_admin_keep_alive

-

nvme_admin_directive_send

-

nvme_admin_directive_recv

-

nvme_admin_virtual_mgmt

-

nvme_admin_nvme_mi_send

-

nvme_admin_nvme_mi_recv

-

nvme_admin_capacity_mgmt

-

nvme_admin_lockdown

-

nvme_admin_dbbuf

-

nvme_admin_fabrics

-

nvme_admin_format_nvm

-

nvme_admin_security_send

-

nvme_admin_security_recv

-

nvme_admin_sanitize_nvm

-

nvme_admin_get_lba_status

-
-
-enum nvme_identify_cns
-
- -

Constants

-

NVME_IDENTIFY_CNS_NS

-

NVME_IDENTIFY_CNS_CTRL

-

NVME_IDENTIFY_CNS_NS_ACTIVE_LIST

-

NVME_IDENTIFY_CNS_NS_DESC_LIST

-

NVME_IDENTIFY_CNS_NVMSET_LIST

-

NVME_IDENTIFY_CNS_CSI_NS

-

NVME_IDENTIFY_CNS_CSI_CTRL

-

NVME_IDENTIFY_CNS_CSI_NS_ACTIVE_LIST

-

NVME_IDENTIFY_CNS_CSI_INDEPENDENT_ID_NS

-
-
NVME_IDENTIFY_CNS_NS_USER_DATA_FORMAT

undescribed

-
-
NVME_IDENTIFY_CNS_CSI_NS_USER_DATA_FORMAT

undescribed

-
-
-

NVME_IDENTIFY_CNS_ALLOCATED_NS_LIST

-

NVME_IDENTIFY_CNS_ALLOCATED_NS

-

NVME_IDENTIFY_CNS_NS_CTRL_LIST

-

NVME_IDENTIFY_CNS_CTRL_LIST

-

NVME_IDENTIFY_CNS_PRIMARY_CTRL_CAP

-

NVME_IDENTIFY_CNS_SECONDARY_CTRL_LIST

-

NVME_IDENTIFY_CNS_NS_GRANULARITY

-

NVME_IDENTIFY_CNS_UUID_LIST

-

NVME_IDENTIFY_CNS_DOMAIN_LIST

-

NVME_IDENTIFY_CNS_ENDURANCE_GROUP_ID

-

NVME_IDENTIFY_CNS_CSS_ALLOCATED_NS_LIST

-
-
NVME_IDENTIFY_CNS_COMMAND_SET_STRUCTURE

Base Specification 2.0a section 5.17.2.21

-
-
-
-
-enum nvme_cmd_get_log_lid
-
- -

Constants

-

NVME_LOG_LID_SUPPORTED_LOG_PAGES

-

NVME_LOG_LID_ERROR

-

NVME_LOG_LID_SMART

-

NVME_LOG_LID_FW_SLOT

-

NVME_LOG_LID_CHANGED_NS

-

NVME_LOG_LID_CMD_EFFECTS

-

NVME_LOG_LID_DEVICE_SELF_TEST

-

NVME_LOG_LID_TELEMETRY_HOST

-

NVME_LOG_LID_TELEMETRY_CTRL

-

NVME_LOG_LID_ENDURANCE_GROUP

-

NVME_LOG_LID_PREDICTABLE_LAT_NVMSET

-

NVME_LOG_LID_PREDICTABLE_LAT_AGG

-

NVME_LOG_LID_ANA

-

NVME_LOG_LID_PERSISTENT_EVENT

-

NVME_LOG_LID_LBA_STATUS

-

NVME_LOG_LID_ENDURANCE_GRP_EVT

-

NVME_LOG_LID_MEDIA_UNIT_STATUS

-

NVME_LOG_LID_SUPPORTED_CAP_CONFIG_LIST

-

NVME_LOG_LID_FID_SUPPORTED_EFFECTS

-

NVME_LOG_LID_BOOT_PARTITION

-

NVME_LOG_LID_DISCOVER

-

NVME_LOG_LID_RESERVATION

-

NVME_LOG_LID_SANITIZE

-

NVME_LOG_LID_ZNS_CHANGED_ZONES

-
-
-enum nvme_features_id
-
- -

Constants

-

NVME_FEAT_FID_ARBITRATION

-

NVME_FEAT_FID_POWER_MGMT

-

NVME_FEAT_FID_LBA_RANGE

-

NVME_FEAT_FID_TEMP_THRESH

-

NVME_FEAT_FID_ERR_RECOVERY

-

NVME_FEAT_FID_VOLATILE_WC

-

NVME_FEAT_FID_NUM_QUEUES

-

NVME_FEAT_FID_IRQ_COALESCE

-

NVME_FEAT_FID_IRQ_CONFIG

-

NVME_FEAT_FID_WRITE_ATOMIC

-

NVME_FEAT_FID_ASYNC_EVENT

-

NVME_FEAT_FID_AUTO_PST

-

NVME_FEAT_FID_HOST_MEM_BUF

-

NVME_FEAT_FID_TIMESTAMP

-

NVME_FEAT_FID_KATO

-

NVME_FEAT_FID_HCTM

-

NVME_FEAT_FID_NOPSC

-

NVME_FEAT_FID_RRL

-

NVME_FEAT_FID_PLM_CONFIG

-

NVME_FEAT_FID_PLM_WINDOW

-

NVME_FEAT_FID_LBA_STS_INTERVAL

-

NVME_FEAT_FID_HOST_BEHAVIOR

-

NVME_FEAT_FID_SANITIZE

-

NVME_FEAT_FID_ENDURANCE_EVT_CFG

-

NVME_FEAT_FID_IOCS_PROFILE

-

NVME_FEAT_FID_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

-

NVME_FEAT_FID_HOST_ID

-

NVME_FEAT_FID_RESV_MASK

-

NVME_FEAT_FID_RESV_PERSIST

-

NVME_FEAT_FID_WRITE_PROTECT

-
-
-enum nvme_feat
-
- -

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

-
-
-enum nvme_get_features_sel
-
- -

Constants

-

NVME_GET_FEATURES_SEL_CURRENT

-

NVME_GET_FEATURES_SEL_DEFAULT

-

NVME_GET_FEATURES_SEL_SAVED

-

NVME_GET_FEATURES_SEL_SUPPORTED

-
-
-enum nvme_cmd_format_mset
-

Format NVM - Metadata Settings

-
- -

Constants

-
-
NVME_FORMAT_MSET_SEPARATE

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

-
-
NVME_FORMAT_MSET_EXTENDED

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

-
-
-
-
-enum nvme_cmd_format_pi
-

Format NVM - Protection Information

-
- -

Constants

-
-
NVME_FORMAT_PI_DISABLE

Protection information is not enabled.

-
-
NVME_FORMAT_PI_TYPE1

Protection information is enabled, Type 1.

-
-
NVME_FORMAT_PI_TYPE2

Protection information is enabled, Type 2.

-
-
NVME_FORMAT_PI_TYPE3

Protection information is enabled, Type 3.

-
-
-
-
-enum nvme_cmd_format_pil
-

Format NVM - Protection Information Location

-
- -

Constants

-
-
NVME_FORMAT_PIL_LAST

Protection information is transferred as the last -bytes of metadata.

-
-
NVME_FORMAT_PIL_FIRST

Protection information is transferred as the first -bytes of metadata.

-
-
-
-
-enum nvme_cmd_format_ses
-

Format NVM - Secure Erase Settings

-
- -

Constants

-
-
NVME_FORMAT_SES_NONE

No secure erase operation requested.

-
-
NVME_FORMAT_SES_USER_DATA_ERASE

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

-
-
NVME_FORMAT_SES_CRYPTO_ERASE

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

-
-
-
-
-enum nvme_ns_mgmt_sel
-
- -

Constants

-

NVME_NS_MGMT_SEL_CREATE

-

NVME_NS_MGMT_SEL_DELETE

-
-
-enum nvme_ns_attach_sel
-
- -

Constants

-

NVME_NS_ATTACH_SEL_CTRL_ATTACH

-

NVME_NS_ATTACH_SEL_CTRL_DEATTACH

-
-
-enum nvme_fw_commit_ca
-
- -

Constants

-

NVME_FW_COMMIT_CA_REPLACE

-

NVME_FW_COMMIT_CA_REPLACE_AND_ACTIVATE

-

NVME_FW_COMMIT_CA_SET_ACTIVE

-

NVME_FW_COMMIT_CA_REPLACE_AND_ACTIVATE_IMMEDIATE

-

NVME_FW_COMMIT_CA_REPLACE_BOOT_PARTITION

-

NVME_FW_COMMIT_CA_ACTIVATE_BOOT_PARTITION

-
-
-enum nvme_directive_dtype
-
- -

Constants

-

NVME_DIRECTIVE_DTYPE_IDENTIFY

-

NVME_DIRECTIVE_DTYPE_STREAMS

-
-
-enum nvme_directive_receive_doper
-
- -

Constants

-

NVME_DIRECTIVE_RECEIVE_IDENTIFY_DOPER_PARAM

-

NVME_DIRECTIVE_RECEIVE_STREAMS_DOPER_PARAM

-

NVME_DIRECTIVE_RECEIVE_STREAMS_DOPER_STATUS

-

NVME_DIRECTIVE_RECEIVE_STREAMS_DOPER_RESOURCE

-
-
-enum nvme_directive_send_doper
-
- -

Constants

-

NVME_DIRECTIVE_SEND_IDENTIFY_DOPER_ENDIR

-

NVME_DIRECTIVE_SEND_STREAMS_DOPER_RELEASE_IDENTIFIER

-

NVME_DIRECTIVE_SEND_STREAMS_DOPER_RELEASE_RESOURCE

-
-
-enum nvme_directive_send_identify_endir
-
- -

Constants

-

NVME_DIRECTIVE_SEND_IDENTIFY_ENDIR_DISABLE

-

NVME_DIRECTIVE_SEND_IDENTIFY_ENDIR_ENABLE

-
-
-enum nvme_sanitize_sanact
-

Sanitize Action

-
- -

Constants

-
-
NVME_SANITIZE_SANACT_EXIT_FAILURE

Exit Failure Mode.

-
-
NVME_SANITIZE_SANACT_START_BLOCK_ERASE

Start a Block Erase sanitize operation.

-
-
NVME_SANITIZE_SANACT_START_OVERWRITE

Start an Overwrite sanitize operation.

-
-
NVME_SANITIZE_SANACT_START_CRYPTO_ERASE

Start a Crypto Erase sanitize operation.

-
-
-
-
-enum nvme_dst_stc
-

Action taken by the Device Self-test command

-
- -

Constants

-
-
NVME_DST_STC_SHORT

Start a short device self-test operation

-
-
NVME_DST_STC_LONG

Start an extended device self-test operation

-
-
NVME_DST_STC_VS

Start a vendor specific device self-test operation

-
-
NVME_DST_STC_ABORT

Abort device self-test operation

-
-
-
-
-enum nvme_virt_mgmt_act
-
- -

Constants

-

NVME_VIRT_MGMT_ACT_PRIM_CTRL_FLEX_ALLOC

-

NVME_VIRT_MGMT_ACT_OFFLINE_SEC_CTRL

-

NVME_VIRT_MGMT_ACT_ASSIGN_SEC_CTRL

-

NVME_VIRT_MGMT_ACT_ONLINE_SEC_CTRL

-
-
-enum nvme_virt_mgmt_rt
-
- -

Constants

-

NVME_VIRT_MGMT_RT_VQ_RESOURCE

-

NVME_VIRT_MGMT_RT_VI_RESOURCE

-
-
-enum nvme_ns_write_protect_cfg
-
- -

Constants

-

NVME_NS_WP_CFG_NONE

-

NVME_NS_WP_CFG_PROTECT

-

NVME_NS_WP_CFG_PROTECT_POWER_CYCLE

-

NVME_NS_WP_CFG_PROTECT_PERMANENT

-
-
-enum nvme_log_ana_lsp
-
- -

Constants

-

NVME_LOG_ANA_LSP_RGO_NAMESPACES

-

NVME_LOG_ANA_LSP_RGO_GROUPS_ONLY

-
-
-enum nvme_pevent_log_action
-
- -

Constants

-

NVME_PEVENT_LOG_READ

-

NVME_PEVENT_LOG_EST_CTX_AND_READ

-

NVME_PEVENT_LOG_RELEASE_CTX

-
-
-enum nvme_feat_tmpthresh_thsel
-
- -

Constants

-

NVME_FEATURE_TEMPTHRESH_THSEL_OVER

-

NVME_FEATURE_TEMPTHRESH_THSEL_UNDER

-
-
-enum nvme_features_async_event_config_flags
-
- -

Constants

-

NVME_FEATURE_AENCFG_SMART_CRIT_SPARE

-

NVME_FEATURE_AENCFG_SMART_CRIT_TEMPERATURE

-

NVME_FEATURE_AENCFG_SMART_CRIT_DEGRADED

-

NVME_FEATURE_AENCFG_SMART_CRIT_READ_ONLY

-

NVME_FEATURE_AENCFG_SMART_CRIT_VOLATILE_BACKUP

-

NVME_FEATURE_AENCFG_SMART_CRIT_READ_ONLY_PMR

-

NVME_FEATURE_AENCFG_NOTICE_NAMESPACE_ATTRIBUTES

-

NVME_FEATURE_AENCFG_NOTICE_FIRMWARE_ACTIVATION

-

NVME_FEATURE_AENCFG_NOTICE_TELEMETRY_LOG

-

NVME_FEATURE_AENCFG_NOTICE_ANA_CHANGE

-

NVME_FEATURE_AENCFG_NOTICE_PL_EVENT

-

NVME_FEATURE_AENCFG_NOTICE_LBA_STATUS

-

NVME_FEATURE_AENCFG_NOTICE_EG_EVENT

-

NVME_FEATURE_AENCFG_NOTICE_DISCOVERY_CHANGE

-
-
-enum nvme_feat_plm_window_select
-
- -

Constants

-

NVME_FEATURE_PLM_DTWIN

-

NVME_FEATURE_PLM_NDWIN

-
-
-enum nvme_feat_resv_notify_flags
-
- -

Constants

-

NVME_FEAT_RESV_NOTIFY_REGPRE

-

NVME_FEAT_RESV_NOTIFY_RESREL

-

NVME_FEAT_RESV_NOTIFY_RESPRE

-
-
-enum nvme_feat_nswpcfg_state
-
- -

Constants

-

NVME_FEAT_NS_NO_WRITE_PROTECT

-

NVME_FEAT_NS_WRITE_PROTECT

-

NVME_FEAT_NS_WRITE_PROTECT_PWR_CYCLE

-

NVME_FEAT_NS_WRITE_PROTECT_PERMANENT

-
-
-enum nvme_fctype
-
- -

Constants

-

nvme_fabrics_type_property_set

-

nvme_fabrics_type_connect

-

nvme_fabrics_type_property_get

-

nvme_fabrics_type_auth_send

-

nvme_fabrics_type_auth_receive

-

nvme_fabrics_type_disconnect

-
-
-enum nvme_io_opcode
-
- -

Constants

-

nvme_cmd_flush

-

nvme_cmd_write

-

nvme_cmd_read

-

nvme_cmd_write_uncor

-

nvme_cmd_compare

-

nvme_cmd_write_zeroes

-

nvme_cmd_dsm

-

nvme_cmd_verify

-

nvme_cmd_resv_register

-

nvme_cmd_resv_report

-

nvme_cmd_resv_acquire

-

nvme_cmd_resv_release

-

nvme_cmd_copy

-

nvme_zns_cmd_mgmt_send

-

nvme_zns_cmd_mgmt_recv

-

nvme_zns_cmd_append

-
-
-enum nvme_io_control_flags
-
- -

Constants

-

NVME_IO_DTYPE_STREAMS

-

NVME_IO_DEAC

-

NVME_IO_ZNS_APPEND_PIREMAP

-

NVME_IO_PRINFO_PRCHK_REF

-

NVME_IO_PRINFO_PRCHK_APP

-

NVME_IO_PRINFO_PRCHK_GUARD

-

NVME_IO_PRINFO_PRACT

-

NVME_IO_FUA

-

NVME_IO_LR

-
-
-enum nvme_io_dsm_flags
-
- -

Constants

-

NVME_IO_DSM_FREQ_UNSPEC

-

NVME_IO_DSM_FREQ_TYPICAL

-

NVME_IO_DSM_FREQ_RARE

-

NVME_IO_DSM_FREQ_READS

-

NVME_IO_DSM_FREQ_WRITES

-

NVME_IO_DSM_FREQ_RW

-

NVME_IO_DSM_FREQ_ONCE

-

NVME_IO_DSM_FREQ_PREFETCH

-

NVME_IO_DSM_FREQ_TEMP

-

NVME_IO_DSM_LATENCY_NONE

-

NVME_IO_DSM_LATENCY_IDLE

-

NVME_IO_DSM_LATENCY_NORM

-

NVME_IO_DSM_LATENCY_LOW

-

NVME_IO_DSM_SEQ_REQ

-

NVME_IO_DSM_COMPRESSED

-
-
-enum nvme_dsm_attributes
-
- -

Constants

-

NVME_DSMGMT_IDR

-

NVME_DSMGMT_IDW

-

NVME_DSMGMT_AD

-
-
-enum nvme_resv_rtype
-
- -

Constants

-

NVME_RESERVATION_RTYPE_WE

-

NVME_RESERVATION_RTYPE_EA

-

NVME_RESERVATION_RTYPE_WERO

-

NVME_RESERVATION_RTYPE_EARO

-

NVME_RESERVATION_RTYPE_WEAR

-

NVME_RESERVATION_RTYPE_EAAR

-
-
-enum nvme_resv_racqa
-
- -

Constants

-

NVME_RESERVATION_RACQA_ACQUIRE

-

NVME_RESERVATION_RACQA_PREEMPT

-

NVME_RESERVATION_RACQA_PREEMPT_AND_ABORT

-
-
-enum nvme_resv_rrega
-
- -

Constants

-

NVME_RESERVATION_RREGA_REGISTER_KEY

-

NVME_RESERVATION_RREGA_UNREGISTER_KEY

-

NVME_RESERVATION_RREGA_REPLACE_KEY

-
-
-enum nvme_resv_cptpl
-
- -

Constants

-

NVME_RESERVATION_CPTPL_NO_CHANGE

-

NVME_RESERVATION_CPTPL_CLEAR

-

NVME_RESERVATION_CPTPL_PERSIST

-
-
-enum nvme_resv_rrela
-
- -

Constants

-

NVME_RESERVATION_RRELA_RELEASE

-

NVME_RESERVATION_RRELA_CLEAR

-
-
-enum nvme_zns_send_action
-
- -

Constants

-

NVME_ZNS_ZSA_CLOSE

-

NVME_ZNS_ZSA_FINISH

-

NVME_ZNS_ZSA_OPEN

-

NVME_ZNS_ZSA_RESET

-

NVME_ZNS_ZSA_OFFLINE

-

NVME_ZNS_ZSA_SET_DESC_EXT

-

NVME_ZNS_ZSA_ZRWA_FLUSH

-
-
-enum nvme_zns_recv_action
-
- -

Constants

-

NVME_ZNS_ZRA_REPORT_ZONES

-

NVME_ZNS_ZRA_EXTENDED_REPORT_ZONES

-
-
-enum nvme_zns_report_options
-
- -

Constants

-

NVME_ZNS_ZRAS_REPORT_ALL

-

NVME_ZNS_ZRAS_REPORT_EMPTY

-

NVME_ZNS_ZRAS_REPORT_IMPL_OPENED

-

NVME_ZNS_ZRAS_REPORT_EXPL_OPENED

-

NVME_ZNS_ZRAS_REPORT_CLOSED

-

NVME_ZNS_ZRAS_REPORT_FULL

-

NVME_ZNS_ZRAS_REPORT_READ_ONLY

-

NVME_ZNS_ZRAS_REPORT_OFFLINE

-

fabrics.h

-

Fabrics-specific definitions.

-
-
-struct nvme_fabrics_config
-

Defines all linux nvme fabrics initiator options

-
- -

Definition

-
struct nvme_fabrics_config {
-  char *host_traddr;
-  char *host_iface;
-  int queue_size;
-  int nr_io_queues;
-  int reconnect_delay;
-  int ctrl_loss_tmo;
-  int fast_io_fail_tmo;
-  int keep_alive_tmo;
-  int nr_write_queues;
-  int nr_poll_queues;
-  int tos;
-  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)

-
-
-
-
-const char *nvmf_trtype_str(__u8 trtype)
-

Decode TRTYPE field

-
- -

Parameters

-
-
__u8 trtype

value to be decoded

-
-
-

Description

-

Decode the transport type field in the discovery -log page entry.

-

Return

-

decoded string

-
-
-const char *nvmf_adrfam_str(__u8 adrfam)
-

Decode ADRFAM field

-
- -

Parameters

-
-
__u8 adrfam

value to be decoded

-
-
-

Description

-

Decode the address family field in the discovery -log page entry.

-

Return

-

decoded string

-
-
-const char *nvmf_subtype_str(__u8 subtype)
-

Decode SUBTYPE field

-
- -

Parameters

-
-
__u8 subtype

value to be decoded

-
-
-

Description

-

Decode the subsystem type field in the discovery -log page entry.

-

Return

-

decoded string

-
-
-const char *nvmf_treq_str(__u8 treq)
-

Decode TREQ field

-
- -

Parameters

-
-
__u8 treq

value to be decoded

-
-
-

Description

-

Decode the transport requirements field in the -discovery log page entry.

-

Return

-

decoded string

-
-
-const char *nvmf_eflags_str(__u16 eflags)
-

Decode EFLAGS field

-
- -

Parameters

-
-
__u16 eflags

value to be decoded

-
-
-

Description

-

Decode the EFLAGS field in the discovery log page -entry.

-

Return

-

decoded string

-
-
-const char *nvmf_sectype_str(__u8 sectype)
-

Decode SECTYPE field

-
- -

Parameters

-
-
__u8 sectype

value to be decoded

-
-
-

Description

-

Decode the SECTYPE field in the discovery log page -entry.

-

Return

-

decoded string

-
-
-const char *nvmf_prtype_str(__u8 prtype)
-

Decode RDMA Provider type field

-
- -

Parameters

-
-
__u8 prtype

value to be decoded

-
-
-

Description

-

Decode the RDMA Provider type field in the discovery -log page entry.

-

Return

-

decoded string

-
-
-const char *nvmf_qptype_str(__u8 qptype)
-

Decode RDMA QP Service type field

-
- -

Parameters

-
-
__u8 qptype

value to be decoded

-
-
-

Description

-

Decode the RDMA QP Service type field in the discovery log page -entry.

-

Return

-

decoded string

-
-
-const char *nvmf_cms_str(__u8 cms)
-

Decode RDMA connection management service field

-
- -

Parameters

-
-
__u8 cms

value to be decoded

-
-
-

Description

-

Decode the RDMA connection management service field in the discovery -log page entry.

-

Return

-

decoded string

-
-
-void nvmf_default_config(struct nvme_fabrics_config *cfg)
-

Default values for fabrics configuration

-
- -

Parameters

-
-
struct nvme_fabrics_config *cfg

config values to set

-
-
-

Description

-

Initializes cfg with default values.

-
-
-int nvmf_add_ctrl(nvme_host_t h, nvme_ctrl_t c, const struct nvme_fabrics_config *cfg)
-

Connect a controller and update topology

-
- -

Parameters

-
-
nvme_host_t h

Host to which the controller should be attached

-
-
nvme_ctrl_t c

Controller to be connected

-
-
const struct nvme_fabrics_config *cfg

Default configuration for the controller

-
-
-

Description

-

Issues a ‘connect’ command to the NVMe-oF controller and inserts c -into the topology using h as parent. -c must be initialized and not connected to the topology.

-

Return

-

0 on success; on failure errno is set and -1 is returned.

-
-
-int nvmf_get_discovery_log(nvme_ctrl_t c, struct nvmf_discovery_log **logp, int max_retries)
-

Return the discovery log page

-
- -

Parameters

-
-
nvme_ctrl_t c

Discover controller to use

-
-
struct nvmf_discovery_log **logp

Pointer to the log page to be returned

-
-
int max_retries

maximum number of log page entries to be returned

-
-
-

Return

-

0 on success; on failure -1 is returned and errno is set

-
-
-char *nvmf_hostnqn_generate()
-

Generate a machine specific host nqn

-
- -

Parameters

-

Return

-

An nvm namespace qualified name string based on the machine -identifier, or NULL if not successful.

-
-
-char *nvmf_hostnqn_from_file()
-

Reads the host nvm qualified name from the config default location in /etc/nvme/

-
- -

Parameters

-

Return

-

The host nqn, or NULL if unsuccessful. If found, the caller -is responsible to free the string.

-
-
-char *nvmf_hostid_from_file()
-

Reads the host identifier from the config default location in /etc/nvme/.

-
- -

Parameters

-

Return

-
-
The host identifier, or NULL if unsuccessful. If found, the caller

is responsible to free the string.

-
-
-
-
-nvme_ctrl_t nvmf_connect_disc_entry(nvme_host_t h, struct nvmf_disc_log_entry *e, const struct nvme_fabrics_config *defcfg, bool *discover)
-

Connect controller based on the discovery log page entry

-
- -

Parameters

-
-
nvme_host_t h

Host to which the controller should be connected

-
-
struct nvmf_disc_log_entry *e

Discovery log page entry

-
-
const struct nvme_fabrics_config *defcfg

Default configurationn 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

-
-
-void nvme_chomp(char *s, int l)
-

Strip trailing white space

-
- -

Parameters

-
-
char *s

String to strip

-
-
int l

Maximum length of string

-
-
-

util.h

-

libnvme utility functions

-
-
-enum nvme_connect_err
-

nvme connect error codes

-
- -

Constants

-
-
ENVME_CONNECT_RESOLVE

failed to resolve host

-
-
ENVME_CONNECT_ADDRFAM

unrecognized address family

-
-
ENVME_CONNECT_TRADDR

failed to get traddr

-
-
ENVME_CONNECT_TARG

need a transport (-t) argument

-
-
ENVME_CONNECT_AARG

need a address (-a) argument

-
-
ENVME_CONNECT_OPEN

failed to open nvme-fabrics device

-
-
ENVME_CONNECT_WRITE

failed to write to nvme-fabrics device

-
-
ENVME_CONNECT_READ

failed to read from nvme-fabrics device

-
-
ENVME_CONNECT_PARSE

failed to parse ctrl info

-
-
ENVME_CONNECT_INVAL_TR

invalid transport type

-
-
ENVME_CONNECT_LOOKUP_SUBSYS_NAME

failed to lookup subsystem name

-
-
ENVME_CONNECT_LOOKUP_SUBSYS

failed to lookup subsystem

-
-
-
-
-__u8 nvme_status_to_errno(int status, bool fabrics)
-

Converts nvme return status to errno

-
- -

Parameters

-
-
int status

Return status from an nvme passthrough commmand

-
-
bool fabrics

Set to true if status is to a fabrics target.

-
-
-

Return

-

An errno representing the nvme status if it is an nvme status field, -or unchanged status is < 0 since errno is already set.

-
-
-const char *nvme_status_to_string(int status, bool fabrics)
-

Returns string describing nvme return status.

-
- -

Parameters

-
-
int status

Return status from an nvme passthrough commmand

-
-
bool fabrics

Set to true if status is to a fabrics target.

-
-
-

Return

-

String representation of the nvme status if it is an nvme status field, -or a standard errno string if status is < 0.

-
-
-const char *nvme_errno_to_string(int err)
-

Returns string describing nvme connect failures

-
- -

Parameters

-
-
int err

Returned error code from nvme_add_ctrl()

-
-
-

Return

-

String representation of the nvme connect error codes

-
-
-void nvme_init_id_ns(struct nvme_id_ns *ns, __u64 nsze, __u64 ncap, __u8 flbas, __u8 dps, __u8 nmic, __u32 anagrpid, __u16 nvmsetid)
-

Initialize an Identify Namepsace structure for creation.

-
- -

Parameters

-
-
struct nvme_id_ns *ns

Address of the Identify Namespace structure to initialize

-
-
__u64 nsze

Namespace size

-
-
__u64 ncap

namespace capacity

-
-
__u8 flbas

formatted logical block size settings

-
-
__u8 dps

Data protection settings

-
-
__u8 nmic

Namespace sharing capabilities

-
-
__u32 anagrpid

ANA group identifier

-
-
__u16 nvmsetid

NVM Set identifer

-
-
-

Description

-

This is intended to be used with a namespace management “create”, see -nvme_ns_mgmt_create().

-
-
-void nvme_init_ctrl_list(struct nvme_ctrl_list *cntlist, __u16 num_ctrls, __u16 *ctrlist)
-

Initialize an nvme_ctrl_list structure from an array.

-
- -

Parameters

-
-
struct nvme_ctrl_list *cntlist

The controller list structure to initialize

-
-
__u16 num_ctrls

The number of controllers in the array, ctrlist.

-
-
__u16 *ctrlist

An array of controller identifiers in CPU native endian.

-
-
-

Description

-

This is intended to be used with any command that takes a controller list -argument. See nvme_ns_attach_ctrls() and nvme_ns_detach().

-
-
-void nvme_init_dsm_range(struct nvme_dsm_range *dsm, __u32 *ctx_attrs, __u32 *llbas, __u64 *slbas, __u16 nr_ranges)
-

Constructs a data set range structure

-
- -

Parameters

-
-
struct nvme_dsm_range *dsm

DSM range array

-
-
__u32 *ctx_attrs

Array of context attributes

-
-
__u32 *llbas

Array of length in logical blocks

-
-
__u64 *slbas

Array of starting logical blocks

-
-
__u16 nr_ranges

The size of the dsm arrays

-
-
-

Description

-

Each array must be the same size of size ‘nr_ranges’. This is intended to be -used with constructing a payload for nvme_dsm().

-

Return

-

The nvme command status if a response was received or -errno -otherwise.

-
-
-void nvme_init_copy_range(struct nvme_copy_range *copy, __u16 *nlbs, __u64 *slbas, __u32 *eilbrts, __u32 *elbatms, __u32 *elbats, __u16 nr)
-

Constructs a copy range structure

-
- -

Parameters

-
-
struct nvme_copy_range *copy

Copy range array

-
-
__u16 *nlbs

Number of logical blocks

-
-
__u64 *slbas

Starting LBA

-
-
__u32 *eilbrts

Expected initial logical block reference tag

-
-
__u32 *elbatms

Expected logical block application tag mask

-
-
__u32 *elbats

Expected logical block application tag

-
-
__u16 nr

Number of descriptors to construct

-
-
-
-
-int nvme_get_feature_length(int fid, __u32 cdw11, __u32 *len)
-

Retreive the command payload length for a specific feature identifier

-
- -

Parameters

-
-
int fid

Feature identifier, see enum nvme_features_id.

-
-
__u32 cdw11

The cdw11 value may affect the transfer (only known fid is -NVME_FEAT_FID_HOST_ID)

-
-
__u32 *len

On success, set to this features payload length in bytes.

-
-
-

Return

-

0 on success, -1 with errno set to EINVAL if the function did not -recognize fid.

-
-
-int nvme_get_directive_receive_length(enum nvme_directive_dtype dtype, enum nvme_directive_receive_doper doper, __u32 *len)
-
- -

Parameters

-
-
enum nvme_directive_dtype dtype

Directive type, see enum nvme_directive_dtype

-
-
enum nvme_directive_receive_doper doper

Directive receive operation, see enum nvme_directive_receive_doper

-
-
__u32 *len

On success, set to this directives payload length in bytes.

-
-
-

Return

-

0 on success, -1 with errno set to EINVAL if the function did not -recognize dtype or doper.

- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/doc/html/objects.inv b/doc/html/objects.inv deleted file mode 100644 index 3e1933ec..00000000 Binary files a/doc/html/objects.inv and /dev/null differ diff --git a/doc/html/search.html b/doc/html/search.html deleted file mode 100644 index 23f5f074..00000000 --- a/doc/html/search.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - Search — libnvme 0.1 documentation - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • »
  • -
  • Search
  • -
  • -
  • -
-
-
-
-
- - - - -
- -
- -
-
- -
-
-
-
- - - - - - - - - \ No newline at end of file diff --git a/doc/html/searchindex.js b/doc/html/searchindex.js deleted file mode 100644 index dfbd2f83..00000000 --- a/doc/html/searchindex.js +++ /dev/null @@ -1 +0,0 @@ -Search.setIndex({docnames:["libnvme"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["libnvme.rst"],objects:{"":[[0,0,1,"c.NVME_GET","NVME_GET"],[0,0,1,"c.NVME_SET","NVME_SET"],[0,1,1,"c.nvme_admin_opcode","nvme_admin_opcode"],[0,2,1,"c.nvme_admin_passthru","nvme_admin_passthru"],[0,2,1,"c.nvme_admin_passthru64","nvme_admin_passthru64"],[0,1,1,"c.nvme_ae_info_css_nvm","nvme_ae_info_css_nvm"],[0,1,1,"c.nvme_ae_info_error","nvme_ae_info_error"],[0,1,1,"c.nvme_ae_info_notice","nvme_ae_info_notice"],[0,1,1,"c.nvme_ae_info_smart","nvme_ae_info_smart"],[0,1,1,"c.nvme_ae_type","nvme_ae_type"],[0,4,1,"c.nvme_aggregate_endurance_group_event","nvme_aggregate_endurance_group_event"],[0,4,1,"c.nvme_aggregate_predictable_lat_event","nvme_aggregate_predictable_lat_event"],[0,4,1,"c.nvme_ana_group_desc","nvme_ana_group_desc"],[0,4,1,"c.nvme_ana_log","nvme_ana_log"],[0,1,1,"c.nvme_ana_state","nvme_ana_state"],[0,1,1,"c.nvme_apst_entry","nvme_apst_entry"],[0,4,1,"c.nvme_boot_partition","nvme_boot_partition"],[0,2,1,"c.nvme_capacity_mgmt","nvme_capacity_mgmt"],[0,4,1,"c.nvme_capacity_mgmt_args","nvme_capacity_mgmt_args"],[0,4,1,"c.nvme_change_ns_event","nvme_change_ns_event"],[0,4,1,"c.nvme_channel_config_desc","nvme_channel_config_desc"],[0,2,1,"c.nvme_chomp","nvme_chomp"],[0,2,1,"c.nvme_cmb_size","nvme_cmb_size"],[0,1,1,"c.nvme_cmd_effects","nvme_cmd_effects"],[0,4,1,"c.nvme_cmd_effects_log","nvme_cmd_effects_log"],[0,1,1,"c.nvme_cmd_format_mset","nvme_cmd_format_mset"],[0,1,1,"c.nvme_cmd_format_pi","nvme_cmd_format_pi"],[0,1,1,"c.nvme_cmd_format_pil","nvme_cmd_format_pil"],[0,1,1,"c.nvme_cmd_format_ses","nvme_cmd_format_ses"],[0,1,1,"c.nvme_cmd_get_log_lid","nvme_cmd_get_log_lid"],[0,1,1,"c.nvme_cmd_get_log_telemetry_host_lsp","nvme_cmd_get_log_telemetry_host_lsp"],[0,2,1,"c.nvme_compare","nvme_compare"],[0,1,1,"c.nvme_connect_err","nvme_connect_err"],[0,1,1,"c.nvme_constants","nvme_constants"],[0,2,1,"c.nvme_copy","nvme_copy"],[0,4,1,"c.nvme_copy_args","nvme_copy_args"],[0,4,1,"c.nvme_copy_range","nvme_copy_range"],[0,2,1,"c.nvme_create_ctrl","nvme_create_ctrl"],[0,2,1,"c.nvme_create_root","nvme_create_root"],[0,1,1,"c.nvme_csi","nvme_csi"],[0,2,1,"c.nvme_ctrl_first_ns","nvme_ctrl_first_ns"],[0,2,1,"c.nvme_ctrl_first_path","nvme_ctrl_first_path"],[0,0,1,"c.nvme_ctrl_for_each_ns","nvme_ctrl_for_each_ns"],[0,0,1,"c.nvme_ctrl_for_each_ns_safe","nvme_ctrl_for_each_ns_safe"],[0,0,1,"c.nvme_ctrl_for_each_path","nvme_ctrl_for_each_path"],[0,0,1,"c.nvme_ctrl_for_each_path_safe","nvme_ctrl_for_each_path_safe"],[0,2,1,"c.nvme_ctrl_get_address","nvme_ctrl_get_address"],[0,2,1,"c.nvme_ctrl_get_config","nvme_ctrl_get_config"],[0,2,1,"c.nvme_ctrl_get_dhchap_key","nvme_ctrl_get_dhchap_key"],[0,2,1,"c.nvme_ctrl_get_fd","nvme_ctrl_get_fd"],[0,2,1,"c.nvme_ctrl_get_firmware","nvme_ctrl_get_firmware"],[0,2,1,"c.nvme_ctrl_get_host_iface","nvme_ctrl_get_host_iface"],[0,2,1,"c.nvme_ctrl_get_host_traddr","nvme_ctrl_get_host_traddr"],[0,2,1,"c.nvme_ctrl_get_model","nvme_ctrl_get_model"],[0,2,1,"c.nvme_ctrl_get_name","nvme_ctrl_get_name"],[0,2,1,"c.nvme_ctrl_get_numa_node","nvme_ctrl_get_numa_node"],[0,2,1,"c.nvme_ctrl_get_queue_count","nvme_ctrl_get_queue_count"],[0,2,1,"c.nvme_ctrl_get_serial","nvme_ctrl_get_serial"],[0,2,1,"c.nvme_ctrl_get_sqsize","nvme_ctrl_get_sqsize"],[0,2,1,"c.nvme_ctrl_get_state","nvme_ctrl_get_state"],[0,2,1,"c.nvme_ctrl_get_subsysnqn","nvme_ctrl_get_subsysnqn"],[0,2,1,"c.nvme_ctrl_get_subsystem","nvme_ctrl_get_subsystem"],[0,2,1,"c.nvme_ctrl_get_sysfs_dir","nvme_ctrl_get_sysfs_dir"],[0,2,1,"c.nvme_ctrl_get_traddr","nvme_ctrl_get_traddr"],[0,2,1,"c.nvme_ctrl_get_transport","nvme_ctrl_get_transport"],[0,2,1,"c.nvme_ctrl_get_trsvcid","nvme_ctrl_get_trsvcid"],[0,2,1,"c.nvme_ctrl_identify","nvme_ctrl_identify"],[0,2,1,"c.nvme_ctrl_is_discovered","nvme_ctrl_is_discovered"],[0,2,1,"c.nvme_ctrl_is_discovery_ctrl","nvme_ctrl_is_discovery_ctrl"],[0,2,1,"c.nvme_ctrl_is_persistent","nvme_ctrl_is_persistent"],[0,4,1,"c.nvme_ctrl_list","nvme_ctrl_list"],[0,1,1,"c.nvme_ctrl_metadata_type","nvme_ctrl_metadata_type"],[0,2,1,"c.nvme_ctrl_next_ns","nvme_ctrl_next_ns"],[0,2,1,"c.nvme_ctrl_next_path","nvme_ctrl_next_path"],[0,2,1,"c.nvme_ctrl_reset","nvme_ctrl_reset"],[0,2,1,"c.nvme_ctrl_set_dhchap_key","nvme_ctrl_set_dhchap_key"],[0,2,1,"c.nvme_ctrl_set_discovered","nvme_ctrl_set_discovered"],[0,2,1,"c.nvme_ctrl_set_discovery_ctrl","nvme_ctrl_set_discovery_ctrl"],[0,2,1,"c.nvme_ctrl_set_persistent","nvme_ctrl_set_persistent"],[0,2,1,"c.nvme_ctrls_filter","nvme_ctrls_filter"],[0,2,1,"c.nvme_default_host","nvme_default_host"],[0,2,1,"c.nvme_dev_self_test","nvme_dev_self_test"],[0,4,1,"c.nvme_dev_self_test_args","nvme_dev_self_test_args"],[0,1,1,"c.nvme_directive_dtype","nvme_directive_dtype"],[0,1,1,"c.nvme_directive_receive_doper","nvme_directive_receive_doper"],[0,2,1,"c.nvme_directive_recv","nvme_directive_recv"],[0,4,1,"c.nvme_directive_recv_args","nvme_directive_recv_args"],[0,2,1,"c.nvme_directive_recv_identify_parameters","nvme_directive_recv_identify_parameters"],[0,2,1,"c.nvme_directive_recv_stream_allocate","nvme_directive_recv_stream_allocate"],[0,2,1,"c.nvme_directive_recv_stream_parameters","nvme_directive_recv_stream_parameters"],[0,2,1,"c.nvme_directive_recv_stream_status","nvme_directive_recv_stream_status"],[0,2,1,"c.nvme_directive_send","nvme_directive_send"],[0,4,1,"c.nvme_directive_send_args","nvme_directive_send_args"],[0,1,1,"c.nvme_directive_send_doper","nvme_directive_send_doper"],[0,2,1,"c.nvme_directive_send_id_endir","nvme_directive_send_id_endir"],[0,1,1,"c.nvme_directive_send_identify_endir","nvme_directive_send_identify_endir"],[0,2,1,"c.nvme_directive_send_stream_release_identifier","nvme_directive_send_stream_release_identifier"],[0,2,1,"c.nvme_directive_send_stream_release_resource","nvme_directive_send_stream_release_resource"],[0,1,1,"c.nvme_directive_types","nvme_directive_types"],[0,2,1,"c.nvme_disconnect_ctrl","nvme_disconnect_ctrl"],[0,2,1,"c.nvme_dsm","nvme_dsm"],[0,4,1,"c.nvme_dsm_args","nvme_dsm_args"],[0,1,1,"c.nvme_dsm_attributes","nvme_dsm_attributes"],[0,4,1,"c.nvme_dsm_range","nvme_dsm_range"],[0,1,1,"c.nvme_dst_stc","nvme_dst_stc"],[0,2,1,"c.nvme_dump_config","nvme_dump_config"],[0,1,1,"c.nvme_eg_critical_warning_flags","nvme_eg_critical_warning_flags"],[0,4,1,"c.nvme_eg_event_aggregate_log","nvme_eg_event_aggregate_log"],[0,4,1,"c.nvme_end_grp_chan_desc","nvme_end_grp_chan_desc"],[0,4,1,"c.nvme_end_grp_config_desc","nvme_end_grp_config_desc"],[0,4,1,"c.nvme_endurance_group_log","nvme_endurance_group_log"],[0,1,1,"c.nvme_err_pel","nvme_err_pel"],[0,2,1,"c.nvme_errno_to_string","nvme_errno_to_string"],[0,4,1,"c.nvme_error_log_page","nvme_error_log_page"],[0,4,1,"c.nvme_fabrics_config","nvme_fabrics_config"],[0,1,1,"c.nvme_fctype","nvme_fctype"],[0,1,1,"c.nvme_feat","nvme_feat"],[0,4,1,"c.nvme_feat_auto_pst","nvme_feat_auto_pst"],[0,4,1,"c.nvme_feat_host_behavior","nvme_feat_host_behavior"],[0,1,1,"c.nvme_feat_nswpcfg_state","nvme_feat_nswpcfg_state"],[0,1,1,"c.nvme_feat_plm_window_select","nvme_feat_plm_window_select"],[0,1,1,"c.nvme_feat_resv_notify_flags","nvme_feat_resv_notify_flags"],[0,1,1,"c.nvme_feat_tmpthresh_thsel","nvme_feat_tmpthresh_thsel"],[0,1,1,"c.nvme_features_async_event_config_flags","nvme_features_async_event_config_flags"],[0,1,1,"c.nvme_features_id","nvme_features_id"],[0,1,1,"c.nvme_fid_supported_effects","nvme_fid_supported_effects"],[0,4,1,"c.nvme_fid_supported_effects_log","nvme_fid_supported_effects_log"],[0,4,1,"c.nvme_firmware_slot","nvme_firmware_slot"],[0,2,1,"c.nvme_first_host","nvme_first_host"],[0,2,1,"c.nvme_first_subsystem","nvme_first_subsystem"],[0,2,1,"c.nvme_flush","nvme_flush"],[0,0,1,"c.nvme_for_each_host","nvme_for_each_host"],[0,0,1,"c.nvme_for_each_host_safe","nvme_for_each_host_safe"],[0,0,1,"c.nvme_for_each_subsystem","nvme_for_each_subsystem"],[0,0,1,"c.nvme_for_each_subsystem_safe","nvme_for_each_subsystem_safe"],[0,2,1,"c.nvme_format_nvm","nvme_format_nvm"],[0,4,1,"c.nvme_format_nvm_args","nvme_format_nvm_args"],[0,4,1,"c.nvme_format_nvm_compln_event","nvme_format_nvm_compln_event"],[0,4,1,"c.nvme_format_nvm_start_event","nvme_format_nvm_start_event"],[0,2,1,"c.nvme_free_ctrl","nvme_free_ctrl"],[0,2,1,"c.nvme_free_host","nvme_free_host"],[0,2,1,"c.nvme_free_ns","nvme_free_ns"],[0,2,1,"c.nvme_free_subsystem","nvme_free_subsystem"],[0,2,1,"c.nvme_free_tree","nvme_free_tree"],[0,2,1,"c.nvme_fw_commit","nvme_fw_commit"],[0,4,1,"c.nvme_fw_commit_args","nvme_fw_commit_args"],[0,1,1,"c.nvme_fw_commit_ca","nvme_fw_commit_ca"],[0,4,1,"c.nvme_fw_commit_event","nvme_fw_commit_event"],[0,2,1,"c.nvme_fw_download","nvme_fw_download"],[0,4,1,"c.nvme_fw_download_args","nvme_fw_download_args"],[0,2,1,"c.nvme_fw_download_seq","nvme_fw_download_seq"],[0,2,1,"c.nvme_gen_dhchap_key","nvme_gen_dhchap_key"],[0,2,1,"c.nvme_get_ana_log_len","nvme_get_ana_log_len"],[0,2,1,"c.nvme_get_attr","nvme_get_attr"],[0,2,1,"c.nvme_get_ctrl_attr","nvme_get_ctrl_attr"],[0,2,1,"c.nvme_get_ctrl_telemetry","nvme_get_ctrl_telemetry"],[0,2,1,"c.nvme_get_directive_receive_length","nvme_get_directive_receive_length"],[0,2,1,"c.nvme_get_feature_length","nvme_get_feature_length"],[0,2,1,"c.nvme_get_features","nvme_get_features"],[0,2,1,"c.nvme_get_features_arbitration","nvme_get_features_arbitration"],[0,4,1,"c.nvme_get_features_args","nvme_get_features_args"],[0,2,1,"c.nvme_get_features_async_event","nvme_get_features_async_event"],[0,2,1,"c.nvme_get_features_auto_pst","nvme_get_features_auto_pst"],[0,2,1,"c.nvme_get_features_data","nvme_get_features_data"],[0,2,1,"c.nvme_get_features_endurance_event_cfg","nvme_get_features_endurance_event_cfg"],[0,2,1,"c.nvme_get_features_err_recovery","nvme_get_features_err_recovery"],[0,2,1,"c.nvme_get_features_hctm","nvme_get_features_hctm"],[0,2,1,"c.nvme_get_features_host_behavior","nvme_get_features_host_behavior"],[0,2,1,"c.nvme_get_features_host_id","nvme_get_features_host_id"],[0,2,1,"c.nvme_get_features_host_mem_buf","nvme_get_features_host_mem_buf"],[0,2,1,"c.nvme_get_features_iocs_profile","nvme_get_features_iocs_profile"],[0,2,1,"c.nvme_get_features_irq_coalesce","nvme_get_features_irq_coalesce"],[0,2,1,"c.nvme_get_features_irq_config","nvme_get_features_irq_config"],[0,2,1,"c.nvme_get_features_kato","nvme_get_features_kato"],[0,2,1,"c.nvme_get_features_lba_range","nvme_get_features_lba_range"],[0,2,1,"c.nvme_get_features_lba_sts_interval","nvme_get_features_lba_sts_interval"],[0,2,1,"c.nvme_get_features_nopsc","nvme_get_features_nopsc"],[0,2,1,"c.nvme_get_features_num_queues","nvme_get_features_num_queues"],[0,2,1,"c.nvme_get_features_plm_config","nvme_get_features_plm_config"],[0,2,1,"c.nvme_get_features_plm_window","nvme_get_features_plm_window"],[0,2,1,"c.nvme_get_features_power_mgmt","nvme_get_features_power_mgmt"],[0,2,1,"c.nvme_get_features_resv_mask","nvme_get_features_resv_mask"],[0,2,1,"c.nvme_get_features_resv_persist","nvme_get_features_resv_persist"],[0,2,1,"c.nvme_get_features_rrl","nvme_get_features_rrl"],[0,2,1,"c.nvme_get_features_sanitize","nvme_get_features_sanitize"],[0,1,1,"c.nvme_get_features_sel","nvme_get_features_sel"],[0,2,1,"c.nvme_get_features_simple","nvme_get_features_simple"],[0,2,1,"c.nvme_get_features_sw_progress","nvme_get_features_sw_progress"],[0,2,1,"c.nvme_get_features_temp_thresh","nvme_get_features_temp_thresh"],[0,2,1,"c.nvme_get_features_timestamp","nvme_get_features_timestamp"],[0,2,1,"c.nvme_get_features_volatile_wc","nvme_get_features_volatile_wc"],[0,2,1,"c.nvme_get_features_write_atomic","nvme_get_features_write_atomic"],[0,2,1,"c.nvme_get_features_write_protect","nvme_get_features_write_protect"],[0,2,1,"c.nvme_get_host_telemetry","nvme_get_host_telemetry"],[0,2,1,"c.nvme_get_lba_status","nvme_get_lba_status"],[0,4,1,"c.nvme_get_lba_status_args","nvme_get_lba_status_args"],[0,2,1,"c.nvme_get_lba_status_log","nvme_get_lba_status_log"],[0,2,1,"c.nvme_get_log","nvme_get_log"],[0,2,1,"c.nvme_get_log_ana","nvme_get_log_ana"],[0,2,1,"c.nvme_get_log_ana_groups","nvme_get_log_ana_groups"],[0,4,1,"c.nvme_get_log_args","nvme_get_log_args"],[0,2,1,"c.nvme_get_log_boot_partition","nvme_get_log_boot_partition"],[0,2,1,"c.nvme_get_log_changed_ns_list","nvme_get_log_changed_ns_list"],[0,2,1,"c.nvme_get_log_cmd_effects","nvme_get_log_cmd_effects"],[0,2,1,"c.nvme_get_log_create_telemetry_host","nvme_get_log_create_telemetry_host"],[0,2,1,"c.nvme_get_log_device_self_test","nvme_get_log_device_self_test"],[0,2,1,"c.nvme_get_log_discovery","nvme_get_log_discovery"],[0,2,1,"c.nvme_get_log_endurance_group","nvme_get_log_endurance_group"],[0,2,1,"c.nvme_get_log_endurance_grp_evt","nvme_get_log_endurance_grp_evt"],[0,2,1,"c.nvme_get_log_error","nvme_get_log_error"],[0,2,1,"c.nvme_get_log_fid_supported_effects","nvme_get_log_fid_supported_effects"],[0,2,1,"c.nvme_get_log_fw_slot","nvme_get_log_fw_slot"],[0,2,1,"c.nvme_get_log_lba_status","nvme_get_log_lba_status"],[0,2,1,"c.nvme_get_log_media_unit_stat","nvme_get_log_media_unit_stat"],[0,2,1,"c.nvme_get_log_page","nvme_get_log_page"],[0,2,1,"c.nvme_get_log_page_padded","nvme_get_log_page_padded"],[0,2,1,"c.nvme_get_log_persistent_event","nvme_get_log_persistent_event"],[0,2,1,"c.nvme_get_log_predictable_lat_event","nvme_get_log_predictable_lat_event"],[0,2,1,"c.nvme_get_log_predictable_lat_nvmset","nvme_get_log_predictable_lat_nvmset"],[0,2,1,"c.nvme_get_log_reservation","nvme_get_log_reservation"],[0,2,1,"c.nvme_get_log_sanitize","nvme_get_log_sanitize"],[0,2,1,"c.nvme_get_log_smart","nvme_get_log_smart"],[0,2,1,"c.nvme_get_log_support_cap_config_list","nvme_get_log_support_cap_config_list"],[0,2,1,"c.nvme_get_log_supported_log_pages","nvme_get_log_supported_log_pages"],[0,2,1,"c.nvme_get_log_telemetry_ctrl","nvme_get_log_telemetry_ctrl"],[0,2,1,"c.nvme_get_log_telemetry_host","nvme_get_log_telemetry_host"],[0,2,1,"c.nvme_get_log_zns_changed_zones","nvme_get_log_zns_changed_zones"],[0,2,1,"c.nvme_get_logical_block_size","nvme_get_logical_block_size"],[0,2,1,"c.nvme_get_new_host_telemetry","nvme_get_new_host_telemetry"],[0,2,1,"c.nvme_get_ns_attr","nvme_get_ns_attr"],[0,2,1,"c.nvme_get_nsid","nvme_get_nsid"],[0,2,1,"c.nvme_get_path_attr","nvme_get_path_attr"],[0,2,1,"c.nvme_get_property","nvme_get_property"],[0,4,1,"c.nvme_get_property_args","nvme_get_property_args"],[0,2,1,"c.nvme_get_subsys_attr","nvme_get_subsys_attr"],[0,1,1,"c.nvme_hmac_alg","nvme_hmac_alg"],[0,1,1,"c.nvme_host_behavior_support","nvme_host_behavior_support"],[0,2,1,"c.nvme_host_get_dhchap_key","nvme_host_get_dhchap_key"],[0,2,1,"c.nvme_host_get_hostid","nvme_host_get_hostid"],[0,2,1,"c.nvme_host_get_hostnqn","nvme_host_get_hostnqn"],[0,2,1,"c.nvme_host_get_root","nvme_host_get_root"],[0,4,1,"c.nvme_host_mem_buf_attrs","nvme_host_mem_buf_attrs"],[0,4,1,"c.nvme_host_metadata","nvme_host_metadata"],[0,2,1,"c.nvme_host_set_dhchap_key","nvme_host_set_dhchap_key"],[0,4,1,"c.nvme_id_ctrl","nvme_id_ctrl"],[0,1,1,"c.nvme_id_ctrl_anacap","nvme_id_ctrl_anacap"],[0,1,1,"c.nvme_id_ctrl_apsta","nvme_id_ctrl_apsta"],[0,1,1,"c.nvme_id_ctrl_avscc","nvme_id_ctrl_avscc"],[0,1,1,"c.nvme_id_ctrl_cmic","nvme_id_ctrl_cmic"],[0,1,1,"c.nvme_id_ctrl_cntrltype","nvme_id_ctrl_cntrltype"],[0,1,1,"c.nvme_id_ctrl_cqes","nvme_id_ctrl_cqes"],[0,1,1,"c.nvme_id_ctrl_ctratt","nvme_id_ctrl_ctratt"],[0,1,1,"c.nvme_id_ctrl_dsto","nvme_id_ctrl_dsto"],[0,1,1,"c.nvme_id_ctrl_fcatt","nvme_id_ctrl_fcatt"],[0,1,1,"c.nvme_id_ctrl_fna","nvme_id_ctrl_fna"],[0,1,1,"c.nvme_id_ctrl_frmw","nvme_id_ctrl_frmw"],[0,1,1,"c.nvme_id_ctrl_fuses","nvme_id_ctrl_fuses"],[0,1,1,"c.nvme_id_ctrl_hctm","nvme_id_ctrl_hctm"],[0,1,1,"c.nvme_id_ctrl_lpa","nvme_id_ctrl_lpa"],[0,1,1,"c.nvme_id_ctrl_mec","nvme_id_ctrl_mec"],[0,4,1,"c.nvme_id_ctrl_nvm","nvme_id_ctrl_nvm"],[0,1,1,"c.nvme_id_ctrl_nvmsr","nvme_id_ctrl_nvmsr"],[0,1,1,"c.nvme_id_ctrl_nvscc","nvme_id_ctrl_nvscc"],[0,1,1,"c.nvme_id_ctrl_nwpc","nvme_id_ctrl_nwpc"],[0,1,1,"c.nvme_id_ctrl_oacs","nvme_id_ctrl_oacs"],[0,1,1,"c.nvme_id_ctrl_oaes","nvme_id_ctrl_oaes"],[0,1,1,"c.nvme_id_ctrl_ofcs","nvme_id_ctrl_ofcs"],[0,1,1,"c.nvme_id_ctrl_oncs","nvme_id_ctrl_oncs"],[0,1,1,"c.nvme_id_ctrl_rpmbs","nvme_id_ctrl_rpmbs"],[0,1,1,"c.nvme_id_ctrl_sanicap","nvme_id_ctrl_sanicap"],[0,1,1,"c.nvme_id_ctrl_sgls","nvme_id_ctrl_sgls"],[0,1,1,"c.nvme_id_ctrl_sqes","nvme_id_ctrl_sqes"],[0,1,1,"c.nvme_id_ctrl_vwc","nvme_id_ctrl_vwc"],[0,1,1,"c.nvme_id_ctrl_vwci","nvme_id_ctrl_vwci"],[0,4,1,"c.nvme_id_directives","nvme_id_directives"],[0,4,1,"c.nvme_id_domain_attr","nvme_id_domain_attr"],[0,4,1,"c.nvme_id_domain_list","nvme_id_domain_list"],[0,4,1,"c.nvme_id_endurance_group_list","nvme_id_endurance_group_list"],[0,4,1,"c.nvme_id_independent_id_ns","nvme_id_independent_id_ns"],[0,4,1,"c.nvme_id_iocs","nvme_id_iocs"],[0,4,1,"c.nvme_id_ns","nvme_id_ns"],[0,1,1,"c.nvme_id_ns_attr","nvme_id_ns_attr"],[0,1,1,"c.nvme_id_ns_dlfeat","nvme_id_ns_dlfeat"],[0,1,1,"c.nvme_id_ns_dpc","nvme_id_ns_dpc"],[0,1,1,"c.nvme_id_ns_dps","nvme_id_ns_dps"],[0,1,1,"c.nvme_id_ns_flbas","nvme_id_ns_flbas"],[0,4,1,"c.nvme_id_ns_granularity_desc","nvme_id_ns_granularity_desc"],[0,4,1,"c.nvme_id_ns_granularity_list","nvme_id_ns_granularity_list"],[0,1,1,"c.nvme_id_ns_mc","nvme_id_ns_mc"],[0,1,1,"c.nvme_id_ns_nmic","nvme_id_ns_nmic"],[0,1,1,"c.nvme_id_ns_rescap","nvme_id_ns_rescap"],[0,1,1,"c.nvme_id_nsfeat","nvme_id_nsfeat"],[0,4,1,"c.nvme_id_nvmset_list","nvme_id_nvmset_list"],[0,4,1,"c.nvme_id_psd","nvme_id_psd"],[0,1,1,"c.nvme_id_uuid","nvme_id_uuid"],[0,4,1,"c.nvme_id_uuid_list","nvme_id_uuid_list"],[0,4,1,"c.nvme_id_uuid_list_entry","nvme_id_uuid_list_entry"],[0,2,1,"c.nvme_identify","nvme_identify"],[0,2,1,"c.nvme_identify_active_ns_list","nvme_identify_active_ns_list"],[0,2,1,"c.nvme_identify_active_ns_list_csi","nvme_identify_active_ns_list_csi"],[0,2,1,"c.nvme_identify_allocated_ns","nvme_identify_allocated_ns"],[0,2,1,"c.nvme_identify_allocated_ns_list","nvme_identify_allocated_ns_list"],[0,2,1,"c.nvme_identify_allocated_ns_list_csi","nvme_identify_allocated_ns_list_csi"],[0,4,1,"c.nvme_identify_args","nvme_identify_args"],[0,1,1,"c.nvme_identify_cns","nvme_identify_cns"],[0,2,1,"c.nvme_identify_ctrl","nvme_identify_ctrl"],[0,2,1,"c.nvme_identify_ctrl_csi","nvme_identify_ctrl_csi"],[0,2,1,"c.nvme_identify_ctrl_list","nvme_identify_ctrl_list"],[0,2,1,"c.nvme_identify_domain_list","nvme_identify_domain_list"],[0,2,1,"c.nvme_identify_endurance_group_list","nvme_identify_endurance_group_list"],[0,2,1,"c.nvme_identify_independent_identify_ns","nvme_identify_independent_identify_ns"],[0,2,1,"c.nvme_identify_iocs","nvme_identify_iocs"],[0,2,1,"c.nvme_identify_iocs_ns_csi_user_data_format","nvme_identify_iocs_ns_csi_user_data_format"],[0,2,1,"c.nvme_identify_ns","nvme_identify_ns"],[0,2,1,"c.nvme_identify_ns_csi","nvme_identify_ns_csi"],[0,2,1,"c.nvme_identify_ns_csi_user_data_format","nvme_identify_ns_csi_user_data_format"],[0,2,1,"c.nvme_identify_ns_descs","nvme_identify_ns_descs"],[0,2,1,"c.nvme_identify_ns_granularity","nvme_identify_ns_granularity"],[0,2,1,"c.nvme_identify_nsid_ctrl_list","nvme_identify_nsid_ctrl_list"],[0,2,1,"c.nvme_identify_nvmset_list","nvme_identify_nvmset_list"],[0,2,1,"c.nvme_identify_primary_ctrl","nvme_identify_primary_ctrl"],[0,2,1,"c.nvme_identify_secondary_ctrl_list","nvme_identify_secondary_ctrl_list"],[0,2,1,"c.nvme_identify_uuid","nvme_identify_uuid"],[0,2,1,"c.nvme_init_copy_range","nvme_init_copy_range"],[0,2,1,"c.nvme_init_ctrl","nvme_init_ctrl"],[0,2,1,"c.nvme_init_ctrl_list","nvme_init_ctrl_list"],[0,2,1,"c.nvme_init_dsm_range","nvme_init_dsm_range"],[0,2,1,"c.nvme_init_id_ns","nvme_init_id_ns"],[0,2,1,"c.nvme_init_logging","nvme_init_logging"],[0,2,1,"c.nvme_io","nvme_io"],[0,4,1,"c.nvme_io_args","nvme_io_args"],[0,1,1,"c.nvme_io_control_flags","nvme_io_control_flags"],[0,1,1,"c.nvme_io_dsm_flags","nvme_io_dsm_flags"],[0,1,1,"c.nvme_io_opcode","nvme_io_opcode"],[0,2,1,"c.nvme_io_passthru","nvme_io_passthru"],[0,2,1,"c.nvme_io_passthru64","nvme_io_passthru64"],[0,2,1,"c.nvme_is_64bit_reg","nvme_is_64bit_reg"],[0,4,1,"c.nvme_lba_range_type","nvme_lba_range_type"],[0,4,1,"c.nvme_lba_range_type_entry","nvme_lba_range_type_entry"],[0,4,1,"c.nvme_lba_rd","nvme_lba_rd"],[0,4,1,"c.nvme_lba_status","nvme_lba_status"],[0,1,1,"c.nvme_lba_status_atype","nvme_lba_status_atype"],[0,4,1,"c.nvme_lba_status_desc","nvme_lba_status_desc"],[0,4,1,"c.nvme_lba_status_log","nvme_lba_status_log"],[0,4,1,"c.nvme_lbaf","nvme_lbaf"],[0,1,1,"c.nvme_lbaf_rp","nvme_lbaf_rp"],[0,1,1,"c.nvme_lbart","nvme_lbart"],[0,4,1,"c.nvme_lbas_ns_element","nvme_lbas_ns_element"],[0,2,1,"c.nvme_lockdown","nvme_lockdown"],[0,4,1,"c.nvme_lockdown_args","nvme_lockdown_args"],[0,1,1,"c.nvme_log_ana_lsp","nvme_log_ana_lsp"],[0,2,1,"c.nvme_lookup_ctrl","nvme_lookup_ctrl"],[0,2,1,"c.nvme_lookup_host","nvme_lookup_host"],[0,2,1,"c.nvme_lookup_subsystem","nvme_lookup_subsystem"],[0,4,1,"c.nvme_media_unit_config_desc","nvme_media_unit_config_desc"],[0,4,1,"c.nvme_media_unit_stat_desc","nvme_media_unit_stat_desc"],[0,4,1,"c.nvme_media_unit_stat_log","nvme_media_unit_stat_log"],[0,4,1,"c.nvme_metadata_element_desc","nvme_metadata_element_desc"],[0,1,1,"c.nvme_mi_css","nvme_mi_css"],[0,1,1,"c.nvme_mi_csts","nvme_mi_csts"],[0,4,1,"c.nvme_mi_ctrl_health_status","nvme_mi_ctrl_health_status"],[0,1,1,"c.nvme_mi_cwarn","nvme_mi_cwarn"],[0,1,1,"c.nvme_mi_elem","nvme_mi_elem"],[0,4,1,"c.nvme_mi_nvm_ss_health_status","nvme_mi_nvm_ss_health_status"],[0,4,1,"c.nvme_mi_osc","nvme_mi_osc"],[0,4,1,"c.nvme_mi_port_pcie","nvme_mi_port_pcie"],[0,4,1,"c.nvme_mi_port_smb","nvme_mi_port_smb"],[0,4,1,"c.nvme_mi_read_ctrl_info","nvme_mi_read_ctrl_info"],[0,4,1,"c.nvme_mi_read_nvm_ss_info","nvme_mi_read_nvm_ss_info"],[0,4,1,"c.nvme_mi_read_port_info","nvme_mi_read_port_info"],[0,4,1,"c.nvme_mi_read_sc_list","nvme_mi_read_sc_list"],[0,4,1,"c.nvme_mi_vpd_hdr","nvme_mi_vpd_hdr"],[0,4,1,"c.nvme_mi_vpd_mr_common","nvme_mi_vpd_mr_common"],[0,4,1,"c.nvme_mi_vpd_mra","nvme_mi_vpd_mra"],[0,4,1,"c.nvme_mi_vpd_ppmra","nvme_mi_vpd_ppmra"],[0,4,1,"c.nvme_mi_vpd_telem","nvme_mi_vpd_telem"],[0,4,1,"c.nvme_mi_vpd_tra","nvme_mi_vpd_tra"],[0,2,1,"c.nvme_namespace_attach_ctrls","nvme_namespace_attach_ctrls"],[0,2,1,"c.nvme_namespace_detach_ctrls","nvme_namespace_detach_ctrls"],[0,2,1,"c.nvme_namespace_filter","nvme_namespace_filter"],[0,1,1,"c.nvme_nd_ns_fpi","nvme_nd_ns_fpi"],[0,2,1,"c.nvme_next_host","nvme_next_host"],[0,2,1,"c.nvme_next_subsystem","nvme_next_subsystem"],[0,2,1,"c.nvme_ns_attach","nvme_ns_attach"],[0,4,1,"c.nvme_ns_attach_args","nvme_ns_attach_args"],[0,2,1,"c.nvme_ns_attach_ctrls","nvme_ns_attach_ctrls"],[0,1,1,"c.nvme_ns_attach_sel","nvme_ns_attach_sel"],[0,2,1,"c.nvme_ns_compare","nvme_ns_compare"],[0,2,1,"c.nvme_ns_detach_ctrls","nvme_ns_detach_ctrls"],[0,2,1,"c.nvme_ns_flush","nvme_ns_flush"],[0,2,1,"c.nvme_ns_get_csi","nvme_ns_get_csi"],[0,2,1,"c.nvme_ns_get_ctrl","nvme_ns_get_ctrl"],[0,2,1,"c.nvme_ns_get_eui64","nvme_ns_get_eui64"],[0,2,1,"c.nvme_ns_get_fd","nvme_ns_get_fd"],[0,2,1,"c.nvme_ns_get_firmware","nvme_ns_get_firmware"],[0,2,1,"c.nvme_ns_get_generic_name","nvme_ns_get_generic_name"],[0,2,1,"c.nvme_ns_get_lba_count","nvme_ns_get_lba_count"],[0,2,1,"c.nvme_ns_get_lba_size","nvme_ns_get_lba_size"],[0,2,1,"c.nvme_ns_get_lba_util","nvme_ns_get_lba_util"],[0,2,1,"c.nvme_ns_get_meta_size","nvme_ns_get_meta_size"],[0,2,1,"c.nvme_ns_get_model","nvme_ns_get_model"],[0,2,1,"c.nvme_ns_get_name","nvme_ns_get_name"],[0,2,1,"c.nvme_ns_get_nguid","nvme_ns_get_nguid"],[0,2,1,"c.nvme_ns_get_nsid","nvme_ns_get_nsid"],[0,2,1,"c.nvme_ns_get_serial","nvme_ns_get_serial"],[0,2,1,"c.nvme_ns_get_subsystem","nvme_ns_get_subsystem"],[0,2,1,"c.nvme_ns_get_sysfs_dir","nvme_ns_get_sysfs_dir"],[0,2,1,"c.nvme_ns_get_uuid","nvme_ns_get_uuid"],[0,4,1,"c.nvme_ns_id_desc","nvme_ns_id_desc"],[0,1,1,"c.nvme_ns_id_desc_nidt","nvme_ns_id_desc_nidt"],[0,2,1,"c.nvme_ns_identify","nvme_ns_identify"],[0,2,1,"c.nvme_ns_identify_descs","nvme_ns_identify_descs"],[0,4,1,"c.nvme_ns_list","nvme_ns_list"],[0,1,1,"c.nvme_ns_metadata_type","nvme_ns_metadata_type"],[0,2,1,"c.nvme_ns_mgmt","nvme_ns_mgmt"],[0,4,1,"c.nvme_ns_mgmt_args","nvme_ns_mgmt_args"],[0,2,1,"c.nvme_ns_mgmt_create","nvme_ns_mgmt_create"],[0,2,1,"c.nvme_ns_mgmt_delete","nvme_ns_mgmt_delete"],[0,1,1,"c.nvme_ns_mgmt_sel","nvme_ns_mgmt_sel"],[0,2,1,"c.nvme_ns_read","nvme_ns_read"],[0,2,1,"c.nvme_ns_rescan","nvme_ns_rescan"],[0,2,1,"c.nvme_ns_verify","nvme_ns_verify"],[0,2,1,"c.nvme_ns_write","nvme_ns_write"],[0,1,1,"c.nvme_ns_write_protect_cfg","nvme_ns_write_protect_cfg"],[0,2,1,"c.nvme_ns_write_uncorrectable","nvme_ns_write_uncorrectable"],[0,2,1,"c.nvme_ns_write_zeros","nvme_ns_write_zeros"],[0,4,1,"c.nvme_nss_hw_err_event","nvme_nss_hw_err_event"],[0,4,1,"c.nvme_nvm_id_ns","nvme_nvm_id_ns"],[0,2,1,"c.nvme_nvm_identify_ctrl","nvme_nvm_identify_ctrl"],[0,1,1,"c.nvme_nvmeset_pl_status","nvme_nvmeset_pl_status"],[0,4,1,"c.nvme_nvmset_attr","nvme_nvmset_attr"],[0,1,1,"c.nvme_nvmset_pl_events","nvme_nvmset_pl_events"],[0,4,1,"c.nvme_nvmset_predictable_lat_log","nvme_nvmset_predictable_lat_log"],[0,2,1,"c.nvme_open","nvme_open"],[0,4,1,"c.nvme_passthru_cmd","nvme_passthru_cmd"],[0,4,1,"c.nvme_passthru_cmd64","nvme_passthru_cmd64"],[0,2,1,"c.nvme_path_get_ana_state","nvme_path_get_ana_state"],[0,2,1,"c.nvme_path_get_ctrl","nvme_path_get_ctrl"],[0,2,1,"c.nvme_path_get_name","nvme_path_get_name"],[0,2,1,"c.nvme_path_get_ns","nvme_path_get_ns"],[0,2,1,"c.nvme_path_get_sysfs_dir","nvme_path_get_sysfs_dir"],[0,2,1,"c.nvme_paths_filter","nvme_paths_filter"],[0,4,1,"c.nvme_persistent_event_entry","nvme_persistent_event_entry"],[0,4,1,"c.nvme_persistent_event_log","nvme_persistent_event_log"],[0,1,1,"c.nvme_persistent_event_types","nvme_persistent_event_types"],[0,1,1,"c.nvme_pevent_log_action","nvme_pevent_log_action"],[0,4,1,"c.nvme_plm_config","nvme_plm_config"],[0,2,1,"c.nvme_pmr_size","nvme_pmr_size"],[0,2,1,"c.nvme_pmr_throughput","nvme_pmr_throughput"],[0,4,1,"c.nvme_power_on_reset_info_list","nvme_power_on_reset_info_list"],[0,4,1,"c.nvme_primary_ctrl_cap","nvme_primary_ctrl_cap"],[0,1,1,"c.nvme_psd_flags","nvme_psd_flags"],[0,2,1,"c.nvme_psd_power_scale","nvme_psd_power_scale"],[0,1,1,"c.nvme_psd_ps","nvme_psd_ps"],[0,1,1,"c.nvme_psd_workload","nvme_psd_workload"],[0,2,1,"c.nvme_read","nvme_read"],[0,2,1,"c.nvme_read_config","nvme_read_config"],[0,2,1,"c.nvme_refresh_topology","nvme_refresh_topology"],[0,1,1,"c.nvme_register_offsets","nvme_register_offsets"],[0,4,1,"c.nvme_registered_ctrl","nvme_registered_ctrl"],[0,4,1,"c.nvme_registered_ctrl_ext","nvme_registered_ctrl_ext"],[0,2,1,"c.nvme_rescan_ctrl","nvme_rescan_ctrl"],[0,2,1,"c.nvme_resv_acquire","nvme_resv_acquire"],[0,4,1,"c.nvme_resv_acquire_args","nvme_resv_acquire_args"],[0,1,1,"c.nvme_resv_cptpl","nvme_resv_cptpl"],[0,4,1,"c.nvme_resv_notification_log","nvme_resv_notification_log"],[0,1,1,"c.nvme_resv_notify_rnlpt","nvme_resv_notify_rnlpt"],[0,1,1,"c.nvme_resv_racqa","nvme_resv_racqa"],[0,2,1,"c.nvme_resv_register","nvme_resv_register"],[0,4,1,"c.nvme_resv_register_args","nvme_resv_register_args"],[0,2,1,"c.nvme_resv_release","nvme_resv_release"],[0,4,1,"c.nvme_resv_release_args","nvme_resv_release_args"],[0,2,1,"c.nvme_resv_report","nvme_resv_report"],[0,4,1,"c.nvme_resv_report_args","nvme_resv_report_args"],[0,1,1,"c.nvme_resv_rrega","nvme_resv_rrega"],[0,1,1,"c.nvme_resv_rrela","nvme_resv_rrela"],[0,1,1,"c.nvme_resv_rtype","nvme_resv_rtype"],[0,4,1,"c.nvme_resv_status","nvme_resv_status"],[0,4,1,"c.nvme_sanitize_compln_event","nvme_sanitize_compln_event"],[0,4,1,"c.nvme_sanitize_log_page","nvme_sanitize_log_page"],[0,2,1,"c.nvme_sanitize_nvm","nvme_sanitize_nvm"],[0,4,1,"c.nvme_sanitize_nvm_args","nvme_sanitize_nvm_args"],[0,1,1,"c.nvme_sanitize_sanact","nvme_sanitize_sanact"],[0,1,1,"c.nvme_sanitize_sstat","nvme_sanitize_sstat"],[0,4,1,"c.nvme_sanitize_start_event","nvme_sanitize_start_event"],[0,2,1,"c.nvme_scan","nvme_scan"],[0,2,1,"c.nvme_scan_ctrl","nvme_scan_ctrl"],[0,2,1,"c.nvme_scan_ctrl_namespace_paths","nvme_scan_ctrl_namespace_paths"],[0,2,1,"c.nvme_scan_ctrl_namespaces","nvme_scan_ctrl_namespaces"],[0,2,1,"c.nvme_scan_ctrls","nvme_scan_ctrls"],[0,2,1,"c.nvme_scan_namespace","nvme_scan_namespace"],[0,2,1,"c.nvme_scan_subsystem_namespaces","nvme_scan_subsystem_namespaces"],[0,2,1,"c.nvme_scan_subsystems","nvme_scan_subsystems"],[0,2,1,"c.nvme_scan_topology","nvme_scan_topology"],[0,4,1,"c.nvme_secondary_ctrl","nvme_secondary_ctrl"],[0,4,1,"c.nvme_secondary_ctrl_list","nvme_secondary_ctrl_list"],[0,2,1,"c.nvme_security_receive","nvme_security_receive"],[0,4,1,"c.nvme_security_receive_args","nvme_security_receive_args"],[0,2,1,"c.nvme_security_send","nvme_security_send"],[0,4,1,"c.nvme_security_send_args","nvme_security_send_args"],[0,4,1,"c.nvme_self_test_log","nvme_self_test_log"],[0,4,1,"c.nvme_set_feature_event","nvme_set_feature_event"],[0,2,1,"c.nvme_set_features","nvme_set_features"],[0,2,1,"c.nvme_set_features_arbitration","nvme_set_features_arbitration"],[0,4,1,"c.nvme_set_features_args","nvme_set_features_args"],[0,2,1,"c.nvme_set_features_async_event","nvme_set_features_async_event"],[0,2,1,"c.nvme_set_features_auto_pst","nvme_set_features_auto_pst"],[0,2,1,"c.nvme_set_features_data","nvme_set_features_data"],[0,2,1,"c.nvme_set_features_endurance_evt_cfg","nvme_set_features_endurance_evt_cfg"],[0,2,1,"c.nvme_set_features_err_recovery","nvme_set_features_err_recovery"],[0,2,1,"c.nvme_set_features_hctm","nvme_set_features_hctm"],[0,2,1,"c.nvme_set_features_host_behavior","nvme_set_features_host_behavior"],[0,2,1,"c.nvme_set_features_host_id","nvme_set_features_host_id"],[0,2,1,"c.nvme_set_features_irq_coalesce","nvme_set_features_irq_coalesce"],[0,2,1,"c.nvme_set_features_irq_config","nvme_set_features_irq_config"],[0,2,1,"c.nvme_set_features_lba_range","nvme_set_features_lba_range"],[0,2,1,"c.nvme_set_features_lba_sts_interval","nvme_set_features_lba_sts_interval"],[0,2,1,"c.nvme_set_features_nopsc","nvme_set_features_nopsc"],[0,2,1,"c.nvme_set_features_plm_config","nvme_set_features_plm_config"],[0,2,1,"c.nvme_set_features_plm_window","nvme_set_features_plm_window"],[0,2,1,"c.nvme_set_features_power_mgmt","nvme_set_features_power_mgmt"],[0,2,1,"c.nvme_set_features_resv_mask","nvme_set_features_resv_mask"],[0,2,1,"c.nvme_set_features_resv_persist","nvme_set_features_resv_persist"],[0,2,1,"c.nvme_set_features_rrl","nvme_set_features_rrl"],[0,2,1,"c.nvme_set_features_sanitize","nvme_set_features_sanitize"],[0,2,1,"c.nvme_set_features_simple","nvme_set_features_simple"],[0,2,1,"c.nvme_set_features_sw_progress","nvme_set_features_sw_progress"],[0,2,1,"c.nvme_set_features_temp_thresh","nvme_set_features_temp_thresh"],[0,2,1,"c.nvme_set_features_timestamp","nvme_set_features_timestamp"],[0,2,1,"c.nvme_set_features_volatile_wc","nvme_set_features_volatile_wc"],[0,2,1,"c.nvme_set_features_write_atomic","nvme_set_features_write_atomic"],[0,2,1,"c.nvme_set_features_write_protect","nvme_set_features_write_protect"],[0,2,1,"c.nvme_set_property","nvme_set_property"],[0,4,1,"c.nvme_set_property_args","nvme_set_property_args"],[0,1,1,"c.nvme_smart_crit","nvme_smart_crit"],[0,1,1,"c.nvme_smart_egcw","nvme_smart_egcw"],[0,4,1,"c.nvme_smart_log","nvme_smart_log"],[0,1,1,"c.nvme_st_code","nvme_st_code"],[0,1,1,"c.nvme_st_curr_op","nvme_st_curr_op"],[0,4,1,"c.nvme_st_result","nvme_st_result"],[0,1,1,"c.nvme_st_valid_diag_info","nvme_st_valid_diag_info"],[0,2,1,"c.nvme_status_code","nvme_status_code"],[0,2,1,"c.nvme_status_code_type","nvme_status_code_type"],[0,1,1,"c.nvme_status_field","nvme_status_field"],[0,1,1,"c.nvme_status_result","nvme_status_result"],[0,2,1,"c.nvme_status_to_errno","nvme_status_to_errno"],[0,2,1,"c.nvme_status_to_string","nvme_status_to_string"],[0,4,1,"c.nvme_streams_directive_params","nvme_streams_directive_params"],[0,4,1,"c.nvme_streams_directive_status","nvme_streams_directive_status"],[0,2,1,"c.nvme_submit_admin_passthru","nvme_submit_admin_passthru"],[0,2,1,"c.nvme_submit_admin_passthru64","nvme_submit_admin_passthru64"],[0,2,1,"c.nvme_submit_io_passthru","nvme_submit_io_passthru"],[0,2,1,"c.nvme_submit_io_passthru64","nvme_submit_io_passthru64"],[0,2,1,"c.nvme_subsys_filter","nvme_subsys_filter"],[0,1,1,"c.nvme_subsys_type","nvme_subsys_type"],[0,2,1,"c.nvme_subsystem_first_ctrl","nvme_subsystem_first_ctrl"],[0,2,1,"c.nvme_subsystem_first_ns","nvme_subsystem_first_ns"],[0,0,1,"c.nvme_subsystem_for_each_ctrl","nvme_subsystem_for_each_ctrl"],[0,0,1,"c.nvme_subsystem_for_each_ctrl_safe","nvme_subsystem_for_each_ctrl_safe"],[0,0,1,"c.nvme_subsystem_for_each_ns","nvme_subsystem_for_each_ns"],[0,0,1,"c.nvme_subsystem_for_each_ns_safe","nvme_subsystem_for_each_ns_safe"],[0,2,1,"c.nvme_subsystem_get_host","nvme_subsystem_get_host"],[0,2,1,"c.nvme_subsystem_get_name","nvme_subsystem_get_name"],[0,2,1,"c.nvme_subsystem_get_nqn","nvme_subsystem_get_nqn"],[0,2,1,"c.nvme_subsystem_get_sysfs_dir","nvme_subsystem_get_sysfs_dir"],[0,2,1,"c.nvme_subsystem_get_type","nvme_subsystem_get_type"],[0,2,1,"c.nvme_subsystem_lookup_namespace","nvme_subsystem_lookup_namespace"],[0,2,1,"c.nvme_subsystem_next_ctrl","nvme_subsystem_next_ctrl"],[0,2,1,"c.nvme_subsystem_next_ns","nvme_subsystem_next_ns"],[0,2,1,"c.nvme_subsystem_reset","nvme_subsystem_reset"],[0,4,1,"c.nvme_supported_cap_config_list_log","nvme_supported_cap_config_list_log"],[0,4,1,"c.nvme_supported_log_pages","nvme_supported_log_pages"],[0,4,1,"c.nvme_telemetry_log","nvme_telemetry_log"],[0,4,1,"c.nvme_thermal_exc_event","nvme_thermal_exc_event"],[0,4,1,"c.nvme_time_stamp_change_event","nvme_time_stamp_change_event"],[0,4,1,"c.nvme_timestamp","nvme_timestamp"],[0,2,1,"c.nvme_unlink_ctrl","nvme_unlink_ctrl"],[0,2,1,"c.nvme_update_config","nvme_update_config"],[0,2,1,"c.nvme_verify","nvme_verify"],[0,1,1,"c.nvme_virt_mgmt_act","nvme_virt_mgmt_act"],[0,1,1,"c.nvme_virt_mgmt_rt","nvme_virt_mgmt_rt"],[0,2,1,"c.nvme_virtual_mgmt","nvme_virtual_mgmt"],[0,4,1,"c.nvme_virtual_mgmt_args","nvme_virtual_mgmt_args"],[0,2,1,"c.nvme_write","nvme_write"],[0,2,1,"c.nvme_write_uncorrectable","nvme_write_uncorrectable"],[0,2,1,"c.nvme_write_zeros","nvme_write_zeros"],[0,2,1,"c.nvme_zns_append","nvme_zns_append"],[0,4,1,"c.nvme_zns_append_args","nvme_zns_append_args"],[0,4,1,"c.nvme_zns_changed_zone_log","nvme_zns_changed_zone_log"],[0,4,1,"c.nvme_zns_desc","nvme_zns_desc"],[0,4,1,"c.nvme_zns_id_ctrl","nvme_zns_id_ctrl"],[0,4,1,"c.nvme_zns_id_ns","nvme_zns_id_ns"],[0,2,1,"c.nvme_zns_identify_ctrl","nvme_zns_identify_ctrl"],[0,2,1,"c.nvme_zns_identify_ns","nvme_zns_identify_ns"],[0,4,1,"c.nvme_zns_lbafe","nvme_zns_lbafe"],[0,2,1,"c.nvme_zns_mgmt_recv","nvme_zns_mgmt_recv"],[0,4,1,"c.nvme_zns_mgmt_recv_args","nvme_zns_mgmt_recv_args"],[0,2,1,"c.nvme_zns_mgmt_send","nvme_zns_mgmt_send"],[0,4,1,"c.nvme_zns_mgmt_send_args","nvme_zns_mgmt_send_args"],[0,1,1,"c.nvme_zns_recv_action","nvme_zns_recv_action"],[0,1,1,"c.nvme_zns_report_options","nvme_zns_report_options"],[0,2,1,"c.nvme_zns_report_zones","nvme_zns_report_zones"],[0,1,1,"c.nvme_zns_send_action","nvme_zns_send_action"],[0,1,1,"c.nvme_zns_za","nvme_zns_za"],[0,1,1,"c.nvme_zns_zs","nvme_zns_zs"],[0,1,1,"c.nvme_zns_zt","nvme_zns_zt"],[0,4,1,"c.nvme_zone_report","nvme_zone_report"],[0,2,1,"c.nvmf_add_ctrl","nvmf_add_ctrl"],[0,1,1,"c.nvmf_addr_family","nvmf_addr_family"],[0,2,1,"c.nvmf_adrfam_str","nvmf_adrfam_str"],[0,2,1,"c.nvmf_cms_str","nvmf_cms_str"],[0,4,1,"c.nvmf_connect_data","nvmf_connect_data"],[0,2,1,"c.nvmf_connect_disc_entry","nvmf_connect_disc_entry"],[0,2,1,"c.nvmf_default_config","nvmf_default_config"],[0,1,1,"c.nvmf_disc_eflags","nvmf_disc_eflags"],[0,4,1,"c.nvmf_disc_log_entry","nvmf_disc_log_entry"],[0,4,1,"c.nvmf_discovery_log","nvmf_discovery_log"],[0,2,1,"c.nvmf_eflags_str","nvmf_eflags_str"],[0,2,1,"c.nvmf_get_discovery_log","nvmf_get_discovery_log"],[0,2,1,"c.nvmf_hostid_from_file","nvmf_hostid_from_file"],[0,2,1,"c.nvmf_hostnqn_from_file","nvmf_hostnqn_from_file"],[0,2,1,"c.nvmf_hostnqn_generate","nvmf_hostnqn_generate"],[0,2,1,"c.nvmf_prtype_str","nvmf_prtype_str"],[0,2,1,"c.nvmf_qptype_str","nvmf_qptype_str"],[0,1,1,"c.nvmf_rdma_cms","nvmf_rdma_cms"],[0,1,1,"c.nvmf_rdma_prtype","nvmf_rdma_prtype"],[0,1,1,"c.nvmf_rdma_qptype","nvmf_rdma_qptype"],[0,2,1,"c.nvmf_sectype_str","nvmf_sectype_str"],[0,2,1,"c.nvmf_subtype_str","nvmf_subtype_str"],[0,1,1,"c.nvmf_tcp_sectype","nvmf_tcp_sectype"],[0,1,1,"c.nvmf_treq","nvmf_treq"],[0,2,1,"c.nvmf_treq_str","nvmf_treq_str"],[0,1,1,"c.nvmf_trtype","nvmf_trtype"],[0,2,1,"c.nvmf_trtype_str","nvmf_trtype_str"]],nvme_admin_passthru64:[[0,3,1,"c.nvme_admin_passthru64","cdw10"],[0,3,1,"c.nvme_admin_passthru64","cdw11"],[0,3,1,"c.nvme_admin_passthru64","cdw12"],[0,3,1,"c.nvme_admin_passthru64","cdw13"],[0,3,1,"c.nvme_admin_passthru64","cdw14"],[0,3,1,"c.nvme_admin_passthru64","cdw15"],[0,3,1,"c.nvme_admin_passthru64","cdw2"],[0,3,1,"c.nvme_admin_passthru64","cdw3"],[0,3,1,"c.nvme_admin_passthru64","data"],[0,3,1,"c.nvme_admin_passthru64","data_len"],[0,3,1,"c.nvme_admin_passthru64","fd"],[0,3,1,"c.nvme_admin_passthru64","flags"],[0,3,1,"c.nvme_admin_passthru64","metadata"],[0,3,1,"c.nvme_admin_passthru64","metadata_len"],[0,3,1,"c.nvme_admin_passthru64","nsid"],[0,3,1,"c.nvme_admin_passthru64","opcode"],[0,3,1,"c.nvme_admin_passthru64","result"],[0,3,1,"c.nvme_admin_passthru64","rsvd"],[0,3,1,"c.nvme_admin_passthru64","timeout_ms"]],nvme_admin_passthru:[[0,3,1,"c.nvme_admin_passthru","cdw10"],[0,3,1,"c.nvme_admin_passthru","cdw11"],[0,3,1,"c.nvme_admin_passthru","cdw12"],[0,3,1,"c.nvme_admin_passthru","cdw13"],[0,3,1,"c.nvme_admin_passthru","cdw14"],[0,3,1,"c.nvme_admin_passthru","cdw15"],[0,3,1,"c.nvme_admin_passthru","cdw2"],[0,3,1,"c.nvme_admin_passthru","cdw3"],[0,3,1,"c.nvme_admin_passthru","data"],[0,3,1,"c.nvme_admin_passthru","data_len"],[0,3,1,"c.nvme_admin_passthru","fd"],[0,3,1,"c.nvme_admin_passthru","flags"],[0,3,1,"c.nvme_admin_passthru","metadata"],[0,3,1,"c.nvme_admin_passthru","metadata_len"],[0,3,1,"c.nvme_admin_passthru","nsid"],[0,3,1,"c.nvme_admin_passthru","opcode"],[0,3,1,"c.nvme_admin_passthru","result"],[0,3,1,"c.nvme_admin_passthru","rsvd"],[0,3,1,"c.nvme_admin_passthru","timeout_ms"]],nvme_capacity_mgmt:[[0,3,1,"c.nvme_capacity_mgmt","args"]],nvme_chomp:[[0,3,1,"c.nvme_chomp","l"],[0,3,1,"c.nvme_chomp","s"]],nvme_cmb_size:[[0,3,1,"c.nvme_cmb_size","cmbsz"]],nvme_compare:[[0,3,1,"c.nvme_compare","args"]],nvme_copy:[[0,3,1,"c.nvme_copy","args"]],nvme_create_ctrl:[[0,3,1,"c.nvme_create_ctrl","host_iface"],[0,3,1,"c.nvme_create_ctrl","host_traddr"],[0,3,1,"c.nvme_create_ctrl","r"],[0,3,1,"c.nvme_create_ctrl","subsysnqn"],[0,3,1,"c.nvme_create_ctrl","traddr"],[0,3,1,"c.nvme_create_ctrl","transport"],[0,3,1,"c.nvme_create_ctrl","trsvcid"]],nvme_create_root:[[0,3,1,"c.nvme_create_root","fp"],[0,3,1,"c.nvme_create_root","log_level"]],nvme_ctrl_first_ns:[[0,3,1,"c.nvme_ctrl_first_ns","c"]],nvme_ctrl_first_path:[[0,3,1,"c.nvme_ctrl_first_path","c"]],nvme_ctrl_get_address:[[0,3,1,"c.nvme_ctrl_get_address","c"]],nvme_ctrl_get_config:[[0,3,1,"c.nvme_ctrl_get_config","c"]],nvme_ctrl_get_dhchap_key:[[0,3,1,"c.nvme_ctrl_get_dhchap_key","c"]],nvme_ctrl_get_fd:[[0,3,1,"c.nvme_ctrl_get_fd","c"]],nvme_ctrl_get_firmware:[[0,3,1,"c.nvme_ctrl_get_firmware","c"]],nvme_ctrl_get_host_iface:[[0,3,1,"c.nvme_ctrl_get_host_iface","c"]],nvme_ctrl_get_host_traddr:[[0,3,1,"c.nvme_ctrl_get_host_traddr","c"]],nvme_ctrl_get_model:[[0,3,1,"c.nvme_ctrl_get_model","c"]],nvme_ctrl_get_name:[[0,3,1,"c.nvme_ctrl_get_name","c"]],nvme_ctrl_get_numa_node:[[0,3,1,"c.nvme_ctrl_get_numa_node","c"]],nvme_ctrl_get_queue_count:[[0,3,1,"c.nvme_ctrl_get_queue_count","c"]],nvme_ctrl_get_serial:[[0,3,1,"c.nvme_ctrl_get_serial","c"]],nvme_ctrl_get_sqsize:[[0,3,1,"c.nvme_ctrl_get_sqsize","c"]],nvme_ctrl_get_state:[[0,3,1,"c.nvme_ctrl_get_state","c"]],nvme_ctrl_get_subsysnqn:[[0,3,1,"c.nvme_ctrl_get_subsysnqn","c"]],nvme_ctrl_get_subsystem:[[0,3,1,"c.nvme_ctrl_get_subsystem","c"]],nvme_ctrl_get_sysfs_dir:[[0,3,1,"c.nvme_ctrl_get_sysfs_dir","c"]],nvme_ctrl_get_traddr:[[0,3,1,"c.nvme_ctrl_get_traddr","c"]],nvme_ctrl_get_transport:[[0,3,1,"c.nvme_ctrl_get_transport","c"]],nvme_ctrl_get_trsvcid:[[0,3,1,"c.nvme_ctrl_get_trsvcid","c"]],nvme_ctrl_identify:[[0,3,1,"c.nvme_ctrl_identify","c"],[0,3,1,"c.nvme_ctrl_identify","id"]],nvme_ctrl_is_discovered:[[0,3,1,"c.nvme_ctrl_is_discovered","c"]],nvme_ctrl_is_discovery_ctrl:[[0,3,1,"c.nvme_ctrl_is_discovery_ctrl","c"]],nvme_ctrl_is_persistent:[[0,3,1,"c.nvme_ctrl_is_persistent","c"]],nvme_ctrl_next_ns:[[0,3,1,"c.nvme_ctrl_next_ns","c"],[0,3,1,"c.nvme_ctrl_next_ns","n"]],nvme_ctrl_next_path:[[0,3,1,"c.nvme_ctrl_next_path","c"],[0,3,1,"c.nvme_ctrl_next_path","p"]],nvme_ctrl_reset:[[0,3,1,"c.nvme_ctrl_reset","fd"]],nvme_ctrl_set_dhchap_key:[[0,3,1,"c.nvme_ctrl_set_dhchap_key","c"],[0,3,1,"c.nvme_ctrl_set_dhchap_key","key"]],nvme_ctrl_set_discovered:[[0,3,1,"c.nvme_ctrl_set_discovered","c"],[0,3,1,"c.nvme_ctrl_set_discovered","discovered"]],nvme_ctrl_set_discovery_ctrl:[[0,3,1,"c.nvme_ctrl_set_discovery_ctrl","c"],[0,3,1,"c.nvme_ctrl_set_discovery_ctrl","discovery"]],nvme_ctrl_set_persistent:[[0,3,1,"c.nvme_ctrl_set_persistent","c"],[0,3,1,"c.nvme_ctrl_set_persistent","persistent"]],nvme_ctrls_filter:[[0,3,1,"c.nvme_ctrls_filter","d"]],nvme_default_host:[[0,3,1,"c.nvme_default_host","r"]],nvme_dev_self_test:[[0,3,1,"c.nvme_dev_self_test","args"]],nvme_directive_recv:[[0,3,1,"c.nvme_directive_recv","args"]],nvme_directive_recv_identify_parameters:[[0,3,1,"c.nvme_directive_recv_identify_parameters","fd"],[0,3,1,"c.nvme_directive_recv_identify_parameters","id"],[0,3,1,"c.nvme_directive_recv_identify_parameters","nsid"]],nvme_directive_recv_stream_allocate:[[0,3,1,"c.nvme_directive_recv_stream_allocate","fd"],[0,3,1,"c.nvme_directive_recv_stream_allocate","nsid"],[0,3,1,"c.nvme_directive_recv_stream_allocate","nsr"],[0,3,1,"c.nvme_directive_recv_stream_allocate","result"]],nvme_directive_recv_stream_parameters:[[0,3,1,"c.nvme_directive_recv_stream_parameters","fd"],[0,3,1,"c.nvme_directive_recv_stream_parameters","nsid"],[0,3,1,"c.nvme_directive_recv_stream_parameters","parms"]],nvme_directive_recv_stream_status:[[0,3,1,"c.nvme_directive_recv_stream_status","fd"],[0,3,1,"c.nvme_directive_recv_stream_status","id"],[0,3,1,"c.nvme_directive_recv_stream_status","nr_entries"],[0,3,1,"c.nvme_directive_recv_stream_status","nsid"]],nvme_directive_send:[[0,3,1,"c.nvme_directive_send","args"]],nvme_directive_send_id_endir:[[0,3,1,"c.nvme_directive_send_id_endir","dtype"],[0,3,1,"c.nvme_directive_send_id_endir","endir"],[0,3,1,"c.nvme_directive_send_id_endir","fd"],[0,3,1,"c.nvme_directive_send_id_endir","id"],[0,3,1,"c.nvme_directive_send_id_endir","nsid"]],nvme_directive_send_stream_release_identifier:[[0,3,1,"c.nvme_directive_send_stream_release_identifier","fd"],[0,3,1,"c.nvme_directive_send_stream_release_identifier","nsid"],[0,3,1,"c.nvme_directive_send_stream_release_identifier","stream_id"]],nvme_directive_send_stream_release_resource:[[0,3,1,"c.nvme_directive_send_stream_release_resource","fd"],[0,3,1,"c.nvme_directive_send_stream_release_resource","nsid"]],nvme_disconnect_ctrl:[[0,3,1,"c.nvme_disconnect_ctrl","c"]],nvme_dsm:[[0,3,1,"c.nvme_dsm","args"]],nvme_dump_config:[[0,3,1,"c.nvme_dump_config","r"]],nvme_errno_to_string:[[0,3,1,"c.nvme_errno_to_string","err"]],nvme_first_host:[[0,3,1,"c.nvme_first_host","r"]],nvme_first_subsystem:[[0,3,1,"c.nvme_first_subsystem","h"]],nvme_flush:[[0,3,1,"c.nvme_flush","fd"],[0,3,1,"c.nvme_flush","nsid"]],nvme_format_nvm:[[0,3,1,"c.nvme_format_nvm","args"]],nvme_free_ctrl:[[0,3,1,"c.nvme_free_ctrl","c"]],nvme_free_host:[[0,3,1,"c.nvme_free_host","h"]],nvme_free_ns:[[0,3,1,"c.nvme_free_ns","n"]],nvme_free_subsystem:[[0,3,1,"c.nvme_free_subsystem","s"]],nvme_free_tree:[[0,3,1,"c.nvme_free_tree","r"]],nvme_fw_commit:[[0,3,1,"c.nvme_fw_commit","args"]],nvme_fw_download:[[0,3,1,"c.nvme_fw_download","args"]],nvme_fw_download_seq:[[0,3,1,"c.nvme_fw_download_seq","buf"],[0,3,1,"c.nvme_fw_download_seq","fd"],[0,3,1,"c.nvme_fw_download_seq","offset"],[0,3,1,"c.nvme_fw_download_seq","size"],[0,3,1,"c.nvme_fw_download_seq","xfer"]],nvme_gen_dhchap_key:[[0,3,1,"c.nvme_gen_dhchap_key","hmac"],[0,3,1,"c.nvme_gen_dhchap_key","hostnqn"],[0,3,1,"c.nvme_gen_dhchap_key","key"],[0,3,1,"c.nvme_gen_dhchap_key","key_len"],[0,3,1,"c.nvme_gen_dhchap_key","secret"]],nvme_get_ana_log_len:[[0,3,1,"c.nvme_get_ana_log_len","analen"],[0,3,1,"c.nvme_get_ana_log_len","fd"]],nvme_get_attr:[[0,3,1,"c.nvme_get_attr","attr"],[0,3,1,"c.nvme_get_attr","d"]],nvme_get_ctrl_attr:[[0,3,1,"c.nvme_get_ctrl_attr","attr"],[0,3,1,"c.nvme_get_ctrl_attr","c"]],nvme_get_ctrl_telemetry:[[0,3,1,"c.nvme_get_ctrl_telemetry","fd"],[0,3,1,"c.nvme_get_ctrl_telemetry","log"],[0,3,1,"c.nvme_get_ctrl_telemetry","rae"]],nvme_get_directive_receive_length:[[0,3,1,"c.nvme_get_directive_receive_length","doper"],[0,3,1,"c.nvme_get_directive_receive_length","dtype"],[0,3,1,"c.nvme_get_directive_receive_length","len"]],nvme_get_feature_length:[[0,3,1,"c.nvme_get_feature_length","cdw11"],[0,3,1,"c.nvme_get_feature_length","fid"],[0,3,1,"c.nvme_get_feature_length","len"]],nvme_get_features:[[0,3,1,"c.nvme_get_features","args"]],nvme_get_features_arbitration:[[0,3,1,"c.nvme_get_features_arbitration","fd"],[0,3,1,"c.nvme_get_features_arbitration","result"],[0,3,1,"c.nvme_get_features_arbitration","sel"]],nvme_get_features_async_event:[[0,3,1,"c.nvme_get_features_async_event","fd"],[0,3,1,"c.nvme_get_features_async_event","result"],[0,3,1,"c.nvme_get_features_async_event","sel"]],nvme_get_features_auto_pst:[[0,3,1,"c.nvme_get_features_auto_pst","apst"],[0,3,1,"c.nvme_get_features_auto_pst","fd"],[0,3,1,"c.nvme_get_features_auto_pst","result"],[0,3,1,"c.nvme_get_features_auto_pst","sel"]],nvme_get_features_data:[[0,3,1,"c.nvme_get_features_data","data"],[0,3,1,"c.nvme_get_features_data","data_len"],[0,3,1,"c.nvme_get_features_data","fd"],[0,3,1,"c.nvme_get_features_data","fid"],[0,3,1,"c.nvme_get_features_data","nsid"],[0,3,1,"c.nvme_get_features_data","result"]],nvme_get_features_endurance_event_cfg:[[0,3,1,"c.nvme_get_features_endurance_event_cfg","endgid"],[0,3,1,"c.nvme_get_features_endurance_event_cfg","fd"],[0,3,1,"c.nvme_get_features_endurance_event_cfg","result"],[0,3,1,"c.nvme_get_features_endurance_event_cfg","sel"]],nvme_get_features_err_recovery:[[0,3,1,"c.nvme_get_features_err_recovery","fd"],[0,3,1,"c.nvme_get_features_err_recovery","result"],[0,3,1,"c.nvme_get_features_err_recovery","sel"]],nvme_get_features_hctm:[[0,3,1,"c.nvme_get_features_hctm","fd"],[0,3,1,"c.nvme_get_features_hctm","result"],[0,3,1,"c.nvme_get_features_hctm","sel"]],nvme_get_features_host_behavior:[[0,3,1,"c.nvme_get_features_host_behavior","data"],[0,3,1,"c.nvme_get_features_host_behavior","fd"],[0,3,1,"c.nvme_get_features_host_behavior","result"],[0,3,1,"c.nvme_get_features_host_behavior","sel"]],nvme_get_features_host_id:[[0,3,1,"c.nvme_get_features_host_id","exhid"],[0,3,1,"c.nvme_get_features_host_id","fd"],[0,3,1,"c.nvme_get_features_host_id","hostid"],[0,3,1,"c.nvme_get_features_host_id","len"],[0,3,1,"c.nvme_get_features_host_id","sel"]],nvme_get_features_host_mem_buf:[[0,3,1,"c.nvme_get_features_host_mem_buf","fd"],[0,3,1,"c.nvme_get_features_host_mem_buf","result"],[0,3,1,"c.nvme_get_features_host_mem_buf","sel"]],nvme_get_features_iocs_profile:[[0,3,1,"c.nvme_get_features_iocs_profile","fd"],[0,3,1,"c.nvme_get_features_iocs_profile","result"],[0,3,1,"c.nvme_get_features_iocs_profile","sel"]],nvme_get_features_irq_coalesce:[[0,3,1,"c.nvme_get_features_irq_coalesce","fd"],[0,3,1,"c.nvme_get_features_irq_coalesce","result"],[0,3,1,"c.nvme_get_features_irq_coalesce","sel"]],nvme_get_features_irq_config:[[0,3,1,"c.nvme_get_features_irq_config","fd"],[0,3,1,"c.nvme_get_features_irq_config","iv"],[0,3,1,"c.nvme_get_features_irq_config","result"],[0,3,1,"c.nvme_get_features_irq_config","sel"]],nvme_get_features_kato:[[0,3,1,"c.nvme_get_features_kato","fd"],[0,3,1,"c.nvme_get_features_kato","result"],[0,3,1,"c.nvme_get_features_kato","sel"]],nvme_get_features_lba_range:[[0,3,1,"c.nvme_get_features_lba_range","data"],[0,3,1,"c.nvme_get_features_lba_range","fd"],[0,3,1,"c.nvme_get_features_lba_range","result"],[0,3,1,"c.nvme_get_features_lba_range","sel"]],nvme_get_features_lba_sts_interval:[[0,3,1,"c.nvme_get_features_lba_sts_interval","fd"],[0,3,1,"c.nvme_get_features_lba_sts_interval","result"],[0,3,1,"c.nvme_get_features_lba_sts_interval","sel"]],nvme_get_features_nopsc:[[0,3,1,"c.nvme_get_features_nopsc","fd"],[0,3,1,"c.nvme_get_features_nopsc","result"],[0,3,1,"c.nvme_get_features_nopsc","sel"]],nvme_get_features_num_queues:[[0,3,1,"c.nvme_get_features_num_queues","fd"],[0,3,1,"c.nvme_get_features_num_queues","result"],[0,3,1,"c.nvme_get_features_num_queues","sel"]],nvme_get_features_plm_config:[[0,3,1,"c.nvme_get_features_plm_config","data"],[0,3,1,"c.nvme_get_features_plm_config","fd"],[0,3,1,"c.nvme_get_features_plm_config","nvmsetid"],[0,3,1,"c.nvme_get_features_plm_config","result"],[0,3,1,"c.nvme_get_features_plm_config","sel"]],nvme_get_features_plm_window:[[0,3,1,"c.nvme_get_features_plm_window","fd"],[0,3,1,"c.nvme_get_features_plm_window","nvmsetid"],[0,3,1,"c.nvme_get_features_plm_window","result"],[0,3,1,"c.nvme_get_features_plm_window","sel"]],nvme_get_features_power_mgmt:[[0,3,1,"c.nvme_get_features_power_mgmt","fd"],[0,3,1,"c.nvme_get_features_power_mgmt","result"],[0,3,1,"c.nvme_get_features_power_mgmt","sel"]],nvme_get_features_resv_mask:[[0,3,1,"c.nvme_get_features_resv_mask","fd"],[0,3,1,"c.nvme_get_features_resv_mask","result"],[0,3,1,"c.nvme_get_features_resv_mask","sel"]],nvme_get_features_resv_persist:[[0,3,1,"c.nvme_get_features_resv_persist","fd"],[0,3,1,"c.nvme_get_features_resv_persist","result"],[0,3,1,"c.nvme_get_features_resv_persist","sel"]],nvme_get_features_rrl:[[0,3,1,"c.nvme_get_features_rrl","fd"],[0,3,1,"c.nvme_get_features_rrl","result"],[0,3,1,"c.nvme_get_features_rrl","sel"]],nvme_get_features_sanitize:[[0,3,1,"c.nvme_get_features_sanitize","fd"],[0,3,1,"c.nvme_get_features_sanitize","result"],[0,3,1,"c.nvme_get_features_sanitize","sel"]],nvme_get_features_simple:[[0,3,1,"c.nvme_get_features_simple","fd"],[0,3,1,"c.nvme_get_features_simple","fid"],[0,3,1,"c.nvme_get_features_simple","nsid"],[0,3,1,"c.nvme_get_features_simple","result"]],nvme_get_features_sw_progress:[[0,3,1,"c.nvme_get_features_sw_progress","fd"],[0,3,1,"c.nvme_get_features_sw_progress","result"],[0,3,1,"c.nvme_get_features_sw_progress","sel"]],nvme_get_features_temp_thresh:[[0,3,1,"c.nvme_get_features_temp_thresh","fd"],[0,3,1,"c.nvme_get_features_temp_thresh","result"],[0,3,1,"c.nvme_get_features_temp_thresh","sel"]],nvme_get_features_timestamp:[[0,3,1,"c.nvme_get_features_timestamp","fd"],[0,3,1,"c.nvme_get_features_timestamp","sel"],[0,3,1,"c.nvme_get_features_timestamp","ts"]],nvme_get_features_volatile_wc:[[0,3,1,"c.nvme_get_features_volatile_wc","fd"],[0,3,1,"c.nvme_get_features_volatile_wc","result"],[0,3,1,"c.nvme_get_features_volatile_wc","sel"]],nvme_get_features_write_atomic:[[0,3,1,"c.nvme_get_features_write_atomic","fd"],[0,3,1,"c.nvme_get_features_write_atomic","result"],[0,3,1,"c.nvme_get_features_write_atomic","sel"]],nvme_get_features_write_protect:[[0,3,1,"c.nvme_get_features_write_protect","fd"],[0,3,1,"c.nvme_get_features_write_protect","nsid"],[0,3,1,"c.nvme_get_features_write_protect","result"],[0,3,1,"c.nvme_get_features_write_protect","sel"]],nvme_get_host_telemetry:[[0,3,1,"c.nvme_get_host_telemetry","fd"],[0,3,1,"c.nvme_get_host_telemetry","log"]],nvme_get_lba_status:[[0,3,1,"c.nvme_get_lba_status","args"]],nvme_get_lba_status_log:[[0,3,1,"c.nvme_get_lba_status_log","fd"],[0,3,1,"c.nvme_get_lba_status_log","log"],[0,3,1,"c.nvme_get_lba_status_log","rae"]],nvme_get_log:[[0,3,1,"c.nvme_get_log","args"]],nvme_get_log_ana:[[0,3,1,"c.nvme_get_log_ana","fd"],[0,3,1,"c.nvme_get_log_ana","len"],[0,3,1,"c.nvme_get_log_ana","log"],[0,3,1,"c.nvme_get_log_ana","lsp"],[0,3,1,"c.nvme_get_log_ana","offset"],[0,3,1,"c.nvme_get_log_ana","rae"]],nvme_get_log_ana_groups:[[0,3,1,"c.nvme_get_log_ana_groups","fd"],[0,3,1,"c.nvme_get_log_ana_groups","len"],[0,3,1,"c.nvme_get_log_ana_groups","log"],[0,3,1,"c.nvme_get_log_ana_groups","rae"]],nvme_get_log_boot_partition:[[0,3,1,"c.nvme_get_log_boot_partition","fd"],[0,3,1,"c.nvme_get_log_boot_partition","len"],[0,3,1,"c.nvme_get_log_boot_partition","lsp"],[0,3,1,"c.nvme_get_log_boot_partition","part"],[0,3,1,"c.nvme_get_log_boot_partition","rae"]],nvme_get_log_changed_ns_list:[[0,3,1,"c.nvme_get_log_changed_ns_list","fd"],[0,3,1,"c.nvme_get_log_changed_ns_list","ns_log"],[0,3,1,"c.nvme_get_log_changed_ns_list","rae"]],nvme_get_log_cmd_effects:[[0,3,1,"c.nvme_get_log_cmd_effects","csi"],[0,3,1,"c.nvme_get_log_cmd_effects","effects_log"],[0,3,1,"c.nvme_get_log_cmd_effects","fd"]],nvme_get_log_create_telemetry_host:[[0,3,1,"c.nvme_get_log_create_telemetry_host","fd"],[0,3,1,"c.nvme_get_log_create_telemetry_host","log"]],nvme_get_log_device_self_test:[[0,3,1,"c.nvme_get_log_device_self_test","fd"],[0,3,1,"c.nvme_get_log_device_self_test","log"]],nvme_get_log_discovery:[[0,3,1,"c.nvme_get_log_discovery","fd"],[0,3,1,"c.nvme_get_log_discovery","len"],[0,3,1,"c.nvme_get_log_discovery","log"],[0,3,1,"c.nvme_get_log_discovery","offset"],[0,3,1,"c.nvme_get_log_discovery","rae"]],nvme_get_log_endurance_group:[[0,3,1,"c.nvme_get_log_endurance_group","endgid"],[0,3,1,"c.nvme_get_log_endurance_group","fd"],[0,3,1,"c.nvme_get_log_endurance_group","log"]],nvme_get_log_endurance_grp_evt:[[0,3,1,"c.nvme_get_log_endurance_grp_evt","fd"],[0,3,1,"c.nvme_get_log_endurance_grp_evt","len"],[0,3,1,"c.nvme_get_log_endurance_grp_evt","log"],[0,3,1,"c.nvme_get_log_endurance_grp_evt","offset"],[0,3,1,"c.nvme_get_log_endurance_grp_evt","rae"]],nvme_get_log_error:[[0,3,1,"c.nvme_get_log_error","err_log"],[0,3,1,"c.nvme_get_log_error","fd"],[0,3,1,"c.nvme_get_log_error","nr_entries"],[0,3,1,"c.nvme_get_log_error","rae"]],nvme_get_log_fid_supported_effects:[[0,3,1,"c.nvme_get_log_fid_supported_effects","fd"],[0,3,1,"c.nvme_get_log_fid_supported_effects","log"],[0,3,1,"c.nvme_get_log_fid_supported_effects","rae"]],nvme_get_log_fw_slot:[[0,3,1,"c.nvme_get_log_fw_slot","fd"],[0,3,1,"c.nvme_get_log_fw_slot","fw_log"],[0,3,1,"c.nvme_get_log_fw_slot","rae"]],nvme_get_log_lba_status:[[0,3,1,"c.nvme_get_log_lba_status","fd"],[0,3,1,"c.nvme_get_log_lba_status","len"],[0,3,1,"c.nvme_get_log_lba_status","log"],[0,3,1,"c.nvme_get_log_lba_status","offset"],[0,3,1,"c.nvme_get_log_lba_status","rae"]],nvme_get_log_media_unit_stat:[[0,3,1,"c.nvme_get_log_media_unit_stat","domid"],[0,3,1,"c.nvme_get_log_media_unit_stat","fd"],[0,3,1,"c.nvme_get_log_media_unit_stat","mus"]],nvme_get_log_page:[[0,3,1,"c.nvme_get_log_page","data"],[0,3,1,"c.nvme_get_log_page","data_len"],[0,3,1,"c.nvme_get_log_page","fd"],[0,3,1,"c.nvme_get_log_page","log_id"],[0,3,1,"c.nvme_get_log_page","nsid"],[0,3,1,"c.nvme_get_log_page","rae"],[0,3,1,"c.nvme_get_log_page","xfer_len"]],nvme_get_log_page_padded:[[0,3,1,"c.nvme_get_log_page_padded","data"],[0,3,1,"c.nvme_get_log_page_padded","data_len"],[0,3,1,"c.nvme_get_log_page_padded","fd"],[0,3,1,"c.nvme_get_log_page_padded","log_id"],[0,3,1,"c.nvme_get_log_page_padded","nsid"],[0,3,1,"c.nvme_get_log_page_padded","rae"]],nvme_get_log_persistent_event:[[0,3,1,"c.nvme_get_log_persistent_event","action"],[0,3,1,"c.nvme_get_log_persistent_event","fd"],[0,3,1,"c.nvme_get_log_persistent_event","pevent_log"],[0,3,1,"c.nvme_get_log_persistent_event","size"]],nvme_get_log_predictable_lat_event:[[0,3,1,"c.nvme_get_log_predictable_lat_event","fd"],[0,3,1,"c.nvme_get_log_predictable_lat_event","len"],[0,3,1,"c.nvme_get_log_predictable_lat_event","log"],[0,3,1,"c.nvme_get_log_predictable_lat_event","offset"],[0,3,1,"c.nvme_get_log_predictable_lat_event","rae"]],nvme_get_log_predictable_lat_nvmset:[[0,3,1,"c.nvme_get_log_predictable_lat_nvmset","fd"],[0,3,1,"c.nvme_get_log_predictable_lat_nvmset","log"],[0,3,1,"c.nvme_get_log_predictable_lat_nvmset","nvmsetid"]],nvme_get_log_reservation:[[0,3,1,"c.nvme_get_log_reservation","fd"],[0,3,1,"c.nvme_get_log_reservation","log"],[0,3,1,"c.nvme_get_log_reservation","rae"]],nvme_get_log_sanitize:[[0,3,1,"c.nvme_get_log_sanitize","fd"],[0,3,1,"c.nvme_get_log_sanitize","log"],[0,3,1,"c.nvme_get_log_sanitize","rae"]],nvme_get_log_smart:[[0,3,1,"c.nvme_get_log_smart","fd"],[0,3,1,"c.nvme_get_log_smart","nsid"],[0,3,1,"c.nvme_get_log_smart","rae"],[0,3,1,"c.nvme_get_log_smart","smart_log"]],nvme_get_log_support_cap_config_list:[[0,3,1,"c.nvme_get_log_support_cap_config_list","cap"],[0,3,1,"c.nvme_get_log_support_cap_config_list","domid"],[0,3,1,"c.nvme_get_log_support_cap_config_list","fd"]],nvme_get_log_supported_log_pages:[[0,3,1,"c.nvme_get_log_supported_log_pages","fd"],[0,3,1,"c.nvme_get_log_supported_log_pages","log"],[0,3,1,"c.nvme_get_log_supported_log_pages","rae"]],nvme_get_log_telemetry_ctrl:[[0,3,1,"c.nvme_get_log_telemetry_ctrl","fd"],[0,3,1,"c.nvme_get_log_telemetry_ctrl","len"],[0,3,1,"c.nvme_get_log_telemetry_ctrl","log"],[0,3,1,"c.nvme_get_log_telemetry_ctrl","offset"],[0,3,1,"c.nvme_get_log_telemetry_ctrl","rae"]],nvme_get_log_telemetry_host:[[0,3,1,"c.nvme_get_log_telemetry_host","fd"],[0,3,1,"c.nvme_get_log_telemetry_host","len"],[0,3,1,"c.nvme_get_log_telemetry_host","log"],[0,3,1,"c.nvme_get_log_telemetry_host","offset"]],nvme_get_log_zns_changed_zones:[[0,3,1,"c.nvme_get_log_zns_changed_zones","fd"],[0,3,1,"c.nvme_get_log_zns_changed_zones","log"],[0,3,1,"c.nvme_get_log_zns_changed_zones","nsid"],[0,3,1,"c.nvme_get_log_zns_changed_zones","rae"]],nvme_get_logical_block_size:[[0,3,1,"c.nvme_get_logical_block_size","blksize"],[0,3,1,"c.nvme_get_logical_block_size","fd"],[0,3,1,"c.nvme_get_logical_block_size","nsid"]],nvme_get_new_host_telemetry:[[0,3,1,"c.nvme_get_new_host_telemetry","fd"],[0,3,1,"c.nvme_get_new_host_telemetry","log"]],nvme_get_ns_attr:[[0,3,1,"c.nvme_get_ns_attr","attr"],[0,3,1,"c.nvme_get_ns_attr","n"]],nvme_get_nsid:[[0,3,1,"c.nvme_get_nsid","fd"],[0,3,1,"c.nvme_get_nsid","nsid"]],nvme_get_path_attr:[[0,3,1,"c.nvme_get_path_attr","attr"],[0,3,1,"c.nvme_get_path_attr","p"]],nvme_get_property:[[0,3,1,"c.nvme_get_property","args"]],nvme_get_subsys_attr:[[0,3,1,"c.nvme_get_subsys_attr","attr"],[0,3,1,"c.nvme_get_subsys_attr","s"]],nvme_host_get_dhchap_key:[[0,3,1,"c.nvme_host_get_dhchap_key","h"]],nvme_host_get_hostid:[[0,3,1,"c.nvme_host_get_hostid","h"]],nvme_host_get_hostnqn:[[0,3,1,"c.nvme_host_get_hostnqn","h"]],nvme_host_get_root:[[0,3,1,"c.nvme_host_get_root","h"]],nvme_host_set_dhchap_key:[[0,3,1,"c.nvme_host_set_dhchap_key","h"],[0,3,1,"c.nvme_host_set_dhchap_key","key"]],nvme_identify:[[0,3,1,"c.nvme_identify","args"]],nvme_identify_active_ns_list:[[0,3,1,"c.nvme_identify_active_ns_list","fd"],[0,3,1,"c.nvme_identify_active_ns_list","list"],[0,3,1,"c.nvme_identify_active_ns_list","nsid"]],nvme_identify_active_ns_list_csi:[[0,3,1,"c.nvme_identify_active_ns_list_csi","csi"],[0,3,1,"c.nvme_identify_active_ns_list_csi","fd"],[0,3,1,"c.nvme_identify_active_ns_list_csi","ns_list"],[0,3,1,"c.nvme_identify_active_ns_list_csi","nsid"]],nvme_identify_allocated_ns:[[0,3,1,"c.nvme_identify_allocated_ns","fd"],[0,3,1,"c.nvme_identify_allocated_ns","ns"],[0,3,1,"c.nvme_identify_allocated_ns","nsid"]],nvme_identify_allocated_ns_list:[[0,3,1,"c.nvme_identify_allocated_ns_list","fd"],[0,3,1,"c.nvme_identify_allocated_ns_list","list"],[0,3,1,"c.nvme_identify_allocated_ns_list","nsid"]],nvme_identify_allocated_ns_list_csi:[[0,3,1,"c.nvme_identify_allocated_ns_list_csi","csi"],[0,3,1,"c.nvme_identify_allocated_ns_list_csi","fd"],[0,3,1,"c.nvme_identify_allocated_ns_list_csi","ns_list"],[0,3,1,"c.nvme_identify_allocated_ns_list_csi","nsid"]],nvme_identify_ctrl:[[0,3,1,"c.nvme_identify_ctrl","fd"],[0,3,1,"c.nvme_identify_ctrl","id"]],nvme_identify_ctrl_csi:[[0,3,1,"c.nvme_identify_ctrl_csi","csi"],[0,3,1,"c.nvme_identify_ctrl_csi","data"],[0,3,1,"c.nvme_identify_ctrl_csi","fd"]],nvme_identify_ctrl_list:[[0,3,1,"c.nvme_identify_ctrl_list","cntid"],[0,3,1,"c.nvme_identify_ctrl_list","cntlist"],[0,3,1,"c.nvme_identify_ctrl_list","fd"]],nvme_identify_domain_list:[[0,3,1,"c.nvme_identify_domain_list","domid"],[0,3,1,"c.nvme_identify_domain_list","fd"],[0,3,1,"c.nvme_identify_domain_list","list"]],nvme_identify_endurance_group_list:[[0,3,1,"c.nvme_identify_endurance_group_list","endgrp_id"],[0,3,1,"c.nvme_identify_endurance_group_list","fd"],[0,3,1,"c.nvme_identify_endurance_group_list","list"]],nvme_identify_independent_identify_ns:[[0,3,1,"c.nvme_identify_independent_identify_ns","fd"],[0,3,1,"c.nvme_identify_independent_identify_ns","ns"],[0,3,1,"c.nvme_identify_independent_identify_ns","nsid"]],nvme_identify_iocs:[[0,3,1,"c.nvme_identify_iocs","cntlid"],[0,3,1,"c.nvme_identify_iocs","fd"],[0,3,1,"c.nvme_identify_iocs","iocs"]],nvme_identify_iocs_ns_csi_user_data_format:[[0,3,1,"c.nvme_identify_iocs_ns_csi_user_data_format","csi"],[0,3,1,"c.nvme_identify_iocs_ns_csi_user_data_format","data"],[0,3,1,"c.nvme_identify_iocs_ns_csi_user_data_format","fd"],[0,3,1,"c.nvme_identify_iocs_ns_csi_user_data_format","user_data_format"],[0,3,1,"c.nvme_identify_iocs_ns_csi_user_data_format","uuidx"]],nvme_identify_ns:[[0,3,1,"c.nvme_identify_ns","fd"],[0,3,1,"c.nvme_identify_ns","ns"],[0,3,1,"c.nvme_identify_ns","nsid"]],nvme_identify_ns_csi:[[0,3,1,"c.nvme_identify_ns_csi","csi"],[0,3,1,"c.nvme_identify_ns_csi","data"],[0,3,1,"c.nvme_identify_ns_csi","fd"],[0,3,1,"c.nvme_identify_ns_csi","nsid"],[0,3,1,"c.nvme_identify_ns_csi","uuidx"]],nvme_identify_ns_csi_user_data_format:[[0,3,1,"c.nvme_identify_ns_csi_user_data_format","csi"],[0,3,1,"c.nvme_identify_ns_csi_user_data_format","data"],[0,3,1,"c.nvme_identify_ns_csi_user_data_format","fd"],[0,3,1,"c.nvme_identify_ns_csi_user_data_format","user_data_format"],[0,3,1,"c.nvme_identify_ns_csi_user_data_format","uuidx"]],nvme_identify_ns_descs:[[0,3,1,"c.nvme_identify_ns_descs","descs"],[0,3,1,"c.nvme_identify_ns_descs","fd"],[0,3,1,"c.nvme_identify_ns_descs","nsid"]],nvme_identify_ns_granularity:[[0,3,1,"c.nvme_identify_ns_granularity","fd"],[0,3,1,"c.nvme_identify_ns_granularity","gr_list"]],nvme_identify_nsid_ctrl_list:[[0,3,1,"c.nvme_identify_nsid_ctrl_list","cntid"],[0,3,1,"c.nvme_identify_nsid_ctrl_list","cntlist"],[0,3,1,"c.nvme_identify_nsid_ctrl_list","fd"],[0,3,1,"c.nvme_identify_nsid_ctrl_list","nsid"]],nvme_identify_nvmset_list:[[0,3,1,"c.nvme_identify_nvmset_list","fd"],[0,3,1,"c.nvme_identify_nvmset_list","nvmset"],[0,3,1,"c.nvme_identify_nvmset_list","nvmsetid"]],nvme_identify_primary_ctrl:[[0,3,1,"c.nvme_identify_primary_ctrl","cap"],[0,3,1,"c.nvme_identify_primary_ctrl","cntid"],[0,3,1,"c.nvme_identify_primary_ctrl","fd"]],nvme_identify_secondary_ctrl_list:[[0,3,1,"c.nvme_identify_secondary_ctrl_list","cntid"],[0,3,1,"c.nvme_identify_secondary_ctrl_list","fd"],[0,3,1,"c.nvme_identify_secondary_ctrl_list","nsid"],[0,3,1,"c.nvme_identify_secondary_ctrl_list","sc_list"]],nvme_identify_uuid:[[0,3,1,"c.nvme_identify_uuid","fd"],[0,3,1,"c.nvme_identify_uuid","uuid_list"]],nvme_init_copy_range:[[0,3,1,"c.nvme_init_copy_range","copy"],[0,3,1,"c.nvme_init_copy_range","eilbrts"],[0,3,1,"c.nvme_init_copy_range","elbatms"],[0,3,1,"c.nvme_init_copy_range","elbats"],[0,3,1,"c.nvme_init_copy_range","nlbs"],[0,3,1,"c.nvme_init_copy_range","nr"],[0,3,1,"c.nvme_init_copy_range","slbas"]],nvme_init_ctrl:[[0,3,1,"c.nvme_init_ctrl","c"],[0,3,1,"c.nvme_init_ctrl","h"],[0,3,1,"c.nvme_init_ctrl","instance"]],nvme_init_ctrl_list:[[0,3,1,"c.nvme_init_ctrl_list","cntlist"],[0,3,1,"c.nvme_init_ctrl_list","ctrlist"],[0,3,1,"c.nvme_init_ctrl_list","num_ctrls"]],nvme_init_dsm_range:[[0,3,1,"c.nvme_init_dsm_range","ctx_attrs"],[0,3,1,"c.nvme_init_dsm_range","dsm"],[0,3,1,"c.nvme_init_dsm_range","llbas"],[0,3,1,"c.nvme_init_dsm_range","nr_ranges"],[0,3,1,"c.nvme_init_dsm_range","slbas"]],nvme_init_id_ns:[[0,3,1,"c.nvme_init_id_ns","anagrpid"],[0,3,1,"c.nvme_init_id_ns","dps"],[0,3,1,"c.nvme_init_id_ns","flbas"],[0,3,1,"c.nvme_init_id_ns","ncap"],[0,3,1,"c.nvme_init_id_ns","nmic"],[0,3,1,"c.nvme_init_id_ns","ns"],[0,3,1,"c.nvme_init_id_ns","nsze"],[0,3,1,"c.nvme_init_id_ns","nvmsetid"]],nvme_init_logging:[[0,3,1,"c.nvme_init_logging","log_pid"],[0,3,1,"c.nvme_init_logging","log_tstamp"],[0,3,1,"c.nvme_init_logging","lvl"],[0,3,1,"c.nvme_init_logging","r"]],nvme_io:[[0,3,1,"c.nvme_io","args"],[0,3,1,"c.nvme_io","opcode"]],nvme_io_passthru64:[[0,3,1,"c.nvme_io_passthru64","cdw10"],[0,3,1,"c.nvme_io_passthru64","cdw11"],[0,3,1,"c.nvme_io_passthru64","cdw12"],[0,3,1,"c.nvme_io_passthru64","cdw13"],[0,3,1,"c.nvme_io_passthru64","cdw14"],[0,3,1,"c.nvme_io_passthru64","cdw15"],[0,3,1,"c.nvme_io_passthru64","cdw2"],[0,3,1,"c.nvme_io_passthru64","cdw3"],[0,3,1,"c.nvme_io_passthru64","data"],[0,3,1,"c.nvme_io_passthru64","data_len"],[0,3,1,"c.nvme_io_passthru64","fd"],[0,3,1,"c.nvme_io_passthru64","flags"],[0,3,1,"c.nvme_io_passthru64","metadata"],[0,3,1,"c.nvme_io_passthru64","metadata_len"],[0,3,1,"c.nvme_io_passthru64","nsid"],[0,3,1,"c.nvme_io_passthru64","opcode"],[0,3,1,"c.nvme_io_passthru64","result"],[0,3,1,"c.nvme_io_passthru64","rsvd"],[0,3,1,"c.nvme_io_passthru64","timeout_ms"]],nvme_io_passthru:[[0,3,1,"c.nvme_io_passthru","cdw10"],[0,3,1,"c.nvme_io_passthru","cdw11"],[0,3,1,"c.nvme_io_passthru","cdw12"],[0,3,1,"c.nvme_io_passthru","cdw13"],[0,3,1,"c.nvme_io_passthru","cdw14"],[0,3,1,"c.nvme_io_passthru","cdw15"],[0,3,1,"c.nvme_io_passthru","cdw2"],[0,3,1,"c.nvme_io_passthru","cdw3"],[0,3,1,"c.nvme_io_passthru","data"],[0,3,1,"c.nvme_io_passthru","data_len"],[0,3,1,"c.nvme_io_passthru","fd"],[0,3,1,"c.nvme_io_passthru","flags"],[0,3,1,"c.nvme_io_passthru","metadata"],[0,3,1,"c.nvme_io_passthru","metadata_len"],[0,3,1,"c.nvme_io_passthru","nsid"],[0,3,1,"c.nvme_io_passthru","opcode"],[0,3,1,"c.nvme_io_passthru","result"],[0,3,1,"c.nvme_io_passthru","rsvd"],[0,3,1,"c.nvme_io_passthru","timeout_ms"]],nvme_is_64bit_reg:[[0,3,1,"c.nvme_is_64bit_reg","offset"]],nvme_lockdown:[[0,3,1,"c.nvme_lockdown","args"]],nvme_lookup_ctrl:[[0,3,1,"c.nvme_lookup_ctrl","host_iface"],[0,3,1,"c.nvme_lookup_ctrl","host_traddr"],[0,3,1,"c.nvme_lookup_ctrl","p"],[0,3,1,"c.nvme_lookup_ctrl","s"],[0,3,1,"c.nvme_lookup_ctrl","traddr"],[0,3,1,"c.nvme_lookup_ctrl","transport"],[0,3,1,"c.nvme_lookup_ctrl","trsvcid"]],nvme_lookup_host:[[0,3,1,"c.nvme_lookup_host","hostid"],[0,3,1,"c.nvme_lookup_host","hostnqn"],[0,3,1,"c.nvme_lookup_host","r"]],nvme_lookup_subsystem:[[0,3,1,"c.nvme_lookup_subsystem","h"],[0,3,1,"c.nvme_lookup_subsystem","name"],[0,3,1,"c.nvme_lookup_subsystem","subsysnqn"]],nvme_namespace_attach_ctrls:[[0,3,1,"c.nvme_namespace_attach_ctrls","ctrlist"],[0,3,1,"c.nvme_namespace_attach_ctrls","fd"],[0,3,1,"c.nvme_namespace_attach_ctrls","nsid"],[0,3,1,"c.nvme_namespace_attach_ctrls","num_ctrls"]],nvme_namespace_detach_ctrls:[[0,3,1,"c.nvme_namespace_detach_ctrls","ctrlist"],[0,3,1,"c.nvme_namespace_detach_ctrls","fd"],[0,3,1,"c.nvme_namespace_detach_ctrls","nsid"],[0,3,1,"c.nvme_namespace_detach_ctrls","num_ctrls"]],nvme_namespace_filter:[[0,3,1,"c.nvme_namespace_filter","d"]],nvme_next_host:[[0,3,1,"c.nvme_next_host","h"],[0,3,1,"c.nvme_next_host","r"]],nvme_next_subsystem:[[0,3,1,"c.nvme_next_subsystem","h"],[0,3,1,"c.nvme_next_subsystem","s"]],nvme_ns_attach:[[0,3,1,"c.nvme_ns_attach","args"]],nvme_ns_attach_ctrls:[[0,3,1,"c.nvme_ns_attach_ctrls","ctrlist"],[0,3,1,"c.nvme_ns_attach_ctrls","fd"],[0,3,1,"c.nvme_ns_attach_ctrls","nsid"]],nvme_ns_compare:[[0,3,1,"c.nvme_ns_compare","buf"],[0,3,1,"c.nvme_ns_compare","count"],[0,3,1,"c.nvme_ns_compare","n"],[0,3,1,"c.nvme_ns_compare","offset"]],nvme_ns_detach_ctrls:[[0,3,1,"c.nvme_ns_detach_ctrls","ctrlist"],[0,3,1,"c.nvme_ns_detach_ctrls","fd"],[0,3,1,"c.nvme_ns_detach_ctrls","nsid"]],nvme_ns_flush:[[0,3,1,"c.nvme_ns_flush","n"]],nvme_ns_get_csi:[[0,3,1,"c.nvme_ns_get_csi","n"]],nvme_ns_get_ctrl:[[0,3,1,"c.nvme_ns_get_ctrl","n"]],nvme_ns_get_eui64:[[0,3,1,"c.nvme_ns_get_eui64","n"]],nvme_ns_get_fd:[[0,3,1,"c.nvme_ns_get_fd","n"]],nvme_ns_get_firmware:[[0,3,1,"c.nvme_ns_get_firmware","n"]],nvme_ns_get_generic_name:[[0,3,1,"c.nvme_ns_get_generic_name","n"]],nvme_ns_get_lba_count:[[0,3,1,"c.nvme_ns_get_lba_count","n"]],nvme_ns_get_lba_size:[[0,3,1,"c.nvme_ns_get_lba_size","n"]],nvme_ns_get_lba_util:[[0,3,1,"c.nvme_ns_get_lba_util","n"]],nvme_ns_get_meta_size:[[0,3,1,"c.nvme_ns_get_meta_size","n"]],nvme_ns_get_model:[[0,3,1,"c.nvme_ns_get_model","n"]],nvme_ns_get_name:[[0,3,1,"c.nvme_ns_get_name","n"]],nvme_ns_get_nguid:[[0,3,1,"c.nvme_ns_get_nguid","n"]],nvme_ns_get_nsid:[[0,3,1,"c.nvme_ns_get_nsid","n"]],nvme_ns_get_serial:[[0,3,1,"c.nvme_ns_get_serial","n"]],nvme_ns_get_subsystem:[[0,3,1,"c.nvme_ns_get_subsystem","n"]],nvme_ns_get_sysfs_dir:[[0,3,1,"c.nvme_ns_get_sysfs_dir","n"]],nvme_ns_get_uuid:[[0,3,1,"c.nvme_ns_get_uuid","n"],[0,3,1,"c.nvme_ns_get_uuid","out"]],nvme_ns_identify:[[0,3,1,"c.nvme_ns_identify","n"],[0,3,1,"c.nvme_ns_identify","ns"]],nvme_ns_identify_descs:[[0,3,1,"c.nvme_ns_identify_descs","descs"],[0,3,1,"c.nvme_ns_identify_descs","n"]],nvme_ns_mgmt:[[0,3,1,"c.nvme_ns_mgmt","args"]],nvme_ns_mgmt_create:[[0,3,1,"c.nvme_ns_mgmt_create","csi"],[0,3,1,"c.nvme_ns_mgmt_create","fd"],[0,3,1,"c.nvme_ns_mgmt_create","ns"],[0,3,1,"c.nvme_ns_mgmt_create","nsid"],[0,3,1,"c.nvme_ns_mgmt_create","timeout"]],nvme_ns_mgmt_delete:[[0,3,1,"c.nvme_ns_mgmt_delete","fd"],[0,3,1,"c.nvme_ns_mgmt_delete","nsid"]],nvme_ns_read:[[0,3,1,"c.nvme_ns_read","buf"],[0,3,1,"c.nvme_ns_read","count"],[0,3,1,"c.nvme_ns_read","n"],[0,3,1,"c.nvme_ns_read","offset"]],nvme_ns_rescan:[[0,3,1,"c.nvme_ns_rescan","fd"]],nvme_ns_verify:[[0,3,1,"c.nvme_ns_verify","count"],[0,3,1,"c.nvme_ns_verify","n"],[0,3,1,"c.nvme_ns_verify","offset"]],nvme_ns_write:[[0,3,1,"c.nvme_ns_write","buf"],[0,3,1,"c.nvme_ns_write","count"],[0,3,1,"c.nvme_ns_write","n"],[0,3,1,"c.nvme_ns_write","offset"]],nvme_ns_write_uncorrectable:[[0,3,1,"c.nvme_ns_write_uncorrectable","count"],[0,3,1,"c.nvme_ns_write_uncorrectable","n"],[0,3,1,"c.nvme_ns_write_uncorrectable","offset"]],nvme_ns_write_zeros:[[0,3,1,"c.nvme_ns_write_zeros","count"],[0,3,1,"c.nvme_ns_write_zeros","n"],[0,3,1,"c.nvme_ns_write_zeros","offset"]],nvme_nvm_identify_ctrl:[[0,3,1,"c.nvme_nvm_identify_ctrl","fd"],[0,3,1,"c.nvme_nvm_identify_ctrl","id"]],nvme_open:[[0,3,1,"c.nvme_open","name"]],nvme_path_get_ana_state:[[0,3,1,"c.nvme_path_get_ana_state","p"]],nvme_path_get_ctrl:[[0,3,1,"c.nvme_path_get_ctrl","p"]],nvme_path_get_name:[[0,3,1,"c.nvme_path_get_name","p"]],nvme_path_get_ns:[[0,3,1,"c.nvme_path_get_ns","p"]],nvme_path_get_sysfs_dir:[[0,3,1,"c.nvme_path_get_sysfs_dir","p"]],nvme_paths_filter:[[0,3,1,"c.nvme_paths_filter","d"]],nvme_pmr_size:[[0,3,1,"c.nvme_pmr_size","pmrebs"]],nvme_pmr_throughput:[[0,3,1,"c.nvme_pmr_throughput","pmrswtp"]],nvme_psd_power_scale:[[0,3,1,"c.nvme_psd_power_scale","ps"]],nvme_read:[[0,3,1,"c.nvme_read","args"]],nvme_read_config:[[0,3,1,"c.nvme_read_config","config_file"],[0,3,1,"c.nvme_read_config","r"]],nvme_refresh_topology:[[0,3,1,"c.nvme_refresh_topology","r"]],nvme_rescan_ctrl:[[0,3,1,"c.nvme_rescan_ctrl","c"]],nvme_resv_acquire:[[0,3,1,"c.nvme_resv_acquire","args"]],nvme_resv_register:[[0,3,1,"c.nvme_resv_register","args"]],nvme_resv_release:[[0,3,1,"c.nvme_resv_release","args"]],nvme_resv_report:[[0,3,1,"c.nvme_resv_report","args"]],nvme_sanitize_nvm:[[0,3,1,"c.nvme_sanitize_nvm","args"]],nvme_scan:[[0,3,1,"c.nvme_scan","config_file"]],nvme_scan_ctrl:[[0,3,1,"c.nvme_scan_ctrl","name"],[0,3,1,"c.nvme_scan_ctrl","r"]],nvme_scan_ctrl_namespace_paths:[[0,3,1,"c.nvme_scan_ctrl_namespace_paths","c"],[0,3,1,"c.nvme_scan_ctrl_namespace_paths","namespaces"]],nvme_scan_ctrl_namespaces:[[0,3,1,"c.nvme_scan_ctrl_namespaces","c"],[0,3,1,"c.nvme_scan_ctrl_namespaces","namespaces"]],nvme_scan_ctrls:[[0,3,1,"c.nvme_scan_ctrls","ctrls"]],nvme_scan_namespace:[[0,3,1,"c.nvme_scan_namespace","name"]],nvme_scan_subsystem_namespaces:[[0,3,1,"c.nvme_scan_subsystem_namespaces","namespaces"],[0,3,1,"c.nvme_scan_subsystem_namespaces","s"]],nvme_scan_subsystems:[[0,3,1,"c.nvme_scan_subsystems","subsys"]],nvme_scan_topology:[[0,3,1,"c.nvme_scan_topology","f"],[0,3,1,"c.nvme_scan_topology","r"]],nvme_security_receive:[[0,3,1,"c.nvme_security_receive","args"]],nvme_security_send:[[0,3,1,"c.nvme_security_send","args"]],nvme_set_features:[[0,3,1,"c.nvme_set_features","args"]],nvme_set_features_arbitration:[[0,3,1,"c.nvme_set_features_arbitration","ab"],[0,3,1,"c.nvme_set_features_arbitration","fd"],[0,3,1,"c.nvme_set_features_arbitration","hpw"],[0,3,1,"c.nvme_set_features_arbitration","lpw"],[0,3,1,"c.nvme_set_features_arbitration","mpw"],[0,3,1,"c.nvme_set_features_arbitration","result"],[0,3,1,"c.nvme_set_features_arbitration","save"]],nvme_set_features_async_event:[[0,3,1,"c.nvme_set_features_async_event","events"],[0,3,1,"c.nvme_set_features_async_event","fd"],[0,3,1,"c.nvme_set_features_async_event","result"],[0,3,1,"c.nvme_set_features_async_event","save"]],nvme_set_features_auto_pst:[[0,3,1,"c.nvme_set_features_auto_pst","apst"],[0,3,1,"c.nvme_set_features_auto_pst","apste"],[0,3,1,"c.nvme_set_features_auto_pst","fd"],[0,3,1,"c.nvme_set_features_auto_pst","result"],[0,3,1,"c.nvme_set_features_auto_pst","save"]],nvme_set_features_data:[[0,3,1,"c.nvme_set_features_data","cdw11"],[0,3,1,"c.nvme_set_features_data","data"],[0,3,1,"c.nvme_set_features_data","data_len"],[0,3,1,"c.nvme_set_features_data","fd"],[0,3,1,"c.nvme_set_features_data","fid"],[0,3,1,"c.nvme_set_features_data","nsid"],[0,3,1,"c.nvme_set_features_data","result"],[0,3,1,"c.nvme_set_features_data","save"]],nvme_set_features_endurance_evt_cfg:[[0,3,1,"c.nvme_set_features_endurance_evt_cfg","egwarn"],[0,3,1,"c.nvme_set_features_endurance_evt_cfg","endgid"],[0,3,1,"c.nvme_set_features_endurance_evt_cfg","fd"],[0,3,1,"c.nvme_set_features_endurance_evt_cfg","result"],[0,3,1,"c.nvme_set_features_endurance_evt_cfg","save"]],nvme_set_features_err_recovery:[[0,3,1,"c.nvme_set_features_err_recovery","dulbe"],[0,3,1,"c.nvme_set_features_err_recovery","fd"],[0,3,1,"c.nvme_set_features_err_recovery","nsid"],[0,3,1,"c.nvme_set_features_err_recovery","result"],[0,3,1,"c.nvme_set_features_err_recovery","save"],[0,3,1,"c.nvme_set_features_err_recovery","tler"]],nvme_set_features_hctm:[[0,3,1,"c.nvme_set_features_hctm","fd"],[0,3,1,"c.nvme_set_features_hctm","result"],[0,3,1,"c.nvme_set_features_hctm","save"],[0,3,1,"c.nvme_set_features_hctm","tmt1"],[0,3,1,"c.nvme_set_features_hctm","tmt2"]],nvme_set_features_host_behavior:[[0,3,1,"c.nvme_set_features_host_behavior","data"],[0,3,1,"c.nvme_set_features_host_behavior","fd"],[0,3,1,"c.nvme_set_features_host_behavior","save"]],nvme_set_features_host_id:[[0,3,1,"c.nvme_set_features_host_id","exhid"],[0,3,1,"c.nvme_set_features_host_id","fd"],[0,3,1,"c.nvme_set_features_host_id","hostid"],[0,3,1,"c.nvme_set_features_host_id","save"]],nvme_set_features_irq_coalesce:[[0,3,1,"c.nvme_set_features_irq_coalesce","fd"],[0,3,1,"c.nvme_set_features_irq_coalesce","result"],[0,3,1,"c.nvme_set_features_irq_coalesce","save"],[0,3,1,"c.nvme_set_features_irq_coalesce","thr"],[0,3,1,"c.nvme_set_features_irq_coalesce","time"]],nvme_set_features_irq_config:[[0,3,1,"c.nvme_set_features_irq_config","cd"],[0,3,1,"c.nvme_set_features_irq_config","fd"],[0,3,1,"c.nvme_set_features_irq_config","iv"],[0,3,1,"c.nvme_set_features_irq_config","result"],[0,3,1,"c.nvme_set_features_irq_config","save"]],nvme_set_features_lba_range:[[0,3,1,"c.nvme_set_features_lba_range","data"],[0,3,1,"c.nvme_set_features_lba_range","fd"],[0,3,1,"c.nvme_set_features_lba_range","nr_ranges"],[0,3,1,"c.nvme_set_features_lba_range","nsid"],[0,3,1,"c.nvme_set_features_lba_range","result"],[0,3,1,"c.nvme_set_features_lba_range","save"]],nvme_set_features_lba_sts_interval:[[0,3,1,"c.nvme_set_features_lba_sts_interval","fd"],[0,3,1,"c.nvme_set_features_lba_sts_interval","lsipi"],[0,3,1,"c.nvme_set_features_lba_sts_interval","lsiri"],[0,3,1,"c.nvme_set_features_lba_sts_interval","result"],[0,3,1,"c.nvme_set_features_lba_sts_interval","save"]],nvme_set_features_nopsc:[[0,3,1,"c.nvme_set_features_nopsc","fd"],[0,3,1,"c.nvme_set_features_nopsc","noppme"],[0,3,1,"c.nvme_set_features_nopsc","result"],[0,3,1,"c.nvme_set_features_nopsc","save"]],nvme_set_features_plm_config:[[0,3,1,"c.nvme_set_features_plm_config","data"],[0,3,1,"c.nvme_set_features_plm_config","enable"],[0,3,1,"c.nvme_set_features_plm_config","fd"],[0,3,1,"c.nvme_set_features_plm_config","nvmsetid"],[0,3,1,"c.nvme_set_features_plm_config","result"],[0,3,1,"c.nvme_set_features_plm_config","save"]],nvme_set_features_plm_window:[[0,3,1,"c.nvme_set_features_plm_window","fd"],[0,3,1,"c.nvme_set_features_plm_window","nvmsetid"],[0,3,1,"c.nvme_set_features_plm_window","result"],[0,3,1,"c.nvme_set_features_plm_window","save"],[0,3,1,"c.nvme_set_features_plm_window","sel"]],nvme_set_features_power_mgmt:[[0,3,1,"c.nvme_set_features_power_mgmt","fd"],[0,3,1,"c.nvme_set_features_power_mgmt","ps"],[0,3,1,"c.nvme_set_features_power_mgmt","result"],[0,3,1,"c.nvme_set_features_power_mgmt","save"],[0,3,1,"c.nvme_set_features_power_mgmt","wh"]],nvme_set_features_resv_mask:[[0,3,1,"c.nvme_set_features_resv_mask","fd"],[0,3,1,"c.nvme_set_features_resv_mask","mask"],[0,3,1,"c.nvme_set_features_resv_mask","result"],[0,3,1,"c.nvme_set_features_resv_mask","save"]],nvme_set_features_resv_persist:[[0,3,1,"c.nvme_set_features_resv_persist","fd"],[0,3,1,"c.nvme_set_features_resv_persist","ptpl"],[0,3,1,"c.nvme_set_features_resv_persist","result"],[0,3,1,"c.nvme_set_features_resv_persist","save"]],nvme_set_features_rrl:[[0,3,1,"c.nvme_set_features_rrl","fd"],[0,3,1,"c.nvme_set_features_rrl","nvmsetid"],[0,3,1,"c.nvme_set_features_rrl","result"],[0,3,1,"c.nvme_set_features_rrl","rrl"],[0,3,1,"c.nvme_set_features_rrl","save"]],nvme_set_features_sanitize:[[0,3,1,"c.nvme_set_features_sanitize","fd"],[0,3,1,"c.nvme_set_features_sanitize","nodrm"],[0,3,1,"c.nvme_set_features_sanitize","result"],[0,3,1,"c.nvme_set_features_sanitize","save"]],nvme_set_features_simple:[[0,3,1,"c.nvme_set_features_simple","cdw11"],[0,3,1,"c.nvme_set_features_simple","fd"],[0,3,1,"c.nvme_set_features_simple","fid"],[0,3,1,"c.nvme_set_features_simple","nsid"],[0,3,1,"c.nvme_set_features_simple","result"],[0,3,1,"c.nvme_set_features_simple","save"]],nvme_set_features_sw_progress:[[0,3,1,"c.nvme_set_features_sw_progress","fd"],[0,3,1,"c.nvme_set_features_sw_progress","pbslc"],[0,3,1,"c.nvme_set_features_sw_progress","result"],[0,3,1,"c.nvme_set_features_sw_progress","save"]],nvme_set_features_temp_thresh:[[0,3,1,"c.nvme_set_features_temp_thresh","fd"],[0,3,1,"c.nvme_set_features_temp_thresh","result"],[0,3,1,"c.nvme_set_features_temp_thresh","save"],[0,3,1,"c.nvme_set_features_temp_thresh","thsel"],[0,3,1,"c.nvme_set_features_temp_thresh","tmpsel"],[0,3,1,"c.nvme_set_features_temp_thresh","tmpth"]],nvme_set_features_timestamp:[[0,3,1,"c.nvme_set_features_timestamp","fd"],[0,3,1,"c.nvme_set_features_timestamp","save"],[0,3,1,"c.nvme_set_features_timestamp","timestamp"]],nvme_set_features_volatile_wc:[[0,3,1,"c.nvme_set_features_volatile_wc","fd"],[0,3,1,"c.nvme_set_features_volatile_wc","result"],[0,3,1,"c.nvme_set_features_volatile_wc","save"],[0,3,1,"c.nvme_set_features_volatile_wc","wce"]],nvme_set_features_write_atomic:[[0,3,1,"c.nvme_set_features_write_atomic","dn"],[0,3,1,"c.nvme_set_features_write_atomic","fd"],[0,3,1,"c.nvme_set_features_write_atomic","result"],[0,3,1,"c.nvme_set_features_write_atomic","save"]],nvme_set_features_write_protect:[[0,3,1,"c.nvme_set_features_write_protect","fd"],[0,3,1,"c.nvme_set_features_write_protect","result"],[0,3,1,"c.nvme_set_features_write_protect","save"],[0,3,1,"c.nvme_set_features_write_protect","state"]],nvme_set_property:[[0,3,1,"c.nvme_set_property","args"]],nvme_status_code:[[0,3,1,"c.nvme_status_code","status_field"]],nvme_status_code_type:[[0,3,1,"c.nvme_status_code_type","status_field"]],nvme_status_to_errno:[[0,3,1,"c.nvme_status_to_errno","fabrics"],[0,3,1,"c.nvme_status_to_errno","status"]],nvme_status_to_string:[[0,3,1,"c.nvme_status_to_string","fabrics"],[0,3,1,"c.nvme_status_to_string","status"]],nvme_submit_admin_passthru64:[[0,3,1,"c.nvme_submit_admin_passthru64","cmd"],[0,3,1,"c.nvme_submit_admin_passthru64","fd"],[0,3,1,"c.nvme_submit_admin_passthru64","result"]],nvme_submit_admin_passthru:[[0,3,1,"c.nvme_submit_admin_passthru","cmd"],[0,3,1,"c.nvme_submit_admin_passthru","fd"],[0,3,1,"c.nvme_submit_admin_passthru","result"]],nvme_submit_io_passthru64:[[0,3,1,"c.nvme_submit_io_passthru64","cmd"],[0,3,1,"c.nvme_submit_io_passthru64","fd"],[0,3,1,"c.nvme_submit_io_passthru64","result"]],nvme_submit_io_passthru:[[0,3,1,"c.nvme_submit_io_passthru","cmd"],[0,3,1,"c.nvme_submit_io_passthru","fd"],[0,3,1,"c.nvme_submit_io_passthru","result"]],nvme_subsys_filter:[[0,3,1,"c.nvme_subsys_filter","d"]],nvme_subsystem_first_ctrl:[[0,3,1,"c.nvme_subsystem_first_ctrl","s"]],nvme_subsystem_first_ns:[[0,3,1,"c.nvme_subsystem_first_ns","s"]],nvme_subsystem_get_host:[[0,3,1,"c.nvme_subsystem_get_host","s"]],nvme_subsystem_get_name:[[0,3,1,"c.nvme_subsystem_get_name","s"]],nvme_subsystem_get_nqn:[[0,3,1,"c.nvme_subsystem_get_nqn","s"]],nvme_subsystem_get_sysfs_dir:[[0,3,1,"c.nvme_subsystem_get_sysfs_dir","s"]],nvme_subsystem_get_type:[[0,3,1,"c.nvme_subsystem_get_type","s"]],nvme_subsystem_lookup_namespace:[[0,3,1,"c.nvme_subsystem_lookup_namespace","nsid"],[0,3,1,"c.nvme_subsystem_lookup_namespace","s"]],nvme_subsystem_next_ctrl:[[0,3,1,"c.nvme_subsystem_next_ctrl","c"],[0,3,1,"c.nvme_subsystem_next_ctrl","s"]],nvme_subsystem_next_ns:[[0,3,1,"c.nvme_subsystem_next_ns","n"],[0,3,1,"c.nvme_subsystem_next_ns","s"]],nvme_subsystem_reset:[[0,3,1,"c.nvme_subsystem_reset","fd"]],nvme_unlink_ctrl:[[0,3,1,"c.nvme_unlink_ctrl","c"]],nvme_update_config:[[0,3,1,"c.nvme_update_config","r"]],nvme_verify:[[0,3,1,"c.nvme_verify","args"]],nvme_virtual_mgmt:[[0,3,1,"c.nvme_virtual_mgmt","args"]],nvme_write:[[0,3,1,"c.nvme_write","args"]],nvme_write_uncorrectable:[[0,3,1,"c.nvme_write_uncorrectable","args"]],nvme_write_zeros:[[0,3,1,"c.nvme_write_zeros","args"]],nvme_zns_append:[[0,3,1,"c.nvme_zns_append","args"]],nvme_zns_identify_ctrl:[[0,3,1,"c.nvme_zns_identify_ctrl","fd"],[0,3,1,"c.nvme_zns_identify_ctrl","id"]],nvme_zns_identify_ns:[[0,3,1,"c.nvme_zns_identify_ns","data"],[0,3,1,"c.nvme_zns_identify_ns","fd"],[0,3,1,"c.nvme_zns_identify_ns","nsid"]],nvme_zns_mgmt_recv:[[0,3,1,"c.nvme_zns_mgmt_recv","args"]],nvme_zns_mgmt_send:[[0,3,1,"c.nvme_zns_mgmt_send","args"]],nvme_zns_report_zones:[[0,3,1,"c.nvme_zns_report_zones","data"],[0,3,1,"c.nvme_zns_report_zones","data_len"],[0,3,1,"c.nvme_zns_report_zones","extended"],[0,3,1,"c.nvme_zns_report_zones","fd"],[0,3,1,"c.nvme_zns_report_zones","nsid"],[0,3,1,"c.nvme_zns_report_zones","opts"],[0,3,1,"c.nvme_zns_report_zones","partial"],[0,3,1,"c.nvme_zns_report_zones","result"],[0,3,1,"c.nvme_zns_report_zones","slba"],[0,3,1,"c.nvme_zns_report_zones","timeout"]],nvmf_add_ctrl:[[0,3,1,"c.nvmf_add_ctrl","c"],[0,3,1,"c.nvmf_add_ctrl","cfg"],[0,3,1,"c.nvmf_add_ctrl","h"]],nvmf_adrfam_str:[[0,3,1,"c.nvmf_adrfam_str","adrfam"]],nvmf_cms_str:[[0,3,1,"c.nvmf_cms_str","cms"]],nvmf_connect_disc_entry:[[0,3,1,"c.nvmf_connect_disc_entry","defcfg"],[0,3,1,"c.nvmf_connect_disc_entry","discover"],[0,3,1,"c.nvmf_connect_disc_entry","e"],[0,3,1,"c.nvmf_connect_disc_entry","h"]],nvmf_default_config:[[0,3,1,"c.nvmf_default_config","cfg"]],nvmf_eflags_str:[[0,3,1,"c.nvmf_eflags_str","eflags"]],nvmf_get_discovery_log:[[0,3,1,"c.nvmf_get_discovery_log","c"],[0,3,1,"c.nvmf_get_discovery_log","logp"],[0,3,1,"c.nvmf_get_discovery_log","max_retries"]],nvmf_prtype_str:[[0,3,1,"c.nvmf_prtype_str","prtype"]],nvmf_qptype_str:[[0,3,1,"c.nvmf_qptype_str","qptype"]],nvmf_sectype_str:[[0,3,1,"c.nvmf_sectype_str","sectype"]],nvmf_subtype_str:[[0,3,1,"c.nvmf_subtype_str","subtype"]],nvmf_treq_str:[[0,3,1,"c.nvmf_treq_str","treq"]],nvmf_trtype_str:[[0,3,1,"c.nvmf_trtype_str","trtype"]]},objnames:{"0":["c","macro","C macro"],"1":["c","enum","C enum"],"2":["c","function","C function"],"3":["c","functionParam","C function parameter"],"4":["c","struct","C struct"]},objtypes:{"0":"c:macro","1":"c:enum","2":"c:function","3":"c:functionParam","4":"c:struct"},terms:{"0":0,"000":0,"0001":0,"00h":0,"01":0,"01h":0,"02h":0,"06h":0,"08":0,"0a":0,"0h":0,"0x80000000":0,"0xffffffff":0,"1":0,"10":0,"100":0,"1000":0,"10000h":0,"1006":0,"101":0,"102":0,"1024":0,"10b":0,"11":0,"119":0,"12":0,"127":0,"128":0,"12h":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"192":0,"1h":0,"2":0,"20":0,"2001":0,"2014":0,"204":0,"2047":0,"2048":0,"21":0,"22":0,"238":0,"242":0,"246":0,"25":0,"254":0,"255":0,"256":0,"26":0,"27":0,"2763":0,"28":0,"280":0,"29":0,"2bit":0,"3":0,"30":0,"3000":0,"31":0,"32":0,"352":0,"360":0,"362":0,"3712":0,"3808":0,"3828":0,"384":0,"4":0,"40":0,"4016":0,"4032":0,"4080":0,"4081":0,"4094":0,"4095":0,"4122":0,"448":0,"456":0,"48":0,"480":0,"4bit":0,"4k":0,"5":0,"511":0,"512":0,"536":0,"56":0,"6":0,"63":0,"64":0,"64bit":0,"65":0,"7":0,"70h":0,"75":0,"768":0,"7fh":0,"8":0,"80":0,"80h":0,"81h":0,"9":0,"boolean":0,"byte":0,"char":0,"const":0,"default":0,"do":0,"enum":0,"function":0,"int":0,"long":0,"new":0,"null":0,"return":0,"short":0,"static":0,"transient":0,"true":0,"try":0,"void":0,"while":0,A:0,By:0,For:0,If:0,In:0,Is:0,It:0,No:0,Not:0,On:0,One:0,The:0,There:0,These:0,To:0,With:0,__le16:0,__le32:0,__le64:0,__u16:0,__u32:0,__u64:0,__u8:0,_c:0,_h:0,_mask:0,_n:0,_p:0,_s:0,_shift:0,ab:0,abl:0,abort:0,about:0,abov:0,ac:0,access:0,accomplish:0,accuraci:0,achiev:0,acl:0,acquir:0,acr:0,across:0,act:0,action:0,activ:0,actp:0,actual:0,acwu:0,ad:0,add:0,add_hw_err_info:0,addit:0,addr:0,address:0,adjac:0,adjust:0,admin:0,adrfam:0,aerl:0,af_ib:0,af_inet6:0,af_inet:0,affect:0,afi:0,after:0,aggreg:0,al:0,algorithm:0,align:0,aliv:0,all:0,alloc:0,allow:0,alreadi:0,also:0,alter:0,alwai:0,amount:0,an:0,ana:0,ana_grp_id:0,anacap:0,anagrpid:0,anagrpmax:0,analen:0,anatt:0,ani:0,anonym:0,anoth:0,ap:0,append:0,appli:0,applic:0,appmask:0,appropri:0,apptag:0,apst:0,apst_entri:0,apsta:0,apw:0,ar:0,arbitr:0,architectur:0,area:0,arg:0,args_siz:0,argument:0,arrai:0,arrrai:0,ascii:0,asqsz:0,assign:0,associ:0,asymmetr:0,async:0,asynchron:0,atom:0,attach:0,attempt:0,attr:0,attribut:0,atyp:0,aus:0,authent:0,autonom:0,avail:0,avail_spar:0,averag:0,avl_spar:0,avl_spare_threshold:0,avscc:0,awun:0,awupf:0,background:0,backup:0,band:0,bar0:0,base:0,basenam:0,basi:0,becaus:0,becom:0,been:0,begin:0,behavior:0,behvaior:0,being:0,below:0,best:0,better:0,between:0,beyond:0,biaoff:0,bind:0,bing:0,bit:0,blksize:0,block:0,bool:0,boot:0,boot_partition_data:0,both:0,boundari:0,bpid:0,bpinfo:0,bpmbl:0,broadcast:0,buf:0,buffer:0,build:0,burst:0,busi:0,c:0,cach:0,calcul:0,call:0,caller:0,can:0,cap:0,cap_adj_factor:0,cap_adj_fctr:0,cap_config_desc:0,capabl:0,capac:0,capsul:0,captur:0,care:0,cattr:0,caus:0,cc:0,cchan:0,cctemp:0,cd:0,cdw10:0,cdw11:0,cdw12:0,cdw13:0,cdw14:0,cdw15:0,cdw2:0,cdw3:0,cdw_mem:0,cfg:0,chan_config_desc:0,chang:0,changeabl:0,chanid:0,channel:0,chap:0,characterist:0,chardev:0,chchk:0,check:0,checksum:0,chgcnt:0,chipset:0,chipsset:0,chmu:0,ciaoff:0,cid:0,cio:0,cipher:0,cl:0,clear:0,cm:0,cmb:0,cmbsz:0,cmd:0,cmdid:0,cmic:0,cmpc:0,cmpln_info:0,cn:0,cns_specific_id:0,cntid:0,cntlid:0,cntlist:0,cntrltype:0,code:0,comand:0,combin:0,command:0,commit:0,commmand:0,common:0,compani:0,compar:0,complet:0,complex:0,compln_info:0,compos:0,composit:0,comput:0,concurr:0,condit:0,config:0,config_fil:0,configur:0,configurationn:0,conflict:0,connect:0,consecut:0,consist:0,constant:0,construct:0,consum:0,contain:0,content:0,context:0,contigu:0,continu:0,control:0,convent:0,convert:0,copi:0,correspond:0,could:0,count:0,counter:0,cptpl:0,cpu:0,cq:0,cqe:0,crc:0,crd:0,crdt1:0,crdt2:0,crdt3:0,creat:0,creation:0,critic:0,critical_comp_tim:0,critical_warn:0,crkei:0,cross:0,crt:0,crypto:0,cryptograph:0,cs:0,csi:0,cst:0,ctemp:0,ctlid:0,ctratt:0,ctrl:0,ctrl_busy_tim:0,ctrl_loss_tmo:0,ctrl_power_cycl:0,ctrl_time_stamp:0,ctrlavail:0,ctrldgn:0,ctrlist:0,ctx_attr:0,current:0,current_oper:0,cwarn:0,cycl:0,d3:0,d:0,dalb1:0,dalb2:0,dalb3:0,dalb4:0,data:0,data_area:0,data_digest:0,data_len:0,data_units_read:0,data_units_written:0,datagram:0,dataset:0,date:0,dealloc:0,decod:0,defcfg:0,defin:0,definit:0,defint:0,degrad:0,degre:0,delai:0,delet:0,deni:0,denomin:0,depend:0,desc:0,describ:0,descript:0,descriptior:0,descriptor:0,descs_buf:0,desctriptor:0,destiant:0,destin:0,destriptor:0,destroi:0,detach:0,detail:0,detect:0,determin:0,determinist:0,dev:0,devic:0,dh:0,diagnost:0,did:0,differ:0,differenti:0,digest:0,direct:0,directori:0,dirent:0,disabl:0,disable_sqflow:0,disconnect:0,discov:0,discover_ctrl:0,discoveri:0,discovery_ctrl:0,displai:0,distinguish:0,dlfeat:0,dmrl:0,dmrsl:0,dmsl:0,dn:0,doe:0,dom_cap:0,dom_id:0,domain:0,domain_attr:0,domainid:0,domid:0,doorbel:0,doper:0,downlaod:0,download:0,dp:0,dpc:0,driver:0,ds:0,dslba:0,dsm:0,dspec:0,dst:0,dsto:0,dtwin_r:0,dtwin_rt:0,dtwin_t:0,dtwin_tmax:0,dtwin_w:0,dtwin_wt:0,dtwinrt:0,dtwintt:0,dtwinwt:0,dtype:0,due:0,dulb:0,duplic:0,duplicate_connect:0,dupretinfo:0,dure:0,dw0:0,dword0:0,dword11:0,dword12:0,dword15:0,dword:0,dynam:0,e:0,each:0,ec:0,ecc:0,ed:0,edstt:0,ee:0,effect:0,effects_log:0,eflag:0,eg:0,egchan:0,egid:0,egset:0,egwarn:0,ehl:0,eight:0,eilbrt:0,einval:0,either:0,el:0,elast:0,elbaf:0,elbat:0,elbatm:0,elbrt:0,elbst:0,elem:0,element:0,element_id:0,elen:0,elp:0,empti:0,enabl:0,enclosur:0,encod:0,encount:0,encrypt:0,end:0,end_est:0,endgid:0,endgidmax:0,endgrp_id:0,endian:0,endir:0,endpoint:0,endu_grp_crit_warn_sumri:0,endur:0,endurance_estim:0,enhanc:0,enlat:0,ensur:0,ent:0,enter:0,entri:0,environ:0,envme_connect_aarg:0,envme_connect_addrfam:0,envme_connect_inval_tr:0,envme_connect_lookup_subsi:0,envme_connect_lookup_subsys_nam:0,envme_connect_open:0,envme_connect_pars:0,envme_connect_read:0,envme_connect_resolv:0,envme_connect_targ:0,envme_connect_traddr:0,envme_connect_writ:0,epcsd:0,equal:0,er:0,eras:0,err:0,err_log:0,errno:0,error:0,error_count:0,establish:0,estim:0,estulb:0,et:0,etb:0,etbend:0,etc:0,etcend:0,eto:0,etond:0,etyp:0,etype_rev:0,eui64:0,eui:0,eval:0,even:0,event:0,event_typ:0,exampl:0,exce:0,exceed:0,except:0,exchang:0,exclud:0,exclus:0,execut:0,exhid:0,exist:0,exit:0,exlat:0,expect:0,experienc:0,expir:0,explicit:0,express:0,extend:0,extens:0,extract:0,f:0,fabric:0,factor:0,fail:0,failur:0,fall:0,fallen:0,fals:0,famili:0,fast:0,fast_io_fail_tmo:0,fatal:0,fault:0,fcatt:0,fd:0,featur:0,fewer:0,ff:0,ffefh:0,fffeh:0,ffffffff_ffffffffh:0,ffffffffh:0,ffffh:0,ffh:0,fguid:0,fibr:0,fid:0,fid_support:0,field:0,file:0,filedescriptor:0,filenam:0,filetyp:0,fill:0,filter:0,finish:0,firmwar:0,first:0,five:0,fix:0,flag:0,flba:0,flexibl:0,flow:0,flush:0,fna:0,follow:0,forc:0,form:0,format:0,format_nvm_cdw10:0,format_nvm_statu:0,found:0,four:0,fp:0,fpi:0,fr:0,fraction:0,free:0,frequenc:0,frl1:0,frl2:0,frl3:0,frl:0,frmw:0,from:0,fru:0,fua:0,full:0,functionn:0,fuse:0,futur:0,fw_act:0,fw_commit_act:0,fw_log:0,fw_slot:0,fwug:0,g:0,gen:0,gen_numb:0,genctr:0,gener:0,get:0,given:0,global:0,go:0,good:0,gr_list:0,granular:0,greater:0,group:0,grpid:0,guarante:0,guard:0,guarnate:0,guid:0,h:0,ha:0,had:0,handl:0,have:0,hchksum:0,hctma:0,hdr_digest:0,header:0,health:0,heavi:0,held:0,helper:0,here:0,highest:0,hint:0,hmac:0,hmdlal:0,hmdlau:0,hmdlec:0,hmmaxd:0,hmmin:0,hmmind:0,hmpre:0,hold:0,host:0,host_ifac:0,host_read:0,host_read_cmd:0,host_traddr:0,host_writ:0,host_write_cmd:0,hostid:0,hostnqn:0,hour:0,how:0,howev:0,hpw:0,hsize:0,i12vapsr:0,i18vpwr:0,i2c:0,i33vpwr:0,i5vapsr:0,i:0,icdoff:0,icsvscc:0,id:0,ident:0,identif:0,identifi:0,identifieri:0,idl:0,idlp:0,ieee:0,iekei:0,ifc:0,ignor:0,iindic:0,ilbrt:0,imag:0,immedi:0,impact:0,impicit:0,implement:0,inaccess:0,incap:0,includ:0,incompat:0,inconsist:0,increas:0,increment:0,indentifi:0,independ:0,indetermin:0,index:0,indic:0,individu:0,infiniband:0,info:0,inform:0,inhibit:0,initi:0,insert:0,insid:0,instanc:0,instead:0,insuffici:0,integr:0,intend:0,interfac:0,intern:0,interpret:0,interrupt:0,intra:0,introduc:0,invalid:0,inventori:0,invert:0,io:0,ioc:0,ioccsz:0,iocsc:0,ioctl:0,iorcsz:0,iov:0,ip:0,ipmiv:0,ipv4:0,ipv6:0,isol:0,issu:0,iter:0,its:0,iuaoff:0,iv:0,iwarp:0,json:0,ka:0,keep:0,keep_alive_tmo:0,kei:0,kelvin:0,kernel:0,key_len:0,kib:0,know:0,known:0,l:0,lack:0,lagest:0,larg:0,largest:0,last:0,latch:0,latenc:0,later:0,layer:0,layout:0,lba:0,lba_rd:0,lbaf:0,lbafe:0,lbat:0,lbatm:0,lbstm:0,least:0,len:0,lenght:0,length:0,less:0,level:0,lhl:0,libnvm:0,librari:0,lid:0,lid_support:0,life:0,like:0,limit:0,linux:0,list:0,llba:0,load:0,locat:0,lock:0,lockdown:0,log:0,log_id:0,log_level:0,log_pid:0,log_tstamp:0,logic:0,logp:0,longer:0,look:0,lookup:0,loopback:0,loss:0,lost:0,low:0,lower:0,lpa:0,lpc:0,lpi:0,lpo:0,lpw:0,lr:0,ls:0,lsgc:0,lsi:0,lsipi:0,lsiri:0,lslplen:0,lsp:0,lvl:0,m12vapsr:0,m18vpwr:0,m33vapsr:0,m33vpwr:0,m5vapsr:0,machin:0,made:0,mai:0,manag:0,mani:0,manner:0,manufactur:0,mar:0,mark:0,mask:0,match:0,max:0,max_egrp_dom_cap:0,max_retri:0,maxcmd:0,maxcna:0,maxdna:0,maximum:0,mc:0,mcl:0,mctp:0,mdt:0,mean:0,meb:0,mec:0,mechan:0,media:0,media_data_integrity_err:0,media_error:0,media_units_written:0,megcap:0,member:0,memori:0,merg:0,messag:0,metadata:0,metadata_len:0,method:0,mi:0,mib:0,microsecond:0,millisecod:0,millisecond:0,minim:0,minimum:0,minut:0,miscompar:0,mismatch:0,miss:0,mjr:0,ml_secs_since_reset:0,mlw:0,mmctptu:0,mme_addr:0,mme_freq:0,mmio:0,mn:0,mnan:0,mndw:0,mnr:0,mntmt:0,mode:0,model:0,modif:0,modifi:0,mor:0,more:0,most:0,mp:0,mpsmin:0,mpw:0,mrioff:0,ms:0,msdbd:0,mset:0,msl:0,msrc:0,mssrl:0,mtfa:0,mtl:0,mu:0,mu_config_desc:0,muc:0,mudl:0,muid:0,multi:0,multipath:0,multipl:0,multipli:0,mus_desc:0,must:0,mvpd_freq:0,mxtmt:0,n:0,nabo:0,nabsn:0,nabspf:0,nacwu:0,nalp:0,name:0,namepsac:0,namesapc:0,namespac:0,nanagrpid:0,nanosecond:0,nativ:0,nawun:0,nawupf:0,ncap:0,ncapgran:0,ndesc:0,ndm:0,ndt:0,ndwin_tmin_hi:0,ndwin_tmin_lo:0,need:0,neg:0,negoti:0,neid:0,never:0,new_fw_rev:0,newli:0,next:0,ngrp:0,nguid:0,nid:0,nidl:0,nidt:0,nlb:0,nlbaf:0,nlrd:0,nlsd:0,nlslne:0,nlw:0,nmic:0,nmra:0,nmravn:0,nmu:0,nmve:0,nn:0,nnsid:0,noda:0,node:0,nodrm:0,noiob:0,nomin:0,non:0,none:0,noppm:0,normal:0,notic:0,notif:0,now:0,npda:0,npdg:0,nppmravn:0,npss:0,npwa:0,npwg:0,nqn:0,nr:0,nr_entri:0,nr_io_queu:0,nr_poll_queu:0,nr_rang:0,nr_write_queu:0,nr_zone:0,nrkei:0,nrzid:0,ns:0,ns_list:0,ns_log:0,nsa:0,nsattr:0,nscap:0,nsetidmax:0,nsfeat:0,nsid:0,nsmgt_cdw10:0,nso:0,nsr:0,nss:0,nss_hw_err_event_cod:0,nssa:0,nssc:0,nssf:0,nsso:0,nstat:0,nsze:0,nszegran:0,nulbaf:0,num:0,num_ctrl:0,num_descriptor:0,num_entri:0,num_err_info_log_entri:0,num_err_log_entri:0,numa:0,number:0,numcmd:0,numer:0,nump:0,numrec:0,numver:0,numzrwa:0,nuse:0,nvi:0,nvm:0,nvmcap:0,nvme1:0,nvme:0,nvme_add_ctrl:0,nvme_admin_abort_cmd:0,nvme_admin_async_ev:0,nvme_admin_capacity_mgmt:0,nvme_admin_create_cq:0,nvme_admin_create_sq:0,nvme_admin_dbbuf:0,nvme_admin_delete_cq:0,nvme_admin_delete_sq:0,nvme_admin_dev_self_test:0,nvme_admin_directive_recv:0,nvme_admin_directive_send:0,nvme_admin_fabr:0,nvme_admin_format_nvm:0,nvme_admin_fw_activ:0,nvme_admin_fw_commit:0,nvme_admin_fw_download:0,nvme_admin_get_featur:0,nvme_admin_get_lba_statu:0,nvme_admin_get_log_pag:0,nvme_admin_identifi:0,nvme_admin_keep_al:0,nvme_admin_lockdown:0,nvme_admin_ns_attach:0,nvme_admin_ns_mgmt:0,nvme_admin_nvme_mi_recv:0,nvme_admin_nvme_mi_send:0,nvme_admin_opcod:0,nvme_admin_passthru64:0,nvme_admin_passthru:0,nvme_admin_sanitize_nvm:0,nvme_admin_security_recv:0,nvme_admin_security_send:0,nvme_admin_set_featur:0,nvme_admin_virtual_mgmt:0,nvme_ae_info_css_nvm:0,nvme_ae_info_error:0,nvme_ae_info_notic:0,nvme_ae_info_smart:0,nvme_ae_typ:0,nvme_aer_css:0,nvme_aer_css_nvm_reserv:0,nvme_aer_css_nvm_sanitize_complet:0,nvme_aer_css_nvm_unexpected_sanitize_dealloc:0,nvme_aer_error:0,nvme_aer_error_diag_failur:0,nvme_aer_error_fw_image_load_error:0,nvme_aer_error_invalid_db_reg:0,nvme_aer_error_invalid_db_v:0,nvme_aer_error_persistent_internal_error:0,nvme_aer_error_transient_internal_error:0,nvme_aer_notic:0,nvme_aer_notice_ana:0,nvme_aer_notice_disc_chang:0,nvme_aer_notice_eg_ev:0,nvme_aer_notice_fw_act_start:0,nvme_aer_notice_lba_status_alert:0,nvme_aer_notice_ns_chang:0,nvme_aer_notice_pl_ev:0,nvme_aer_notice_telemetri:0,nvme_aer_smart:0,nvme_aer_smart_spare_threshold:0,nvme_aer_smart_subsystem_reli:0,nvme_aer_smart_temperature_threshold:0,nvme_aer_v:0,nvme_aggregate_endurance_group_ev:0,nvme_aggregate_predictable_lat_ev:0,nvme_ana_group_desc:0,nvme_ana_log:0,nvme_ana_rsp_hdr:0,nvme_ana_st:0,nvme_ana_state_chang:0,nvme_ana_state_inaccess:0,nvme_ana_state_nonoptim:0,nvme_ana_state_optim:0,nvme_ana_state_persistent_loss:0,nvme_apst_entri:0,nvme_apst_entry_itps_mask:0,nvme_apst_entry_itps_shift:0,nvme_apst_entry_itpt_mask:0,nvme_apst_entry_itpt_shift:0,nvme_boot_partit:0,nvme_capacity_config_desc:0,nvme_capacity_mgmt:0,nvme_capacity_mgmt_arg:0,nvme_change_ns_ev:0,nvme_channel_config_desc:0,nvme_chomp:0,nvme_cmb_siz:0,nvme_cmd_compar:0,nvme_cmd_copi:0,nvme_cmd_dsm:0,nvme_cmd_effect:0,nvme_cmd_effects_ccc:0,nvme_cmd_effects_cse_mask:0,nvme_cmd_effects_csupp:0,nvme_cmd_effects_lbcc:0,nvme_cmd_effects_log:0,nvme_cmd_effects_n:0,nvme_cmd_effects_ncc:0,nvme_cmd_effects_uuid_sel:0,nvme_cmd_flush:0,nvme_cmd_format_mset:0,nvme_cmd_format_pi:0,nvme_cmd_format_pil:0,nvme_cmd_format_s:0,nvme_cmd_get_log_lid:0,nvme_cmd_get_log_telemetry_host_lsp:0,nvme_cmd_read:0,nvme_cmd_resv_acquir:0,nvme_cmd_resv_regist:0,nvme_cmd_resv_releas:0,nvme_cmd_resv_report:0,nvme_cmd_verifi:0,nvme_cmd_writ:0,nvme_cmd_write_uncor:0,nvme_cmd_write_zero:0,nvme_cnsspecid_non:0,nvme_cntlid_non:0,nvme_compar:0,nvme_connect_err:0,nvme_const:0,nvme_copi:0,nvme_copy_arg:0,nvme_copy_rang:0,nvme_create_ctrl:0,nvme_create_root:0,nvme_csi:0,nvme_csi_nvm:0,nvme_csi_zn:0,nvme_ctrl:0,nvme_ctrl_anacap_chang:0,nvme_ctrl_anacap_grpid_mgmt:0,nvme_ctrl_anacap_grpid_no_chg:0,nvme_ctrl_anacap_inaccess:0,nvme_ctrl_anacap_non_opt:0,nvme_ctrl_anacap_opt:0,nvme_ctrl_anacap_persistent_loss:0,nvme_ctrl_apsta_apst:0,nvme_ctrl_avscc_av:0,nvme_ctrl_cmic_multi_ana_report:0,nvme_ctrl_cmic_multi_ctrl:0,nvme_ctrl_cmic_multi_port:0,nvme_ctrl_cmic_multi_sriov:0,nvme_ctrl_cntrltype_admin:0,nvme_ctrl_cntrltype_discoveri:0,nvme_ctrl_cntrltype_io:0,nvme_ctrl_cqes_max:0,nvme_ctrl_cqes_min:0,nvme_ctrl_ctratt_128_id:0,nvme_ctrl_ctratt_del_endurance_group:0,nvme_ctrl_ctratt_del_nvm_set:0,nvme_ctrl_ctratt_elba:0,nvme_ctrl_ctratt_endurance_group:0,nvme_ctrl_ctratt_fixed_cap:0,nvme_ctrl_ctratt_md:0,nvme_ctrl_ctratt_namespace_granular:0,nvme_ctrl_ctratt_non_op_psp:0,nvme_ctrl_ctratt_nvm_set:0,nvme_ctrl_ctratt_predictable_lat:0,nvme_ctrl_ctratt_read_recv_lvl:0,nvme_ctrl_ctratt_sq_associ:0,nvme_ctrl_ctratt_tbka:0,nvme_ctrl_ctratt_uuid_list:0,nvme_ctrl_ctratt_variable_cap:0,nvme_ctrl_dsto_one_dst:0,nvme_ctrl_fcatt_dynam:0,nvme_ctrl_first_n:0,nvme_ctrl_first_path:0,nvme_ctrl_fna_crypto_eras:0,nvme_ctrl_fna_fmt_all_namespac:0,nvme_ctrl_fna_sec_all_namespac:0,nvme_ctrl_for_each_n:0,nvme_ctrl_for_each_ns_saf:0,nvme_ctrl_for_each_path:0,nvme_ctrl_for_each_path_saf:0,nvme_ctrl_frmw_1st_ro:0,nvme_ctrl_frmw_fw_act_no_reset:0,nvme_ctrl_frmw_nr_slot:0,nvme_ctrl_fuses_compare_and_writ:0,nvme_ctrl_get_address:0,nvme_ctrl_get_config:0,nvme_ctrl_get_dhchap_kei:0,nvme_ctrl_get_fd:0,nvme_ctrl_get_firmwar:0,nvme_ctrl_get_host_ifac:0,nvme_ctrl_get_host_traddr:0,nvme_ctrl_get_model:0,nvme_ctrl_get_nam:0,nvme_ctrl_get_numa_nod:0,nvme_ctrl_get_queue_count:0,nvme_ctrl_get_seri:0,nvme_ctrl_get_sqs:0,nvme_ctrl_get_st:0,nvme_ctrl_get_subsysnqn:0,nvme_ctrl_get_subsystem:0,nvme_ctrl_get_sysfs_dir:0,nvme_ctrl_get_traddr:0,nvme_ctrl_get_transport:0,nvme_ctrl_get_trsvcid:0,nvme_ctrl_hctma_hctm:0,nvme_ctrl_identifi:0,nvme_ctrl_is_discov:0,nvme_ctrl_is_discovery_ctrl:0,nvme_ctrl_is_persist:0,nvme_ctrl_list:0,nvme_ctrl_lpa_cmd_effect:0,nvme_ctrl_lpa_extend:0,nvme_ctrl_lpa_persetent_ev:0,nvme_ctrl_lpa_smart_per_n:0,nvme_ctrl_lpa_telemetri:0,nvme_ctrl_mec_pciem:0,nvme_ctrl_mec_smbusm:0,nvme_ctrl_metadata_chipset_drv_nam:0,nvme_ctrl_metadata_chipset_drv_vers:0,nvme_ctrl_metadata_display_drv_nam:0,nvme_ctrl_metadata_display_drv_vers:0,nvme_ctrl_metadata_firmware_vers:0,nvme_ctrl_metadata_host_det_fail_rec:0,nvme_ctrl_metadata_os_ctrl_nam:0,nvme_ctrl_metadata_os_driver_filenam:0,nvme_ctrl_metadata_os_driver_nam:0,nvme_ctrl_metadata_os_driver_v:0,nvme_ctrl_metadata_os_name_and_build:0,nvme_ctrl_metadata_pre_boot_ctrl_nam:0,nvme_ctrl_metadata_pre_boot_driver_nam:0,nvme_ctrl_metadata_pre_boot_driver_v:0,nvme_ctrl_metadata_sys_proc_model:0,nvme_ctrl_metadata_sys_prod_nam:0,nvme_ctrl_metadata_typ:0,nvme_ctrl_next_n:0,nvme_ctrl_next_path:0,nvme_ctrl_nvmsr_nvme:0,nvme_ctrl_nvmsr_nvmesd:0,nvme_ctrl_nvscc_fmt:0,nvme_ctrl_nwpc_write_protect:0,nvme_ctrl_nwpc_write_protect_perman:0,nvme_ctrl_nwpc_write_protect_power_cycl:0,nvme_ctrl_oacs_dbbuf_cfg:0,nvme_ctrl_oacs_direct:0,nvme_ctrl_oacs_format:0,nvme_ctrl_oacs_fw:0,nvme_ctrl_oacs_lba_statu:0,nvme_ctrl_oacs_ns_mgmt:0,nvme_ctrl_oacs_nvme_mi:0,nvme_ctrl_oacs_secur:0,nvme_ctrl_oacs_self_test:0,nvme_ctrl_oacs_virt_mgmt:0,nvme_ctrl_oaes_ana:0,nvme_ctrl_oaes_dl:0,nvme_ctrl_oaes_eg:0,nvme_ctrl_oaes_fa:0,nvme_ctrl_oaes_lba:0,nvme_ctrl_oaes_n:0,nvme_ctrl_oaes_na:0,nvme_ctrl_oaes_plea:0,nvme_ctrl_oaes_zd:0,nvme_ctrl_ofcs_disconnect:0,nvme_ctrl_oncs_compar:0,nvme_ctrl_oncs_dsm:0,nvme_ctrl_oncs_reserv:0,nvme_ctrl_oncs_save_featur:0,nvme_ctrl_oncs_timestamp:0,nvme_ctrl_oncs_verifi:0,nvme_ctrl_oncs_write_uncorrect:0,nvme_ctrl_oncs_write_zero:0,nvme_ctrl_reset:0,nvme_ctrl_rpmbs_access_s:0,nvme_ctrl_rpmbs_auth_method:0,nvme_ctrl_rpmbs_nr_unit:0,nvme_ctrl_rpmbs_total_s:0,nvme_ctrl_sanicap_b:0,nvme_ctrl_sanicap_c:0,nvme_ctrl_sanicap_ndi:0,nvme_ctrl_sanicap_nodmma:0,nvme_ctrl_sanicap_ow:0,nvme_ctrl_set_dhchap_kei:0,nvme_ctrl_set_discov:0,nvme_ctrl_set_discovery_ctrl:0,nvme_ctrl_set_persist:0,nvme_ctrl_sgls_bit_bucket:0,nvme_ctrl_sgls_kei:0,nvme_ctrl_sgls_mptr_byte_align:0,nvme_ctrl_sgls_mptr_sgl:0,nvme_ctrl_sgls_offset:0,nvme_ctrl_sgls_overs:0,nvme_ctrl_sgls_support:0,nvme_ctrl_sgls_tport:0,nvme_ctrl_sqes_max:0,nvme_ctrl_sqes_min:0,nvme_ctrl_t:0,nvme_ctrl_vwc_flush:0,nvme_ctrl_vwc_pres:0,nvme_ctrl_vwci_vwcr:0,nvme_ctrl_vwci_vwcrv:0,nvme_ctrls_filt:0,nvme_default_host:0,nvme_dev_self_test:0,nvme_dev_self_test_arg:0,nvme_directive_dtyp:0,nvme_directive_dtype_identifi:0,nvme_directive_dtype_stream:0,nvme_directive_receive_dop:0,nvme_directive_receive_identify_doper_param:0,nvme_directive_receive_streams_doper_param:0,nvme_directive_receive_streams_doper_resourc:0,nvme_directive_receive_streams_doper_statu:0,nvme_directive_recv:0,nvme_directive_recv_arg:0,nvme_directive_recv_identify_paramet:0,nvme_directive_recv_stream_alloc:0,nvme_directive_recv_stream_paramet:0,nvme_directive_recv_stream_statu:0,nvme_directive_send:0,nvme_directive_send_arg:0,nvme_directive_send_dop:0,nvme_directive_send_id_endir:0,nvme_directive_send_identify_doper_endir:0,nvme_directive_send_identify_endir:0,nvme_directive_send_identify_endir_dis:0,nvme_directive_send_identify_endir_en:0,nvme_directive_send_stream_release_identifi:0,nvme_directive_send_stream_release_resourc:0,nvme_directive_send_streams_doper_release_identifi:0,nvme_directive_send_streams_doper_release_resourc:0,nvme_directive_typ:0,nvme_disconnect_ctrl:0,nvme_dsm:0,nvme_dsm_arg:0,nvme_dsm_attribut:0,nvme_dsm_max_rang:0,nvme_dsm_rang:0,nvme_dsmgmt_ad:0,nvme_dsmgmt_idr:0,nvme_dsmgmt_idw:0,nvme_dst_stc:0,nvme_dst_stc_abort:0,nvme_dst_stc_long:0,nvme_dst_stc_short:0,nvme_dst_stc_v:0,nvme_dump_config:0,nvme_eg_critical_warning_degrad:0,nvme_eg_critical_warning_flag:0,nvme_eg_critical_warning_read_onli:0,nvme_eg_critical_warning_spar:0,nvme_eg_event_aggregate_log:0,nvme_enable_acr:0,nvme_end_grp_chan_desc:0,nvme_end_grp_config_desc:0,nvme_endurance_group_log:0,nvme_err_pel:0,nvme_err_pel_bit_mask:0,nvme_err_pel_byte_mask:0,nvme_errno_to_str:0,nvme_error_log_pag:0,nvme_fabrics_config:0,nvme_fabrics_type_auth_rec:0,nvme_fabrics_type_auth_send:0,nvme_fabrics_type_connect:0,nvme_fabrics_type_disconnect:0,nvme_fabrics_type_property_get:0,nvme_fabrics_type_property_set:0,nvme_fctyp:0,nvme_feat:0,nvme_feat_ae_ana_mask:0,nvme_feat_ae_ana_shift:0,nvme_feat_ae_ega_mask:0,nvme_feat_ae_ega_shift:0,nvme_feat_ae_fw_mask:0,nvme_feat_ae_fw_shift:0,nvme_feat_ae_lbas_mask:0,nvme_feat_ae_lbas_shift:0,nvme_feat_ae_nan_mask:0,nvme_feat_ae_nan_shift:0,nvme_feat_ae_pla_mask:0,nvme_feat_ae_pla_shift:0,nvme_feat_ae_smart_mask:0,nvme_feat_ae_smart_shift:0,nvme_feat_ae_telem_mask:0,nvme_feat_ae_telem_shift:0,nvme_feat_apst_apste_mask:0,nvme_feat_apst_apste_shift:0,nvme_feat_arbitration_burst_mask:0,nvme_feat_arbitration_burst_shift:0,nvme_feat_arbitration_hpw_mask:0,nvme_feat_arbitration_hpw_shift:0,nvme_feat_arbitration_lpw_mask:0,nvme_feat_arbitration_lpw_shift:0,nvme_feat_arbitration_mpw_mask:0,nvme_feat_arbitration_mpw_shift:0,nvme_feat_auto_pst:0,nvme_feat_eg_egcw_mask:0,nvme_feat_eg_egcw_shift:0,nvme_feat_eg_endgid_mask:0,nvme_feat_eg_endgid_shift:0,nvme_feat_error_recovery_dulbe_mask:0,nvme_feat_error_recovery_dulbe_shift:0,nvme_feat_error_recovery_tler_mask:0,nvme_feat_error_recovery_tler_shift:0,nvme_feat_fid_arbitr:0,nvme_feat_fid_async_ev:0,nvme_feat_fid_auto_pst:0,nvme_feat_fid_ctrl_metadata:0,nvme_feat_fid_endurance_evt_cfg:0,nvme_feat_fid_enh_ctrl_metadata:0,nvme_feat_fid_err_recoveri:0,nvme_feat_fid_hctm:0,nvme_feat_fid_host_behavior:0,nvme_feat_fid_host_id:0,nvme_feat_fid_host_mem_buf:0,nvme_feat_fid_iocs_profil:0,nvme_feat_fid_irq_coalesc:0,nvme_feat_fid_irq_config:0,nvme_feat_fid_kato:0,nvme_feat_fid_lba_rang:0,nvme_feat_fid_lba_sts_interv:0,nvme_feat_fid_nopsc:0,nvme_feat_fid_ns_metadata:0,nvme_feat_fid_num_queu:0,nvme_feat_fid_plm_config:0,nvme_feat_fid_plm_window:0,nvme_feat_fid_power_mgmt:0,nvme_feat_fid_resv_mask:0,nvme_feat_fid_resv_persist:0,nvme_feat_fid_rrl:0,nvme_feat_fid_sanit:0,nvme_feat_fid_spinup_control:0,nvme_feat_fid_sw_progress:0,nvme_feat_fid_temp_thresh:0,nvme_feat_fid_timestamp:0,nvme_feat_fid_volatile_wc:0,nvme_feat_fid_write_atom:0,nvme_feat_fid_write_protect:0,nvme_feat_hctm_tmt1_mask:0,nvme_feat_hctm_tmt1_shift:0,nvme_feat_hctm_tmt2_mask:0,nvme_feat_hctm_tmt2_shift:0,nvme_feat_hmem_ehm_mask:0,nvme_feat_hmem_ehm_shift:0,nvme_feat_host_behavior:0,nvme_feat_hostid_exhid_mask:0,nvme_feat_hostid_exhid_shift:0,nvme_feat_icfg_cd_mask:0,nvme_feat_icfg_cd_shift:0,nvme_feat_icfg_iv_mask:0,nvme_feat_icfg_iv_shift:0,nvme_feat_iocsp_iocsci_mask:0,nvme_feat_iocsp_iocsci_shift:0,nvme_feat_irqc_thr_mask:0,nvme_feat_irqc_thr_shift:0,nvme_feat_irqc_time_mask:0,nvme_feat_irqc_time_shift:0,nvme_feat_lba_range_max:0,nvme_feat_lbar_nr_mask:0,nvme_feat_lbar_nr_shift:0,nvme_feat_lbas_lsipi_mask:0,nvme_feat_lbas_lsipi_shift:0,nvme_feat_lbas_lsiri_mask:0,nvme_feat_lbas_lsiri_shift:0,nvme_feat_nops_noppme_mask:0,nvme_feat_nops_noppme_shift:0,nvme_feat_nrqs_ncqr_mask:0,nvme_feat_nrqs_ncqr_shift:0,nvme_feat_nrqs_nsqr_mask:0,nvme_feat_nrqs_nsqr_shift:0,nvme_feat_ns_no_write_protect:0,nvme_feat_ns_write_protect:0,nvme_feat_ns_write_protect_perman:0,nvme_feat_ns_write_protect_pwr_cycl:0,nvme_feat_nswpcfg_st:0,nvme_feat_plm_plme_mask:0,nvme_feat_plm_plme_shift:0,nvme_feat_plm_window_select:0,nvme_feat_plmw_ws_mask:0,nvme_feat_plmw_ws_shift:0,nvme_feat_pwrmgmt_ps_mask:0,nvme_feat_pwrmgmt_ps_shift:0,nvme_feat_pwrmgmt_wh_mask:0,nvme_feat_pwrmgmt_wh_shift:0,nvme_feat_resv_notify_flag:0,nvme_feat_resv_notify_regpr:0,nvme_feat_resv_notify_respr:0,nvme_feat_resv_notify_resrel:0,nvme_feat_rm_regpre_mask:0,nvme_feat_rm_regpre_shift:0,nvme_feat_rm_respre_mask:0,nvme_feat_rm_respre_shift:0,nvme_feat_rm_resrel_mask:0,nvme_feat_rm_resrel_shift:0,nvme_feat_rp_ptpl_mask:0,nvme_feat_rp_ptpl_shift:0,nvme_feat_rrl_rrl_mask:0,nvme_feat_rrl_rrl_shift:0,nvme_feat_sc_nodrm_mask:0,nvme_feat_sc_nodrm_shift:0,nvme_feat_spm_pbslc_mask:0,nvme_feat_spm_pbslc_shift:0,nvme_feat_tmpthresh_thsel:0,nvme_feat_tt_thsel_mask:0,nvme_feat_tt_thsel_shift:0,nvme_feat_tt_tmpsel_mask:0,nvme_feat_tt_tmpsel_shift:0,nvme_feat_tt_tmpth_mask:0,nvme_feat_tt_tmpth_shift:0,nvme_feat_vwc_wce_mask:0,nvme_feat_vwc_wce_shift:0,nvme_feat_wa_dn_mask:0,nvme_feat_wa_dn_shift:0,nvme_feat_wp_wps_mask:0,nvme_feat_wp_wps_shift:0,nvme_feature_aencfg_notice_ana_chang:0,nvme_feature_aencfg_notice_discovery_chang:0,nvme_feature_aencfg_notice_eg_ev:0,nvme_feature_aencfg_notice_firmware_activ:0,nvme_feature_aencfg_notice_lba_statu:0,nvme_feature_aencfg_notice_namespace_attribut:0,nvme_feature_aencfg_notice_pl_ev:0,nvme_feature_aencfg_notice_telemetry_log:0,nvme_feature_aencfg_smart_crit_degrad:0,nvme_feature_aencfg_smart_crit_read_onli:0,nvme_feature_aencfg_smart_crit_read_only_pmr:0,nvme_feature_aencfg_smart_crit_spar:0,nvme_feature_aencfg_smart_crit_temperatur:0,nvme_feature_aencfg_smart_crit_volatile_backup:0,nvme_feature_plm_dtwin:0,nvme_feature_plm_ndwin:0,nvme_feature_tempthresh_thsel_ov:0,nvme_feature_tempthresh_thsel_und:0,nvme_features_async_event_config_flag:0,nvme_features_id:0,nvme_fid_supported_effect:0,nvme_fid_supported_effects_ccc:0,nvme_fid_supported_effects_fsupp:0,nvme_fid_supported_effects_log:0,nvme_fid_supported_effects_n:0,nvme_fid_supported_effects_ncc:0,nvme_fid_supported_effects_scope_ctrl:0,nvme_fid_supported_effects_scope_domain:0,nvme_fid_supported_effects_scope_endgrp:0,nvme_fid_supported_effects_scope_mask:0,nvme_fid_supported_effects_scope_n:0,nvme_fid_supported_effects_scope_nss:0,nvme_fid_supported_effects_scope_nvm_set:0,nvme_fid_supported_effects_scope_shift:0,nvme_fid_supported_effects_udcc:0,nvme_fid_supported_effects_uuid_sel:0,nvme_firmware_slot:0,nvme_first_host:0,nvme_first_subsystem:0,nvme_flush:0,nvme_for_each_host:0,nvme_for_each_host_saf:0,nvme_for_each_subsystem:0,nvme_for_each_subsystem_saf:0,nvme_format_mset_extend:0,nvme_format_mset_separ:0,nvme_format_nvm:0,nvme_format_nvm_arg:0,nvme_format_nvm_compln_ev:0,nvme_format_nvm_start_ev:0,nvme_format_nvme_arg:0,nvme_format_pi_dis:0,nvme_format_pi_type1:0,nvme_format_pi_type2:0,nvme_format_pi_type3:0,nvme_format_pil_first:0,nvme_format_pil_last:0,nvme_format_ses_crypto_eras:0,nvme_format_ses_non:0,nvme_format_ses_user_data_eras:0,nvme_free_ctrl:0,nvme_free_host:0,nvme_free_n:0,nvme_free_subsystem:0,nvme_free_tre:0,nvme_fw_commit:0,nvme_fw_commit_arg:0,nvme_fw_commit_ca:0,nvme_fw_commit_ca_activate_boot_partit:0,nvme_fw_commit_ca_replac:0,nvme_fw_commit_ca_replace_and_activ:0,nvme_fw_commit_ca_replace_and_activate_immedi:0,nvme_fw_commit_ca_replace_boot_partit:0,nvme_fw_commit_ca_set_act:0,nvme_fw_commit_ev:0,nvme_fw_download:0,nvme_fw_download_arg:0,nvme_fw_download_seq:0,nvme_gen_dhchap_kei:0,nvme_get:0,nvme_get_ana_log_len:0,nvme_get_attr:0,nvme_get_ctrl_attr:0,nvme_get_ctrl_telemetri:0,nvme_get_directive_receive_length:0,nvme_get_featur:0,nvme_get_feature_length:0,nvme_get_features_arbitr:0,nvme_get_features_arg:0,nvme_get_features_async_ev:0,nvme_get_features_auto_pst:0,nvme_get_features_data:0,nvme_get_features_endurance_event_cfg:0,nvme_get_features_err_recoveri:0,nvme_get_features_hctm:0,nvme_get_features_host_behavior:0,nvme_get_features_host_id:0,nvme_get_features_host_mem_buf:0,nvme_get_features_iocs_profil:0,nvme_get_features_irq_coalesc:0,nvme_get_features_irq_config:0,nvme_get_features_kato:0,nvme_get_features_lba_rang:0,nvme_get_features_lba_sts_interv:0,nvme_get_features_nopsc:0,nvme_get_features_num_queu:0,nvme_get_features_plm_config:0,nvme_get_features_plm_window:0,nvme_get_features_power_mgmt:0,nvme_get_features_resv_mask:0,nvme_get_features_resv_persist:0,nvme_get_features_rrl:0,nvme_get_features_sanit:0,nvme_get_features_sel:0,nvme_get_features_sel_curr:0,nvme_get_features_sel_default:0,nvme_get_features_sel_sav:0,nvme_get_features_sel_support:0,nvme_get_features_simpl:0,nvme_get_features_sw_progress:0,nvme_get_features_temp_thresh:0,nvme_get_features_timestamp:0,nvme_get_features_volatile_wc:0,nvme_get_features_write_atom:0,nvme_get_features_write_protect:0,nvme_get_host_telemetri:0,nvme_get_lba_statu:0,nvme_get_lba_status_arg:0,nvme_get_lba_status_log:0,nvme_get_log:0,nvme_get_log_ana:0,nvme_get_log_ana_group:0,nvme_get_log_ana_lsp:0,nvme_get_log_arg:0,nvme_get_log_boot_partit:0,nvme_get_log_changed_ns_list:0,nvme_get_log_cmd_effect:0,nvme_get_log_create_telemetry_host:0,nvme_get_log_device_self_test:0,nvme_get_log_discoveri:0,nvme_get_log_endurance_group:0,nvme_get_log_endurance_grp_evt:0,nvme_get_log_error:0,nvme_get_log_fid_supported_effect:0,nvme_get_log_fw_slot:0,nvme_get_log_lba_statu:0,nvme_get_log_media_unit_stat:0,nvme_get_log_pag:0,nvme_get_log_page_pad:0,nvme_get_log_persistent_ev:0,nvme_get_log_predictable_lat_ev:0,nvme_get_log_predictable_lat_nvmset:0,nvme_get_log_reserv:0,nvme_get_log_sanit:0,nvme_get_log_smart:0,nvme_get_log_support_cap_config_list:0,nvme_get_log_supported_log_pag:0,nvme_get_log_telemetry_ctrl:0,nvme_get_log_telemetry_host:0,nvme_get_log_zns_changed_zon:0,nvme_get_logical_block_s:0,nvme_get_new_host_telemetri:0,nvme_get_ns_attr:0,nvme_get_nsid:0,nvme_get_path_attr:0,nvme_get_propert_arg:0,nvme_get_properti:0,nvme_get_property_arg:0,nvme_get_subsys_attr:0,nvme_hmac_alg:0,nvme_hmac_alg_non:0,nvme_hmac_alg_sha2_256:0,nvme_hmac_alg_sha2_384:0,nvme_hmac_alg_sha2_512:0,nvme_host:0,nvme_host_behavior_support:0,nvme_host_get_dhchap_kei:0,nvme_host_get_hostid:0,nvme_host_get_hostnqn:0,nvme_host_get_root:0,nvme_host_mem_buf_attr:0,nvme_host_metadata:0,nvme_host_set_dhchap_kei:0,nvme_host_t:0,nvme_id_ctrl:0,nvme_id_ctrl_anacap:0,nvme_id_ctrl_apsta:0,nvme_id_ctrl_avscc:0,nvme_id_ctrl_cm:0,nvme_id_ctrl_cntrltyp:0,nvme_id_ctrl_cq:0,nvme_id_ctrl_ctratt:0,nvme_id_ctrl_dsto:0,nvme_id_ctrl_fcatt:0,nvme_id_ctrl_fna:0,nvme_id_ctrl_frmw:0,nvme_id_ctrl_fus:0,nvme_id_ctrl_hctm:0,nvme_id_ctrl_list_max:0,nvme_id_ctrl_lpa:0,nvme_id_ctrl_mec:0,nvme_id_ctrl_nvm:0,nvme_id_ctrl_nvmsr:0,nvme_id_ctrl_nvscc:0,nvme_id_ctrl_nwpc:0,nvme_id_ctrl_oa:0,nvme_id_ctrl_oac:0,nvme_id_ctrl_ofc:0,nvme_id_ctrl_onc:0,nvme_id_ctrl_rpmb:0,nvme_id_ctrl_sanicap:0,nvme_id_ctrl_sgl:0,nvme_id_ctrl_sq:0,nvme_id_ctrl_vwc:0,nvme_id_ctrl_vwci:0,nvme_id_dir_id_bit:0,nvme_id_dir_sd_bit:0,nvme_id_direct:0,nvme_id_domain_attr:0,nvme_id_domain_list:0,nvme_id_domain_list_max:0,nvme_id_endurance_group_list:0,nvme_id_endurance_group_list_max:0,nvme_id_independent_id_n:0,nvme_id_ioc:0,nvme_id_n:0,nvme_id_nd_descriptor_max:0,nvme_id_ns_attr:0,nvme_id_ns_dlfeat:0,nvme_id_ns_dp:0,nvme_id_ns_dpc:0,nvme_id_ns_flba:0,nvme_id_ns_granularity_desc:0,nvme_id_ns_granularity_list:0,nvme_id_ns_list_max:0,nvme_id_ns_mc:0,nvme_id_ns_nm:0,nvme_id_ns_rescap:0,nvme_id_nsfeat:0,nvme_id_nvmset_list:0,nvme_id_nvmset_list_max:0,nvme_id_psd:0,nvme_id_secondary_ctrl_max:0,nvme_id_uuid:0,nvme_id_uuid_association_non:0,nvme_id_uuid_association_subsystem_vendor:0,nvme_id_uuid_association_vendor:0,nvme_id_uuid_hdr_association_mask:0,nvme_id_uuid_list:0,nvme_id_uuid_list_entri:0,nvme_id_uuid_list_max:0,nvme_identifi:0,nvme_identify_active_ns_list:0,nvme_identify_active_ns_list_csi:0,nvme_identify_allocated_n:0,nvme_identify_allocated_ns_list:0,nvme_identify_allocated_ns_list_csi:0,nvme_identify_arg:0,nvme_identify_cn:0,nvme_identify_cns_allocated_n:0,nvme_identify_cns_allocated_ns_list:0,nvme_identify_cns_command_set_structur:0,nvme_identify_cns_csi_ctrl:0,nvme_identify_cns_csi_independent_id_n:0,nvme_identify_cns_csi_n:0,nvme_identify_cns_csi_ns_active_list:0,nvme_identify_cns_csi_ns_user_data_format:0,nvme_identify_cns_css_allocated_ns_list:0,nvme_identify_cns_ctrl:0,nvme_identify_cns_ctrl_list:0,nvme_identify_cns_domain_list:0,nvme_identify_cns_endurance_group_id:0,nvme_identify_cns_n:0,nvme_identify_cns_ns_active_list:0,nvme_identify_cns_ns_ctrl_list:0,nvme_identify_cns_ns_desc_list:0,nvme_identify_cns_ns_granular:0,nvme_identify_cns_ns_user_data_format:0,nvme_identify_cns_nvmset_list:0,nvme_identify_cns_primary_ctrl_cap:0,nvme_identify_cns_secondary_ctrl_list:0,nvme_identify_cns_uuid_list:0,nvme_identify_ctrl:0,nvme_identify_ctrl_csi:0,nvme_identify_ctrl_list:0,nvme_identify_data_s:0,nvme_identify_domain_attr:0,nvme_identify_domain_list:0,nvme_identify_endurance_group_list:0,nvme_identify_independent_identify_n:0,nvme_identify_ioc:0,nvme_identify_iocs_ns_csi_user_data_format:0,nvme_identify_n:0,nvme_identify_ns_csi:0,nvme_identify_ns_csi_user_data_format:0,nvme_identify_ns_desc:0,nvme_identify_ns_granular:0,nvme_identify_nsid_ctrl_list:0,nvme_identify_nvmset_list:0,nvme_identify_primary_ctrl:0,nvme_identify_secondary_ctrl_list:0,nvme_identify_uuid:0,nvme_init_copy_rang:0,nvme_init_ctrl:0,nvme_init_ctrl_list:0,nvme_init_dsm_rang:0,nvme_init_id_n:0,nvme_init_log:0,nvme_io:0,nvme_io_arg:0,nvme_io_control_flag:0,nvme_io_deac:0,nvme_io_dsm_compress:0,nvme_io_dsm_flag:0,nvme_io_dsm_freq_onc:0,nvme_io_dsm_freq_prefetch:0,nvme_io_dsm_freq_rar:0,nvme_io_dsm_freq_read:0,nvme_io_dsm_freq_rw:0,nvme_io_dsm_freq_temp:0,nvme_io_dsm_freq_typ:0,nvme_io_dsm_freq_unspec:0,nvme_io_dsm_freq_writ:0,nvme_io_dsm_latency_idl:0,nvme_io_dsm_latency_low:0,nvme_io_dsm_latency_non:0,nvme_io_dsm_latency_norm:0,nvme_io_dsm_seq_req:0,nvme_io_dtype_stream:0,nvme_io_fua:0,nvme_io_lr:0,nvme_io_opcod:0,nvme_io_passthru64:0,nvme_io_passthru:0,nvme_io_prinfo_pract:0,nvme_io_prinfo_prchk_app:0,nvme_io_prinfo_prchk_guard:0,nvme_io_prinfo_prchk_ref:0,nvme_io_zns_append_piremap:0,nvme_ioctl_admin64_cmd:0,nvme_ioctl_admin_cmd:0,nvme_ioctl_io64_cmd:0,nvme_ioctl_io_cmd:0,nvme_is_64bit_reg:0,nvme_lba_range_typ:0,nvme_lba_range_type_entri:0,nvme_lba_rd:0,nvme_lba_statu:0,nvme_lba_status_atyp:0,nvme_lba_status_atype_scan_track:0,nvme_lba_status_atype_scan_untrack:0,nvme_lba_status_desc:0,nvme_lba_status_log:0,nvme_lbaf:0,nvme_lbaf_rp:0,nvme_lbaf_rp_best:0,nvme_lbaf_rp_bett:0,nvme_lbaf_rp_degrad:0,nvme_lbaf_rp_good:0,nvme_lbaf_rp_mask:0,nvme_lbart:0,nvme_lbart_attrib_hid:0,nvme_lbart_attrib_temp:0,nvme_lbart_type_cach:0,nvme_lbart_type_f:0,nvme_lbart_type_gp:0,nvme_lbart_type_raid:0,nvme_lbart_type_swap:0,nvme_lbas_ns_el:0,nvme_lockdown:0,nvme_lockdown_arg:0,nvme_log_ana_lsp:0,nvme_log_ana_lsp_rgo_groups_onli:0,nvme_log_ana_lsp_rgo_namespac:0,nvme_log_fid_supported_effects_max:0,nvme_log_lid_ana:0,nvme_log_lid_boot_partit:0,nvme_log_lid_changed_n:0,nvme_log_lid_cmd_effect:0,nvme_log_lid_device_self_test:0,nvme_log_lid_discov:0,nvme_log_lid_endurance_group:0,nvme_log_lid_endurance_grp_evt:0,nvme_log_lid_error:0,nvme_log_lid_fid_supported_effect:0,nvme_log_lid_fw_slot:0,nvme_log_lid_lba_statu:0,nvme_log_lid_media_unit_statu:0,nvme_log_lid_persistent_ev:0,nvme_log_lid_predictable_lat_agg:0,nvme_log_lid_predictable_lat_nvmset:0,nvme_log_lid_reserv:0,nvme_log_lid_sanit:0,nvme_log_lid_smart:0,nvme_log_lid_supported_cap_config_list:0,nvme_log_lid_supported_log_pag:0,nvme_log_lid_telemetry_ctrl:0,nvme_log_lid_telemetry_host:0,nvme_log_lid_zns_changed_zon:0,nvme_log_lpo_non:0,nvme_log_lsi_non:0,nvme_log_lsp_non:0,nvme_log_st_max_result:0,nvme_log_supported_log_pages_max:0,nvme_log_telem_block_s:0,nvme_log_telem_host_lsp_cr:0,nvme_log_telem_host_lsp_retain:0,nvme_lookup_ctrl:0,nvme_lookup_host:0,nvme_lookup_subsystem:0,nvme_media_unit_config_desc:0,nvme_media_unit_stat_desc:0,nvme_media_unit_stat_log:0,nvme_metadata_element_desc:0,nvme_mi_ccs_rdi:0,nvme_mi_css:0,nvme_mi_css_ccwarn:0,nvme_mi_css_ceco:0,nvme_mi_css_cf:0,nvme_mi_css_cst:0,nvme_mi_css_ctemp:0,nvme_mi_css_fa:0,nvme_mi_css_nac:0,nvme_mi_css_nssro:0,nvme_mi_css_pdlu:0,nvme_mi_css_shst:0,nvme_mi_css_spar:0,nvme_mi_cst:0,nvme_mi_csts_ceco:0,nvme_mi_csts_cf:0,nvme_mi_csts_fa:0,nvme_mi_csts_nac:0,nvme_mi_csts_nssro:0,nvme_mi_csts_rdi:0,nvme_mi_csts_shst:0,nvme_mi_ctrl_health_statu:0,nvme_mi_cwarn:0,nvme_mi_cwarn_rd:0,nvme_mi_cwarn_ro:0,nvme_mi_cwarn_st:0,nvme_mi_cwarn_taut:0,nvme_mi_cwarn_vmbf:0,nvme_mi_elem:0,nvme_mi_elem_e:0,nvme_mi_elem_ec:0,nvme_mi_elem_l:0,nvme_mi_elem_nvm:0,nvme_mi_elem_pcies:0,nvme_mi_elem_smbm:0,nvme_mi_elem_usc:0,nvme_mi_nvm_ss_health_statu:0,nvme_mi_osc:0,nvme_mi_port_pci:0,nvme_mi_port_smb:0,nvme_mi_read_ctrl_info:0,nvme_mi_read_nvm_ss_info:0,nvme_mi_read_port_info:0,nvme_mi_read_sc_list:0,nvme_mi_vpd_hdr:0,nvme_mi_vpd_mr_common:0,nvme_mi_vpd_mra:0,nvme_mi_vpd_ppmra:0,nvme_mi_vpd_telem:0,nvme_mi_vpd_tra:0,nvme_n:0,nvme_namespace_attach_ctrl:0,nvme_namespace_detach_ctrl:0,nvme_namespace_filt:0,nvme_nd_ns_fpi:0,nvme_next_host:0,nvme_next_subsystem:0,nvme_nidt_csi:0,nvme_nidt_eui64:0,nvme_nidt_nguid:0,nvme_nidt_uuid:0,nvme_nqn_curr:0,nvme_nqn_disc:0,nvme_nqn_length:0,nvme_nqn_nvm:0,nvme_ns_attach:0,nvme_ns_attach_arg:0,nvme_ns_attach_ctrl:0,nvme_ns_attach_sel:0,nvme_ns_attach_sel_ctrl_attach:0,nvme_ns_attach_sel_ctrl_deattach:0,nvme_ns_compar:0,nvme_ns_detach:0,nvme_ns_detach_ctrl:0,nvme_ns_dlfeat_crc_guard:0,nvme_ns_dlfeat_rb:0,nvme_ns_dlfeat_rb_all_0:0,nvme_ns_dlfeat_rb_all_f:0,nvme_ns_dlfeat_rb_nr:0,nvme_ns_dlfeat_write_zero:0,nvme_ns_dpc_pi_first:0,nvme_ns_dpc_pi_last:0,nvme_ns_dpc_pi_type1:0,nvme_ns_dpc_pi_type2:0,nvme_ns_dpc_pi_type3:0,nvme_ns_dps_pi_first:0,nvme_ns_dps_pi_mask:0,nvme_ns_dps_pi_non:0,nvme_ns_dps_pi_type1:0,nvme_ns_dps_pi_type2:0,nvme_ns_dps_pi_type3:0,nvme_ns_feat_dulb:0,nvme_ns_feat_id_reus:0,nvme_ns_feat_io_opt:0,nvme_ns_feat_natom:0,nvme_ns_feat_thin:0,nvme_ns_flbas_higher_mask:0,nvme_ns_flbas_lower_mask:0,nvme_ns_flbas_meta_ext:0,nvme_ns_flush:0,nvme_ns_fpi_remain:0,nvme_ns_fpi_support:0,nvme_ns_get_csi:0,nvme_ns_get_ctrl:0,nvme_ns_get_eui64:0,nvme_ns_get_fd:0,nvme_ns_get_firmwar:0,nvme_ns_get_generic_nam:0,nvme_ns_get_lba_count:0,nvme_ns_get_lba_s:0,nvme_ns_get_lba_util:0,nvme_ns_get_meta_s:0,nvme_ns_get_model:0,nvme_ns_get_nam:0,nvme_ns_get_nguid:0,nvme_ns_get_nsid:0,nvme_ns_get_seri:0,nvme_ns_get_subsystem:0,nvme_ns_get_sysfs_dir:0,nvme_ns_get_uuid:0,nvme_ns_id_desc:0,nvme_ns_id_desc_nidt:0,nvme_ns_identifi:0,nvme_ns_identify_desc:0,nvme_ns_list:0,nvme_ns_mc_extend:0,nvme_ns_mc_separ:0,nvme_ns_metadata_os_ns_nam:0,nvme_ns_metadata_os_ns_qual_1:0,nvme_ns_metadata_os_ns_qual_2:0,nvme_ns_metadata_pre_boot_ns_nam:0,nvme_ns_metadata_typ:0,nvme_ns_mgmt:0,nvme_ns_mgmt_arg:0,nvme_ns_mgmt_creat:0,nvme_ns_mgmt_delet:0,nvme_ns_mgmt_sel:0,nvme_ns_mgmt_sel_cr:0,nvme_ns_mgmt_sel_delet:0,nvme_ns_nmic_shar:0,nvme_ns_nsattr_write_protect:0,nvme_ns_read:0,nvme_ns_rescan:0,nvme_ns_rescap_ea:0,nvme_ns_rescap_eaar:0,nvme_ns_rescap_earo:0,nvme_ns_rescap_iek_13:0,nvme_ns_rescap_ptpl:0,nvme_ns_rescap_w:0,nvme_ns_rescap_wear:0,nvme_ns_rescap_wero:0,nvme_ns_t:0,nvme_ns_verifi:0,nvme_ns_wp_cfg_non:0,nvme_ns_wp_cfg_protect:0,nvme_ns_wp_cfg_protect_perman:0,nvme_ns_wp_cfg_protect_power_cycl:0,nvme_ns_writ:0,nvme_ns_write_protect_cfg:0,nvme_ns_write_uncorrect:0,nvme_ns_write_zero:0,nvme_nsid_al:0,nvme_nsid_non:0,nvme_nss_hw_err_ev:0,nvme_nvm_id_n:0,nvme_nvm_identify_ctrl:0,nvme_nvmeset_pl_statu:0,nvme_nvmset_attr:0,nvme_nvmset_pl_ev:0,nvme_nvmset_pl_event_dtwin_exceed:0,nvme_nvmset_pl_event_dtwin_excurs:0,nvme_nvmset_pl_event_dtwin_read_warn:0,nvme_nvmset_pl_event_dtwin_time_warn:0,nvme_nvmset_pl_event_dtwin_write_warn:0,nvme_nvmset_pl_status_dis:0,nvme_nvmset_pl_status_dtwin:0,nvme_nvmset_pl_status_ndwin:0,nvme_nvmset_predictable_lat_log:0,nvme_open:0,nvme_passthru_cmd64:0,nvme_passthru_cmd:0,nvme_path_get_ana_st:0,nvme_path_get_ctrl:0,nvme_path_get_n:0,nvme_path_get_nam:0,nvme_path_get_sysfs_dir:0,nvme_path_t:0,nvme_paths_filt:0,nvme_pel_change_ns_ev:0,nvme_pel_format_completion_ev:0,nvme_pel_format_start_ev:0,nvme_pel_fw_commit_ev:0,nvme_pel_nss_hw_error_ev:0,nvme_pel_power_on_reset_ev:0,nvme_pel_sanitize_completion_ev:0,nvme_pel_sanitize_start_ev:0,nvme_pel_set_feature_ev:0,nvme_pel_smart_health_ev:0,nvme_pel_telemetry_crt:0,nvme_pel_thermal_excursion_ev:0,nvme_pel_timestamp_ev:0,nvme_persistent_event_entri:0,nvme_persistent_event_log:0,nvme_persistent_event_typ:0,nvme_pevent_log_act:0,nvme_pevent_log_est_ctx_and_read:0,nvme_pevent_log_read:0,nvme_pevent_log_release_ctx:0,nvme_plm_config:0,nvme_pmr_siz:0,nvme_pmr_throughput:0,nvme_power_on_reset_info_list:0,nvme_primary_ctrl_cap:0,nvme_psd:0,nvme_psd_flag:0,nvme_psd_flags_mxp:0,nvme_psd_flags_nop:0,nvme_psd_p:0,nvme_psd_power_scal:0,nvme_psd_ps_100_micro_watt:0,nvme_psd_ps_10_milli_watt:0,nvme_psd_workload:0,nvme_psd_workload_1:0,nvme_psd_workload_2:0,nvme_read:0,nvme_read_config:0,nvme_refresh_topolog:0,nvme_reg_acq:0,nvme_reg_aqa:0,nvme_reg_asq:0,nvme_reg_bpinfo:0,nvme_reg_bpmbl:0,nvme_reg_bprsel:0,nvme_reg_cap:0,nvme_reg_cc:0,nvme_reg_cmbloc:0,nvme_reg_cmbmsc:0,nvme_reg_cmbst:0,nvme_reg_cmbsz:0,nvme_reg_cst:0,nvme_reg_intm:0,nvme_reg_intmc:0,nvme_reg_nssr:0,nvme_reg_pmrcap:0,nvme_reg_pmrctl:0,nvme_reg_pmreb:0,nvme_reg_pmrmscl:0,nvme_reg_pmrmscu:0,nvme_reg_pmrst:0,nvme_reg_pmrswtp:0,nvme_reg_v:0,nvme_regist:0,nvme_register_offset:0,nvme_registered_ctrl:0,nvme_registered_ctrl_ext:0,nvme_rescan_ctrl:0,nvme_reservation_cptpl_clear:0,nvme_reservation_cptpl_no_chang:0,nvme_reservation_cptpl_persist:0,nvme_reservation_racqa_acquir:0,nvme_reservation_racqa_preempt:0,nvme_reservation_racqa_preempt_and_abort:0,nvme_reservation_rrega_register_kei:0,nvme_reservation_rrega_replace_kei:0,nvme_reservation_rrega_unregister_kei:0,nvme_reservation_rrela_clear:0,nvme_reservation_rrela_releas:0,nvme_reservation_rtype_ea:0,nvme_reservation_rtype_eaar:0,nvme_reservation_rtype_earo:0,nvme_reservation_rtype_w:0,nvme_reservation_rtype_wear:0,nvme_reservation_rtype_wero:0,nvme_reservation_statu:0,nvme_resv_acquir:0,nvme_resv_acquire_arg:0,nvme_resv_cptpl:0,nvme_resv_notification_log:0,nvme_resv_notify_rnlpt:0,nvme_resv_notify_rnlpt_empti:0,nvme_resv_notify_rnlpt_registration_preempt:0,nvme_resv_notify_rnlpt_reservation_preempt:0,nvme_resv_notify_rnlpt_reservation_releas:0,nvme_resv_racqa:0,nvme_resv_regist:0,nvme_resv_register_arg:0,nvme_resv_releas:0,nvme_resv_release_arg:0,nvme_resv_report:0,nvme_resv_report_arg:0,nvme_resv_rrega:0,nvme_resv_rrela:0,nvme_resv_rtyp:0,nvme_resv_statu:0,nvme_root_t:0,nvme_sanitize_compln_ev:0,nvme_sanitize_log_pag:0,nvme_sanitize_nvm:0,nvme_sanitize_nvm_arg:0,nvme_sanitize_sanact:0,nvme_sanitize_sanact_exit_failur:0,nvme_sanitize_sanact_start_block_eras:0,nvme_sanitize_sanact_start_crypto_eras:0,nvme_sanitize_sanact_start_overwrit:0,nvme_sanitize_sstat:0,nvme_sanitize_sstat_completed_passes_mask:0,nvme_sanitize_sstat_completed_passes_shift:0,nvme_sanitize_sstat_global_data_eras:0,nvme_sanitize_sstat_global_data_erased_mask:0,nvme_sanitize_sstat_global_data_erased_shift:0,nvme_sanitize_sstat_status_complete_success:0,nvme_sanitize_sstat_status_completed_fail:0,nvme_sanitize_sstat_status_in_progess:0,nvme_sanitize_sstat_status_mask:0,nvme_sanitize_sstat_status_nd_complete_success:0,nvme_sanitize_sstat_status_never_sanit:0,nvme_sanitize_sstat_status_shift:0,nvme_sanitize_start_ev:0,nvme_sc_abort_limit:0,nvme_sc_abort_miss:0,nvme_sc_abort_queu:0,nvme_sc_abort_req:0,nvme_sc_access_deni:0,nvme_sc_admin_cmd_media_not_readi:0,nvme_sc_ana_attach_fail:0,nvme_sc_ana_group_id_invalid:0,nvme_sc_ana_inaccess:0,nvme_sc_ana_internal_path_error:0,nvme_sc_ana_persistent_loss:0,nvme_sc_ana_transit:0,nvme_sc_apptag_check:0,nvme_sc_async_limit:0,nvme_sc_auth_requir:0,nvme_sc_awu_exceed:0,nvme_sc_bad_attribut:0,nvme_sc_bp_write_prohibit:0,nvme_sc_cap_exceed:0,nvme_sc_cmb_invalid_us:0,nvme_sc_cmd_aborted_by_host:0,nvme_sc_cmd_aborted_premept:0,nvme_sc_cmd_in_cmbq_not_supp:0,nvme_sc_cmd_interrupt:0,nvme_sc_cmd_seq_error:0,nvme_sc_cmd_size_limit_exceed:0,nvme_sc_cmdid_conflict:0,nvme_sc_compare_fail:0,nvme_sc_connect_ctrl_busi:0,nvme_sc_connect_format:0,nvme_sc_connect_invalid_host:0,nvme_sc_connect_invalid_param:0,nvme_sc_connect_restart_disc:0,nvme_sc_cq_invalid:0,nvme_sc_crd:0,nvme_sc_ctrl_list_invalid:0,nvme_sc_ctrl_path_error:0,nvme_sc_data_xfer_error:0,nvme_sc_disconnect_invalid_qtyp:0,nvme_sc_discovery_restart:0,nvme_sc_dnr:0,nvme_sc_feature_not_chang:0,nvme_sc_feature_not_per_n:0,nvme_sc_feature_not_sav:0,nvme_sc_firmware_imag:0,nvme_sc_firmware_slot:0,nvme_sc_format_in_progress:0,nvme_sc_fused_fail:0,nvme_sc_fused_miss:0,nvme_sc_fw_activate_prohibit:0,nvme_sc_fw_needs_conv_reset:0,nvme_sc_fw_needs_max_tim:0,nvme_sc_fw_needs_reset:0,nvme_sc_fw_needs_subsys_reset:0,nvme_sc_guard_check:0,nvme_sc_host_path_error:0,nvme_sc_hostid_format:0,nvme_sc_id_unavail:0,nvme_sc_insufficient_cap:0,nvme_sc_intern:0,nvme_sc_invalid_ctrl_id:0,nvme_sc_invalid_ctrl_resourc:0,nvme_sc_invalid_field:0,nvme_sc_invalid_format:0,nvme_sc_invalid_ioc:0,nvme_sc_invalid_log_pag:0,nvme_sc_invalid_n:0,nvme_sc_invalid_opcod:0,nvme_sc_invalid_pi:0,nvme_sc_invalid_queu:0,nvme_sc_invalid_resource_id:0,nvme_sc_invalid_sec_ctrl_st:0,nvme_sc_invalid_vector:0,nvme_sc_iocs_combination_reject:0,nvme_sc_iocs_not_en:0,nvme_sc_iocs_not_support:0,nvme_sc_kat_expir:0,nvme_sc_kat_invalid:0,nvme_sc_lba_rang:0,nvme_sc_mask:0,nvme_sc_mor:0,nvme_sc_ns_already_attach:0,nvme_sc_ns_attachment_limit_exceed:0,nvme_sc_ns_id_unavail:0,nvme_sc_ns_insufficient_cap:0,nvme_sc_ns_is_priv:0,nvme_sc_ns_not_attach:0,nvme_sc_ns_not_readi:0,nvme_sc_ns_write_protect:0,nvme_sc_op_deni:0,nvme_sc_overlapping_rang:0,nvme_sc_pmr_san_prohibit:0,nvme_sc_power_loss:0,nvme_sc_prohibit_cmd_exec_not_support:0,nvme_sc_prohibited_by_cmd_and_feat:0,nvme_sc_prp_invalid_offset:0,nvme_sc_qid_invalid:0,nvme_sc_queue_s:0,nvme_sc_read_error:0,nvme_sc_read_onli:0,nvme_sc_reftag_check:0,nvme_sc_reservation_conflict:0,nvme_sc_sanitize_fail:0,nvme_sc_sanitize_in_progress:0,nvme_sc_self_test_in_progress:0,nvme_sc_sgl_invalid_count:0,nvme_sc_sgl_invalid_data:0,nvme_sc_sgl_invalid_granular:0,nvme_sc_sgl_invalid_last:0,nvme_sc_sgl_invalid_metadata:0,nvme_sc_sgl_invalid_offset:0,nvme_sc_sgl_invalid_typ:0,nvme_sc_storage_tag_check:0,nvme_sc_success:0,nvme_sc_thin_prov_not_supp:0,nvme_sc_tran_tport_error:0,nvme_sc_unwritten_block:0,nvme_sc_write_fault:0,nvme_sc_zns_boundary_error:0,nvme_sc_zns_ful:0,nvme_sc_zns_inval_transit:0,nvme_sc_zns_invalid_op_request:0,nvme_sc_zns_invalid_writ:0,nvme_sc_zns_offlin:0,nvme_sc_zns_read_onli:0,nvme_sc_zns_too_many_act:0,nvme_sc_zns_too_many_open:0,nvme_sc_zns_zrwa_resources_unavail:0,nvme_scan:0,nvme_scan_ctrl:0,nvme_scan_ctrl_namespac:0,nvme_scan_ctrl_namespace_path:0,nvme_scan_filter_t:0,nvme_scan_namespac:0,nvme_scan_subsystem:0,nvme_scan_subsystem_namespac:0,nvme_scan_topolog:0,nvme_sct_cmd_specif:0,nvme_sct_gener:0,nvme_sct_mask:0,nvme_sct_media:0,nvme_sct_path:0,nvme_sct_v:0,nvme_secondary_ctrl:0,nvme_secondary_ctrl_list:0,nvme_secondary_ctrls_list:0,nvme_security_rec:0,nvme_security_receive_arg:0,nvme_security_recevic:0,nvme_security_send:0,nvme_security_send_arg:0,nvme_self_test_log:0,nvme_set:0,nvme_set_featur:0,nvme_set_feature_ev:0,nvme_set_features_arbitr:0,nvme_set_features_arg:0,nvme_set_features_async_ev:0,nvme_set_features_auto_pst:0,nvme_set_features_data:0,nvme_set_features_endurance_evt_cfg:0,nvme_set_features_err_recoveri:0,nvme_set_features_hctm:0,nvme_set_features_host_behavior:0,nvme_set_features_host_id:0,nvme_set_features_irq_coalesc:0,nvme_set_features_irq_config:0,nvme_set_features_lba_rang:0,nvme_set_features_lba_sts_interv:0,nvme_set_features_nopsc:0,nvme_set_features_plm_config:0,nvme_set_features_plm_window:0,nvme_set_features_power_mgmt:0,nvme_set_features_resv_mask:0,nvme_set_features_resv_persist:0,nvme_set_features_rrl:0,nvme_set_features_sanit:0,nvme_set_features_simpl:0,nvme_set_features_sw_progress:0,nvme_set_features_temp_thresh:0,nvme_set_features_timestamp:0,nvme_set_features_volatile_wc:0,nvme_set_features_write_atom:0,nvme_set_features_write_protect:0,nvme_set_properti:0,nvme_set_property_arg:0,nvme_smart_crit:0,nvme_smart_crit_degrad:0,nvme_smart_crit_media:0,nvme_smart_crit_pmr_ro:0,nvme_smart_crit_spar:0,nvme_smart_crit_temperatur:0,nvme_smart_crit_volatile_memori:0,nvme_smart_egcw:0,nvme_smart_egcw_degrad:0,nvme_smart_egcw_ro:0,nvme_smart_egcw_spar:0,nvme_smart_log:0,nvme_st_cod:0,nvme_st_code_extend:0,nvme_st_code_reserv:0,nvme_st_code_shift:0,nvme_st_code_short:0,nvme_st_code_v:0,nvme_st_curr_op:0,nvme_st_curr_op_cmpl_mask:0,nvme_st_curr_op_extend:0,nvme_st_curr_op_mask:0,nvme_st_curr_op_not_run:0,nvme_st_curr_op_reserv:0,nvme_st_curr_op_short:0,nvme_st_curr_op_v:0,nvme_st_result:0,nvme_st_result_abort:0,nvme_st_result_aborted_format:0,nvme_st_result_aborted_sanit:0,nvme_st_result_aborted_unknown:0,nvme_st_result_clr:0,nvme_st_result_fatal_err:0,nvme_st_result_known_seg_fail:0,nvme_st_result_mask:0,nvme_st_result_no_err:0,nvme_st_result_not_us:0,nvme_st_result_ns_remov:0,nvme_st_result_unknown_seg_fail:0,nvme_st_valid_diag_info:0,nvme_st_valid_diag_info_flba:0,nvme_st_valid_diag_info_nsid:0,nvme_st_valid_diag_info_sc:0,nvme_st_valid_diag_info_sct:0,nvme_status_cod:0,nvme_status_code_typ:0,nvme_status_field:0,nvme_status_result:0,nvme_status_to_errno:0,nvme_status_to_str:0,nvme_streams_directive_param:0,nvme_streams_directive_statu:0,nvme_submit_admin_passthru64:0,nvme_submit_admin_passthru:0,nvme_submit_io_passthru64:0,nvme_submit_io_passthru:0,nvme_subsys_filt:0,nvme_subsys_typ:0,nvme_subsystem:0,nvme_subsystem_first_ctrl:0,nvme_subsystem_first_n:0,nvme_subsystem_for_each_ctrl:0,nvme_subsystem_for_each_ctrl_saf:0,nvme_subsystem_for_each_n:0,nvme_subsystem_for_each_ns_saf:0,nvme_subsystem_get_host:0,nvme_subsystem_get_nam:0,nvme_subsystem_get_nqn:0,nvme_subsystem_get_sysfs_dir:0,nvme_subsystem_get_typ:0,nvme_subsystem_lookup_namespac:0,nvme_subsystem_next_ctrl:0,nvme_subsystem_next_n:0,nvme_subsystem_reset:0,nvme_subsystem_t:0,nvme_subsystme_t:0,nvme_supported_cap_config_list_log:0,nvme_supported_log_pag:0,nvme_telemetry_log:0,nvme_thermal_exc_ev:0,nvme_time_stamp_change_ev:0,nvme_timestamp:0,nvme_trtyp:0,nvme_unlink_ctrl:0,nvme_update_config:0,nvme_uuid_non:0,nvme_verifi:0,nvme_virt_mgmt_act:0,nvme_virt_mgmt_act_assign_sec_ctrl:0,nvme_virt_mgmt_act_offline_sec_ctrl:0,nvme_virt_mgmt_act_online_sec_ctrl:0,nvme_virt_mgmt_act_prim_ctrl_flex_alloc:0,nvme_virt_mgmt_rt:0,nvme_virt_mgmt_rt_vi_resourc:0,nvme_virt_mgmt_rt_vq_resourc:0,nvme_virtual_mgmt:0,nvme_virtual_mgmt_arg:0,nvme_writ:0,nvme_write_uncorrect:0,nvme_write_zero:0,nvme_zns_append:0,nvme_zns_append_arg:0,nvme_zns_changed_zone_log:0,nvme_zns_changed_zones_max:0,nvme_zns_cmd_append:0,nvme_zns_cmd_mgmt_recv:0,nvme_zns_cmd_mgmt_send:0,nvme_zns_desc:0,nvme_zns_id_ctrl:0,nvme_zns_id_n:0,nvme_zns_identify_ctrl:0,nvme_zns_identify_n:0,nvme_zns_lbaf:0,nvme_zns_mgmt_recv:0,nvme_zns_mgmt_recv_arg:0,nvme_zns_mgmt_send:0,nvme_zns_mgmt_send_arg:0,nvme_zns_recv_act:0,nvme_zns_report_opt:0,nvme_zns_report_zon:0,nvme_zns_send_act:0,nvme_zns_z:0,nvme_zns_za:0,nvme_zns_za_fzr:0,nvme_zns_za_rzr:0,nvme_zns_za_zdev:0,nvme_zns_za_zfc:0,nvme_zns_za_zrwav:0,nvme_zns_zra_extended_report_zon:0,nvme_zns_zra_report_zon:0,nvme_zns_zras_report_al:0,nvme_zns_zras_report_clos:0,nvme_zns_zras_report_empti:0,nvme_zns_zras_report_expl_open:0,nvme_zns_zras_report_ful:0,nvme_zns_zras_report_impl_open:0,nvme_zns_zras_report_offlin:0,nvme_zns_zras_report_read_onli:0,nvme_zns_zs_clos:0,nvme_zns_zs_empti:0,nvme_zns_zs_expl_open:0,nvme_zns_zs_ful:0,nvme_zns_zs_impl_open:0,nvme_zns_zs_offlin:0,nvme_zns_zs_read_onli:0,nvme_zns_zsa_clos:0,nvme_zns_zsa_finish:0,nvme_zns_zsa_offlin:0,nvme_zns_zsa_open:0,nvme_zns_zsa_reset:0,nvme_zns_zsa_set_desc_ext:0,nvme_zns_zsa_zrwa_flush:0,nvme_zns_zt:0,nvme_zone_report:0,nvme_zone_type_seqwrite_req:0,nvmebm:0,nvmeset:0,nvmexpress:0,nvmf_add_ctrl:0,nvmf_addr_famili:0,nvmf_addr_family_fc:0,nvmf_addr_family_ib:0,nvmf_addr_family_ip4:0,nvmf_addr_family_ip6:0,nvmf_addr_family_loop:0,nvmf_addr_family_pci:0,nvmf_adrfam_str:0,nvmf_cms_str:0,nvmf_connect_data:0,nvmf_connect_disc_entri:0,nvmf_default_config:0,nvmf_disc_eflag:0,nvmf_disc_eflags_both:0,nvmf_disc_eflags_dupretinfo:0,nvmf_disc_eflags_epcsd:0,nvmf_disc_eflags_non:0,nvmf_disc_log_entri:0,nvmf_discovery_log:0,nvmf_eflags_str:0,nvmf_get_discovery_log:0,nvmf_hostid_from_fil:0,nvmf_hostnqn_from_fil:0,nvmf_hostnqn_gener:0,nvmf_prtype_str:0,nvmf_qptype_str:0,nvmf_rdma_cm:0,nvmf_rdma_cms_rdma_cm:0,nvmf_rdma_prtyp:0,nvmf_rdma_prtype_ib:0,nvmf_rdma_prtype_iwarp:0,nvmf_rdma_prtype_not_specifi:0,nvmf_rdma_prtype_roc:0,nvmf_rdma_prtype_rocev2:0,nvmf_rdma_qptyp:0,nvmf_rdma_qptype_connect:0,nvmf_rdma_qptype_datagram:0,nvmf_sectype_str:0,nvmf_subtype_str:0,nvmf_tcp_sectyp:0,nvmf_tcp_sectype_non:0,nvmf_tcp_sectype_tl:0,nvmf_tcp_sectype_tls13:0,nvmf_traddr_siz:0,nvmf_treq:0,nvmf_treq_disable_sqflow:0,nvmf_treq_not_requir:0,nvmf_treq_not_specifi:0,nvmf_treq_requir:0,nvmf_treq_str:0,nvmf_trsvcid_siz:0,nvmf_trtype:0,nvmf_trtype_fc:0,nvmf_trtype_loop:0,nvmf_trtype_max:0,nvmf_trtype_rdma:0,nvmf_trtype_str:0,nvmf_trtype_tcp:0,nvmf_trtype_unspecifi:0,nvmf_tsas_siz:0,nvmset:0,nvmset_id:0,nvmsetid:0,nvmsr:0,nvq:0,nwpc:0,o:0,oF:0,oac:0,oae:0,object:0,occupi:0,occur:0,occurr:0,ocf:0,ofc:0,off:0,off_t:0,offlin:0,offset:0,ofi:0,oipbp:0,old_fw_rev:0,omit:0,onc:0,one:0,onli:0,onlin:0,op:0,op_in_prog:0,opc:0,opcod:0,open:0,oper:0,opt:0,optim:0,option:0,order:0,org:0,organ:0,origin:0,osc:0,ot:0,other:0,otherwis:0,oui:0,out:0,output:0,outsid:0,outstand:0,over:0,over_temp:0,overh:0,overid:0,overlap:0,overrid:0,overwrit:0,ovrpat:0,ow:0,owpass:0,ozc:0,p:0,pack:0,pad:0,page:0,paramet:0,parameter:0,parent:0,parm:0,parm_error_loc:0,pars:0,part:0,partial:0,particular:0,partit:0,pass:0,passthrough:0,path:0,pattern:0,payload:0,pbslc:0,pcc:0,pci:0,pcid:0,pcie:0,pdlu:0,pel:0,pend:0,per:0,percent:0,percent_us:0,percentag:0,perform:0,period:0,perman:0,permiss:0,persist:0,pevent_log:0,phase:0,physic:0,pi:0,piaoff:0,pic:0,pid:0,piec:0,pil:0,pkei:0,place:0,pmreb:0,pmrswtp:0,pn:0,poh:0,point:0,pointer:0,poll:0,port:0,portid:0,portion:0,portt:0,poser:0,posit:0,possibl:0,post:0,potenti:0,power:0,power_cycl:0,power_on_hour:0,power_on_ml_second:0,ppi:0,ppmra:0,pre:0,predict:0,preempt:0,prefer:0,present:0,preserv:0,previou:0,previous:0,previous_timestamp:0,prhbt:0,pri:0,prii:0,primari:0,prinfor:0,prinfow:0,print:0,prior:0,privat:0,process:0,processor:0,product:0,progress:0,prohibit:0,properti:0,protect:0,protocol:0,provid:0,provis:0,prp:0,prtype:0,ps:0,psd:0,ptpl:0,qp:0,qptype:0,qualifi:0,queue:0,queue_siz:0,r:0,rab:0,racqa:0,rae:0,random:0,rang:0,rank:0,ratyp:0,rchksum:0,rci:0,rcst:0,rdma:0,rdma_cm:0,rdma_prtyp:0,rdma_qptyp:0,re:0,reach:0,read:0,readi:0,readonli:0,reason:0,receiv:0,recent:0,recfmt:0,recogn:0,recommend:0,reconnect:0,reconnect_delai:0,record:0,recov:0,recoveri:0,reduc:0,refccap:0,refer:0,referr:0,refresh:0,reftag:0,regard:0,regardless:0,regctl:0,regctl_:0,regctl_d:0,region:0,regist:0,registr:0,reject:0,rel:0,relat:0,relationship:0,releas:0,releast:0,reliabl:0,remain:0,rememb:0,remov:0,replac:0,replai:0,report:0,repres:0,represent:0,request:0,requir:0,rescan:0,rescap:0,reserevd:0,reserv:0,reset:0,resolv:0,resourc:0,respons:0,restart:0,restrict:0,result:0,resum:0,retain:0,retreiv:0,retri:0,retriev:0,reus:0,rev:0,revis:0,rf:0,rfc:0,right:0,rkei:0,rl:0,rlen:0,rnlb:0,rnlpt:0,roce:0,rocev2:0,roll:0,root:0,rose:0,round:0,rp:0,rpmb:0,rr4kt:0,rrega:0,rrela:0,rrl1:0,rrl2:0,rrl3:0,rrl:0,rrt:0,rslba:0,rsnident:0,rsvd0:0,rsvd1024:0,rsvd102:0,rsvd10:0,rsvd12:0,rsvd134:0,rsvd13:0,rsvd14:0,rsvd152:0,rsvd15:0,rsvd160:0,rsvd16:0,rsvd17:0,rsvd1806:0,rsvd18:0,rsvd19:0,rsvd1:0,rsvd20:0,rsvd232:0,rsvd23:0,rsvd24:0,rsvd268:0,rsvd288:0,rsvd2:0,rsvd32:0,rsvd358:0,rsvd35:0,rsvd378:0,rsvd37:0,rsvd384:0,rsvd3:0,rsvd42:0,rsvd48:0,rsvd4:0,rsvd53:0,rsvd564:0,rsvd56:0,rsvd5:0,rsvd64:0,rsvd6:0,rsvd72:0,rsvd7:0,rsvd80:0,rsvd81:0,rsvd83:0,rsvd8:0,rsvd96:0,rsvd9:0,rsvd:0,rt:0,rtd3:0,rtd3e:0,rtd3r:0,rtype:0,run:0,runtim:0,rv:0,rwl:0,rwt:0,s:0,safe:0,same:0,sanact:0,sani_cap:0,sani_cdw10:0,sani_cdw11:0,sani_prog:0,sani_statu:0,sanicap:0,sanit:0,save:0,saveabl:0,sc:0,sc_entri:0,sc_fw:0,sc_list:0,scale:0,scan:0,sccn:0,scdw10:0,scid:0,scope:0,scp:0,sct:0,sct_fw:0,sdlba:0,se:0,seb:0,second:0,secondari:0,secp:0,secret:0,section:0,sector:0,sectyp:0,secur:0,see:0,seg:0,segcap:0,segment:0,sel:0,sel_config:0,select:0,select_al:0,self:0,send:0,sensor:0,sent:0,separ:0,sequenc:0,sequenti:0,serial:0,servic:0,set:0,sever:0,sg:0,sgl:0,sha2:0,shall:0,share:0,shift:0,shn:0,should:0,shutdown:0,sid:0,sig:0,signific:0,simultan:0,sinc:0,singl:0,sixteen:0,size:0,size_t:0,sl:0,slba:0,sleep:0,slot:0,smaller:0,smallest:0,smallest_fpi:0,smart:0,smart_log:0,smb:0,smbu:0,sn:0,snapshot:0,so:0,socket:0,solut:0,sourc:0,space:0,span:0,spare:0,spare_thresh:0,spec:0,specif:0,specifi:0,split:0,sprog:0,spsp0:0,spsp1:0,sq:0,sqe:0,sqid:0,sr:0,ssid:0,sstat:0,ssvid:0,standard:0,start:0,stash:0,state:0,statist:0,statu:0,status:0,status_field:0,stc:0,stdout:0,still:0,stop:0,storag:0,storage_tag:0,store:0,stream:0,stream_id:0,string:0,strip:0,struct:0,structur:0,sub:0,submiss:0,submit:0,subnqn:0,subsequ:0,subsi:0,subsysnqn:0,subsystem:0,subsystemnqn:0,subtyp:0,succe:0,success:0,successfulli:0,suffici:0,suit:0,sum:0,summari:0,support:0,sustain:0,sw:0,sysf:0,system:0,t:0,tag:0,tail:0,take:0,taken:0,target:0,tcp:0,tegcap:0,telemetri:0,temp_sensor:0,temperatur:0,temporari:0,temporarili:0,termin:0,test:0,than:0,them:0,thermal:0,thi:0,thin:0,thirti:0,thm_temp1_total_tim:0,thm_temp1_trans_count:0,thm_temp2_total_tim:0,thm_temp2_trans_count:0,those:0,thousand:0,thr:0,three:0,threshold:0,through:0,throughout:0,throughput:0,thsel:0,time:0,timeout:0,timeout_m:0,timer:0,timestamp:0,tl:0,tler:0,tll:0,tmpsel:0,tmpth:0,tmra:0,tmt1:0,tmt2:0,tnev:0,tnvmcap:0,tnvmsetcap:0,too:0,topolog:0,tos:0,total:0,traddr:0,traffic:0,trail:0,transfer:0,transit:0,transport:0,travers:0,treat:0,tree:0,treq:0,trim:0,trsvcid:0,trtype:0,trtype_spec_info:0,ts:0,tsa:0,two:0,type:0,typic:0,uefi:0,uint64_t:0,uint8_t:0,unabl:0,unalloc:0,unalloc_dom_cap:0,unavail:0,unchang:0,unconnect:0,uncorrect:0,under:0,undescrib:0,unfortun:0,union:0,uniqu:0,unit:0,univers:0,unknown:0,unmap:0,unnamed_struct:0,unnamed_union:0,unrecogn:0,unrecov:0,unrecover:0,unregist:0,unreli:0,unrestr:0,unsaf:0,unsafe_shutdown:0,unsign:0,unspecifi:0,unsuccess:0,unsupport:0,until:0,unvmcap:0,unvmsetcap:0,unwritten:0,up:0,updat:0,upper:0,us:0,usabl:0,usag:0,user:0,user_data_format:0,userspac:0,usespac:0,utf:0,util:0,utilis:0,uuid:0,uuid_list:0,uuid_t:0,uuidx:0,val:0,valid:0,valu:0,variabl:0,variou:0,vdi:0,vector:0,vendor:0,ver:0,verifi:0,version:0,vfn:0,via:0,vid:0,vifrsm:0,vifrt:0,vigran:0,violat:0,viprt:0,virfa:0,virfap:0,virtual:0,vn:0,vndr_assign_fw_commit_rc:0,volatil:0,vpd:0,vpd_addr:0,vqfrsm:0,vqfrt:0,vqgran:0,vqprt:0,vqrfa:0,vqrfap:0,vs:0,vsil:0,vsl:0,vwc:0,vwci:0,wa:0,wait:0,warn:0,warning_temp_tim:0,watt:0,wce:0,wctemp:0,well:0,wh:0,when:0,where:0,whether:0,which:0,white:0,whole:0,whose:0,window:0,within:0,without:0,workload:0,would:0,wp:0,wrap:0,write:0,written:0,wrong:0,wusl:0,wzsl:0,xfer:0,xfer_len:0,yet:0,za:0,zai:0,zasl:0,zcap:0,zde:0,zero:0,zid:0,zn:0,zoc:0,zone:0,zra:0,zras_feat:0,zrasf:0,zrwa:0,zrwacap:0,zrwafg:0,zrwasz:0,zs:0,zsa:0,zsaso:0,zse:0,zsf:0,zslba:0,zso:0,zsro:0,zsze:0,zt:0},titles:["<no title>"],titleterms:{}}) \ No newline at end of file diff --git a/doc/man/nvme_admin_opcode.2 b/doc/man/nvme_admin_opcode.2 index c6402d15..f11792cb 100644 --- a/doc/man/nvme_admin_opcode.2 +++ b/doc/man/nvme_admin_opcode.2 @@ -96,10 +96,26 @@ enum nvme_admin_opcode { , .br .br +.BI " nvme_admin_discovery_info_mgmt" +, +.br +.br +.BI " nvme_admin_fabric_zoning_recv" +, +.br +.br .BI " nvme_admin_lockdown" , .br .br +.BI " nvme_admin_fabric_zoning_lookup" +, +.br +.br +.BI " nvme_admin_fabric_zoning_send" +, +.br +.br .BI " nvme_admin_dbbuf" , .br @@ -151,7 +167,15 @@ enum nvme_admin_opcode { .IP "nvme_admin_nvme_mi_send" 12 .IP "nvme_admin_nvme_mi_recv" 12 .IP "nvme_admin_capacity_mgmt" 12 +.IP "nvme_admin_discovery_info_mgmt" 12 +Discovery Information Management (DIM) +.IP "nvme_admin_fabric_zoning_recv" 12 +Fabric Zoning Receive .IP "nvme_admin_lockdown" 12 +.IP "nvme_admin_fabric_zoning_lookup" 12 +Fabric Zoning Lookup +.IP "nvme_admin_fabric_zoning_send" 12 +Fabric Zoning Send .IP "nvme_admin_dbbuf" 12 .IP "nvme_admin_fabrics" 12 .IP "nvme_admin_format_nvm" 12 diff --git a/doc/man/nvme_ae_info_css_nvm.2 b/doc/man/nvme_ae_info_css_nvm.2 index 7159178d..00fa81fe 100644 --- a/doc/man/nvme_ae_info_css_nvm.2 +++ b/doc/man/nvme_ae_info_css_nvm.2 @@ -17,5 +17,9 @@ enum nvme_ae_info_css_nvm { }; .SH Constants .IP "NVME_AER_CSS_NVM_RESERVATION" 12 +Reservation Log Page Available .IP "NVME_AER_CSS_NVM_SANITIZE_COMPLETED" 12 +Sanitize Operation Completed .IP "NVME_AER_CSS_NVM_UNEXPECTED_SANITIZE_DEALLOC" 12 +Sanitize Operation Completed +With Unexpected Deallocation diff --git a/doc/man/nvme_ae_info_error.2 b/doc/man/nvme_ae_info_error.2 index 2e19bf51..e0c09b43 100644 --- a/doc/man/nvme_ae_info_error.2 +++ b/doc/man/nvme_ae_info_error.2 @@ -29,8 +29,14 @@ enum nvme_ae_info_error { }; .SH Constants .IP "NVME_AER_ERROR_INVALID_DB_REG" 12 +Write to Invalid Doorbell Register .IP "NVME_AER_ERROR_INVALID_DB_VAL" 12 +Invalid Doorbell Write Value .IP "NVME_AER_ERROR_DIAG_FAILURE" 12 +Diagnostic Failure .IP "NVME_AER_ERROR_PERSISTENT_INTERNAL_ERROR" 12 +Persistent Internal Error .IP "NVME_AER_ERROR_TRANSIENT_INTERNAL_ERROR" 12 +Transient Internal Error .IP "NVME_AER_ERROR_FW_IMAGE_LOAD_ERROR" 12 +Firmware Image Load Error diff --git a/doc/man/nvme_ae_info_notice.2 b/doc/man/nvme_ae_info_notice.2 index 5df8b070..6fe967d2 100644 --- a/doc/man/nvme_ae_info_notice.2 +++ b/doc/man/nvme_ae_info_notice.2 @@ -37,10 +37,18 @@ enum nvme_ae_info_notice { }; .SH Constants .IP "NVME_AER_NOTICE_NS_CHANGED" 12 +Namespace Attribute Changed .IP "NVME_AER_NOTICE_FW_ACT_STARTING" 12 +Firmware Activation Starting .IP "NVME_AER_NOTICE_TELEMETRY" 12 +Telemetry Log Changed .IP "NVME_AER_NOTICE_ANA" 12 +Asymmetric Namespace Access Change .IP "NVME_AER_NOTICE_PL_EVENT" 12 +Predictable Latency Event Aggregate Log Change .IP "NVME_AER_NOTICE_LBA_STATUS_ALERT" 12 +LBA Status Information Alert .IP "NVME_AER_NOTICE_EG_EVENT" 12 +Endurance Group Event Aggregate Log Page Change .IP "NVME_AER_NOTICE_DISC_CHANGED" 12 +Discovery Log Page Change diff --git a/doc/man/nvme_ae_info_smart.2 b/doc/man/nvme_ae_info_smart.2 index 24b9a4fc..91cb2336 100644 --- a/doc/man/nvme_ae_info_smart.2 +++ b/doc/man/nvme_ae_info_smart.2 @@ -17,5 +17,8 @@ enum nvme_ae_info_smart { }; .SH Constants .IP "NVME_AER_SMART_SUBSYSTEM_RELIABILITY" 12 +NVM subsystem Reliability .IP "NVME_AER_SMART_TEMPERATURE_THRESHOLD" 12 +Temperature Threshold .IP "NVME_AER_SMART_SPARE_THRESHOLD" 12 +Spare Below Threshold diff --git a/doc/man/nvme_ae_type.2 b/doc/man/nvme_ae_type.2 index bc1e4a0e..be05a57e 100644 --- a/doc/man/nvme_ae_type.2 +++ b/doc/man/nvme_ae_type.2 @@ -25,7 +25,12 @@ enum nvme_ae_type { }; .SH Constants .IP "NVME_AER_ERROR" 12 +Error event .IP "NVME_AER_SMART" 12 +SMART / Health Status event .IP "NVME_AER_NOTICE" 12 +Notice event .IP "NVME_AER_CSS" 12 +NVM Command Set Specific events .IP "NVME_AER_VS" 12 +Vendor Specific event diff --git a/doc/man/nvme_ana_log.2 b/doc/man/nvme_ana_log.2 index 587ca35e..3a2dec9e 100644 --- a/doc/man/nvme_ana_log.2 +++ b/doc/man/nvme_ana_log.2 @@ -18,6 +18,10 @@ struct nvme_ana_log { .SH Members .IP "chgcnt" 12 +Change Count .IP "ngrps" 12 +Number of ANA Group Descriptors .IP "rsvd10" 12 +Reserved .IP "descs" 12 +ANA Group Descriptor diff --git a/doc/man/nvme_boot_partition.2 b/doc/man/nvme_boot_partition.2 index c575c5f8..8899c078 100644 --- a/doc/man/nvme_boot_partition.2 +++ b/doc/man/nvme_boot_partition.2 @@ -20,7 +20,13 @@ struct nvme_boot_partition { .SH Members .IP "lid" 12 +Boot Partition Identifier .IP "rsvd1" 12 +Reserved .IP "bpinfo" 12 +Boot Partition Information .IP "rsvd8" 12 +Reserved .IP "boot_partition_data" 12 +Contains the contents of the +specified Boot Partition diff --git a/doc/man/nvme_change_ns_event.2 b/doc/man/nvme_change_ns_event.2 index f6a2f4d5..e642591f 100644 --- a/doc/man/nvme_change_ns_event.2 +++ b/doc/man/nvme_change_ns_event.2 @@ -36,15 +36,28 @@ struct nvme_change_ns_event { .SH Members .IP "nsmgt_cdw10" 12 +Namespace Management CDW10 .IP "rsvd4" 12 +Reserved .IP "nsze" 12 +Namespace Size .IP "rsvd16" 12 +Reserved .IP "nscap" 12 +Namespace Capacity .IP "flbas" 12 +Formatted LBA Size .IP "dps" 12 +End-to-end Data Protection Type Settings .IP "nmic" 12 +Namespace Multi-path I/O and Namespace Sharing Capabilities .IP "rsvd35" 12 +Reserved .IP "ana_grp_id" 12 +ANA Group Identifier .IP "nvmset_id" 12 +NVM Set Identifier .IP "rsvd42" 12 +Reserved .IP "nsid" 12 +Namespace ID diff --git a/doc/man/nvme_cmd_effects.2 b/doc/man/nvme_cmd_effects.2 index 37651db1..33cba38a 100644 --- a/doc/man/nvme_cmd_effects.2 +++ b/doc/man/nvme_cmd_effects.2 @@ -33,9 +33,16 @@ enum nvme_cmd_effects { }; .SH Constants .IP "NVME_CMD_EFFECTS_CSUPP" 12 +Command Supported .IP "NVME_CMD_EFFECTS_LBCC" 12 +Logical Block Content Change .IP "NVME_CMD_EFFECTS_NCC" 12 +Namespace Capability Change .IP "NVME_CMD_EFFECTS_NIC" 12 +Namespace Inventory Change .IP "NVME_CMD_EFFECTS_CCC" 12 +Controller Capability Change .IP "NVME_CMD_EFFECTS_CSE_MASK" 12 +Command Submission and Execution .IP "NVME_CMD_EFFECTS_UUID_SEL" 12 +UUID Selection Supported diff --git a/doc/man/nvme_cmd_effects_log.2 b/doc/man/nvme_cmd_effects_log.2 index 3f30ec56..0d5cc599 100644 --- a/doc/man/nvme_cmd_effects_log.2 +++ b/doc/man/nvme_cmd_effects_log.2 @@ -16,5 +16,8 @@ struct nvme_cmd_effects_log { .SH Members .IP "acs" 12 +Admin Command Supported .IP "iocs" 12 +I/O Command Supported .IP "rsvd" 12 +Reserved diff --git a/doc/man/nvme_copy_range.2 b/doc/man/nvme_copy_range.2 index 96e3a8ec..0c32df51 100644 --- a/doc/man/nvme_copy_range.2 +++ b/doc/man/nvme_copy_range.2 @@ -24,9 +24,16 @@ struct nvme_copy_range { .SH Members .IP "rsvd0" 12 +Reserved .IP "slba" 12 +Starting LBA .IP "nlb" 12 +Number of Logical Blocks .IP "rsvd18" 12 +Reserved .IP "eilbrt" 12 +Expected Initial Logical Block Reference Tag .IP "elbatm" 12 +Expected Logical Block Application Tag Mask .IP "elbat" 12 +Expected Logical Block Application Tag diff --git a/doc/man/nvme_create_ctrl.2 b/doc/man/nvme_create_ctrl.2 index d78efaaa..c05a6ed8 100644 --- a/doc/man/nvme_create_ctrl.2 +++ b/doc/man/nvme_create_ctrl.2 @@ -26,7 +26,6 @@ Host interface name .IP "trsvcid" 12 Transport service ID .SH "DESCRIPTION" -Creates an unconnected nvme_ctrl_t object to be used for -\fBnvme_add_ctrl\fP. +Creates an unconnected controller to be used for \fBnvme_add_ctrl\fP. .SH "RETURN" -nvme_ctrl_t object +Controller instance diff --git a/doc/man/nvme_create_root.2 b/doc/man/nvme_create_root.2 index b975916b..4470bccd 100644 --- a/doc/man/nvme_create_root.2 +++ b/doc/man/nvme_create_root.2 @@ -7,8 +7,8 @@ nvme_create_root \- Initialize root object .BI "int log_level " ");" .SH ARGUMENTS .IP "fp" 12 -filedescriptor for logging messages +File descriptor for logging messages .IP "log_level" 12 -logging level to use +Logging level to use .SH "RETURN" -initialized nvme_root_t object +Initialized \fInvme_root_t\fP object diff --git a/doc/man/nvme_ctrl_first_ns.2 b/doc/man/nvme_ctrl_first_ns.2 index c67a729a..1793a0db 100644 --- a/doc/man/nvme_ctrl_first_ns.2 +++ b/doc/man/nvme_ctrl_first_ns.2 @@ -6,6 +6,6 @@ nvme_ctrl_first_ns \- Start namespace iterator .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" -first nvme_ns_t object of an \fIc\fP iterator +First \fInvme_ns_t\fP object of an \fIc\fP iterator diff --git a/doc/man/nvme_ctrl_first_path.2 b/doc/man/nvme_ctrl_first_path.2 index 84551d20..a10b6a5a 100644 --- a/doc/man/nvme_ctrl_first_path.2 +++ b/doc/man/nvme_ctrl_first_path.2 @@ -6,6 +6,6 @@ nvme_ctrl_first_path \- Start path iterator .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" -First nvme_path_t object of an \fIc\fP iterator +First \fInvme_path_t\fP object of an \fIc\fP iterator diff --git a/doc/man/nvme_ctrl_for_each_ns.2 b/doc/man/nvme_ctrl_for_each_ns.2 index 0b3b3826..bdfffe65 100644 --- a/doc/man/nvme_ctrl_for_each_ns.2 +++ b/doc/man/nvme_ctrl_for_each_ns.2 @@ -1,12 +1,12 @@ .TH "nvme_ctrl_for_each_ns" 9 "nvme_ctrl_for_each_ns" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_for_each_ns \- traverse namespaces +nvme_ctrl_for_each_ns \- Traverse namespaces .SH SYNOPSIS .B "nvme_ctrl_for_each_ns .BI "(c " "," .BI "n " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .IP "n" 12 -nvme_ns_t object +\fInvme_ns_t\fP object diff --git a/doc/man/nvme_ctrl_for_each_ns_safe.2 b/doc/man/nvme_ctrl_for_each_ns_safe.2 index e63818cb..3336d19c 100644 --- a/doc/man/nvme_ctrl_for_each_ns_safe.2 +++ b/doc/man/nvme_ctrl_for_each_ns_safe.2 @@ -1,6 +1,6 @@ .TH "nvme_ctrl_for_each_ns_safe" 9 "nvme_ctrl_for_each_ns_safe" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_for_each_ns_safe \- traverse namespaces +nvme_ctrl_for_each_ns_safe \- Traverse namespaces .SH SYNOPSIS .B "nvme_ctrl_for_each_ns_safe .BI "(c " "," @@ -8,8 +8,8 @@ nvme_ctrl_for_each_ns_safe \- traverse namespaces .BI "_n " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .IP "n" 12 -nvme_ns_t object +\fInvme_ns_t\fP object .IP "_n" 12 -temporary nvme_ns_t object +A \fInvme_ns_t_node\fP to use as temporary storage diff --git a/doc/man/nvme_ctrl_for_each_path.2 b/doc/man/nvme_ctrl_for_each_path.2 index a3e661a7..53a324ee 100644 --- a/doc/man/nvme_ctrl_for_each_path.2 +++ b/doc/man/nvme_ctrl_for_each_path.2 @@ -7,6 +7,6 @@ nvme_ctrl_for_each_path \- Traverse paths .BI "p " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .IP "p" 12 -nvme_path_t object +\fInvme_path_t\fP object diff --git a/doc/man/nvme_ctrl_for_each_path_safe.2 b/doc/man/nvme_ctrl_for_each_path_safe.2 index 370e56a8..52477181 100644 --- a/doc/man/nvme_ctrl_for_each_path_safe.2 +++ b/doc/man/nvme_ctrl_for_each_path_safe.2 @@ -8,8 +8,8 @@ nvme_ctrl_for_each_path_safe \- Traverse paths .BI "_p " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .IP "p" 12 -nvme_path_t object +\fInvme_path_t\fP object .IP "_p" 12 -temporary nvme_path_t object +A \fInvme_path_t_node\fP to use as temporary storage diff --git a/doc/man/nvme_ctrl_get_address.2 b/doc/man/nvme_ctrl_get_address.2 index 3a656243..ac39babe 100644 --- a/doc/man/nvme_ctrl_get_address.2 +++ b/doc/man/nvme_ctrl_get_address.2 @@ -1,12 +1,12 @@ .TH "nvme_ctrl_get_address" 9 "nvme_ctrl_get_address" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_address \- Address string of an nvme_ctrl_t +nvme_ctrl_get_address \- Address string of a controller .SH SYNOPSIS .B "const char *" nvme_ctrl_get_address .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" NVMe-over-Fabrics address string of \fIc\fP or empty string of no address is present. diff --git a/doc/man/nvme_ctrl_get_config.2 b/doc/man/nvme_ctrl_get_config.2 index 0ffa649d..4542c587 100644 --- a/doc/man/nvme_ctrl_get_config.2 +++ b/doc/man/nvme_ctrl_get_config.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_config" 9 "nvme_ctrl_get_config" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_config \- Fabrics configuration of an nvme_ctrl_t object +nvme_ctrl_get_config \- Fabrics configuration of a controller .SH SYNOPSIS .B "struct nvme_fabrics_config *" nvme_ctrl_get_config .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" Fabrics configuration of \fIc\fP diff --git a/doc/man/nvme_ctrl_get_dhchap_key.2 b/doc/man/nvme_ctrl_get_dhchap_key.2 index f39837ae..e3e82618 100644 --- a/doc/man/nvme_ctrl_get_dhchap_key.2 +++ b/doc/man/nvme_ctrl_get_dhchap_key.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_dhchap_key" 9 "nvme_ctrl_get_dhchap_key" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_dhchap_key \- return controller key +nvme_ctrl_get_dhchap_key \- Return controller key .SH SYNOPSIS .B "const char *" nvme_ctrl_get_dhchap_key .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -controller for which the key should be returned +Controller for which the key should be set .SH "RETURN" DH-HMAC-CHAP controller key or NULL if not set diff --git a/doc/man/nvme_ctrl_get_fd.2 b/doc/man/nvme_ctrl_get_fd.2 index f6294d90..9c31572f 100644 --- a/doc/man/nvme_ctrl_get_fd.2 +++ b/doc/man/nvme_ctrl_get_fd.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_fd" 9 "nvme_ctrl_get_fd" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_fd \- Get associated filedescriptor +nvme_ctrl_get_fd \- Get associated file descriptor .SH SYNOPSIS .B "int" nvme_ctrl_get_fd .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" -Filedescriptor associated with \fIc\fP or -1 +File descriptor associated with \fIc\fP or -1 diff --git a/doc/man/nvme_ctrl_get_firmware.2 b/doc/man/nvme_ctrl_get_firmware.2 index 35599a72..6db05db4 100644 --- a/doc/man/nvme_ctrl_get_firmware.2 +++ b/doc/man/nvme_ctrl_get_firmware.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_firmware" 9 "nvme_ctrl_get_firmware" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_firmware \- Firmware string of an nvme_ctrl_t object +nvme_ctrl_get_firmware \- Firmware string of a controller .SH SYNOPSIS .B "const char *" nvme_ctrl_get_firmware .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" Firmware string of \fIc\fP diff --git a/doc/man/nvme_ctrl_get_host_iface.2 b/doc/man/nvme_ctrl_get_host_iface.2 index 83f76ac3..dc82d744 100644 --- a/doc/man/nvme_ctrl_get_host_iface.2 +++ b/doc/man/nvme_ctrl_get_host_iface.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_host_iface" 9 "nvme_ctrl_get_host_iface" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_host_iface \- Host interface name of an nvme_ctrl_t object +nvme_ctrl_get_host_iface \- Host interface name of a controller .SH SYNOPSIS .B "const char *" nvme_ctrl_get_host_iface .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" Host interface name of \fIc\fP (if present) diff --git a/doc/man/nvme_ctrl_get_host_traddr.2 b/doc/man/nvme_ctrl_get_host_traddr.2 index d07a1b39..0793c07d 100644 --- a/doc/man/nvme_ctrl_get_host_traddr.2 +++ b/doc/man/nvme_ctrl_get_host_traddr.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_host_traddr" 9 "nvme_ctrl_get_host_traddr" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_host_traddr \- Host transport address of an nvme_ctrl_t object +nvme_ctrl_get_host_traddr \- Host transport address of a controller .SH SYNOPSIS .B "const char *" nvme_ctrl_get_host_traddr .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" Host transport address of \fIc\fP (if present) diff --git a/doc/man/nvme_ctrl_get_model.2 b/doc/man/nvme_ctrl_get_model.2 index 58f736db..50fcbf07 100644 --- a/doc/man/nvme_ctrl_get_model.2 +++ b/doc/man/nvme_ctrl_get_model.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_model" 9 "nvme_ctrl_get_model" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_model \- Model of an nvme_ctrl_t object +nvme_ctrl_get_model \- Model of a controller .SH SYNOPSIS .B "const char *" nvme_ctrl_get_model .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" Model string of \fIc\fP diff --git a/doc/man/nvme_ctrl_get_name.2 b/doc/man/nvme_ctrl_get_name.2 index 2e244f5c..c65c4673 100644 --- a/doc/man/nvme_ctrl_get_name.2 +++ b/doc/man/nvme_ctrl_get_name.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_name" 9 "nvme_ctrl_get_name" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_name \- sysfs name of an nvme_ctrl_t object +nvme_ctrl_get_name \- sysfs name of a controller .SH SYNOPSIS .B "const char *" nvme_ctrl_get_name .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" sysfs name of \fIc\fP diff --git a/doc/man/nvme_ctrl_get_numa_node.2 b/doc/man/nvme_ctrl_get_numa_node.2 index d1d6ae03..9bc52780 100644 --- a/doc/man/nvme_ctrl_get_numa_node.2 +++ b/doc/man/nvme_ctrl_get_numa_node.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_numa_node" 9 "nvme_ctrl_get_numa_node" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_numa_node \- NUMA node of an nvme_ctrl_t object +nvme_ctrl_get_numa_node \- NUMA node of a controller .SH SYNOPSIS .B "const char *" nvme_ctrl_get_numa_node .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" -string indicating the NUMA node +String indicating the NUMA node diff --git a/doc/man/nvme_ctrl_get_queue_count.2 b/doc/man/nvme_ctrl_get_queue_count.2 index a7665f47..946d49ac 100644 --- a/doc/man/nvme_ctrl_get_queue_count.2 +++ b/doc/man/nvme_ctrl_get_queue_count.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_queue_count" 9 "nvme_ctrl_get_queue_count" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_queue_count \- Queue count of an nvme_ctrl_t object +nvme_ctrl_get_queue_count \- Queue count of a controller .SH SYNOPSIS .B "const char *" nvme_ctrl_get_queue_count .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" Queue count of \fIc\fP diff --git a/doc/man/nvme_ctrl_get_serial.2 b/doc/man/nvme_ctrl_get_serial.2 index a25bbdb9..6ba100b8 100644 --- a/doc/man/nvme_ctrl_get_serial.2 +++ b/doc/man/nvme_ctrl_get_serial.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_serial" 9 "nvme_ctrl_get_serial" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_serial \- Serial number of an nvme_ctrl_t object +nvme_ctrl_get_serial \- Serial number of a controller .SH SYNOPSIS .B "const char *" nvme_ctrl_get_serial .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Conroller instance .SH "RETURN" Serial number string of \fIc\fP diff --git a/doc/man/nvme_ctrl_get_sqsize.2 b/doc/man/nvme_ctrl_get_sqsize.2 index b6db2a3d..003f7c35 100644 --- a/doc/man/nvme_ctrl_get_sqsize.2 +++ b/doc/man/nvme_ctrl_get_sqsize.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_sqsize" 9 "nvme_ctrl_get_sqsize" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_sqsize \- SQ size of an nvme_ctrl_t object +nvme_ctrl_get_sqsize \- SQ size of a controller .SH SYNOPSIS .B "const char *" nvme_ctrl_get_sqsize .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" SQ size (as string) of \fIc\fP diff --git a/doc/man/nvme_ctrl_get_state.2 b/doc/man/nvme_ctrl_get_state.2 index 7d9e48c9..4de88cd8 100644 --- a/doc/man/nvme_ctrl_get_state.2 +++ b/doc/man/nvme_ctrl_get_state.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_state" 9 "nvme_ctrl_get_state" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_state \- Running state of an nvme_ctrl_t object +nvme_ctrl_get_state \- Running state of an controller .SH SYNOPSIS .B "const char *" nvme_ctrl_get_state .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" -string indicating the running state of \fIc\fP +String indicating the running state of \fIc\fP diff --git a/doc/man/nvme_ctrl_get_subsysnqn.2 b/doc/man/nvme_ctrl_get_subsysnqn.2 index c7ec366e..7534ffc1 100644 --- a/doc/man/nvme_ctrl_get_subsysnqn.2 +++ b/doc/man/nvme_ctrl_get_subsysnqn.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_subsysnqn" 9 "nvme_ctrl_get_subsysnqn" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_subsysnqn \- Subsystem NQN of an nvme_ctrl_t object +nvme_ctrl_get_subsysnqn \- Subsystem NQN of a controller .SH SYNOPSIS .B "const char *" nvme_ctrl_get_subsysnqn .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" Subsystem NQN of \fIc\fP diff --git a/doc/man/nvme_ctrl_get_subsystem.2 b/doc/man/nvme_ctrl_get_subsystem.2 index a5ee57f4..2ffa6ae6 100644 --- a/doc/man/nvme_ctrl_get_subsystem.2 +++ b/doc/man/nvme_ctrl_get_subsystem.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_subsystem" 9 "nvme_ctrl_get_subsystem" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_subsystem \- Parent subsystem of an nvme_ctrl_t object +nvme_ctrl_get_subsystem \- Parent subsystem of a controller .SH SYNOPSIS .B "nvme_subsystem_t" nvme_ctrl_get_subsystem .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" Parent nvme_subsystem_t object diff --git a/doc/man/nvme_ctrl_get_sysfs_dir.2 b/doc/man/nvme_ctrl_get_sysfs_dir.2 index 00d8405a..f4da55c5 100644 --- a/doc/man/nvme_ctrl_get_sysfs_dir.2 +++ b/doc/man/nvme_ctrl_get_sysfs_dir.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_sysfs_dir" 9 "nvme_ctrl_get_sysfs_dir" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_sysfs_dir \- sysfs directory of an nvme_ctrl_t object +nvme_ctrl_get_sysfs_dir \- sysfs directory of a controller .SH SYNOPSIS .B "const char *" nvme_ctrl_get_sysfs_dir .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" sysfs directory name of \fIc\fP diff --git a/doc/man/nvme_ctrl_get_traddr.2 b/doc/man/nvme_ctrl_get_traddr.2 index 2f772518..f248504b 100644 --- a/doc/man/nvme_ctrl_get_traddr.2 +++ b/doc/man/nvme_ctrl_get_traddr.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_traddr" 9 "nvme_ctrl_get_traddr" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_traddr \- Transport address of an nvme_ctrl_t object +nvme_ctrl_get_traddr \- Transport address of a controller .SH SYNOPSIS .B "const char *" nvme_ctrl_get_traddr .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" Transport address of \fIc\fP diff --git a/doc/man/nvme_ctrl_get_transport.2 b/doc/man/nvme_ctrl_get_transport.2 index 3d21a2dd..98d51464 100644 --- a/doc/man/nvme_ctrl_get_transport.2 +++ b/doc/man/nvme_ctrl_get_transport.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_transport" 9 "nvme_ctrl_get_transport" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_transport \- Transport type of an nvme_ctrl_t object +nvme_ctrl_get_transport \- Transport type of a controller .SH SYNOPSIS .B "const char *" nvme_ctrl_get_transport .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" Transport type of \fIc\fP diff --git a/doc/man/nvme_ctrl_get_trsvcid.2 b/doc/man/nvme_ctrl_get_trsvcid.2 index 4ecad339..1d6c0ad6 100644 --- a/doc/man/nvme_ctrl_get_trsvcid.2 +++ b/doc/man/nvme_ctrl_get_trsvcid.2 @@ -1,11 +1,11 @@ .TH "nvme_ctrl_get_trsvcid" 9 "nvme_ctrl_get_trsvcid" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_get_trsvcid \- Transport service identifier of an nvme_ctrl_t object +nvme_ctrl_get_trsvcid \- Transport service identifier of a controller .SH SYNOPSIS .B "const char *" nvme_ctrl_get_trsvcid .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" Transport service identifier of \fIc\fP (if present) diff --git a/doc/man/nvme_ctrl_identify.2 b/doc/man/nvme_ctrl_identify.2 index 6f198177..7efb04ff 100644 --- a/doc/man/nvme_ctrl_identify.2 +++ b/doc/man/nvme_ctrl_identify.2 @@ -7,9 +7,9 @@ nvme_ctrl_identify \- Issues an 'identify controller' command .BI "struct nvme_id_ctrl *id " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .IP "id" 12 -identify controller data structure +Identify controller data structure .SH "DESCRIPTION" Issues an 'identify controller' command to \fIc\fP and copies the data into \fIid\fP. diff --git a/doc/man/nvme_ctrl_is_discovered.2 b/doc/man/nvme_ctrl_is_discovered.2 index fde7fa54..aae66ec4 100644 --- a/doc/man/nvme_ctrl_is_discovered.2 +++ b/doc/man/nvme_ctrl_is_discovered.2 @@ -6,6 +6,6 @@ nvme_ctrl_is_discovered \- Returns the value of the 'discovered' flag .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" Value of the 'discovered' flag of \fIc\fP diff --git a/doc/man/nvme_ctrl_is_discovery_ctrl.2 b/doc/man/nvme_ctrl_is_discovery_ctrl.2 index d5684ea3..25a81c12 100644 --- a/doc/man/nvme_ctrl_is_discovery_ctrl.2 +++ b/doc/man/nvme_ctrl_is_discovery_ctrl.2 @@ -11,4 +11,4 @@ Controller to be checked Returns the value of the 'discovery_ctrl' flag which specifies whether \fIc\fP connects to a discovery subsystem. .SH "RETURN" -value of the 'discover_ctrl' flag +Value of the 'discover_ctrl' flag diff --git a/doc/man/nvme_ctrl_is_persistent.2 b/doc/man/nvme_ctrl_is_persistent.2 index 0fe8f048..cf610295 100644 --- a/doc/man/nvme_ctrl_is_persistent.2 +++ b/doc/man/nvme_ctrl_is_persistent.2 @@ -6,6 +6,6 @@ nvme_ctrl_is_persistent \- Returns the value of the 'persistent' flag .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "RETURN" Value of the 'persistent' flag of \fIc\fP diff --git a/doc/man/nvme_ctrl_list.2 b/doc/man/nvme_ctrl_list.2 index 6c8935ff..ef4578fe 100644 --- a/doc/man/nvme_ctrl_list.2 +++ b/doc/man/nvme_ctrl_list.2 @@ -14,4 +14,6 @@ struct nvme_ctrl_list { .SH Members .IP "num" 12 +Number of Identifiers .IP "identifier" 12 +NVM subsystem unique controller identifier diff --git a/doc/man/nvme_ctrl_next_ns.2 b/doc/man/nvme_ctrl_next_ns.2 index 6427c3ae..603b4035 100644 --- a/doc/man/nvme_ctrl_next_ns.2 +++ b/doc/man/nvme_ctrl_next_ns.2 @@ -7,8 +7,8 @@ nvme_ctrl_next_ns \- Next namespace iterator .BI "nvme_ns_t n " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .IP "n" 12 -previous nvme_ns_t iterator +Previous nvme_ns_t iterator .SH "RETURN" -next nvme_ns_t object of an \fIc\fP iterator +Next nvme_ns_t object of an \fIc\fP iterator diff --git a/doc/man/nvme_ctrl_next_path.2 b/doc/man/nvme_ctrl_next_path.2 index f54fabf8..1c092904 100644 --- a/doc/man/nvme_ctrl_next_path.2 +++ b/doc/man/nvme_ctrl_next_path.2 @@ -7,6 +7,8 @@ nvme_ctrl_next_path \- Next path iterator .BI "nvme_path_t p " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .IP "p" 12 -previous nvme_path_t object of an \fIc\fP iterator +Previous \fInvme_path_t\fP object of an \fIc\fP iterator +.SH "RETURN" +Next \fInvme_path_t\fP object of an \fIc\fP iterator diff --git a/doc/man/nvme_ctrl_set_dhchap_key.2 b/doc/man/nvme_ctrl_set_dhchap_key.2 index 31229bed..208cbf1e 100644 --- a/doc/man/nvme_ctrl_set_dhchap_key.2 +++ b/doc/man/nvme_ctrl_set_dhchap_key.2 @@ -1,6 +1,6 @@ .TH "nvme_ctrl_set_dhchap_key" 9 "nvme_ctrl_set_dhchap_key" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ctrl_set_dhchap_key \- set controller key +nvme_ctrl_set_dhchap_key \- Set controller key .SH SYNOPSIS .B "void" nvme_ctrl_set_dhchap_key .BI "(nvme_ctrl_t c " "," diff --git a/doc/man/nvme_ctrl_set_discovered.2 b/doc/man/nvme_ctrl_set_discovered.2 index bdaf2c3b..99ab4093 100644 --- a/doc/man/nvme_ctrl_set_discovered.2 +++ b/doc/man/nvme_ctrl_set_discovered.2 @@ -9,6 +9,6 @@ nvme_ctrl_set_discovered \- Set the 'discovered' flag .IP "c" 12 nvme_ctrl_t object .IP "discovered" 12 -value of the 'discovered' flag +Value of the 'discovered' flag .SH "DESCRIPTION" Set the 'discovered' flag of \fIc\fP to \fIdiscovered\fP diff --git a/doc/man/nvme_ctrl_set_persistent.2 b/doc/man/nvme_ctrl_set_persistent.2 index d20d344b..a93fc030 100644 --- a/doc/man/nvme_ctrl_set_persistent.2 +++ b/doc/man/nvme_ctrl_set_persistent.2 @@ -7,7 +7,7 @@ nvme_ctrl_set_persistent \- Set the 'persistent' flag .BI "bool persistent " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .IP "persistent" 12 value of the 'persistent' flag .SH "DESCRIPTION" diff --git a/doc/man/nvme_default_host.2 b/doc/man/nvme_default_host.2 index 21e155e1..1c917249 100644 --- a/doc/man/nvme_default_host.2 +++ b/doc/man/nvme_default_host.2 @@ -6,9 +6,9 @@ nvme_default_host \- Initializes the default host .BI "(nvme_root_t r " ");" .SH ARGUMENTS .IP "r" 12 -nvme_root_t object +\fInvme_root_t\fP object .SH "DESCRIPTION" Initializes the default host object based on the values in /etc/nvme/hostnqn and /etc/nvme/hostid and attaches it to \fIr\fP. .SH "RETURN" -nvme_host_t object +\fInvme_host_t\fP object diff --git a/doc/man/nvme_dim_args.2 b/doc/man/nvme_dim_args.2 new file mode 100644 index 00000000..8592ae83 --- /dev/null +++ b/doc/man/nvme_dim_args.2 @@ -0,0 +1,39 @@ +.TH "libnvme" 9 "struct nvme_dim_args" "February 2022" "API Manual" LINUX +.SH NAME +struct nvme_dim_args \- Arguments for the Discovery Information Management (DIM) command +.SH SYNOPSIS +struct nvme_dim_args { +.br +.BI " __u32 *result;" +.br +.BI " void *data;" +.br +.BI " int args_size;" +.br +.BI " int fd;" +.br +.BI " __u32 timeout;" +.br +.BI " __u32 data_len;" +.br +.BI " __u8 tas;" +.br +.BI " +}; +.br + +.SH Members +.IP "result" 12 +Set on completion to the command's CQE DWORD 0 controller response. +.IP "data" 12 +Pointer to the DIM data +.IP "args_size" 12 +Length of the structure +.IP "fd" 12 +File descriptor of nvme device +.IP "timeout" 12 +Timeout in ms +.IP "data_len" 12 +Length of \fIdata\fP +.IP "tas" 12 +Task field of the Command Dword 10 (cdw10) diff --git a/doc/man/nvme_directive_recv_stream_allocate.2 b/doc/man/nvme_directive_recv_stream_allocate.2 index 777ea042..7efed331 100644 --- a/doc/man/nvme_directive_recv_stream_allocate.2 +++ b/doc/man/nvme_directive_recv_stream_allocate.2 @@ -13,7 +13,9 @@ File descriptor of nvme device .IP "nsid" 12 Namespace ID .IP "nsr" 12 +Namespace Streams Requested .IP "result" 12 +If successful, the CQE dword0 value .SH "RETURN" The nvme command status if a response was received (see \fIenum nvme_status_field\fP) or -1 with errno set otherwise. diff --git a/doc/man/nvme_directive_send_id_endir.2 b/doc/man/nvme_directive_send_id_endir.2 index 4674e085..38a809c3 100644 --- a/doc/man/nvme_directive_send_id_endir.2 +++ b/doc/man/nvme_directive_send_id_endir.2 @@ -12,9 +12,13 @@ nvme_directive_send_id_endir \- .IP "fd" 12 File descriptor of nvme device .IP "nsid" 12 +Namespace Identifier .IP "endir" 12 +Enable Directive .IP "dtype" 12 +Directive Type .IP "id" 12 +Pointer to structure nvme_id_directives .SH "RETURN" The nvme command status if a response was received (see \fIenum nvme_status_field\fP) or -1 with errno set otherwise. diff --git a/doc/man/nvme_disconnect_ctrl.2 b/doc/man/nvme_disconnect_ctrl.2 index 0e4de920..25b7bd53 100644 --- a/doc/man/nvme_disconnect_ctrl.2 +++ b/doc/man/nvme_disconnect_ctrl.2 @@ -6,7 +6,7 @@ nvme_disconnect_ctrl \- Disconnect a controller .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .SH "DESCRIPTION" Issues a 'disconnect' fabrics command to \fIc\fP .SH "RETURN" diff --git a/doc/man/nvme_dsm_range.2 b/doc/man/nvme_dsm_range.2 index 5f1259f1..a80fb141 100644 --- a/doc/man/nvme_dsm_range.2 +++ b/doc/man/nvme_dsm_range.2 @@ -16,5 +16,8 @@ struct nvme_dsm_range { .SH Members .IP "cattr" 12 +Context Attributes .IP "nlb" 12 +Length in logical blocks .IP "slba" 12 +Starting LBA diff --git a/doc/man/nvme_dump_tree.2 b/doc/man/nvme_dump_tree.2 new file mode 100644 index 00000000..de4a11b4 --- /dev/null +++ b/doc/man/nvme_dump_tree.2 @@ -0,0 +1,14 @@ +.TH "nvme_dump_tree" 9 "nvme_dump_tree" "February 2022" "libnvme API manual" LINUX +.SH NAME +nvme_dump_tree \- Dump internal object tree +.SH SYNOPSIS +.B "int" nvme_dump_tree +.BI "(nvme_root_t r " ");" +.SH ARGUMENTS +.IP "r" 12 +nvme_root_t object +.SH "DESCRIPTION" +Prints the internal object tree in JSON format +to stdout. +.SH "RETURN" +0 on success, -1 on failure. diff --git a/doc/man/nvme_eg_event_aggregate_log.2 b/doc/man/nvme_eg_event_aggregate_log.2 index c597c247..2458ca91 100644 --- a/doc/man/nvme_eg_event_aggregate_log.2 +++ b/doc/man/nvme_eg_event_aggregate_log.2 @@ -14,4 +14,6 @@ struct nvme_eg_event_aggregate_log { .SH Members .IP "nr_entries" 12 +Number of Entries .IP "egids" 12 +Endurance Group Identifier diff --git a/doc/man/nvme_endurance_group_log.2 b/doc/man/nvme_endurance_group_log.2 index 7688bb08..9e3371ae 100644 --- a/doc/man/nvme_endurance_group_log.2 +++ b/doc/man/nvme_endurance_group_log.2 @@ -40,17 +40,32 @@ struct nvme_endurance_group_log { .SH Members .IP "critical_warning" 12 +Critical Warning .IP "rsvd1" 12 +Reserved .IP "avl_spare" 12 +Available Spare .IP "avl_spare_threshold" 12 +Available Spare Threshold .IP "percent_used" 12 +Percentage Used .IP "rsvd6" 12 +Reserved .IP "endurance_estimate" 12 +Endurance Estimate .IP "data_units_read" 12 +Data Units Read .IP "data_units_written" 12 +Data Units Written .IP "media_units_written" 12 +Media Units Written .IP "host_read_cmds" 12 +Host Read Commands .IP "host_write_cmds" 12 +Host Write Commands .IP "media_data_integrity_err" 12 +Media and Data Integrity Errors .IP "num_err_info_log_entries" 12 +Number of Error Information Log Entries .IP "rsvd160" 12 +Reserved diff --git a/doc/man/nvme_error_log_page.2 b/doc/man/nvme_error_log_page.2 index ba0ba301..697fa513 100644 --- a/doc/man/nvme_error_log_page.2 +++ b/doc/man/nvme_error_log_page.2 @@ -104,4 +104,6 @@ Command Specific Information: This field contains command specific information. If used, the command definition specifies the information returned. .IP "trtype_spec_info" 12 +Transport Type Specific Information .IP "rsvd2" 12 +Reserved diff --git a/doc/man/nvme_feat_host_behavior.2 b/doc/man/nvme_feat_host_behavior.2 index 685262bb..61853129 100644 --- a/doc/man/nvme_feat_host_behavior.2 +++ b/doc/man/nvme_feat_host_behavior.2 @@ -14,4 +14,6 @@ struct nvme_feat_host_behavior { .SH Members .IP "acre" 12 +Advanced Command Retry Enable .IP "rsvd1" 12 +Reserved diff --git a/doc/man/nvme_fid_supported_effects_log.2 b/doc/man/nvme_fid_supported_effects_log.2 index b8e11b9d..d53f910e 100644 --- a/doc/man/nvme_fid_supported_effects_log.2 +++ b/doc/man/nvme_fid_supported_effects_log.2 @@ -12,5 +12,6 @@ struct nvme_fid_supported_effects_log { .SH Members .IP "fid_support" 12 +Feature Identifier Supported .SH "Description" Feature Identifiers Supported and Effects (Log Identifier 12h) diff --git a/doc/man/nvme_firmware_slot.2 b/doc/man/nvme_firmware_slot.2 index 1b4a5135..fae187fa 100644 --- a/doc/man/nvme_firmware_slot.2 +++ b/doc/man/nvme_firmware_slot.2 @@ -18,6 +18,10 @@ struct nvme_firmware_slot { .SH Members .IP "afi" 12 +Active Firmware Info .IP "rsvd1" 12 +Reserved .IP "frs" 12 +Firmware Revision for Slot .IP "rsvd2" 12 +Reserved diff --git a/doc/man/nvme_first_host.2 b/doc/man/nvme_first_host.2 index 8acc384f..c64bb0bb 100644 --- a/doc/man/nvme_first_host.2 +++ b/doc/man/nvme_first_host.2 @@ -6,6 +6,6 @@ nvme_first_host \- Start host iterator .BI "(nvme_root_t r " ");" .SH ARGUMENTS .IP "r" 12 -nvme_root_t object +\fInvme_root_t\fP object .SH "RETURN" -first nvme_host_t object in an iterator +First \fInvme_host_t\fP object in an iterator diff --git a/doc/man/nvme_first_subsystem.2 b/doc/man/nvme_first_subsystem.2 index 21fd4e52..467e5219 100644 --- a/doc/man/nvme_first_subsystem.2 +++ b/doc/man/nvme_first_subsystem.2 @@ -6,6 +6,6 @@ nvme_first_subsystem \- Start subsystem iterator .BI "(nvme_host_t h " ");" .SH ARGUMENTS .IP "h" 12 -nvme_host_t object +\fInvme_host_t\fP object .SH "RETURN" -first nvme_subsystem_t object in an iterator +first \fInvme_subsystem_t\fP object in an iterator diff --git a/doc/man/nvme_for_each_host.2 b/doc/man/nvme_for_each_host.2 index 89213d6a..8b06fe2a 100644 --- a/doc/man/nvme_for_each_host.2 +++ b/doc/man/nvme_for_each_host.2 @@ -7,6 +7,6 @@ nvme_for_each_host \- Traverse host list .BI "h " ");" .SH ARGUMENTS .IP "r" 12 -nvme_root_t object +\fInvme_root_t\fP object .IP "h" 12 -nvme_host_t object +\fInvme_host_t\fP object diff --git a/doc/man/nvme_for_each_host_safe.2 b/doc/man/nvme_for_each_host_safe.2 index e8c10c23..171fb695 100644 --- a/doc/man/nvme_for_each_host_safe.2 +++ b/doc/man/nvme_for_each_host_safe.2 @@ -8,8 +8,8 @@ nvme_for_each_host_safe \- Traverse host list .BI "_h " ");" .SH ARGUMENTS .IP "r" 12 -nvme_root_t object +\fInvme_root_t\fP object .IP "h" 12 -nvme_host_t object +\fInvme_host_t\fP object .IP "_h" 12 -temporary nvme_host_t object +Temporary \fInvme_host_t\fP object diff --git a/doc/man/nvme_for_each_subsystem.2 b/doc/man/nvme_for_each_subsystem.2 index b2bc637e..a1d7448e 100644 --- a/doc/man/nvme_for_each_subsystem.2 +++ b/doc/man/nvme_for_each_subsystem.2 @@ -7,6 +7,6 @@ nvme_for_each_subsystem \- Traverse subsystems .BI "s " ");" .SH ARGUMENTS .IP "h" 12 -nvme_host_t object +\fInvme_host_t\fP object .IP "s" 12 -nvme_subsystem_t object +\fInvme_subsystem_t\fP object diff --git a/doc/man/nvme_for_each_subsystem_safe.2 b/doc/man/nvme_for_each_subsystem_safe.2 index 94a30b09..2538a9dc 100644 --- a/doc/man/nvme_for_each_subsystem_safe.2 +++ b/doc/man/nvme_for_each_subsystem_safe.2 @@ -8,8 +8,8 @@ nvme_for_each_subsystem_safe \- Traverse subsystems .BI "_s " ");" .SH ARGUMENTS .IP "h" 12 -nvme_host_t object +\fInvme_host_t\fP object .IP "s" 12 -nvme_subsystem_t object +\fInvme_subsystem_t\fP object .IP "_s" 12 -temporary nvme_subsystem_t object +Temporary \fInvme_subsystem_t\fP object diff --git a/doc/man/nvme_format_nvm_compln_event.2 b/doc/man/nvme_format_nvm_compln_event.2 index d1010aa4..40d5f73f 100644 --- a/doc/man/nvme_format_nvm_compln_event.2 +++ b/doc/man/nvme_format_nvm_compln_event.2 @@ -20,7 +20,12 @@ struct nvme_format_nvm_compln_event { .SH Members .IP "nsid" 12 +Namespace Identifier .IP "smallest_fpi" 12 +Smallest Format Progress Indicator .IP "format_nvm_status" 12 +Format NVM Status .IP "compln_info" 12 +Completion Information .IP "status_field" 12 +Status Field diff --git a/doc/man/nvme_format_nvm_start_event.2 b/doc/man/nvme_format_nvm_start_event.2 index 5e3eee1e..4351f42c 100644 --- a/doc/man/nvme_format_nvm_start_event.2 +++ b/doc/man/nvme_format_nvm_start_event.2 @@ -18,6 +18,10 @@ struct nvme_format_nvm_start_event { .SH Members .IP "nsid" 12 +Namespace Identifier .IP "fna" 12 +Format NVM Attributes .IP "rsvd5" 12 +Reserved .IP "format_nvm_cdw10" 12 +Format NVM CDW10 diff --git a/doc/man/nvme_free_ctrl.2 b/doc/man/nvme_free_ctrl.2 index bd23ea65..2fe94ec8 100644 --- a/doc/man/nvme_free_ctrl.2 +++ b/doc/man/nvme_free_ctrl.2 @@ -1,8 +1,9 @@ .TH "nvme_free_ctrl" 9 "nvme_free_ctrl" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_free_ctrl \- +nvme_free_ctrl \- Free controller .SH SYNOPSIS .B "void" nvme_free_ctrl .BI "(struct nvme_ctrl *c " ");" .SH ARGUMENTS .IP "c" 12 +Controller instance diff --git a/doc/man/nvme_free_ns.2 b/doc/man/nvme_free_ns.2 index b9c394e2..51016914 100644 --- a/doc/man/nvme_free_ns.2 +++ b/doc/man/nvme_free_ns.2 @@ -1,9 +1,9 @@ .TH "nvme_free_ns" 9 "nvme_free_ns" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_free_ns \- free an nvme_ns_t object +nvme_free_ns \- Free a namespace object .SH SYNOPSIS .B "void" nvme_free_ns .BI "(struct nvme_ns *n " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance diff --git a/doc/man/nvme_free_tree.2 b/doc/man/nvme_free_tree.2 index 425a1646..79c5b9b5 100644 --- a/doc/man/nvme_free_tree.2 +++ b/doc/man/nvme_free_tree.2 @@ -6,6 +6,6 @@ nvme_free_tree \- Free root object .BI "(nvme_root_t r " ");" .SH ARGUMENTS .IP "r" 12 -nvme_root_t object +\fInvme_root_t\fP object .SH "DESCRIPTION" -Free an nvme_root_t object and all attached objects +Free an \fInvme_root_t\fP object and all attached objects diff --git a/doc/man/nvme_fw_commit_event.2 b/doc/man/nvme_fw_commit_event.2 index 4542f298..f73401b4 100644 --- a/doc/man/nvme_fw_commit_event.2 +++ b/doc/man/nvme_fw_commit_event.2 @@ -24,9 +24,16 @@ struct nvme_fw_commit_event { .SH Members .IP "old_fw_rev" 12 +Old Firmware Revision .IP "new_fw_rev" 12 +New Firmware Revision .IP "fw_commit_action" 12 +Firmware Commit Action .IP "fw_slot" 12 +Firmware Slot .IP "sct_fw" 12 +Status Code Type for Firmware Commit Command .IP "sc_fw" 12 +Status Returned for Firmware Commit Command .IP "vndr_assign_fw_commit_rc" 12 +Vendor Assigned Firmware Commit Result Code diff --git a/doc/man/nvme_fw_download_seq.2 b/doc/man/nvme_fw_download_seq.2 index aa28f1ac..41151185 100644 --- a/doc/man/nvme_fw_download_seq.2 +++ b/doc/man/nvme_fw_download_seq.2 @@ -1,6 +1,6 @@ .TH "nvme_fw_download_seq" 9 "nvme_fw_download_seq" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_fw_download_seq \- +nvme_fw_download_seq \- Firmware download sequence .SH SYNOPSIS .B "int" nvme_fw_download_seq .BI "(int fd " "," diff --git a/doc/man/nvme_gen_dhchap_key.2 b/doc/man/nvme_gen_dhchap_key.2 index 8efaf1fb..ec9d2dc7 100644 --- a/doc/man/nvme_gen_dhchap_key.2 +++ b/doc/man/nvme_gen_dhchap_key.2 @@ -14,7 +14,7 @@ Host NVMe Qualified Name .IP "hmac" 12 HMAC algorithm .IP "key_len" 12 -Output key lenght +Output key length .IP "secret" 12 Secret to used for digest .IP "key" 12 diff --git a/doc/man/nvme_get_attr.2 b/doc/man/nvme_get_attr.2 index 50b2fc7e..0f035c64 100644 --- a/doc/man/nvme_get_attr.2 +++ b/doc/man/nvme_get_attr.2 @@ -11,4 +11,4 @@ sysfs directory .IP "attr" 12 sysfs attribute name .SH "RETURN" -string with the contents of \fIattr\fP +String with the contents of \fIattr\fP diff --git a/doc/man/nvme_get_ctrl_attr.2 b/doc/man/nvme_get_ctrl_attr.2 index 0d55022a..af95c770 100644 --- a/doc/man/nvme_get_ctrl_attr.2 +++ b/doc/man/nvme_get_ctrl_attr.2 @@ -7,8 +7,8 @@ nvme_get_ctrl_attr \- Read controller sysfs attribute .BI "const char *attr " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance .IP "attr" 12 sysfs attribute name .SH "RETURN" -string with the contents of \fIattr\fP +String with the contents of \fIattr\fP diff --git a/doc/man/nvme_get_ctrl_telemetry.2 b/doc/man/nvme_get_ctrl_telemetry.2 index 6223adcd..7c61728c 100644 --- a/doc/man/nvme_get_ctrl_telemetry.2 +++ b/doc/man/nvme_get_ctrl_telemetry.2 @@ -1,21 +1,27 @@ .TH "nvme_get_ctrl_telemetry" 9 "nvme_get_ctrl_telemetry" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_get_ctrl_telemetry \- +nvme_get_ctrl_telemetry \- Get controller telemetry log .SH SYNOPSIS .B "int" nvme_get_ctrl_telemetry .BI "(int fd " "," .BI "bool rae " "," -.BI "struct nvme_telemetry_log **log " ");" +.BI "struct nvme_telemetry_log **log " "," +.BI "enum nvme_telemetry_da da " "," +.BI "size_t *size " ");" .SH ARGUMENTS .IP "fd" 12 File descriptor of nvme device .IP "rae" 12 Retain asynchronous events .IP "log" 12 -On success, set to the value of the allocated and retreived log. +On success, set to the value of the allocated and retrieved log. +.IP "da" 12 +Log page data area, valid values: \fIenum nvme_telemetry_da\fP +.IP "size" 12 +Ptr to the telemetry log size, so it can be returned .SH "DESCRIPTION" The total size allocated can be calculated as: -(\fIstruct nvme_telemetry_log\fP.dalb3 + 1) * NVME_LOG_TELEM_BLOCK_SIZE. +(nvme_telemetry_log da size + 1) * NVME_LOG_TELEM_BLOCK_SIZE. .SH "RETURN" The nvme command status if a response was received (see \fIenum nvme_status_field\fP) or -1 with errno set otherwise. diff --git a/doc/man/nvme_get_features_endurance_event_cfg.2 b/doc/man/nvme_get_features_endurance_event_cfg.2 index f8e58ae6..8af2b6fc 100644 --- a/doc/man/nvme_get_features_endurance_event_cfg.2 +++ b/doc/man/nvme_get_features_endurance_event_cfg.2 @@ -13,6 +13,7 @@ File descriptor of nvme device .IP "sel" 12 Select which type of attribute to return, see \fIenum nvme_get_features_sel\fP .IP "endgid" 12 +Endurance Group Identifier .IP "result" 12 The command completion result from CQE dword0 .SH "RETURN" diff --git a/doc/man/nvme_get_features_host_behavior.2 b/doc/man/nvme_get_features_host_behavior.2 index 125e6157..006f43d4 100644 --- a/doc/man/nvme_get_features_host_behavior.2 +++ b/doc/man/nvme_get_features_host_behavior.2 @@ -13,6 +13,7 @@ File descriptor of nvme device .IP "sel" 12 Select which type of attribute to return, see \fIenum nvme_get_features_sel\fP .IP "data" 12 +Poniter to structure nvme_feat_host_behavior .IP "result" 12 The command completion result from CQE dword0 .SH "RETURN" diff --git a/doc/man/nvme_get_features_host_id.2 b/doc/man/nvme_get_features_host_id.2 index 297fd855..b1e48e3f 100644 --- a/doc/man/nvme_get_features_host_id.2 +++ b/doc/man/nvme_get_features_host_id.2 @@ -14,6 +14,7 @@ File descriptor of nvme device .IP "sel" 12 Select which type of attribute to return, see \fIenum nvme_get_features_sel\fP .IP "exhid" 12 +Enable Extended Host Identifier .IP "len" 12 Length of \fIhostid\fP .IP "hostid" 12 diff --git a/doc/man/nvme_get_host_telemetry.2 b/doc/man/nvme_get_host_telemetry.2 index c50a0d62..113dad5d 100644 --- a/doc/man/nvme_get_host_telemetry.2 +++ b/doc/man/nvme_get_host_telemetry.2 @@ -1,18 +1,24 @@ .TH "nvme_get_host_telemetry" 9 "nvme_get_host_telemetry" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_get_host_telemetry \- +nvme_get_host_telemetry \- Get host telemetry log .SH SYNOPSIS .B "int" nvme_get_host_telemetry .BI "(int fd " "," -.BI "struct nvme_telemetry_log **log " ");" +.BI "struct nvme_telemetry_log **log " "," +.BI "enum nvme_telemetry_da da " "," +.BI "size_t *size " ");" .SH ARGUMENTS .IP "fd" 12 File descriptor of nvme device .IP "log" 12 -On success, set to the value of the allocated and retreived log. +On success, set to the value of the allocated and retrieved log. +.IP "da" 12 +Log page data area, valid values: \fIenum nvme_telemetry_da\fP +.IP "size" 12 +Ptr to the telemetry log size, so it can be returned .SH "DESCRIPTION" The total size allocated can be calculated as: -(\fIstruct nvme_telemetry_log\fP.dalb3 + 1) * NVME_LOG_TELEM_BLOCK_SIZE. +(nvme_telemetry_log da size + 1) * NVME_LOG_TELEM_BLOCK_SIZE. .SH "RETURN" The nvme command status if a response was received (see \fIenum nvme_status_field\fP) or -1 with errno set otherwise. diff --git a/doc/man/nvme_get_lba_status_log.2 b/doc/man/nvme_get_lba_status_log.2 index 49276135..f4e945bb 100644 --- a/doc/man/nvme_get_lba_status_log.2 +++ b/doc/man/nvme_get_lba_status_log.2 @@ -13,3 +13,6 @@ File descriptor of the nvme device Retain asynchronous events .IP "log" 12 On success, set to the value of the allocated and retreived log. +.SH "RETURN" +The nvme command status if a response was received (see +\fIenum nvme_status_field\fP) or -1 with errno set otherwise. diff --git a/doc/man/nvme_get_log_page.2 b/doc/man/nvme_get_log_page.2 index 0352ea0f..34935b77 100644 --- a/doc/man/nvme_get_log_page.2 +++ b/doc/man/nvme_get_log_page.2 @@ -1,30 +1,18 @@ .TH "nvme_get_log_page" 9 "nvme_get_log_page" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_get_log_page \- +nvme_get_log_page \- Get log page data .SH SYNOPSIS .B "int" nvme_get_log_page .BI "(int fd " "," -.BI "__u32 nsid " "," -.BI "__u8 log_id " "," -.BI "bool rae " "," .BI "__u32 xfer_len " "," -.BI "__u32 data_len " "," -.BI "void *data " ");" +.BI "struct nvme_get_log_args *args " ");" .SH ARGUMENTS .IP "fd" 12 File descriptor of nvme device -.IP "nsid" 12 -Namespace Identifier, if applicable. -.IP "log_id" 12 -Log Identifier, see \fIenum nvme_cmd_get_log_lid\fP. -.IP "rae" 12 -Retain asynchronous events .IP "xfer_len" 12 Max log transfer size per request to split the total. -.IP "data_len" 12 -Total length of the log to transfer. -.IP "data" 12 -User address of at least \fIdata_len\fP to store the log. +.IP "args" 12 +\fIstruct nvme_get_log_args\fP argument structure .SH "RETURN" The nvme command status if a response was received (see \fIenum nvme_status_field\fP) or -1 with errno set otherwise. diff --git a/doc/man/nvme_get_log_page_padded.2 b/doc/man/nvme_get_log_page_padded.2 deleted file mode 100644 index 29c7af44..00000000 --- a/doc/man/nvme_get_log_page_padded.2 +++ /dev/null @@ -1,30 +0,0 @@ -.TH "nvme_get_log_page_padded" 9 "nvme_get_log_page_padded" "February 2022" "libnvme API manual" LINUX -.SH NAME -nvme_get_log_page_padded \- -.SH SYNOPSIS -.B "int" nvme_get_log_page_padded -.BI "(int fd " "," -.BI "__u32 nsid " "," -.BI "__u8 log_id " "," -.BI "bool rae " "," -.BI "__u32 data_len " "," -.BI "void *data " ");" -.SH ARGUMENTS -.IP "fd" 12 -File descriptor of nvme device -.IP "nsid" 12 -Namespace Identifier, if applicable. -.IP "log_id" 12 -Log Identifier, see \fIenum nvme_cmd_get_log_lid\fP. -.IP "rae" 12 -Retain asynchronous events -.IP "data_len" 12 -Total length of the log to transfer. -.IP "data" 12 -User address of at least \fIdata_len\fP to store the log. -.SH "DESCRIPTION" -Calls \fBnvme_get_log_page\fP with a default 4k transfer length, as that is -guarnateed by the protocol to be a safe transfer size. -.SH "RETURN" -The nvme command status if a response was received (see -\fIenum nvme_status_field\fP) or -1 with errno set otherwise. diff --git a/doc/man/nvme_get_log_predictable_lat_event.2 b/doc/man/nvme_get_log_predictable_lat_event.2 index 556f42ca..7a34e748 100644 --- a/doc/man/nvme_get_log_predictable_lat_event.2 +++ b/doc/man/nvme_get_log_predictable_lat_event.2 @@ -14,5 +14,8 @@ File descriptor of nvme device .IP "rae" 12 Retain asynchronous events .IP "offset" 12 +Offset into the predictable latency event .IP "len" 12 +Length of provided user buffer to hold the log data in bytes .IP "log" 12 +User address for log page data diff --git a/doc/man/nvme_get_new_host_telemetry.2 b/doc/man/nvme_get_new_host_telemetry.2 index 3ddeb076..5e000c2c 100644 --- a/doc/man/nvme_get_new_host_telemetry.2 +++ b/doc/man/nvme_get_new_host_telemetry.2 @@ -1,18 +1,24 @@ .TH "nvme_get_new_host_telemetry" 9 "nvme_get_new_host_telemetry" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_get_new_host_telemetry \- +nvme_get_new_host_telemetry \- Get new host telemetry log .SH SYNOPSIS .B "int" nvme_get_new_host_telemetry .BI "(int fd " "," -.BI "struct nvme_telemetry_log **log " ");" +.BI "struct nvme_telemetry_log **log " "," +.BI "enum nvme_telemetry_da da " "," +.BI "size_t *size " ");" .SH ARGUMENTS .IP "fd" 12 File descriptor of nvme device .IP "log" 12 -On success, set to the value of the allocated and retreived log. +On success, set to the value of the allocated and retrieved log. +.IP "da" 12 +Log page data area, valid values: \fIenum nvme_telemetry_da\fP +.IP "size" 12 +Ptr to the telemetry log size, so it can be returned .SH "DESCRIPTION" The total size allocated can be calculated as: -(\fIstruct nvme_telemetry_log\fP.dalb3 + 1) * NVME_LOG_TELEM_BLOCK_SIZE. +(nvme_telemetry_log da size + 1) * NVME_LOG_TELEM_BLOCK_SIZE. .SH "RETURN" The nvme command status if a response was received (see \fIenum nvme_status_field\fP) or -1 with errno set otherwise. diff --git a/doc/man/nvme_get_ns_attr.2 b/doc/man/nvme_get_ns_attr.2 index d78611c6..2f324db9 100644 --- a/doc/man/nvme_get_ns_attr.2 +++ b/doc/man/nvme_get_ns_attr.2 @@ -11,4 +11,4 @@ nvme_ns_t object .IP "attr" 12 sysfs attribute name .SH "RETURN" -string with the contents of \fIattr\fP +String with the contents of \fIattr\fP diff --git a/doc/man/nvme_get_path_attr.2 b/doc/man/nvme_get_path_attr.2 index 5d11f19a..2d7fbcc7 100644 --- a/doc/man/nvme_get_path_attr.2 +++ b/doc/man/nvme_get_path_attr.2 @@ -11,4 +11,4 @@ nvme_path_t object .IP "attr" 12 sysfs attribute name .SH "RETURN" -string with the contents of \fIattr\fP +String with the contents of \fIattr\fP diff --git a/doc/man/nvme_get_subsys_attr.2 b/doc/man/nvme_get_subsys_attr.2 index e741d00c..21a83cb1 100644 --- a/doc/man/nvme_get_subsys_attr.2 +++ b/doc/man/nvme_get_subsys_attr.2 @@ -11,4 +11,4 @@ nvme_subsystem_t object .IP "attr" 12 sysfs attribute name .SH "RETURN" -string with the contents of \fIattr\fP +String with the contents of \fIattr\fP diff --git a/doc/man/nvme_host_behavior_support.2 b/doc/man/nvme_host_behavior_support.2 index 98ebfcc4..c302d2d7 100644 --- a/doc/man/nvme_host_behavior_support.2 +++ b/doc/man/nvme_host_behavior_support.2 @@ -9,3 +9,4 @@ enum nvme_host_behavior_support { }; .SH Constants .IP "NVME_ENABLE_ACRE" 12 +Enable Advanced Command Retry Enable diff --git a/doc/man/nvme_host_get_dhchap_key.2 b/doc/man/nvme_host_get_dhchap_key.2 index b976382d..1cce4e52 100644 --- a/doc/man/nvme_host_get_dhchap_key.2 +++ b/doc/man/nvme_host_get_dhchap_key.2 @@ -1,6 +1,6 @@ .TH "nvme_host_get_dhchap_key" 9 "nvme_host_get_dhchap_key" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_host_get_dhchap_key \- return host key +nvme_host_get_dhchap_key \- Return host key .SH SYNOPSIS .B "const char *" nvme_host_get_dhchap_key .BI "(nvme_host_t h " ");" diff --git a/doc/man/nvme_host_get_hostsymname.2 b/doc/man/nvme_host_get_hostsymname.2 new file mode 100644 index 00000000..485f04b1 --- /dev/null +++ b/doc/man/nvme_host_get_hostsymname.2 @@ -0,0 +1,12 @@ +.TH "nvme_host_get_hostsymname" 9 "nvme_host_get_hostsymname" "February 2022" "libnvme API manual" LINUX +.SH NAME +nvme_host_get_hostsymname \- Get the host's symbolic name +.SH SYNOPSIS +.B "const char *" nvme_host_get_hostsymname +.BI "(nvme_host_t h " ");" +.SH ARGUMENTS +.IP "h" 12 +Host for which the symbolic name should be returned. +.SH "RETURN" +The symbolic name or NULL if a symbolic name hasn't been +configure. diff --git a/doc/man/nvme_host_get_root.2 b/doc/man/nvme_host_get_root.2 index e09a703e..477421ce 100644 --- a/doc/man/nvme_host_get_root.2 +++ b/doc/man/nvme_host_get_root.2 @@ -6,6 +6,6 @@ nvme_host_get_root \- Returns nvme_root_t object .BI "(nvme_host_t h " ");" .SH ARGUMENTS .IP "h" 12 -host +\fInvme_host_t\fP object .SH "RETURN" -nvme_root_t object from \fIh\fP +\fInvme_root_t\fP object from \fIh\fP diff --git a/doc/man/nvme_host_mem_buf_attrs.2 b/doc/man/nvme_host_mem_buf_attrs.2 index 352b52f0..bab05250 100644 --- a/doc/man/nvme_host_mem_buf_attrs.2 +++ b/doc/man/nvme_host_mem_buf_attrs.2 @@ -20,7 +20,12 @@ struct nvme_host_mem_buf_attrs { .SH Members .IP "hsize" 12 +Host Memory Buffer Size .IP "hmdlal" 12 +Host Memory Descriptor List Lower Address .IP "hmdlau" 12 +Host Memory Descriptor List Upper Address .IP "hmdlec" 12 +Host Memory Descriptor List Entry Count .IP "rsvd16" 12 +Reserved diff --git a/doc/man/nvme_host_set_hostsymname.2 b/doc/man/nvme_host_set_hostsymname.2 new file mode 100644 index 00000000..f82cc2ed --- /dev/null +++ b/doc/man/nvme_host_set_hostsymname.2 @@ -0,0 +1,12 @@ +.TH "nvme_host_set_hostsymname" 9 "nvme_host_set_hostsymname" "February 2022" "libnvme API manual" LINUX +.SH NAME +nvme_host_set_hostsymname \- Set the host's symbolic name +.SH SYNOPSIS +.B "void" nvme_host_set_hostsymname +.BI "(nvme_host_t h " "," +.BI "const char *hostsymname " ");" +.SH ARGUMENTS +.IP "h" 12 +Host for which the symbolic name should be set. +.IP "hostsymname" 12 +Symbolic name diff --git a/doc/man/nvme_id_ctrl.2 b/doc/man/nvme_id_ctrl.2 index 68c8f5c0..20ffdcd3 100644 --- a/doc/man/nvme_id_ctrl.2 +++ b/doc/man/nvme_id_ctrl.2 @@ -186,7 +186,9 @@ struct nvme_id_ctrl { .br .BI " __le16 ofcs;" .br -.BI " __u8 rsvd1806[242];" +.BI " __u8 dctype;" +.br +.BI " __u8 rsvd1807[241];" .br .BI " struct nvme_id_psd psd[32];" .br @@ -491,7 +493,11 @@ that a host is allowed to place in a capsule. A value of 0h indicates no limit. .IP "ofcs" 12 Optional Fabric Commands Support, see \fIenum nvme_id_ctrl_ofcs\fP. -.IP "rsvd1806" 12 +.IP "dctype" 12 +Discovery Controller Type (DCTYPE). This field indicates what +type of Discovery controller the controller is (see enum +nvme_id_ctrl_dctype) +.IP "rsvd1807" 12 Reserved .IP "psd" 12 Power State Descriptors, see \fIstruct nvme_id_psd\fP. diff --git a/doc/man/nvme_id_ctrl_dctype.2 b/doc/man/nvme_id_ctrl_dctype.2 new file mode 100644 index 00000000..62398fda --- /dev/null +++ b/doc/man/nvme_id_ctrl_dctype.2 @@ -0,0 +1,24 @@ +.TH "libnvme" 9 "enum nvme_id_ctrl_dctype" "February 2022" "API Manual" LINUX +.SH NAME +enum nvme_id_ctrl_dctype \- Discovery Controller types +.SH SYNOPSIS +enum nvme_id_ctrl_dctype { +.br +.BI " NVME_CTRL_DCTYPE_NOT_REPORTED" +, +.br +.br +.BI " NVME_CTRL_DCTYPE_DDC" +, +.br +.br +.BI " NVME_CTRL_DCTYPE_CDC" + +}; +.SH Constants +.IP "NVME_CTRL_DCTYPE_NOT_REPORTED" 12 +Not reported (I/O, Admin, and pre-TP8010) +.IP "NVME_CTRL_DCTYPE_DDC" 12 +Direct Discovery controller +.IP "NVME_CTRL_DCTYPE_CDC" 12 +Central Discovery controller diff --git a/doc/man/nvme_id_ctrl_nvm.2 b/doc/man/nvme_id_ctrl_nvm.2 index cbded101..75d44cd5 100644 --- a/doc/man/nvme_id_ctrl_nvm.2 +++ b/doc/man/nvme_id_ctrl_nvm.2 @@ -24,9 +24,16 @@ struct nvme_id_ctrl_nvm { .SH Members .IP "vsl" 12 +Verify Size Limit .IP "wzsl" 12 +Write Zeroes Size Limit .IP "wusl" 12 +Write Uncorrectable Size Limit .IP "dmrl" 12 +Dataset Management Ranges Limit .IP "dmrsl" 12 +Dataset Management Range Size Limit .IP "dmsl" 12 +Dataset Management Size Limit .IP "rsvd16" 12 +reserved diff --git a/doc/man/nvme_id_directives.2 b/doc/man/nvme_id_directives.2 index b4f481f5..eeb54a07 100644 --- a/doc/man/nvme_id_directives.2 +++ b/doc/man/nvme_id_directives.2 @@ -16,5 +16,8 @@ struct nvme_id_directives { .SH Members .IP "supported" 12 +Identify directive is supported .IP "enabled" 12 +Identify directive is Enabled .IP "rsvd64" 12 +Reserved diff --git a/doc/man/nvme_id_domain_attr.2 b/doc/man/nvme_id_domain_attr.2 index 4702dfe8..2b3bf15b 100644 --- a/doc/man/nvme_id_domain_attr.2 +++ b/doc/man/nvme_id_domain_attr.2 @@ -22,8 +22,14 @@ struct nvme_id_domain_attr { .SH Members .IP "dom_id" 12 +Domain Identifier .IP "rsvd2" 12 +Reserved .IP "dom_cap" 12 +Total Domain Capacity .IP "unalloc_dom_cap" 12 +Unallocated Domain Capacity .IP "max_egrp_dom_cap" 12 +Max Endurance Group Domain Capacity .IP "rsvd64" 12 +Reserved diff --git a/doc/man/nvme_id_endurance_group_list.2 b/doc/man/nvme_id_endurance_group_list.2 index 5129caa7..5cadfd87 100644 --- a/doc/man/nvme_id_endurance_group_list.2 +++ b/doc/man/nvme_id_endurance_group_list.2 @@ -14,4 +14,6 @@ struct nvme_id_endurance_group_list { .SH Members .IP "num" 12 +Number of Identifiers .IP "identifier" 12 +Endurance Group Identifier diff --git a/doc/man/nvme_id_independent_id_ns.2 b/doc/man/nvme_id_independent_id_ns.2 index bfd311c2..4f01db46 100644 --- a/doc/man/nvme_id_independent_id_ns.2 +++ b/doc/man/nvme_id_independent_id_ns.2 @@ -32,13 +32,25 @@ struct nvme_id_independent_id_ns { .SH Members .IP "nsfeat" 12 +common namespace features .IP "nmic" 12 +Namespace Multi-path I/O and Namespace +Sharing Capabilities .IP "rescap" 12 +Reservation Capabilities .IP "fpi" 12 +Format Progress Indicator .IP "anagrpid" 12 +ANA Group Identifier .IP "nsattr" 12 +Namespace Attributes .IP "rsvd9" 12 +reserved .IP "nvmsetid" 12 +NVM Set Identifier .IP "endgid" 12 +Endurance Group Identifier .IP "nstat" 12 +Namespace Status .IP "rsvd15" 12 +reserved diff --git a/doc/man/nvme_id_ns_granularity_desc.2 b/doc/man/nvme_id_ns_granularity_desc.2 index 866dc6ae..a21b84c1 100644 --- a/doc/man/nvme_id_ns_granularity_desc.2 +++ b/doc/man/nvme_id_ns_granularity_desc.2 @@ -14,4 +14,6 @@ struct nvme_id_ns_granularity_desc { .SH Members .IP "nszegran" 12 +Namespace Size Granularity .IP "ncapgran" 12 +Namespace Capacity Granularity diff --git a/doc/man/nvme_id_ns_granularity_list.2 b/doc/man/nvme_id_ns_granularity_list.2 index f8172b7a..571d808d 100644 --- a/doc/man/nvme_id_ns_granularity_list.2 +++ b/doc/man/nvme_id_ns_granularity_list.2 @@ -20,7 +20,12 @@ struct nvme_id_ns_granularity_list { .SH Members .IP "attributes" 12 +Namespace Granularity Attributes .IP "num_descriptors" 12 +Number of Descriptors .IP "rsvd5" 12 +reserved .IP "entry" 12 +Namespace Granularity Descriptor .IP "rsvd288" 12 +reserved diff --git a/doc/man/nvme_id_uuid_list.2 b/doc/man/nvme_id_uuid_list.2 index a87d42ea..af769d47 100644 --- a/doc/man/nvme_id_uuid_list.2 +++ b/doc/man/nvme_id_uuid_list.2 @@ -14,4 +14,6 @@ struct nvme_id_uuid_list { .SH Members .IP "rsvd0" 12 +reserved .IP "entry" 12 +UUID list entry diff --git a/doc/man/nvme_id_uuid_list_entry.2 b/doc/man/nvme_id_uuid_list_entry.2 index 316a1e86..37d57c99 100644 --- a/doc/man/nvme_id_uuid_list_entry.2 +++ b/doc/man/nvme_id_uuid_list_entry.2 @@ -16,5 +16,8 @@ struct nvme_id_uuid_list_entry { .SH Members .IP "header" 12 +UUID Lists Entry Header .IP "rsvd1" 12 +reserved .IP "uuid" 12 +128-bit Universally Unique Identifier diff --git a/doc/man/nvme_init_ctrl.2 b/doc/man/nvme_init_ctrl.2 index 88fe7a11..89ea76db 100644 --- a/doc/man/nvme_init_ctrl.2 +++ b/doc/man/nvme_init_ctrl.2 @@ -1,6 +1,6 @@ .TH "nvme_init_ctrl" 9 "nvme_init_ctrl" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_init_ctrl \- Initialize nvme_ctrl_t object for an existing nvme controller. +nvme_init_ctrl \- Initialize nvme_ctrl_t object for an existing controller. .SH SYNOPSIS .B "int" nvme_init_ctrl .BI "(nvme_host_t h " "," diff --git a/doc/man/nvme_init_logging.2 b/doc/man/nvme_init_logging.2 index 3ff2373f..52cc4d46 100644 --- a/doc/man/nvme_init_logging.2 +++ b/doc/man/nvme_init_logging.2 @@ -1,6 +1,6 @@ .TH "nvme_init_logging" 9 "nvme_init_logging" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_init_logging \- initialize logging +nvme_init_logging \- Initialize logging .SH SYNOPSIS .B "void" nvme_init_logging .BI "(nvme_root_t r " "," @@ -11,10 +11,10 @@ nvme_init_logging \- initialize logging .IP "r" 12 nvme_root_t context .IP "lvl" 12 -logging level to set +Logging level to set .IP "log_pid" 12 -boolean to enable logging of the PID +Boolean to enable logging of the PID .IP "log_tstamp" 12 -boolean to enable logging of the timestamp +Boolean to enable logging of the timestamp .SH "DESCRIPTION" Sets the default logging variables for the library. diff --git a/doc/man/nvme_io_args.2 b/doc/man/nvme_io_args.2 index bddfd21b..589fe8a3 100644 --- a/doc/man/nvme_io_args.2 +++ b/doc/man/nvme_io_args.2 @@ -36,9 +36,9 @@ struct nvme_io_args { .br .BI " __u16 appmask;" .br -.BI " __u8 dsm;" +.BI " __u16 dspec;" .br -.BI " __u8 dspec;" +.BI " __u8 dsm;" .br .BI " }; @@ -85,7 +85,7 @@ protection information. This field specifies the Application Tag expected value. Used only if the namespace is formatted to use end-to-end protection information. -.IP "dsm" 12 -Data set management attributes, see \fIenum nvme_io_dsm_flags\fP .IP "dspec" 12 Directive specific value +.IP "dsm" 12 +Data set management attributes, see \fIenum nvme_io_dsm_flags\fP diff --git a/doc/man/nvme_lba_range_type.2 b/doc/man/nvme_lba_range_type.2 index 9fdd7d5f..29c2e04c 100644 --- a/doc/man/nvme_lba_range_type.2 +++ b/doc/man/nvme_lba_range_type.2 @@ -12,3 +12,4 @@ struct nvme_lba_range_type { .SH Members .IP "entry" 12 +LBA range type entry diff --git a/doc/man/nvme_lba_range_type_entry.2 b/doc/man/nvme_lba_range_type_entry.2 index f3f45a10..ab81efc6 100644 --- a/doc/man/nvme_lba_range_type_entry.2 +++ b/doc/man/nvme_lba_range_type_entry.2 @@ -24,9 +24,16 @@ struct nvme_lba_range_type_entry { .SH Members .IP "type" 12 +Specifies the Type of the LBA range .IP "attributes" 12 +Specifies attributes of the LBA range .IP "rsvd2" 12 +Reserved .IP "slba" 12 +Starting LBA .IP "nlb" 12 +Number of Logical Blocks .IP "guid" 12 +Unique Identifier .IP "rsvd48" 12 +Reserved diff --git a/doc/man/nvme_lba_rd.2 b/doc/man/nvme_lba_rd.2 index bddc9ecc..6188311a 100644 --- a/doc/man/nvme_lba_rd.2 +++ b/doc/man/nvme_lba_rd.2 @@ -16,5 +16,8 @@ struct nvme_lba_rd { .SH Members .IP "rslba" 12 +Range Starting LBA .IP "rnlb" 12 +Range Number of Logical Blocks .IP "rsvd12" 12 +Reserved diff --git a/doc/man/nvme_lba_status.2 b/doc/man/nvme_lba_status.2 index f5c87f79..7b505cd4 100644 --- a/doc/man/nvme_lba_status.2 +++ b/doc/man/nvme_lba_status.2 @@ -18,6 +18,10 @@ struct nvme_lba_status { .SH Members .IP "nlsd" 12 +Number of LBA Status Descriptors .IP "cmpc" 12 +Completion Condition .IP "rsvd5" 12 +Reserved .IP "descs" 12 +LBA status descriptor Entry diff --git a/doc/man/nvme_lba_status_desc.2 b/doc/man/nvme_lba_status_desc.2 index c5ec556c..256e2cc9 100644 --- a/doc/man/nvme_lba_status_desc.2 +++ b/doc/man/nvme_lba_status_desc.2 @@ -20,7 +20,12 @@ struct nvme_lba_status_desc { .SH Members .IP "dslba" 12 +Descriptor Starting LBA .IP "nlb" 12 +Number of Logical Blocks .IP "rsvd12" 12 +Reserved .IP "status" 12 +Additional status about this LBA range .IP "rsvd14" 12 +Reserved diff --git a/doc/man/nvme_lba_status_log.2 b/doc/man/nvme_lba_status_log.2 index 4b36fc25..c8fb874e 100644 --- a/doc/man/nvme_lba_status_log.2 +++ b/doc/man/nvme_lba_status_log.2 @@ -22,8 +22,14 @@ struct nvme_lba_status_log { .SH Members .IP "lslplen" 12 +LBA Status Log Page Length .IP "nlslne" 12 +Number of LBA Status Log Namespace Elements .IP "estulb" 12 +Estimate of Unrecoverable Logical Blocks .IP "rsvd12" 12 +Reserved .IP "lsgc" 12 +LBA Status Generation Counter .IP "elements" 12 +LBA Status Log Namespace Element List diff --git a/doc/man/nvme_lbart.2 b/doc/man/nvme_lbart.2 index fc6d3f2c..cda12f1e 100644 --- a/doc/man/nvme_lbart.2 +++ b/doc/man/nvme_lbart.2 @@ -33,9 +33,16 @@ enum nvme_lbart { }; .SH Constants .IP "NVME_LBART_TYPE_GP" 12 +General Purpose .IP "NVME_LBART_TYPE_FS" 12 +Filesystem .IP "NVME_LBART_TYPE_RAID" 12 +RAID .IP "NVME_LBART_TYPE_CACHE" 12 +Cache .IP "NVME_LBART_TYPE_SWAP" 12 +Page / swap file .IP "NVME_LBART_ATTRIB_TEMP" 12 +Temp .IP "NVME_LBART_ATTRIB_HIDE" 12 +Hidden diff --git a/doc/man/nvme_lbas_ns_element.2 b/doc/man/nvme_lbas_ns_element.2 index 52e41526..f5f01ef2 100644 --- a/doc/man/nvme_lbas_ns_element.2 +++ b/doc/man/nvme_lbas_ns_element.2 @@ -20,7 +20,12 @@ struct nvme_lbas_ns_element { .SH Members .IP "neid" 12 +Namespace Element Identifier .IP "nlrd" 12 +Number of LBA Range Descriptors .IP "ratype" 12 +Recommended Action Type .IP "rsvd8" 12 +Reserved .IP "lba_rd" 12 +LBA Range Descriptor diff --git a/doc/man/nvme_lookup_ctrl.2 b/doc/man/nvme_lookup_ctrl.2 index 4cd59349..22f8d7be 100644 --- a/doc/man/nvme_lookup_ctrl.2 +++ b/doc/man/nvme_lookup_ctrl.2 @@ -12,24 +12,24 @@ nvme_lookup_ctrl \- Lookup nvme_ctrl_t object .BI "nvme_ctrl_t p " ");" .SH ARGUMENTS .IP "s" 12 -nvme_subsystem_t object +\fInvme_subsystem_t\fP object .IP "transport" 12 -transport name +Transport name .IP "traddr" 12 -transport address +Transport address .IP "host_traddr" 12 -host transport address +Host transport address .IP "host_iface" 12 -host interface name +Host interface name .IP "trsvcid" 12 -transport service identifier +Transport service identifier .IP "p" 12 -previous nvme_ctrl_t object +Previous controller instance .SH "DESCRIPTION" -Lookup a nvme_ctrl_t object in \fIs\fP based on \fItransport\fP, \fItraddr\fP, +Lookup a controller in \fIs\fP based on \fItransport\fP, \fItraddr\fP, \fIhost_traddr\fP, \fIhost_iface\fP, and \fItrsvcid\fP. \fItransport\fP must be specified, other fields may be required depending on the transport. A new object is created if none is found. If \fIp\fP is specified the lookup will start at \fIp\fP instead of the first controller. .SH "RETURN" -nvme_ctrl_t object +Controller instance diff --git a/doc/man/nvme_lookup_host.2 b/doc/man/nvme_lookup_host.2 index 0a912113..d07d9851 100644 --- a/doc/man/nvme_lookup_host.2 +++ b/doc/man/nvme_lookup_host.2 @@ -8,7 +8,7 @@ nvme_lookup_host \- Lookup nvme_host_t object .BI "const char *hostid " ");" .SH ARGUMENTS .IP "r" 12 -nvme_root_t object +\fInvme_root_t\fP object .IP "hostnqn" 12 Host NQN .IP "hostid" 12 @@ -17,4 +17,4 @@ Host ID Lookup a nvme_host_t object based on \fIhostnqn\fP and \fIhostid\fP or create one if not found. .SH "RETURN" -nvme_host_t object +\fInvme_host_t\fP object diff --git a/doc/man/nvme_lookup_subsystem.2 b/doc/man/nvme_lookup_subsystem.2 index addb99d7..11e9e154 100644 --- a/doc/man/nvme_lookup_subsystem.2 +++ b/doc/man/nvme_lookup_subsystem.2 @@ -8,13 +8,13 @@ nvme_lookup_subsystem \- Lookup nvme_subsystem_t object .BI "const char *subsysnqn " ");" .SH ARGUMENTS .IP "h" 12 -nvme_host_t object +\fInvme_host_t\fP object .IP "name" 12 Name of the subsystem (may be NULL) .IP "subsysnqn" 12 Subsystem NQN .SH "DESCRIPTION" -Lookup a nvme_subsystem_t object in \fIh\fP base on \fIname\fP (if present) +Lookup a \fInvme_subsystem_t\fP object in \fIh\fP base on \fIname\fP (if present) and \fIsubsystemnqn\fP or create one if not found. .SH "RETURN" nvme_subsystme_t object diff --git a/doc/man/nvme_next_host.2 b/doc/man/nvme_next_host.2 index d59d1864..93f4522f 100644 --- a/doc/man/nvme_next_host.2 +++ b/doc/man/nvme_next_host.2 @@ -7,8 +7,8 @@ nvme_next_host \- Next host iterator .BI "nvme_host_t h " ");" .SH ARGUMENTS .IP "r" 12 -nvme_root_t object +\fInvme_root_t\fP object .IP "h" 12 -previous nvme_host_t iterator +Previous \fInvme_host_t\fP iterator .SH "RETURN" -next nvme_host_t object in an iterator +Next \fInvme_host_t\fP object in an iterator diff --git a/doc/man/nvme_next_subsystem.2 b/doc/man/nvme_next_subsystem.2 index b34963e0..8b3a7d34 100644 --- a/doc/man/nvme_next_subsystem.2 +++ b/doc/man/nvme_next_subsystem.2 @@ -7,8 +7,8 @@ nvme_next_subsystem \- Next subsystem iterator .BI "nvme_subsystem_t s " ");" .SH ARGUMENTS .IP "h" 12 -nvme_host_t object +\fInvme_host_t\fP object .IP "s" 12 -previous nvme_subsystem_t iterator +Previous \fInvme_subsystem_t\fP iterator .SH "RETURN" -next nvme_subsystem_t object in an iterator +next \fInvme_subsystem_t\fP object in an iterator diff --git a/doc/man/nvme_ns_compare.2 b/doc/man/nvme_ns_compare.2 index 8780dcbb..fbb73b27 100644 --- a/doc/man/nvme_ns_compare.2 +++ b/doc/man/nvme_ns_compare.2 @@ -9,9 +9,9 @@ nvme_ns_compare \- Compare data on a namespace .BI "size_t count " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .IP "buf" 12 -buffer with data to be compared +Buffer with data to be compared .IP "offset" 12 LBA offset of \fIn\fP .IP "count" 12 diff --git a/doc/man/nvme_ns_flush.2 b/doc/man/nvme_ns_flush.2 index 2cce5c07..d68d843d 100644 --- a/doc/man/nvme_ns_flush.2 +++ b/doc/man/nvme_ns_flush.2 @@ -6,6 +6,6 @@ nvme_ns_flush \- Flush data to a namespace .BI "(nvme_ns_t n " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .SH "RETURN" 0 on success, -1 on error. diff --git a/doc/man/nvme_ns_get_csi.2 b/doc/man/nvme_ns_get_csi.2 index 2eb4871f..db2b5f8a 100644 --- a/doc/man/nvme_ns_get_csi.2 +++ b/doc/man/nvme_ns_get_csi.2 @@ -1,11 +1,11 @@ .TH "nvme_ns_get_csi" 9 "nvme_ns_get_csi" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ns_get_csi \- Command set identifier of an nvme_ns_t object +nvme_ns_get_csi \- Command set identifier of a namespace .SH SYNOPSIS .B "enum nvme_csi" nvme_ns_get_csi .BI "(nvme_ns_t n " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .SH "RETURN" The namespace's command set identifier in use diff --git a/doc/man/nvme_ns_get_ctrl.2 b/doc/man/nvme_ns_get_ctrl.2 index e394bd59..a48c194f 100644 --- a/doc/man/nvme_ns_get_ctrl.2 +++ b/doc/man/nvme_ns_get_ctrl.2 @@ -1,12 +1,12 @@ .TH "nvme_ns_get_ctrl" 9 "nvme_ns_get_ctrl" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ns_get_ctrl \- nvme_ctrl_t of an nvme_ns_t object +nvme_ns_get_ctrl \- &nvme_ctrl_t of a namespace .SH SYNOPSIS .B "nvme_ctrl_t" nvme_ns_get_ctrl .BI "(nvme_ns_t n " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .SH "DESCRIPTION" nvme_ctrl_t object may be NULL for a multipathed namespace .SH "RETURN" diff --git a/doc/man/nvme_ns_get_fd.2 b/doc/man/nvme_ns_get_fd.2 index 18e62c09..696dbfa4 100644 --- a/doc/man/nvme_ns_get_fd.2 +++ b/doc/man/nvme_ns_get_fd.2 @@ -6,6 +6,6 @@ nvme_ns_get_fd \- Get associated filedescriptor .BI "(nvme_ns_t n " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .SH "RETURN" -Filedescriptor associated with \fIn\fP or -1 +File descriptor associated with \fIn\fP or -1 diff --git a/doc/man/nvme_ns_get_firmware.2 b/doc/man/nvme_ns_get_firmware.2 index 8372daac..fb6d769e 100644 --- a/doc/man/nvme_ns_get_firmware.2 +++ b/doc/man/nvme_ns_get_firmware.2 @@ -1,11 +1,11 @@ .TH "nvme_ns_get_firmware" 9 "nvme_ns_get_firmware" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ns_get_firmware \- Firmware string of an nvme_ns_t object +nvme_ns_get_firmware \- Firmware string of a namespace .SH SYNOPSIS .B "const char *" nvme_ns_get_firmware .BI "(nvme_ns_t n " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .SH "RETURN" Firmware string of \fIn\fP diff --git a/doc/man/nvme_ns_get_generic_name.2 b/doc/man/nvme_ns_get_generic_name.2 index fb616a55..69b5655e 100644 --- a/doc/man/nvme_ns_get_generic_name.2 +++ b/doc/man/nvme_ns_get_generic_name.2 @@ -1,6 +1,6 @@ .TH "nvme_ns_get_generic_name" 9 "nvme_ns_get_generic_name" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ns_get_generic_name \- Returns name of generic namesapce chardev. +nvme_ns_get_generic_name \- Returns name of generic namespace chardev. .SH SYNOPSIS .B "const char *" nvme_ns_get_generic_name .BI "(nvme_ns_t n " ");" diff --git a/doc/man/nvme_ns_get_lba_count.2 b/doc/man/nvme_ns_get_lba_count.2 index 83bec25b..a8608978 100644 --- a/doc/man/nvme_ns_get_lba_count.2 +++ b/doc/man/nvme_ns_get_lba_count.2 @@ -1,11 +1,11 @@ .TH "nvme_ns_get_lba_count" 9 "nvme_ns_get_lba_count" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ns_get_lba_count \- LBA count of an nvme_ns_t object +nvme_ns_get_lba_count \- LBA count of a namespace .SH SYNOPSIS .B "uint64_t" nvme_ns_get_lba_count .BI "(nvme_ns_t n " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .SH "RETURN" LBA count of \fIn\fP diff --git a/doc/man/nvme_ns_get_lba_size.2 b/doc/man/nvme_ns_get_lba_size.2 index b5f7750d..7dbf9605 100644 --- a/doc/man/nvme_ns_get_lba_size.2 +++ b/doc/man/nvme_ns_get_lba_size.2 @@ -1,11 +1,11 @@ .TH "nvme_ns_get_lba_size" 9 "nvme_ns_get_lba_size" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ns_get_lba_size \- LBA size of an nvme_ns_t object +nvme_ns_get_lba_size \- LBA size of a namespace .SH SYNOPSIS .B "int" nvme_ns_get_lba_size .BI "(nvme_ns_t n " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .SH "RETURN" LBA size of \fIn\fP diff --git a/doc/man/nvme_ns_get_lba_util.2 b/doc/man/nvme_ns_get_lba_util.2 index 3a7f282a..7411540c 100644 --- a/doc/man/nvme_ns_get_lba_util.2 +++ b/doc/man/nvme_ns_get_lba_util.2 @@ -1,11 +1,11 @@ .TH "nvme_ns_get_lba_util" 9 "nvme_ns_get_lba_util" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ns_get_lba_util \- LBA utilisation of an nvme_ns_t object +nvme_ns_get_lba_util \- LBA utilisation of a namespace .SH SYNOPSIS .B "uint64_t" nvme_ns_get_lba_util .BI "(nvme_ns_t n " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .SH "RETURN" LBA utilisation of \fIn\fP diff --git a/doc/man/nvme_ns_get_meta_size.2 b/doc/man/nvme_ns_get_meta_size.2 index 3646ba23..ad91953a 100644 --- a/doc/man/nvme_ns_get_meta_size.2 +++ b/doc/man/nvme_ns_get_meta_size.2 @@ -1,11 +1,11 @@ .TH "nvme_ns_get_meta_size" 9 "nvme_ns_get_meta_size" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ns_get_meta_size \- Metadata size of an nvme_ns_t object +nvme_ns_get_meta_size \- Metadata size of a namespace .SH SYNOPSIS .B "int" nvme_ns_get_meta_size .BI "(nvme_ns_t n " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .SH "RETURN" Metadata size of \fIn\fP diff --git a/doc/man/nvme_ns_get_model.2 b/doc/man/nvme_ns_get_model.2 index 0ea61223..1c99346b 100644 --- a/doc/man/nvme_ns_get_model.2 +++ b/doc/man/nvme_ns_get_model.2 @@ -1,11 +1,11 @@ .TH "nvme_ns_get_model" 9 "nvme_ns_get_model" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ns_get_model \- Model of an nvme_ns_t object +nvme_ns_get_model \- Model of a namespace .SH SYNOPSIS .B "const char *" nvme_ns_get_model .BI "(nvme_ns_t n " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .SH "RETURN" Model string of \fIn\fP diff --git a/doc/man/nvme_ns_get_name.2 b/doc/man/nvme_ns_get_name.2 index 5af04271..cbefe281 100644 --- a/doc/man/nvme_ns_get_name.2 +++ b/doc/man/nvme_ns_get_name.2 @@ -1,11 +1,11 @@ .TH "nvme_ns_get_name" 9 "nvme_ns_get_name" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ns_get_name \- sysfs name of an nvme_ns_t object +nvme_ns_get_name \- sysfs name of a namespace .SH SYNOPSIS .B "const char *" nvme_ns_get_name .BI "(nvme_ns_t n " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .SH "RETURN" sysfs name of \fIn\fP diff --git a/doc/man/nvme_ns_get_nguid.2 b/doc/man/nvme_ns_get_nguid.2 index 2b747298..3eea8722 100644 --- a/doc/man/nvme_ns_get_nguid.2 +++ b/doc/man/nvme_ns_get_nguid.2 @@ -1,11 +1,11 @@ .TH "nvme_ns_get_nguid" 9 "nvme_ns_get_nguid" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ns_get_nguid \- 128-bit nguid of an nvme_ns_t object +nvme_ns_get_nguid \- 128-bit nguid of a namespace .SH SYNOPSIS .B "const uint8_t *" nvme_ns_get_nguid .BI "(nvme_ns_t n " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object -.SH "DESCRIPTION" -Returns a pointer to the 128-bit nguid +Namespace instance +.SH "RETURN" +A pointer to the 128-bit nguid diff --git a/doc/man/nvme_ns_get_nsid.2 b/doc/man/nvme_ns_get_nsid.2 index 6c99660d..a43aa1b5 100644 --- a/doc/man/nvme_ns_get_nsid.2 +++ b/doc/man/nvme_ns_get_nsid.2 @@ -1,11 +1,11 @@ .TH "nvme_ns_get_nsid" 9 "nvme_ns_get_nsid" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ns_get_nsid \- NSID of an nvme_ns_t object +nvme_ns_get_nsid \- NSID of a namespace .SH SYNOPSIS .B "int" nvme_ns_get_nsid .BI "(nvme_ns_t n " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .SH "RETURN" NSID of \fIn\fP diff --git a/doc/man/nvme_ns_get_serial.2 b/doc/man/nvme_ns_get_serial.2 index f6a91a1e..5ec90f79 100644 --- a/doc/man/nvme_ns_get_serial.2 +++ b/doc/man/nvme_ns_get_serial.2 @@ -1,11 +1,11 @@ .TH "nvme_ns_get_serial" 9 "nvme_ns_get_serial" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ns_get_serial \- Serial number of an nvme_ns_t object +nvme_ns_get_serial \- Serial number of a namespace .SH SYNOPSIS .B "const char *" nvme_ns_get_serial .BI "(nvme_ns_t n " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .SH "RETURN" Serial number string of \fIn\fP diff --git a/doc/man/nvme_ns_get_subsystem.2 b/doc/man/nvme_ns_get_subsystem.2 index 394dfbe7..28e1a77a 100644 --- a/doc/man/nvme_ns_get_subsystem.2 +++ b/doc/man/nvme_ns_get_subsystem.2 @@ -1,11 +1,11 @@ .TH "nvme_ns_get_subsystem" 9 "nvme_ns_get_subsystem" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ns_get_subsystem \- nvme_subsystem_t of an nvme_ns_t object +nvme_ns_get_subsystem \- &nvme_subsystem_t of a namespace .SH SYNOPSIS .B "nvme_subsystem_t" nvme_ns_get_subsystem .BI "(nvme_ns_t n " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .SH "RETURN" nvme_subsystem_t object of \fIn\fP diff --git a/doc/man/nvme_ns_get_sysfs_dir.2 b/doc/man/nvme_ns_get_sysfs_dir.2 index ce388160..6edcd422 100644 --- a/doc/man/nvme_ns_get_sysfs_dir.2 +++ b/doc/man/nvme_ns_get_sysfs_dir.2 @@ -1,11 +1,11 @@ .TH "nvme_ns_get_sysfs_dir" 9 "nvme_ns_get_sysfs_dir" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ns_get_sysfs_dir \- sysfs directory of an nvme_ns_t object +nvme_ns_get_sysfs_dir \- sysfs directory of a namespace .SH SYNOPSIS .B "const char *" nvme_ns_get_sysfs_dir .BI "(nvme_ns_t n " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .SH "RETURN" sysfs directory name of \fIn\fP diff --git a/doc/man/nvme_ns_get_uuid.2 b/doc/man/nvme_ns_get_uuid.2 index 666a7557..79349821 100644 --- a/doc/man/nvme_ns_get_uuid.2 +++ b/doc/man/nvme_ns_get_uuid.2 @@ -1,13 +1,13 @@ .TH "nvme_ns_get_uuid" 9 "nvme_ns_get_uuid" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_ns_get_uuid \- UUID of an nvme_ns_t object +nvme_ns_get_uuid \- UUID of a namespace .SH SYNOPSIS .B "void" nvme_ns_get_uuid .BI "(nvme_ns_t n " "," .BI "uuid_t out " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .IP "out" 12 buffer for the UUID .SH "DESCRIPTION" diff --git a/doc/man/nvme_ns_identify.2 b/doc/man/nvme_ns_identify.2 index 26e3ab03..7294b7bb 100644 --- a/doc/man/nvme_ns_identify.2 +++ b/doc/man/nvme_ns_identify.2 @@ -7,9 +7,9 @@ nvme_ns_identify \- Issue an 'identify namespace' command .BI "struct nvme_id_ns *ns " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .IP "ns" 12 -nvme_id_ns buffer +\fInvme_id_ns\fP buffer .SH "DESCRIPTION" Writes the data returned by the 'identify namespace' command into \fIns\fP. diff --git a/doc/man/nvme_ns_identify_descs.2 b/doc/man/nvme_ns_identify_descs.2 index 6133c6df..1489315a 100644 --- a/doc/man/nvme_ns_identify_descs.2 +++ b/doc/man/nvme_ns_identify_descs.2 @@ -7,9 +7,9 @@ nvme_ns_identify_descs \- Issue an 'identify descriptors' command .BI "struct nvme_ns_id_desc *descs " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .IP "descs" 12 -list of identify descriptors +List of identify descriptors .SH "DESCRIPTION" Writes the data returned by the 'identify descriptors' command into \fIdescs\fP. diff --git a/doc/man/nvme_ns_list.2 b/doc/man/nvme_ns_list.2 index f65f0300..de77ca13 100644 --- a/doc/man/nvme_ns_list.2 +++ b/doc/man/nvme_ns_list.2 @@ -12,3 +12,4 @@ struct nvme_ns_list { .SH Members .IP "ns" 12 +Namespace Identifier diff --git a/doc/man/nvme_ns_read.2 b/doc/man/nvme_ns_read.2 index 09f2652e..bcc84523 100644 --- a/doc/man/nvme_ns_read.2 +++ b/doc/man/nvme_ns_read.2 @@ -9,9 +9,9 @@ nvme_ns_read \- Read from a namespace .BI "size_t count " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .IP "buf" 12 -buffer into which the data will be transferred +Buffer into which the data will be transferred .IP "offset" 12 LBA offset of \fIn\fP .IP "count" 12 diff --git a/doc/man/nvme_ns_verify.2 b/doc/man/nvme_ns_verify.2 index 361bc663..e722173f 100644 --- a/doc/man/nvme_ns_verify.2 +++ b/doc/man/nvme_ns_verify.2 @@ -8,7 +8,7 @@ nvme_ns_verify \- Verify data on a namespace .BI "size_t count " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .IP "offset" 12 LBA offset of \fIn\fP .IP "count" 12 diff --git a/doc/man/nvme_ns_write.2 b/doc/man/nvme_ns_write.2 index 240cf3de..07828eb9 100644 --- a/doc/man/nvme_ns_write.2 +++ b/doc/man/nvme_ns_write.2 @@ -9,9 +9,9 @@ nvme_ns_write \- Write to a namespace .BI "size_t count " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .IP "buf" 12 -buffer with data to be written +Buffer with data to be written .IP "offset" 12 LBA offset of \fIn\fP .IP "count" 12 diff --git a/doc/man/nvme_ns_write_uncorrectable.2 b/doc/man/nvme_ns_write_uncorrectable.2 index cbdb6380..130ee8bc 100644 --- a/doc/man/nvme_ns_write_uncorrectable.2 +++ b/doc/man/nvme_ns_write_uncorrectable.2 @@ -8,7 +8,7 @@ nvme_ns_write_uncorrectable \- Issus a 'write uncorrectable' command .BI "size_t count " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .IP "offset" 12 LBA offset in \fIn\fP .IP "count" 12 diff --git a/doc/man/nvme_ns_write_zeros.2 b/doc/man/nvme_ns_write_zeros.2 index 54da996e..36e1eba5 100644 --- a/doc/man/nvme_ns_write_zeros.2 +++ b/doc/man/nvme_ns_write_zeros.2 @@ -8,7 +8,7 @@ nvme_ns_write_zeros \- Write zeros to a namespace .BI "size_t count " ");" .SH ARGUMENTS .IP "n" 12 -nvme_ns_t object +Namespace instance .IP "offset" 12 LBA offset in \fIn\fP .IP "count" 12 diff --git a/doc/man/nvme_nss_hw_err_event.2 b/doc/man/nvme_nss_hw_err_event.2 index 04b373b9..e8185449 100644 --- a/doc/man/nvme_nss_hw_err_event.2 +++ b/doc/man/nvme_nss_hw_err_event.2 @@ -16,5 +16,8 @@ struct nvme_nss_hw_err_event { .SH Members .IP "nss_hw_err_event_code" 12 +NVM Subsystem Hardware Error Event Code .IP "rsvd2" 12 +Reserved .IP "add_hw_err_info" 12 +Additional Hardware Error Information diff --git a/doc/man/nvme_nvmset_predictable_lat_log.2 b/doc/man/nvme_nvmset_predictable_lat_log.2 index cb7d0662..ad8c3a2d 100644 --- a/doc/man/nvme_nvmset_predictable_lat_log.2 +++ b/doc/man/nvme_nvmset_predictable_lat_log.2 @@ -38,16 +38,30 @@ struct nvme_nvmset_predictable_lat_log { .SH Members .IP "status" 12 +Status .IP "rsvd1" 12 +Reserved .IP "event_type" 12 +Event Type .IP "rsvd4" 12 +Reserved .IP "dtwin_rt" 12 +DTWIN Reads Typical .IP "dtwin_wt" 12 +DTWIN Writes Typical .IP "dtwin_tmax" 12 +DTWIN Time Maximum .IP "ndwin_tmin_hi" 12 +NDWIN Time Minimum High .IP "ndwin_tmin_lo" 12 +NDWIN Time Minimum Low .IP "rsvd72" 12 +Reserved .IP "dtwin_re" 12 +DTWIN Reads Estimate .IP "dtwin_we" 12 +DTWIN Writes Estimate .IP "dtwin_te" 12 +DTWIN Time Estimate .IP "rsvd152" 12 +Reserved diff --git a/doc/man/nvme_path_get_ana_state.2 b/doc/man/nvme_path_get_ana_state.2 index bf64cb13..f7e3d414 100644 --- a/doc/man/nvme_path_get_ana_state.2 +++ b/doc/man/nvme_path_get_ana_state.2 @@ -6,6 +6,6 @@ nvme_path_get_ana_state \- ANA state of an nvme_path_t object .BI "(nvme_path_t p " ");" .SH ARGUMENTS .IP "p" 12 -nvme_path_t object +\fInvme_path_t\fP object .SH "RETURN" ANA (Asynchronous Namespace Access) state of \fIp\fP diff --git a/doc/man/nvme_path_get_ctrl.2 b/doc/man/nvme_path_get_ctrl.2 index 20df015f..dc7b92b4 100644 --- a/doc/man/nvme_path_get_ctrl.2 +++ b/doc/man/nvme_path_get_ctrl.2 @@ -1,11 +1,11 @@ .TH "nvme_path_get_ctrl" 9 "nvme_path_get_ctrl" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_path_get_ctrl \- parent controller of an nvme_path_t object +nvme_path_get_ctrl \- Parent controller of an nvme_path_t object .SH SYNOPSIS .B "nvme_ctrl_t" nvme_path_get_ctrl .BI "(nvme_path_t p " ");" .SH ARGUMENTS .IP "p" 12 -nvme_path_t object +\fInvme_path_t\fP object .SH "RETURN" -parent controller if present +Parent controller if present diff --git a/doc/man/nvme_path_get_name.2 b/doc/man/nvme_path_get_name.2 index 655e9b72..d9546cd0 100644 --- a/doc/man/nvme_path_get_name.2 +++ b/doc/man/nvme_path_get_name.2 @@ -1,11 +1,11 @@ .TH "nvme_path_get_name" 9 "nvme_path_get_name" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_path_get_name \- sysfs name of an nvme_path_t object +nvme_path_get_name \- sysfs name of an &nvme_path_t object .SH SYNOPSIS .B "const char *" nvme_path_get_name .BI "(nvme_path_t p " ");" .SH ARGUMENTS .IP "p" 12 -nvme_path_t object +\fInvme_path_t\fP object .SH "RETURN" sysfs name of \fIp\fP diff --git a/doc/man/nvme_path_get_ns.2 b/doc/man/nvme_path_get_ns.2 index a5f4a29e..c4adabef 100644 --- a/doc/man/nvme_path_get_ns.2 +++ b/doc/man/nvme_path_get_ns.2 @@ -1,11 +1,11 @@ .TH "nvme_path_get_ns" 9 "nvme_path_get_ns" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_path_get_ns \- parent namespace of an nvme_path_t object +nvme_path_get_ns \- Parent namespace of an nvme_path_t object .SH SYNOPSIS .B "nvme_ns_t" nvme_path_get_ns .BI "(nvme_path_t p " ");" .SH ARGUMENTS .IP "p" 12 -nvme_path_t object +\fInvme_path_t\fP object .SH "RETURN" -parent namespace if present +Parent namespace if present diff --git a/doc/man/nvme_path_get_sysfs_dir.2 b/doc/man/nvme_path_get_sysfs_dir.2 index cf60c678..e7c9156e 100644 --- a/doc/man/nvme_path_get_sysfs_dir.2 +++ b/doc/man/nvme_path_get_sysfs_dir.2 @@ -6,6 +6,6 @@ nvme_path_get_sysfs_dir \- sysfs directory of an nvme_path_t object .BI "(nvme_path_t p " ");" .SH ARGUMENTS .IP "p" 12 -nvme_path_t object +\fInvme_path_t\fP object .SH "RETURN" sysfs directory of \fIp\fP diff --git a/doc/man/nvme_persistent_event_entry.2 b/doc/man/nvme_persistent_event_entry.2 index 2c7265d3..102c8725 100644 --- a/doc/man/nvme_persistent_event_entry.2 +++ b/doc/man/nvme_persistent_event_entry.2 @@ -28,11 +28,20 @@ struct nvme_persistent_event_entry { .SH Members .IP "etype" 12 +Event Type .IP "etype_rev" 12 +Event Type Revision .IP "ehl" 12 +Event Header Length .IP "rsvd3" 12 +Reserved .IP "cntlid" 12 +Controller Identifier .IP "ets" 12 +Event Timestamp .IP "rsvd14" 12 +Reserved .IP "vsil" 12 +Vendor Specific Information Length .IP "el" 12 +Event Length diff --git a/doc/man/nvme_persistent_event_log.2 b/doc/man/nvme_persistent_event_log.2 index dfb8a52a..f4f4fabd 100644 --- a/doc/man/nvme_persistent_event_log.2 +++ b/doc/man/nvme_persistent_event_log.2 @@ -48,21 +48,40 @@ struct nvme_persistent_event_log { .SH Members .IP "lid" 12 +Log Identifier .IP "rsvd1" 12 +Reserved .IP "tnev" 12 +Total Number of Events .IP "tll" 12 +Total Log Length .IP "rv" 12 +Log Revision .IP "rsvd17" 12 +Reserved .IP "lhl" 12 +Log Header Length .IP "ts" 12 +Timestamp .IP "poh" 12 +Power on Hours .IP "pcc" 12 +Power Cycle Count .IP "vid" 12 +PCI Vendor ID .IP "ssvid" 12 +PCI Subsystem Vendor ID .IP "sn" 12 +Serial Number .IP "mn" 12 +Model Number .IP "subnqn" 12 +NVM Subsystem NVMe Qualified Name .IP "gen_number" 12 +Generation Number .IP "rci" 12 +Reporting Context Information .IP "rsvd378" 12 +Reserved .IP "seb" 12 +Supported Events Bitmap diff --git a/doc/man/nvme_plm_config.2 b/doc/man/nvme_plm_config.2 index 111d0957..12889672 100644 --- a/doc/man/nvme_plm_config.2 +++ b/doc/man/nvme_plm_config.2 @@ -22,8 +22,14 @@ struct nvme_plm_config { .SH Members .IP "ee" 12 +Enable Event .IP "rsvd2" 12 +Reserved .IP "dtwinrt" 12 +DTWIN Reads Threshold .IP "dtwinwt" 12 +DTWIN Writes Threshold .IP "dtwintt" 12 +DTWIN Time Threshold .IP "rsvd56" 12 +Reserved diff --git a/doc/man/nvme_power_on_reset_info_list.2 b/doc/man/nvme_power_on_reset_info_list.2 index ec99ffe3..52dab592 100644 --- a/doc/man/nvme_power_on_reset_info_list.2 +++ b/doc/man/nvme_power_on_reset_info_list.2 @@ -24,9 +24,16 @@ struct nvme_power_on_reset_info_list { .SH Members .IP "cid" 12 +Controller ID .IP "fw_act" 12 +Firmware Activation .IP "op_in_prog" 12 +Operation in Progress .IP "rsvd4" 12 +Reserved .IP "ctrl_power_cycle" 12 +Controller Power Cycle .IP "power_on_ml_seconds" 12 +Power on milliseconds .IP "ctrl_time_stamp" 12 +Controller Timestamp diff --git a/doc/man/nvme_primary_ctrl_cap.2 b/doc/man/nvme_primary_ctrl_cap.2 index e96598f9..909b1612 100644 --- a/doc/man/nvme_primary_ctrl_cap.2 +++ b/doc/man/nvme_primary_ctrl_cap.2 @@ -46,20 +46,38 @@ struct nvme_primary_ctrl_cap { .SH Members .IP "cntlid" 12 +Controller Identifier .IP "portid" 12 +Port Identifier .IP "crt" 12 +Controller Resource Types .IP "rsvd5" 12 +reserved .IP "vqfrt" 12 +VQ Resources Flexible Total .IP "vqrfa" 12 +VQ Resources Flexible Assigned .IP "vqrfap" 12 +VQ Resources Flexible Allocated to Primary .IP "vqprt" 12 +VQ Resources Private Total .IP "vqfrsm" 12 +VQ Resources Flexible Secondary Maximum .IP "vqgran" 12 +VQ Flexible Resource Preferred Granularity .IP "rsvd48" 12 +reserved .IP "vifrt" 12 +VI Resources Flexible Total .IP "virfa" 12 +VI Resources Flexible Assigned .IP "virfap" 12 +VI Resources Flexible Allocated to Primary .IP "viprt" 12 +VI Resources Private Total .IP "vifrsm" 12 +VI Resources Flexible Secondary Maximum .IP "vigran" 12 +VI Flexible Resource Preferred Granularity .IP "rsvd80" 12 +reserved diff --git a/doc/man/nvme_read_config.2 b/doc/man/nvme_read_config.2 index 8e5f0476..b008816a 100644 --- a/doc/man/nvme_read_config.2 +++ b/doc/man/nvme_read_config.2 @@ -1,6 +1,6 @@ .TH "nvme_read_config" 9 "nvme_read_config" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_read_config \- Read NVMe json configuration file +nvme_read_config \- Read NVMe JSON configuration file .SH SYNOPSIS .B "int" nvme_read_config .BI "(nvme_root_t r " "," @@ -9,7 +9,7 @@ nvme_read_config \- Read NVMe json configuration file .IP "r" 12 nvme_root_t object .IP "config_file" 12 -json configuration file +JSON configuration file .SH "DESCRIPTION" Read in the contents of \fIconfig_file\fP and merge them with the elements in \fIr\fP. diff --git a/doc/man/nvme_refresh_topology.2 b/doc/man/nvme_refresh_topology.2 index 30b379a2..c4d01118 100644 --- a/doc/man/nvme_refresh_topology.2 +++ b/doc/man/nvme_refresh_topology.2 @@ -1,6 +1,6 @@ .TH "nvme_refresh_topology" 9 "nvme_refresh_topology" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_refresh_topology \- refresh nvme_root_t object contents +nvme_refresh_topology \- Refresh nvme_root_t object contents .SH SYNOPSIS .B "void" nvme_refresh_topology .BI "(nvme_root_t r " ");" diff --git a/doc/man/nvme_registered_ctrl.2 b/doc/man/nvme_registered_ctrl.2 index 61c448a9..205ea0bc 100644 --- a/doc/man/nvme_registered_ctrl.2 +++ b/doc/man/nvme_registered_ctrl.2 @@ -20,7 +20,12 @@ struct nvme_registered_ctrl { .SH Members .IP "cntlid" 12 +Controller ID .IP "rcsts" 12 +Reservation Status .IP "rsvd3" 12 +Reserved .IP "hostid" 12 +Host Identifier .IP "rkey" 12 +Reservation Key diff --git a/doc/man/nvme_registered_ctrl_ext.2 b/doc/man/nvme_registered_ctrl_ext.2 index 3476f259..94220efc 100644 --- a/doc/man/nvme_registered_ctrl_ext.2 +++ b/doc/man/nvme_registered_ctrl_ext.2 @@ -22,8 +22,14 @@ struct nvme_registered_ctrl_ext { .SH Members .IP "cntlid" 12 +Controller ID .IP "rcsts" 12 +Reservation Status .IP "rsvd3" 12 +Reserved .IP "rkey" 12 +Reservation Key .IP "hostid" 12 +Host Identifier .IP "rsvd32" 12 +Reserved diff --git a/doc/man/nvme_rescan_ctrl.2 b/doc/man/nvme_rescan_ctrl.2 index 5595c670..9273e0c6 100644 --- a/doc/man/nvme_rescan_ctrl.2 +++ b/doc/man/nvme_rescan_ctrl.2 @@ -1,9 +1,9 @@ .TH "nvme_rescan_ctrl" 9 "nvme_rescan_ctrl" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_rescan_ctrl \- Rescan an existing nvme_ctrl_t object +nvme_rescan_ctrl \- Rescan an existing controller .SH SYNOPSIS .B "void" nvme_rescan_ctrl .BI "(nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "c" 12 -nvme_ctrl_t object +Controller instance diff --git a/doc/man/nvme_resv_notification_log.2 b/doc/man/nvme_resv_notification_log.2 index 919707ae..b50b594e 100644 --- a/doc/man/nvme_resv_notification_log.2 +++ b/doc/man/nvme_resv_notification_log.2 @@ -22,9 +22,14 @@ struct nvme_resv_notification_log { .SH Members .IP "lpc" 12 +Log Page Count .IP "rnlpt" 12 See \fIenum nvme_resv_notify_rnlpt\fP. .IP "nalp" 12 +Number of Available Log Pages .IP "rsvd9" 12 +Reserved .IP "nsid" 12 +Namespace ID .IP "rsvd16" 12 +Reserved diff --git a/doc/man/nvme_resv_status.2 b/doc/man/nvme_resv_status.2 index 3d9a3647..c862b866 100644 --- a/doc/man/nvme_resv_status.2 +++ b/doc/man/nvme_resv_status.2 @@ -36,15 +36,24 @@ struct nvme_resv_status { .SH Members .IP "gen" 12 +Generation .IP "rtype" 12 +Reservation Type .IP "regctl" 12 +Number of Registered Controllers .IP "rsvd7" 12 +Reserved .IP "ptpls" 12 +Persist Through Power Loss State .IP "rsvd10" 12 +Reserved .IP "{unnamed_union}" 12 anonymous .IP "{unnamed_struct}" 12 anonymous .IP "rsvd24" 12 +Reserved .IP "regctl_eds" 12 +Registered Controller Extended Data Structure .IP "regctl_ds" 12 +Registered Controller Data Structure diff --git a/doc/man/nvme_sanitize_compln_event.2 b/doc/man/nvme_sanitize_compln_event.2 index 4a361222..4c8e843b 100644 --- a/doc/man/nvme_sanitize_compln_event.2 +++ b/doc/man/nvme_sanitize_compln_event.2 @@ -18,6 +18,10 @@ struct nvme_sanitize_compln_event { .SH Members .IP "sani_prog" 12 +Sanitize Progress .IP "sani_status" 12 +Sanitize Status .IP "cmpln_info" 12 +Completion Information .IP "rsvd6" 12 +Reserved diff --git a/doc/man/nvme_sanitize_start_event.2 b/doc/man/nvme_sanitize_start_event.2 index d7966e09..4b611a05 100644 --- a/doc/man/nvme_sanitize_start_event.2 +++ b/doc/man/nvme_sanitize_start_event.2 @@ -16,5 +16,8 @@ struct nvme_sanitize_start_event { .SH Members .IP "sani_cap" 12 +SANICAP .IP "sani_cdw10" 12 +Sanitize CDW10 .IP "sani_cdw11" 12 +Sanitize CDW11 diff --git a/doc/man/nvme_scan.2 b/doc/man/nvme_scan.2 index c011c1bb..4f7da8df 100644 --- a/doc/man/nvme_scan.2 +++ b/doc/man/nvme_scan.2 @@ -6,6 +6,6 @@ nvme_scan \- Scan NVMe topology .BI "(const char *config_file " ");" .SH ARGUMENTS .IP "config_file" 12 -configuration file +Configuration file .SH "RETURN" nvme_root_t object of found elements diff --git a/doc/man/nvme_scan_ctrl.2 b/doc/man/nvme_scan_ctrl.2 index 40fdb7d9..cb021572 100644 --- a/doc/man/nvme_scan_ctrl.2 +++ b/doc/man/nvme_scan_ctrl.2 @@ -9,7 +9,7 @@ nvme_scan_ctrl \- Scan on a controller .IP "r" 12 nvme_root_t object .IP "name" 12 -name of the controller +Name of the controller .SH "DESCRIPTION" Scans a controller with sysfs name \fIname\fP and add it to \fIr\fP. .SH "RETURN" diff --git a/doc/man/nvme_secondary_ctrl.2 b/doc/man/nvme_secondary_ctrl.2 index 628b96d4..98f636bd 100644 --- a/doc/man/nvme_secondary_ctrl.2 +++ b/doc/man/nvme_secondary_ctrl.2 @@ -26,10 +26,18 @@ struct nvme_secondary_ctrl { .SH Members .IP "scid" 12 +Secondary Controller Identifier .IP "pcid" 12 +Primary Controller Identifier .IP "scs" 12 +Secondary Controller State .IP "rsvd5" 12 +Reserved .IP "vfn" 12 +Virtual Function Number .IP "nvq" 12 +Number of VQ Flexible Resources Assigned .IP "nvi" 12 +Number of VI Flexible Resources Assigned .IP "rsvd14" 12 +Reserved diff --git a/doc/man/nvme_secondary_ctrl_list.2 b/doc/man/nvme_secondary_ctrl_list.2 index 0eb9073a..c03f7500 100644 --- a/doc/man/nvme_secondary_ctrl_list.2 +++ b/doc/man/nvme_secondary_ctrl_list.2 @@ -16,5 +16,8 @@ struct nvme_secondary_ctrl_list { .SH Members .IP "num" 12 +Number of Identifiers .IP "rsvd" 12 +Reserved .IP "sc_entry" 12 +Secondary Controller Entry diff --git a/doc/man/nvme_set_feature_event.2 b/doc/man/nvme_set_feature_event.2 index d700af4c..d8edbd9b 100644 --- a/doc/man/nvme_set_feature_event.2 +++ b/doc/man/nvme_set_feature_event.2 @@ -14,4 +14,6 @@ struct nvme_set_feature_event { .SH Members .IP "layout" 12 +Set Feature Event Layout .IP "cdw_mem" 12 +Command Dwords Memory buffer diff --git a/doc/man/nvme_set_features_arbitration.2 b/doc/man/nvme_set_features_arbitration.2 index 917b46f4..b63bcd8c 100644 --- a/doc/man/nvme_set_features_arbitration.2 +++ b/doc/man/nvme_set_features_arbitration.2 @@ -14,9 +14,13 @@ nvme_set_features_arbitration \- .IP "fd" 12 File descriptor of nvme device .IP "ab" 12 +Arbitration Burst .IP "lpw" 12 +Low Priority Weight .IP "mpw" 12 +Medium Priority Weight .IP "hpw" 12 +High Priority Weight .IP "save" 12 Save value across power states .IP "result" 12 diff --git a/doc/man/nvme_set_features_args.2 b/doc/man/nvme_set_features_args.2 index 4fa9aace..7da028bb 100644 --- a/doc/man/nvme_set_features_args.2 +++ b/doc/man/nvme_set_features_args.2 @@ -20,6 +20,8 @@ struct nvme_set_features_args { .br .BI " __u32 cdw12;" .br +.BI " __u32 cdw13;" +.br .BI " __u32 cdw15;" .br .BI " __u32 data_len;" diff --git a/doc/man/nvme_set_features_auto_pst.2 b/doc/man/nvme_set_features_auto_pst.2 index 85f86f47..7df046b2 100644 --- a/doc/man/nvme_set_features_auto_pst.2 +++ b/doc/man/nvme_set_features_auto_pst.2 @@ -12,9 +12,11 @@ nvme_set_features_auto_pst \- .IP "fd" 12 File descriptor of nvme device .IP "apste" 12 +Autonomous Power State Transition Enable .IP "save" 12 Save value across power states .IP "apst" 12 +Autonomous Power State Transition .IP "result" 12 The command completion result from CQE dword0 .SH "RETURN" diff --git a/doc/man/nvme_set_features_endurance_evt_cfg.2 b/doc/man/nvme_set_features_endurance_evt_cfg.2 index 9a69c41a..4e25482f 100644 --- a/doc/man/nvme_set_features_endurance_evt_cfg.2 +++ b/doc/man/nvme_set_features_endurance_evt_cfg.2 @@ -12,6 +12,7 @@ nvme_set_features_endurance_evt_cfg \- .IP "fd" 12 File descriptor of nvme device .IP "endgid" 12 +Endurance Group Identifier .IP "egwarn" 12 Flags to enable warning, see \fIenum nvme_eg_critical_warning_flags\fP .IP "save" 12 diff --git a/doc/man/nvme_set_features_err_recovery.2 b/doc/man/nvme_set_features_err_recovery.2 index 48ebc9cb..2a0a5dd6 100644 --- a/doc/man/nvme_set_features_err_recovery.2 +++ b/doc/man/nvme_set_features_err_recovery.2 @@ -17,6 +17,7 @@ Namespace ID .IP "tler" 12 Time-limited error recovery value .IP "dulbe" 12 +Deallocated or Unwritten Logical Block Error Enable .IP "save" 12 Save value across power states .IP "result" 12 diff --git a/doc/man/nvme_set_features_hctm.2 b/doc/man/nvme_set_features_hctm.2 index b40c5b90..9f05b04b 100644 --- a/doc/man/nvme_set_features_hctm.2 +++ b/doc/man/nvme_set_features_hctm.2 @@ -12,7 +12,9 @@ nvme_set_features_hctm \- .IP "fd" 12 File descriptor of nvme device .IP "tmt2" 12 +Thermal Management Temperature 2 .IP "tmt1" 12 +Thermal Management Temperature 1 .IP "save" 12 Save value across power states .IP "result" 12 diff --git a/doc/man/nvme_set_features_host_behavior.2 b/doc/man/nvme_set_features_host_behavior.2 index f3d76ccc..24e67108 100644 --- a/doc/man/nvme_set_features_host_behavior.2 +++ b/doc/man/nvme_set_features_host_behavior.2 @@ -12,6 +12,7 @@ File descriptor of nvme device .IP "save" 12 Save value across power states .IP "data" 12 +Pointer to structure nvme_feat_host_behavior .SH "RETURN" The nvme command status if a response was received (see \fIenum nvme_status_field\fP) or -1 with errno set otherwise. diff --git a/doc/man/nvme_set_features_host_id.2 b/doc/man/nvme_set_features_host_id.2 index bd5e7d5b..bd650814 100644 --- a/doc/man/nvme_set_features_host_id.2 +++ b/doc/man/nvme_set_features_host_id.2 @@ -11,6 +11,7 @@ nvme_set_features_host_id \- .IP "fd" 12 File descriptor of nvme device .IP "exhid" 12 +Enable Extended Host Identifier .IP "save" 12 Save value across power states .IP "hostid" 12 diff --git a/doc/man/nvme_set_features_irq_coalesce.2 b/doc/man/nvme_set_features_irq_coalesce.2 index 13e9c2d5..09fe04c7 100644 --- a/doc/man/nvme_set_features_irq_coalesce.2 +++ b/doc/man/nvme_set_features_irq_coalesce.2 @@ -12,7 +12,9 @@ nvme_set_features_irq_coalesce \- .IP "fd" 12 File descriptor of nvme device .IP "thr" 12 +Aggregation Threshold .IP "time" 12 +Aggregation Time .IP "save" 12 Save value across power states .IP "result" 12 diff --git a/doc/man/nvme_set_features_irq_config.2 b/doc/man/nvme_set_features_irq_config.2 index 42e801f9..da155264 100644 --- a/doc/man/nvme_set_features_irq_config.2 +++ b/doc/man/nvme_set_features_irq_config.2 @@ -12,7 +12,9 @@ nvme_set_features_irq_config \- .IP "fd" 12 File descriptor of nvme device .IP "iv" 12 +Interrupt Vector .IP "cd" 12 +Coalescing Disable .IP "save" 12 Save value across power states .IP "result" 12 diff --git a/doc/man/nvme_set_features_lba_sts_interval.2 b/doc/man/nvme_set_features_lba_sts_interval.2 index c79772c9..404066fe 100644 --- a/doc/man/nvme_set_features_lba_sts_interval.2 +++ b/doc/man/nvme_set_features_lba_sts_interval.2 @@ -12,7 +12,9 @@ nvme_set_features_lba_sts_interval \- .IP "fd" 12 File descriptor of nvme device .IP "lsiri" 12 +LBA Status Information Report Interval .IP "lsipi" 12 +LBA Status Information Poll Interval .IP "save" 12 Save value across power states .IP "result" 12 diff --git a/doc/man/nvme_set_features_nopsc.2 b/doc/man/nvme_set_features_nopsc.2 index f95408b6..7cce4ff6 100644 --- a/doc/man/nvme_set_features_nopsc.2 +++ b/doc/man/nvme_set_features_nopsc.2 @@ -11,6 +11,7 @@ nvme_set_features_nopsc \- .IP "fd" 12 File descriptor of nvme device .IP "noppme" 12 +Non-Operational Power State Permissive Mode Enable .IP "save" 12 Save value across power states .IP "result" 12 diff --git a/doc/man/nvme_set_features_plm_config.2 b/doc/man/nvme_set_features_plm_config.2 index 7b26aa9e..c6ee0d44 100644 --- a/doc/man/nvme_set_features_plm_config.2 +++ b/doc/man/nvme_set_features_plm_config.2 @@ -13,10 +13,13 @@ nvme_set_features_plm_config \- .IP "fd" 12 File descriptor of nvme device .IP "enable" 12 +Predictable Latency Enable .IP "nvmsetid" 12 +NVM Set Identifier .IP "save" 12 Save value across power states .IP "data" 12 +Pointer to structure nvme_plm_config .IP "result" 12 The command completion result from CQE dword0 .SH "RETURN" diff --git a/doc/man/nvme_set_features_plm_window.2 b/doc/man/nvme_set_features_plm_window.2 index c7ea851c..d5347679 100644 --- a/doc/man/nvme_set_features_plm_window.2 +++ b/doc/man/nvme_set_features_plm_window.2 @@ -12,7 +12,9 @@ nvme_set_features_plm_window \- .IP "fd" 12 File descriptor of nvme device .IP "sel" 12 +Window Select .IP "nvmsetid" 12 +NVM Set Identifier .IP "save" 12 Save value across power states .IP "result" 12 diff --git a/doc/man/nvme_set_features_power_mgmt.2 b/doc/man/nvme_set_features_power_mgmt.2 index f85bd0d8..32404c1f 100644 --- a/doc/man/nvme_set_features_power_mgmt.2 +++ b/doc/man/nvme_set_features_power_mgmt.2 @@ -12,7 +12,9 @@ nvme_set_features_power_mgmt \- .IP "fd" 12 File descriptor of nvme device .IP "ps" 12 +Power State .IP "wh" 12 +Workload Hint .IP "save" 12 Save value across power states .IP "result" 12 diff --git a/doc/man/nvme_set_features_resv_mask.2 b/doc/man/nvme_set_features_resv_mask.2 index d1af782b..89f18063 100644 --- a/doc/man/nvme_set_features_resv_mask.2 +++ b/doc/man/nvme_set_features_resv_mask.2 @@ -11,6 +11,7 @@ nvme_set_features_resv_mask \- .IP "fd" 12 File descriptor of nvme device .IP "mask" 12 +Reservation Notification Mask Field .IP "save" 12 Save value across power states .IP "result" 12 diff --git a/doc/man/nvme_set_features_resv_persist.2 b/doc/man/nvme_set_features_resv_persist.2 index 548d8f66..5d56716a 100644 --- a/doc/man/nvme_set_features_resv_persist.2 +++ b/doc/man/nvme_set_features_resv_persist.2 @@ -11,6 +11,7 @@ nvme_set_features_resv_persist \- .IP "fd" 12 File descriptor of nvme device .IP "ptpl" 12 +Persist Through Power Loss .IP "save" 12 Save value across power states .IP "result" 12 diff --git a/doc/man/nvme_set_features_sanitize.2 b/doc/man/nvme_set_features_sanitize.2 index 286e09ce..99ddaafe 100644 --- a/doc/man/nvme_set_features_sanitize.2 +++ b/doc/man/nvme_set_features_sanitize.2 @@ -11,6 +11,7 @@ nvme_set_features_sanitize \- .IP "fd" 12 File descriptor of nvme device .IP "nodrm" 12 +No-Deallocate Response Mode .IP "save" 12 Save value across power states .IP "result" 12 diff --git a/doc/man/nvme_set_features_sw_progress.2 b/doc/man/nvme_set_features_sw_progress.2 index 03f4bacd..fedb7df2 100644 --- a/doc/man/nvme_set_features_sw_progress.2 +++ b/doc/man/nvme_set_features_sw_progress.2 @@ -11,6 +11,7 @@ nvme_set_features_sw_progress \- .IP "fd" 12 File descriptor of nvme device .IP "pbslc" 12 +Pre-boot Software Load Count .IP "save" 12 Save value across power states .IP "result" 12 diff --git a/doc/man/nvme_set_features_temp_thresh.2 b/doc/man/nvme_set_features_temp_thresh.2 index d2910966..700a38fa 100644 --- a/doc/man/nvme_set_features_temp_thresh.2 +++ b/doc/man/nvme_set_features_temp_thresh.2 @@ -13,8 +13,11 @@ nvme_set_features_temp_thresh \- .IP "fd" 12 File descriptor of nvme device .IP "tmpth" 12 +Temperature Threshold .IP "tmpsel" 12 +Threshold Temperature Select .IP "thsel" 12 +Threshold Type Select .IP "save" 12 Save value across power states .IP "result" 12 diff --git a/doc/man/nvme_set_features_write_atomic.2 b/doc/man/nvme_set_features_write_atomic.2 index f9d5ebed..c845d7fe 100644 --- a/doc/man/nvme_set_features_write_atomic.2 +++ b/doc/man/nvme_set_features_write_atomic.2 @@ -11,6 +11,7 @@ nvme_set_features_write_atomic \- .IP "fd" 12 File descriptor of nvme device .IP "dn" 12 +Disable Normal .IP "save" 12 Save value across power states .IP "result" 12 diff --git a/doc/man/nvme_set_features_write_protect.2 b/doc/man/nvme_set_features_write_protect.2 index 160a8bb4..671b618c 100644 --- a/doc/man/nvme_set_features_write_protect.2 +++ b/doc/man/nvme_set_features_write_protect.2 @@ -11,6 +11,7 @@ nvme_set_features_write_protect \- .IP "fd" 12 File descriptor of nvme device .IP "state" 12 +Write Protection State .IP "save" 12 Save value across power states .IP "result" 12 diff --git a/doc/man/nvme_status_field.2 b/doc/man/nvme_status_field.2 index 197521b2..a3ab52b0 100644 --- a/doc/man/nvme_status_field.2 +++ b/doc/man/nvme_status_field.2 @@ -376,6 +376,30 @@ enum nvme_status_field { , .br .br +.BI " NVME_SC_INVALID_DISCOVERY_INFO" +, +.br +.br +.BI " NVME_SC_ZONING_DATA_STRUCT_LOCKED" +, +.br +.br +.BI " NVME_SC_ZONING_DATA_STRUCT_NOTFND" +, +.br +.br +.BI " NVME_SC_INSUFFICIENT_DISC_RES" +, +.br +.br +.BI " NVME_SC_REQSTD_FUNCTION_DISABLED" +, +.br +.br +.BI " NVME_SC_ZONEGRP_ORIGINATOR_INVLD" +, +.br +.br .BI " NVME_SC_BAD_ATTRIBUTES" , .br @@ -932,6 +956,35 @@ I/O Command Set Combination Rejected Invalid I/O Command Set .IP "NVME_SC_ID_UNAVAILABLE" 12 Identifier Unavailable +.IP "NVME_SC_INVALID_DISCOVERY_INFO" 12 +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. +.IP "NVME_SC_ZONING_DATA_STRUCT_LOCKED" 12 +The requested Zoning data structure +is locked on the CDC. +.IP "NVME_SC_ZONING_DATA_STRUCT_NOTFND" 12 +The requested Zoning data structure +does not exist on the CDC. +.IP "NVME_SC_INSUFFICIENT_DISC_RES" 12 +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. +.IP "NVME_SC_REQSTD_FUNCTION_DISABLED" 12 +Fabric Zoning is not enabled on the +CDC +.IP "NVME_SC_ZONEGRP_ORIGINATOR_INVLD" 12 +-- undescribed -- .IP "NVME_SC_BAD_ATTRIBUTES" 12 Conflicting Dataset Management Attributes .IP "NVME_SC_INVALID_PI" 12 diff --git a/doc/man/nvme_streams_directive_params.2 b/doc/man/nvme_streams_directive_params.2 index 79585fce..8dabd39e 100644 --- a/doc/man/nvme_streams_directive_params.2 +++ b/doc/man/nvme_streams_directive_params.2 @@ -30,12 +30,22 @@ struct nvme_streams_directive_params { .SH Members .IP "msl" 12 +Max Streams Limit .IP "nssa" 12 +NVM Subsystem Streams Available .IP "nsso" 12 +NVM Subsystem Streams Open .IP "nssc" 12 +NVM Subsystem Stream Capability .IP "rsvd" 12 +Reserved .IP "sws" 12 +Stream Write Size .IP "sgs" 12 +Stream Granularity Size .IP "nsa" 12 +Namespace Streams Allocated .IP "nso" 12 +Namespace Streams Open .IP "rsvd2" 12 +Reserved diff --git a/doc/man/nvme_streams_directive_status.2 b/doc/man/nvme_streams_directive_status.2 index 2e5d3382..a0310f0e 100644 --- a/doc/man/nvme_streams_directive_status.2 +++ b/doc/man/nvme_streams_directive_status.2 @@ -14,4 +14,6 @@ struct nvme_streams_directive_status { .SH Members .IP "osc" 12 +Open Stream Count .IP "sid" 12 +Stream Identifier diff --git a/doc/man/nvme_subsystem_first_ctrl.2 b/doc/man/nvme_subsystem_first_ctrl.2 index 4d6fd1ba..b998676a 100644 --- a/doc/man/nvme_subsystem_first_ctrl.2 +++ b/doc/man/nvme_subsystem_first_ctrl.2 @@ -6,6 +6,6 @@ nvme_subsystem_first_ctrl \- First ctrl iterator .BI "(nvme_subsystem_t s " ");" .SH ARGUMENTS .IP "s" 12 -nvme_subsystem_t object +\fInvme_subsystem_t\fP object .SH "RETURN" -First nvme_ctrl_t object of an \fIs\fP iterator +First controller of an \fIs\fP iterator diff --git a/doc/man/nvme_subsystem_first_ns.2 b/doc/man/nvme_subsystem_first_ns.2 index 1bf2e6b6..b51ef6c3 100644 --- a/doc/man/nvme_subsystem_first_ns.2 +++ b/doc/man/nvme_subsystem_first_ns.2 @@ -6,6 +6,6 @@ nvme_subsystem_first_ns \- Start namespace iterator .BI "(nvme_subsystem_t s " ");" .SH ARGUMENTS .IP "s" 12 -nvme_subsystem_t object +\fInvme_subsystem_t\fP object .SH "RETURN" -First nvme_ns_t object of an \fIs\fP iterator +First \fInvme_ns_t\fP object of an \fIs\fP iterator diff --git a/doc/man/nvme_subsystem_for_each_ctrl.2 b/doc/man/nvme_subsystem_for_each_ctrl.2 index 349489f4..7fefec82 100644 --- a/doc/man/nvme_subsystem_for_each_ctrl.2 +++ b/doc/man/nvme_subsystem_for_each_ctrl.2 @@ -1,12 +1,12 @@ .TH "nvme_subsystem_for_each_ctrl" 9 "nvme_subsystem_for_each_ctrl" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_subsystem_for_each_ctrl \- traverse controllers +nvme_subsystem_for_each_ctrl \- Traverse controllers .SH SYNOPSIS .B "nvme_subsystem_for_each_ctrl .BI "(s " "," .BI "c " ");" .SH ARGUMENTS .IP "s" 12 -nvme_subsystem_t object +\fInvme_subsystem_t\fP object .IP "c" 12 -nvme_ctrl_t object +Controller instance diff --git a/doc/man/nvme_subsystem_for_each_ctrl_safe.2 b/doc/man/nvme_subsystem_for_each_ctrl_safe.2 index b912c6be..d0894c8e 100644 --- a/doc/man/nvme_subsystem_for_each_ctrl_safe.2 +++ b/doc/man/nvme_subsystem_for_each_ctrl_safe.2 @@ -8,8 +8,8 @@ nvme_subsystem_for_each_ctrl_safe \- Traverse controllers .BI "_c " ");" .SH ARGUMENTS .IP "s" 12 -nvme_subsystem_t object +\fInvme_subsystem_t\fP object .IP "c" 12 -nvme_ctrl_t object +Controller instance .IP "_c" 12 -temporary nvme_ctrl_t object +A \fInvme_ctrl_t_node\fP to use as temporary storage diff --git a/doc/man/nvme_subsystem_for_each_ns.2 b/doc/man/nvme_subsystem_for_each_ns.2 index 5543f696..c6266735 100644 --- a/doc/man/nvme_subsystem_for_each_ns.2 +++ b/doc/man/nvme_subsystem_for_each_ns.2 @@ -7,6 +7,6 @@ nvme_subsystem_for_each_ns \- Traverse namespaces .BI "n " ");" .SH ARGUMENTS .IP "s" 12 -nvme_subsystem_t object +\fInvme_subsystem_t\fP object .IP "n" 12 -nvme_ns_t object +\fInvme_ns_t\fP object diff --git a/doc/man/nvme_subsystem_for_each_ns_safe.2 b/doc/man/nvme_subsystem_for_each_ns_safe.2 index 24417031..89498c59 100644 --- a/doc/man/nvme_subsystem_for_each_ns_safe.2 +++ b/doc/man/nvme_subsystem_for_each_ns_safe.2 @@ -8,8 +8,8 @@ nvme_subsystem_for_each_ns_safe \- Traverse namespaces .BI "_n " ");" .SH ARGUMENTS .IP "s" 12 -nvme_subsystem_t object +\fInvme_subsystem_t\fP object .IP "n" 12 -nvme_ns_t object +\fInvme_ns_t\fP object .IP "_n" 12 -temporary nvme_ns_t object +A \fInvme_ns_t_node\fP to use as temporary storage diff --git a/doc/man/nvme_subsystem_get_host.2 b/doc/man/nvme_subsystem_get_host.2 index 56050892..e0c280ce 100644 --- a/doc/man/nvme_subsystem_get_host.2 +++ b/doc/man/nvme_subsystem_get_host.2 @@ -8,4 +8,4 @@ nvme_subsystem_get_host \- Returns nvme_host_t object .IP "s" 12 subsystem .SH "RETURN" -nvme_host_t object from \fIs\fP +\fInvme_host_t\fP object from \fIs\fP diff --git a/doc/man/nvme_subsystem_get_nqn.2 b/doc/man/nvme_subsystem_get_nqn.2 index 693cfe0f..c86f4bce 100644 --- a/doc/man/nvme_subsystem_get_nqn.2 +++ b/doc/man/nvme_subsystem_get_nqn.2 @@ -1,8 +1,11 @@ .TH "nvme_subsystem_get_nqn" 9 "nvme_subsystem_get_nqn" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_subsystem_get_nqn \- +nvme_subsystem_get_nqn \- Retrieve NQN from subsystem .SH SYNOPSIS .B "const char *" nvme_subsystem_get_nqn .BI "(nvme_subsystem_t s " ");" .SH ARGUMENTS .IP "s" 12 +nvme_subsystem_t object +.SH "RETURN" +NQN of systemstem diff --git a/doc/man/nvme_subsystem_get_type.2 b/doc/man/nvme_subsystem_get_type.2 index 4a8ababd..34f46335 100644 --- a/doc/man/nvme_subsystem_get_type.2 +++ b/doc/man/nvme_subsystem_get_type.2 @@ -6,7 +6,7 @@ nvme_subsystem_get_type \- Returns the type of a subsystem .BI "(nvme_subsystem_t s " ");" .SH ARGUMENTS .IP "s" 12 -Subsystem +nvme_subsystem_t object .SH "DESCRIPTION" Returns the subsystem type of \fIs\fP. .SH "RETURN" diff --git a/doc/man/nvme_subsystem_lookup_namespace.2 b/doc/man/nvme_subsystem_lookup_namespace.2 index 77df541d..40f096f2 100644 --- a/doc/man/nvme_subsystem_lookup_namespace.2 +++ b/doc/man/nvme_subsystem_lookup_namespace.2 @@ -9,6 +9,6 @@ nvme_subsystem_lookup_namespace \- lookup namespace by NSID .IP "s" 12 nvme_subsystem_t object .IP "nsid" 12 -namespace id +Namespace id .SH "RETURN" nvme_ns_t of the namespace with id \fInsid\fP in subsystem \fIs\fP diff --git a/doc/man/nvme_subsystem_next_ctrl.2 b/doc/man/nvme_subsystem_next_ctrl.2 index 8b6c3c2d..b872bce3 100644 --- a/doc/man/nvme_subsystem_next_ctrl.2 +++ b/doc/man/nvme_subsystem_next_ctrl.2 @@ -7,8 +7,8 @@ nvme_subsystem_next_ctrl \- Next ctrl iterator .BI "nvme_ctrl_t c " ");" .SH ARGUMENTS .IP "s" 12 -nvme_subsystem_t object +\fInvme_subsystem_t\fP object .IP "c" 12 -previous nvme_ctrl_t object of an \fIs\fP iterator +Previous controller instance of an \fIs\fP iterator .SH "RETURN" -next nvme_ctrl_t object of an \fIs\fP iterator +Next controller of an \fIs\fP iterator diff --git a/doc/man/nvme_subsystem_next_ns.2 b/doc/man/nvme_subsystem_next_ns.2 index 9e0482e1..5f56ece0 100644 --- a/doc/man/nvme_subsystem_next_ns.2 +++ b/doc/man/nvme_subsystem_next_ns.2 @@ -7,8 +7,8 @@ nvme_subsystem_next_ns \- Next namespace iterator .BI "nvme_ns_t n " ");" .SH ARGUMENTS .IP "s" 12 -nvme_subsystem_t object +\fInvme_subsystem_t\fP object .IP "n" 12 -previous nvme_ns_t iterator +Previous \fInvme_ns_t\fP iterator .SH "RETURN" -Next nvme_ns_t object of an \fIs\fP iterator +Next \fInvme_ns_t\fP object of an \fIs\fP iterator diff --git a/doc/man/nvme_supported_log_pages.2 b/doc/man/nvme_supported_log_pages.2 index 3e41cf65..66bb4481 100644 --- a/doc/man/nvme_supported_log_pages.2 +++ b/doc/man/nvme_supported_log_pages.2 @@ -12,5 +12,6 @@ struct nvme_supported_log_pages { .SH Members .IP "lid_support" 12 +Log Page Identifier Supported .SH "Description" Supported Log Pages (Log Identifier 00h) diff --git a/doc/man/nvme_telemetry_da.2 b/doc/man/nvme_telemetry_da.2 new file mode 100644 index 00000000..6cd4fcc5 --- /dev/null +++ b/doc/man/nvme_telemetry_da.2 @@ -0,0 +1,30 @@ +.TH "libnvme" 9 "enum nvme_telemetry_da" "February 2022" "API Manual" LINUX +.SH NAME +enum nvme_telemetry_da \- Telemetry Log Data Area +.SH SYNOPSIS +enum nvme_telemetry_da { +.br +.BI " NVME_TELEMETRY_DA_1" +, +.br +.br +.BI " NVME_TELEMETRY_DA_2" +, +.br +.br +.BI " NVME_TELEMETRY_DA_3" +, +.br +.br +.BI " NVME_TELEMETRY_DA_4" + +}; +.SH Constants +.IP "NVME_TELEMETRY_DA_1" 12 +Data Area 1 +.IP "NVME_TELEMETRY_DA_2" 12 +Data Area 2 +.IP "NVME_TELEMETRY_DA_3" 12 +Data Area 3 +.IP "NVME_TELEMETRY_DA_4" 12 +Data Area 4 diff --git a/doc/man/nvme_thermal_exc_event.2 b/doc/man/nvme_thermal_exc_event.2 index 0806528c..028e4d02 100644 --- a/doc/man/nvme_thermal_exc_event.2 +++ b/doc/man/nvme_thermal_exc_event.2 @@ -14,4 +14,6 @@ struct nvme_thermal_exc_event { .SH Members .IP "over_temp" 12 +Over Temperature .IP "threshold" 12 +temperature threshold diff --git a/doc/man/nvme_time_stamp_change_event.2 b/doc/man/nvme_time_stamp_change_event.2 index 24d7d263..69750379 100644 --- a/doc/man/nvme_time_stamp_change_event.2 +++ b/doc/man/nvme_time_stamp_change_event.2 @@ -14,4 +14,6 @@ struct nvme_time_stamp_change_event { .SH Members .IP "previous_timestamp" 12 +Previous Timestamp .IP "ml_secs_since_reset" 12 +Milliseconds Since Reset diff --git a/doc/man/nvme_timestamp.2 b/doc/man/nvme_timestamp.2 index 2ab61976..ccbc2e7f 100644 --- a/doc/man/nvme_timestamp.2 +++ b/doc/man/nvme_timestamp.2 @@ -16,5 +16,8 @@ struct nvme_timestamp { .SH Members .IP "timestamp" 12 +Timestamp value based on origin and synch field .IP "attr" 12 +Attribute .IP "rsvd" 12 +Reserved diff --git a/doc/man/nvme_unlink_ctrl.2 b/doc/man/nvme_unlink_ctrl.2 index 3ac95b3e..26533200 100644 --- a/doc/man/nvme_unlink_ctrl.2 +++ b/doc/man/nvme_unlink_ctrl.2 @@ -1,8 +1,9 @@ .TH "nvme_unlink_ctrl" 9 "nvme_unlink_ctrl" "February 2022" "libnvme API manual" LINUX .SH NAME -nvme_unlink_ctrl \- +nvme_unlink_ctrl \- Unlink controller .SH SYNOPSIS .B "void" nvme_unlink_ctrl .BI "(struct nvme_ctrl *c " ");" .SH ARGUMENTS .IP "c" 12 +Controller instance diff --git a/doc/man/nvme_zns_changed_zone_log.2 b/doc/man/nvme_zns_changed_zone_log.2 index 153d0b3d..c0523fea 100644 --- a/doc/man/nvme_zns_changed_zone_log.2 +++ b/doc/man/nvme_zns_changed_zone_log.2 @@ -16,5 +16,8 @@ struct nvme_zns_changed_zone_log { .SH Members .IP "nrzid" 12 +Number of Zone Identifiers .IP "rsvd2" 12 +Reserved .IP "zid" 12 +Zone Identifier diff --git a/doc/man/nvme_zns_desc.2 b/doc/man/nvme_zns_desc.2 index 06b1fb6c..33289a19 100644 --- a/doc/man/nvme_zns_desc.2 +++ b/doc/man/nvme_zns_desc.2 @@ -28,11 +28,20 @@ struct nvme_zns_desc { .SH Members .IP "zt" 12 +Zone Type .IP "zs" 12 +Zone State .IP "za" 12 +Zone Attributes .IP "zai" 12 +Zone Attributes Information .IP "rsvd4" 12 +Reserved .IP "zcap" 12 +Zone Capacity .IP "zslba" 12 +Zone Start Logical Block Address .IP "wp" 12 +Write Pointer .IP "rsvd32" 12 +Reserved diff --git a/doc/man/nvme_zns_lbafe.2 b/doc/man/nvme_zns_lbafe.2 index fac1820d..1953177c 100644 --- a/doc/man/nvme_zns_lbafe.2 +++ b/doc/man/nvme_zns_lbafe.2 @@ -16,5 +16,8 @@ struct nvme_zns_lbafe { .SH Members .IP "zsze" 12 +Zone Size .IP "zdes" 12 +Zone Descriptor Extension Size .IP "rsvd9" 12 +reserved diff --git a/doc/man/nvme_zns_za.2 b/doc/man/nvme_zns_za.2 index c2c32262..7ecfd341 100644 --- a/doc/man/nvme_zns_za.2 +++ b/doc/man/nvme_zns_za.2 @@ -25,7 +25,11 @@ enum nvme_zns_za { }; .SH Constants .IP "NVME_ZNS_ZA_ZFC" 12 +Zone Finished by Controller .IP "NVME_ZNS_ZA_FZR" 12 +Finish Zone Recommended .IP "NVME_ZNS_ZA_RZR" 12 +Reset Zone Recommended .IP "NVME_ZNS_ZA_ZRWAV" 12 .IP "NVME_ZNS_ZA_ZDEV" 12 +Zone Descriptor Extension Valid diff --git a/doc/man/nvme_zns_zs.2 b/doc/man/nvme_zns_zs.2 index 3f4f5510..8d326dc4 100644 --- a/doc/man/nvme_zns_zs.2 +++ b/doc/man/nvme_zns_zs.2 @@ -33,9 +33,16 @@ enum nvme_zns_zs { }; .SH Constants .IP "NVME_ZNS_ZS_EMPTY" 12 +Empty state .IP "NVME_ZNS_ZS_IMPL_OPEN" 12 +Implicitly open state .IP "NVME_ZNS_ZS_EXPL_OPEN" 12 +Explicitly open state .IP "NVME_ZNS_ZS_CLOSED" 12 +Closed state .IP "NVME_ZNS_ZS_READ_ONLY" 12 +Read only state .IP "NVME_ZNS_ZS_FULL" 12 +Full state .IP "NVME_ZNS_ZS_OFFLINE" 12 +Offline state diff --git a/doc/man/nvmf_dim_data.2 b/doc/man/nvmf_dim_data.2 new file mode 100644 index 00000000..c41640b1 --- /dev/null +++ b/doc/man/nvmf_dim_data.2 @@ -0,0 +1,63 @@ +.TH "libnvme" 9 "struct nvmf_dim_data" "February 2022" "API Manual" LINUX +.SH NAME +struct nvmf_dim_data \- Discovery Information Management (DIM) - Data +.SH SYNOPSIS +struct nvmf_dim_data { +.br +.BI " __le32 tdl;" +.br +.BI " __u8 rsvd4[4];" +.br +.BI " __le64 nument;" +.br +.BI " __le16 entfmt;" +.br +.BI " __le16 etype;" +.br +.BI " __u8 portlcl;" +.br +.BI " __u8 rsvd21;" +.br +.BI " __le16 ektype;" +.br +.BI " char eid[NVME_NQN_LENGTH];" +.br +.BI " char ename[NVMF_ENAME_LEN];" +.br +.BI " char ever[NVMF_EVER_LEN];" +.br +.BI " __u8 rsvd600[424];" +.br +.BI " union nvmf_die die[];" +.br +.BI " +}; +.br + +.SH Members +.IP "tdl" 12 +Total Data Length +.IP "rsvd4" 12 +Reserved +.IP "nument" 12 +Number of entries +.IP "entfmt" 12 +Entry Format (\fIenum nvmf_dim_entfmt\fP) +.IP "etype" 12 +Entity Type (\fIenum nvmf_dim_etype\fP) +.IP "portlcl" 12 +Port Local +.IP "rsvd21" 12 +Reserved +.IP "ektype" 12 +Entry Key Type +.IP "eid" 12 +Entity Identifier (e.g. Host NQN) +.IP "ename" 12 +Entity Name (e.g. hostname) +.IP "ever" 12 +Entity Version (e.g. OS Name/Version) +.IP "rsvd600" 12 +Reserved +.IP "die" 12 +Discovery Information Entry (see \fInument\fP above) diff --git a/doc/man/nvmf_dim_entfmt.2 b/doc/man/nvmf_dim_entfmt.2 new file mode 100644 index 00000000..b4bb7f66 --- /dev/null +++ b/doc/man/nvmf_dim_entfmt.2 @@ -0,0 +1,18 @@ +.TH "libnvme" 9 "enum nvmf_dim_entfmt" "February 2022" "API Manual" LINUX +.SH NAME +enum nvmf_dim_entfmt \- Discovery Information Management Entry Format +.SH SYNOPSIS +enum nvmf_dim_entfmt { +.br +.BI " NVMF_DIM_ENTFMT_BASIC" +, +.br +.br +.BI " NVMF_DIM_ENTFMT_EXTENDED" + +}; +.SH Constants +.IP "NVMF_DIM_ENTFMT_BASIC" 12 +Basic discovery information entry +.IP "NVMF_DIM_ENTFMT_EXTENDED" 12 +Extended discovery information entry diff --git a/doc/man/nvmf_dim_etype.2 b/doc/man/nvmf_dim_etype.2 new file mode 100644 index 00000000..eb43c70a --- /dev/null +++ b/doc/man/nvmf_dim_etype.2 @@ -0,0 +1,24 @@ +.TH "libnvme" 9 "enum nvmf_dim_etype" "February 2022" "API Manual" LINUX +.SH NAME +enum nvmf_dim_etype \- Discovery Information Management Entity Type +.SH SYNOPSIS +enum nvmf_dim_etype { +.br +.BI " NVMF_DIM_ETYPE_HOST" +, +.br +.br +.BI " NVMF_DIM_ETYPE_DDC" +, +.br +.br +.BI " NVMF_DIM_ETYPE_CDC" + +}; +.SH Constants +.IP "NVMF_DIM_ETYPE_HOST" 12 +Host +.IP "NVMF_DIM_ETYPE_DDC" 12 +Direct Discovery controller +.IP "NVMF_DIM_ETYPE_CDC" 12 +Centralized Discovery controller diff --git a/doc/man/nvmf_dim_tas.2 b/doc/man/nvmf_dim_tas.2 new file mode 100644 index 00000000..0c2108c9 --- /dev/null +++ b/doc/man/nvmf_dim_tas.2 @@ -0,0 +1,24 @@ +.TH "libnvme" 9 "enum nvmf_dim_tas" "February 2022" "API Manual" LINUX +.SH NAME +enum nvmf_dim_tas \- Discovery Information Management Task +.SH SYNOPSIS +enum nvmf_dim_tas { +.br +.BI " NVMF_DIM_TAS_REGISTER" +, +.br +.br +.BI " NVMF_DIM_TAS_DEREGISTER" +, +.br +.br +.BI " NVMF_DIM_TAS_UPDATE" + +}; +.SH Constants +.IP "NVMF_DIM_TAS_REGISTER" 12 +Register +.IP "NVMF_DIM_TAS_DEREGISTER" 12 +Deregister +.IP "NVMF_DIM_TAS_UPDATE" 12 +Update diff --git a/doc/man/nvmf_disc_log_entry.2 b/doc/man/nvmf_disc_log_entry.2 index 23612802..19342aa7 100644 --- a/doc/man/nvmf_disc_log_entry.2 +++ b/doc/man/nvmf_disc_log_entry.2 @@ -30,33 +30,7 @@ struct nvmf_disc_log_entry { .br .BI " char traddr[NVMF_TRADDR_SIZE];" .br -.BI " union tsas {" -.br -.BI " char common[NVMF_TSAS_SIZE];" -.br -.BI " struct rdma {" -.br -.BI " __u8 qptype;" -.br -.BI " __u8 prtype;" -.br -.BI " __u8 cms;" -.br -.BI " __u8 rsvd3[5];" -.br -.BI " __u16 pkey;" -.br -.BI " __u8 rsvd10[246];" -.br -.BI " } rdma;" -.br -.BI " struct tcp {" -.br -.BI " __u8 sectype;" -.br -.BI " } tcp;" -.br -.BI " } tsas;" +.BI " union nvmf_tsas tsas;" .br .BI " }; diff --git a/doc/man/nvmf_exat_len.2 b/doc/man/nvmf_exat_len.2 new file mode 100644 index 00000000..b3a9af0d --- /dev/null +++ b/doc/man/nvmf_exat_len.2 @@ -0,0 +1,15 @@ +.TH "nvmf_exat_len" 9 "nvmf_exat_len" "February 2022" "libnvme API manual" LINUX +.SH NAME +nvmf_exat_len \- Return length rounded up by 4 +.SH SYNOPSIS +.B "__u16" nvmf_exat_len +.BI "(size_t val_len " ");" +.SH ARGUMENTS +.IP "val_len" 12 +Value lenght +.SH "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 +\fIval_len\fP. +.SH "RETURN" +Lenght rounded up by 4 diff --git a/doc/man/nvmf_exattype.2 b/doc/man/nvmf_exattype.2 new file mode 100644 index 00000000..ea21bb1a --- /dev/null +++ b/doc/man/nvmf_exattype.2 @@ -0,0 +1,18 @@ +.TH "libnvme" 9 "enum nvmf_exattype" "February 2022" "API Manual" LINUX +.SH NAME +enum nvmf_exattype \- Extended Attribute Type +.SH SYNOPSIS +enum nvmf_exattype { +.br +.BI " NVMF_EXATTYPE_HOSTID" +, +.br +.br +.BI " NVMF_EXATTYPE_SYMNAME" + +}; +.SH Constants +.IP "NVMF_EXATTYPE_HOSTID" 12 +Host Identifier +.IP "NVMF_EXATTYPE_SYMNAME" 12 +Symblic Name diff --git a/doc/man/nvmf_ext_attr.2 b/doc/man/nvmf_ext_attr.2 new file mode 100644 index 00000000..188253e1 --- /dev/null +++ b/doc/man/nvmf_ext_attr.2 @@ -0,0 +1,24 @@ +.TH "libnvme" 9 "struct nvmf_ext_attr" "February 2022" "API Manual" LINUX +.SH NAME +struct nvmf_ext_attr \- Extended Attribute (EXAT) +.SH SYNOPSIS +struct nvmf_ext_attr { +.br +.BI " __le16 exattype;" +.br +.BI " __le16 exatlen;" +.br +.BI " __u8 exatval[];" +.br +.BI " +}; +.br + +.SH Members +.IP "exattype" 12 +Extended Attribute Type (EXATTYPE) - see \fIenum\fP nvmf_exattype +.IP "exatlen" 12 +Extended Attribute Length (EXATLEN) +.IP "exatval" 12 +Extended Attribute Value (EXATVAL) - size allocated for array +must be a multiple of 4 bytes diff --git a/doc/man/nvmf_ext_die.2 b/doc/man/nvmf_ext_die.2 new file mode 100644 index 00000000..c4d5ae6c --- /dev/null +++ b/doc/man/nvmf_ext_die.2 @@ -0,0 +1,79 @@ +.TH "libnvme" 9 "struct nvmf_ext_die" "February 2022" "API Manual" LINUX +.SH NAME +struct nvmf_ext_die \- Extended Discovery Information Entry (DIE) +.SH SYNOPSIS +struct nvmf_ext_die { +.br +.BI " __u8 trtype;" +.br +.BI " __u8 adrfam;" +.br +.BI " __u8 subtype;" +.br +.BI " __u8 treq;" +.br +.BI " __le16 portid;" +.br +.BI " __le16 cntlid;" +.br +.BI " __le16 asqsz;" +.br +.BI " __u8 rsvd10[22];" +.br +.BI " char trsvcid[NVMF_TRSVCID_SIZE];" +.br +.BI " __u8 resv64[192];" +.br +.BI " char nqn[NVME_NQN_LENGTH];" +.br +.BI " char traddr[NVMF_TRADDR_SIZE];" +.br +.BI " union nvmf_tsas tsas;" +.br +.BI " __le32 tel;" +.br +.BI " __le16 numexat;" +.br +.BI " __u8 resv1030[2];" +.br +.BI " struct nvmf_ext_attr exat[];" +.br +.BI " +}; +.br + +.SH Members +.IP "trtype" 12 +Transport Type (\fIenum nvmf_trtype\fP) +.IP "adrfam" 12 +Address Family (\fIenum nvmf_addr_family\fP) +.IP "subtype" 12 +Subsystem Type (\fIenum nvme_subsys_type\fP) +.IP "treq" 12 +Transport Requirements (\fIenum nvmf_treq\fP) +.IP "portid" 12 +Port ID +.IP "cntlid" 12 +Controller ID +.IP "asqsz" 12 +Admin Max SQ Size +.IP "rsvd10" 12 +Reserved +.IP "trsvcid" 12 +Transport Service Identifier +.IP "resv64" 12 +Reserved +.IP "nqn" 12 +NVM Qualified Name +.IP "traddr" 12 +Transport Address +.IP "tsas" 12 +Transport Specific Address Subtype (\fIunion nvmf_tsas\fP) +.IP "tel" 12 +Total Entry Length +.IP "numexat" 12 +Number of Extended Attributes +.IP "resv1030" 12 +Reserved +.IP "exat" 12 +Extented Attributes 0 (\fIstruct nvmf_ext_attr\fP) diff --git a/doc/man/nvmf_register_ctrl.2 b/doc/man/nvmf_register_ctrl.2 new file mode 100644 index 00000000..f7dec1be --- /dev/null +++ b/doc/man/nvmf_register_ctrl.2 @@ -0,0 +1,22 @@ +.TH "nvmf_register_ctrl" 9 "nvmf_register_ctrl" "February 2022" "libnvme API manual" LINUX +.SH NAME +nvmf_register_ctrl \- Perform registration task with a DC +.SH SYNOPSIS +.B "int" nvmf_register_ctrl +.BI "(nvme_ctrl_t c " "," +.BI "enum nvmf_dim_tas tas " "," +.BI "__u32 *result " ");" +.SH ARGUMENTS +.IP "c" 12 +Controller instance +.IP "tas" 12 +Task field of the Command Dword 10 (cdw10). Indicates whether to +perform a Registration, Deregistration, or Registration-update. +.IP "result" 12 +The command-specific result returned by the DC upon command +completion. +.SH "DESCRIPTION" +Perform registration task with a Discovery Controller (DC). Three +tasks are supported: register, deregister, and registration update. +.SH "RETURN" +0 on success; on failure -1 is returned and errno is set