#compdef _nvme nvme
# SPDX-License-Identifier: GPL-2.0-or-later
#
# zsh completions for the nvme command-line interface
#
# This file is generated by generate-completions.py. Do not edit.
#
# Note: with verbose completion listings (the default), zsh may report more
# "possibilities" than the number of lines it displays -- e.g. "452
# possibilities" for ~153 commands. This is expected, not duplication: when
# descriptions are shown, _describe lays the matches out in a multi-column grid
# and pads it with empty alignment matches, which count toward the total but
# render as nothing. The count scales with terminal width; the displayed
# entries are correct.

_nvme () {
	local -a _cmds
	_cmds=(
		'list:List all NVMe devices and namespaces on machine'
		'list-subsys:List nvme subsystems'
		'show-topology:Show the topology'
		'top:nvme top'
		'reset:Resets the controller'
		'subsystem-reset:Resets the subsystem'
		'ns-rescan:Rescans the NVME namespaces'
		'virt-mgmt:Manage Flexible Resources between Primary and Secondary Controller'
		'id-ctrl:Send NVMe Identify Controller (deprecated, use '\''nvme id ctrl'\'')'
		'id-ns:Send NVMe Identify Namespace, display structure (deprecated, use '\''nvme id ns'\'')'
		'id-ns-granularity:Send NVMe Identify Namespace Granularity List, display structure (deprecated, use '\''nvme id ns-granularity'\'')'
		'id-ns-lba-format:Send NVMe Identify Namespace for the specified LBA Format index, display structure (deprecated, use '\''nvme id ns-lba-format'\'')'
		'list-ns:Send NVMe Identify List, display structure (deprecated, use '\''nvme id ns-list'\'')'
		'list-ctrl:Send NVMe Identify Controller List, display structure (deprecated, use '\''nvme id ctrl-list'\'')'
		'nvm-id-ctrl:Send NVMe Identify Controller NVM Command Set, display structure (deprecated, use '\''nvme id nvm-ctrl'\'')'
		'nvm-id-ns:Send NVMe Identify Namespace NVM Command Set, display structure (deprecated, use '\''nvme id nvm-ns'\'')'
		'nvm-id-ns-lba-format:Send NVMe Identify Namespace NVM Command Set for the specified LBA Format index, display structure (deprecated, use '\''nvme id nvm-ns-lba-format'\'')'
		'primary-ctrl-caps:Send NVMe Identify Primary Controller Capabilities (deprecated, use '\''nvme id primary-ctrl-caps'\'')'
		'list-secondary:List Secondary Controllers associated with a Primary Controller (deprecated, use '\''nvme id secondary-ctrl-list'\'')'
		'cmdset-ind-id-ns:I/O Command Set Independent Identify Namespace (deprecated, use '\''nvme id ns-ind'\'')'
		'ns-descs:Send NVMe Namespace Descriptor List, display structure (deprecated, use '\''nvme id ns-descs'\'')'
		'id-nvmset:Send NVMe Identify NVM Set List, display structure (deprecated, use '\''nvme id nvmset'\'')'
		'id-uuid:Send NVMe Identify UUID List, display structure (deprecated, use '\''nvme id uuid'\'')'
		'id-iocs:Send NVMe Identify I/O Command Set, display structure (deprecated, use '\''nvme id iocs'\'')'
		'id-domain:Send NVMe Identify Domain List, display structure (deprecated, use '\''nvme id domain'\'')'
		'list-endgrp:Send NVMe Identify Endurance Group List, display structure (deprecated, use '\''nvme id endgrp-list'\'')'
		'create-ns:Creates a namespace with the provided parameters (deprecated, use '\''nvme ns create'\'')'
		'delete-ns:Deletes a namespace from the controller (deprecated, use '\''nvme ns delete'\'')'
		'attach-ns:Attaches a namespace to requested controller(s) (deprecated, use '\''nvme ns attach'\'')'
		'detach-ns:Detaches a namespace from requested controller(s) (deprecated, use '\''nvme ns detach'\'')'
		'get-ns-id:Retrieve the namespace ID of opened block device (deprecated, use '\''nvme ns get-id'\'')'
		'supported-log-pages:Retrieve the Supported Log pages details, show it (deprecated, use '\''nvme log supported-pages'\'')'
		'telemetry-log:Retrieve FW Telemetry log write to file (deprecated, use '\''nvme log telemetry'\'')'
		'fw-log:Retrieve FW Log, show it (deprecated, use '\''nvme log fw'\'')'
		'changed-ns-list-log:Retrieve Changed Attached Namespace List, show it (deprecated, use '\''nvme log changed-ns-list'\'')'
		'smart-log:Retrieve SMART Log, show it (deprecated, use '\''nvme log smart'\'')'
		'ana-log:Retrieve ANA Log, show it (deprecated, use '\''nvme log ana'\'')'
		'error-log:Retrieve Error Log, show it (deprecated, use '\''nvme log error'\'')'
		'effects-log:Retrieve Command Effects Log, show it (deprecated, use '\''nvme log effects'\'')'
		'endurance-log:Retrieve Endurance Group Log, show it (deprecated, use '\''nvme log endurance'\'')'
		'predictable-lat-log:Retrieve Predictable Latency per Nvmset Log, show it (deprecated, use '\''nvme log predictable-lat'\'')'
		'pred-lat-event-agg-log:Retrieve Predictable Latency Event Aggregate Log, show it (deprecated, use '\''nvme log pred-lat-event-agg'\'')'
		'persistent-event-log:Retrieve Persistent Event Log, show it (deprecated, use '\''nvme log persistent-event'\'')'
		'endurance-event-agg-log:Retrieve Endurance Group Event Aggregate Log, show it (deprecated, use '\''nvme log endurance-event-agg'\'')'
		'lba-status-log:Retrieve LBA Status Information Log, show it (deprecated, use '\''nvme log lba-status'\'')'
		'resv-notif-log:Retrieve Reservation Notification Log, show it (deprecated, use '\''nvme log resv-notif'\'')'
		'boot-part-log:Retrieve Boot Partition Log, show it (deprecated, use '\''nvme log boot-part'\'')'
		'phy-rx-eom-log:Retrieve Physical Interface Receiver Eye Opening Measurement, show it (deprecated, use '\''nvme log phy-rx-eom'\'')'
		'self-test-log:Retrieve the SELF-TEST Log, show it (deprecated, use '\''nvme log self-test'\'')'
		'fid-support-effects-log:Retrieve FID Support and Effects log and show it (deprecated, use '\''nvme log fid-support-effects'\'')'
		'mi-cmd-support-effects-log:Retrieve MI Command Support and Effects log and show it (deprecated, use '\''nvme log mi-cmd-support-effects'\'')'
		'media-unit-stat-log:Retrieve the configuration and wear of media units, show it (deprecated, use '\''nvme log media-unit-stat'\'')'
		'supported-cap-config-log:Retrieve the list of Supported Capacity Configuration Descriptors (deprecated, use '\''nvme log supported-cap-config'\'')'
		'mgmt-addr-list-log:Retrieve Management Address List Log, show it (deprecated, use '\''nvme log mgmt-addr-list'\'')'
		'rotational-media-info-log:Retrieve Rotational Media Information Log, show it (deprecated, use '\''nvme log rotational-media-info'\'')'
		'changed-alloc-ns-list-log:Retrieve Changed Allocated Namespace List, show it (deprecated, use '\''nvme log changed-alloc-ns-list'\'')'
		'dispersed-ns-participating-nss-log:Retrieve Dispersed Namespace Participating NVM Subsystems Log, show it (deprecated, use '\''nvme log dispersed-ns-participating-nss'\'')'
		'reachability-groups-log:Retrieve Reachability Groups Log, show it (deprecated, use '\''nvme log reachability-groups'\'')'
		'reachability-associations-log:Retrieve Reachability Associations Log, show it (deprecated, use '\''nvme log reachability-associations'\'')'
		'host-discovery-log:Retrieve Host Discovery Log, show it (deprecated, use '\''nvme log host-discovery'\'')'
		'ave-discovery-log:Retrieve AVE Discovery Log, show it (deprecated, use '\''nvme log ave-discovery'\'')'
		'pull-model-ddc-req-log:Retrieve Pull Model DDC Request Log, show it (deprecated, use '\''nvme log pull-model-ddc-req'\'')'
		'power-measurement-log:Retrieve Power Measurement Log, show it (deprecated, use '\''nvme log power-measurement'\'')'
		'fw-commit:Verify and commit firmware to a specific slot (fw-activate in old version < 1.2) (deprecated, use '\''nvme fw commit'\'')'
		'fw-activate:Verify and commit firmware to a specific slot (fw-activate in old version < 1.2) (deprecated, use '\''nvme fw commit'\'')'
		'fw-download:Download new firmware (deprecated, use '\''nvme fw download'\'')'
		'security-send:Submit a Security Send command, return results (deprecated, use '\''nvme security send'\'')'
		'security-recv:Submit a Security Receive command, return results (deprecated, use '\''nvme security recv'\'')'
		'resv-acquire:Submit a Reservation Acquire, return results (deprecated, use '\''nvme resv acquire'\'')'
		'resv-register:Submit a Reservation Register, return results (deprecated, use '\''nvme resv register'\'')'
		'resv-release:Submit a Reservation Release, return results (deprecated, use '\''nvme resv release'\'')'
		'resv-report:Submit a Reservation Report, return results (deprecated, use '\''nvme resv report'\'')'
		'sanitize-log:Retrieve sanitize log, show it (deprecated, use '\''nvme log sanitize'\'')'
		'gen-dhchap-key:Generate NVMeoF DH-HMAC-CHAP host secret (deprecated, use '\''nvme keys gen-kxchap-secret'\'')'
		'check-dhchap-key:Validate NVMeoF DH-HMAC-CHAP host secret (deprecated, use '\''nvme keys check-kxchap-secret'\'')'
		'gen-tls-key:Generate NVMeoF TLS PSK (deprecated, use '\''nvme keys gen-tls-psk'\'')'
		'check-tls-key:Validate NVMeoF TLS PSK (deprecated, use '\''nvme keys check-tls-psk'\'')'
		'tls-key:Manage NVMeoF TLS PSKs (deprecated, use '\''nvme keys import/export/revoke'\'')'
		'dir-receive:Submit a Directive Receive command, return results (deprecated, use '\''nvme dir receive'\'')'
		'dir-send:Submit a Directive Send command, return results (deprecated, use '\''nvme dir send'\'')'
		'io-mgmt-recv:I/O Management Receive (deprecated, use '\''nvme io-mgmt recv'\'')'
		'io-mgmt-send:I/O Management Send (deprecated, use '\''nvme io-mgmt send'\'')'
		'nvme-mi-recv:Submit a NVMe-MI Receive command, return results (deprecated, use '\''nvme nvme-mi recv'\'')'
		'nvme-mi-send:Submit a NVMe-MI Send command, return results (deprecated, use '\''nvme nvme-mi send'\'')'
		'get-log:Generic NVMe get log, returns log in raw format'
		'discover:Discover NVMeoF subsystems'
		'connect-all:Discover and Connect to NVMeoF subsystems'
		'connect:Connect to NVMeoF subsystem'
		'disconnect:Disconnect from NVMeoF subsystem'
		'disconnect-all:Disconnect from all connected NVMeoF subsystems'
		'dim:Send Discovery Information Management command to a Discovery Controller'
		'gen-hostnqn:Generate NVMeoF host NQN'
		'show-hostnqn:Show NVMeoF host NQN'
		'get-feature:Get feature and show the resulting value'
		'set-feature:Set a feature and show the resulting value'
		'dsm:Submit a Data Set Management command, return results'
		'copy:Submit a Simple Copy command, return results'
		'flush:Submit a Flush command, return results'
		'compare:Submit a Compare command, return results'
		'read:Submit a read command, return results'
		'write:Submit a write command, return results'
		'write-zeroes:Submit a write zeroes command, return results'
		'write-uncor:Submit a write uncorrectable command, return results'
		'verify:Submit a verify command, return results'
		'get-lba-status:Submit a Get LBA Status command, return results'
		'capacity-mgmt:Submit Capacity Management Command, return results'
		'admin-passthru:Submit an arbitrary admin command, return results'
		'io-passthru:Submit an arbitrary IO command, return results'
		'show-regs:Shows the controller registers or properties. Requires character device'
		'set-reg:Set a register and show the resulting value'
		'get-reg:Get a register and show the resulting value'
		'set-property:Set a property and show the resulting value'
		'get-property:Get a property and show the resulting value'
		'device-self-test:Perform the necessary tests to observe the performance'
		'sanitize:Submit a sanitize command'
		'sanitize-ns:Submit a sanitize namespace command'
		'format:Format namespace with new block format'
		'lockdown:Submit a Lockdown command,return result'
		'amzn:Amazon vendor specific extensions'
		'config:NVMeoF connection configuration'
		'dapustor:DapuStor vendor specific extensions'
		'dell:DELL vendor specific extensions'
		'dera:Dera vendor specific extensions'
		'dir:Submit NVMe Directive commands'
		'exclusion:NVMeoF system-wide exclusion list'
		'fdp:Manage Flexible Data Placement enabled devices'
		'feat:NVMe feature extensions'
		'fw:Manage NVMe controller firmware'
		'huawei:Huawei vendor specific extensions'
		'ibm:IBM vendor specific extensions'
		'id:Send NVMe Identify commands, show the results'
		'innogrit:innogrit vendor specific extensions'
		'inspur:Inspur vendor specific extensions'
		'intel:Intel vendor specific extensions'
		'io-mgmt:Submit NVMe I/O Management commands'
		'keys:Manage NVMeoF KX-HMAC-CHAP secrets and TLS PSKs'
		'lm:Live Migration NVMe extensions'
		'log:Retrieve and show NVMe log pages'
		'mangoboost:MangoBoost vendor specific extensions'
		'memblaze:Memblaze vendor specific extensions'
		'micron:Micron vendor specific extensions'
		'nbft:ACPI NBFT table extensions'
		'netapp:NetApp vendor specific extensions'
		'ns:Manage NVMe namespaces'
		'nvidia:NVIDIA vendor specific extensions'
		'nvme-mi:Submit NVMe-MI commands'
		'ocp:OCP cloud SSD extensions'
		'registry:NVMeoF controller ownership registry'
		'resv:Submit NVMe Reservation commands'
		'rpmb:Replay Protected Memory Block commands'
		'sndk:Sandisk vendor specific extensions'
		'sfx:ScaleFlux vendor specific extensions'
		'seagate:Seagate vendor specific extensions'
		'security:Submit NVMe Security Send/Receive commands'
		'sed:SED Opal Command Set'
		'shannon:Shannon vendor specific extensions'
		'solidigm:Solidigm vendor specific extensions'
		'ssstc:SSSTC vendor specific extensions'
		'toshiba:Toshiba NVME plugin'
		'transcend:Transcend vendor specific extensions'
		'utils:General purpose utilities'
		'virtium:Virtium vendor specific extensions'
		'wdc:Western Digital vendor specific extensions'
		'ymtc:YMTC vendor specific extensions'
		'zns:Zoned Namespace Command Set'
		'help'
		'version'
	)

	# Describe options, giving those ending in '=' no trailing space.
	#
	# The tags are 'nvme-noeq-options'/'nvme-eq-options', deliberately NOT the
	# standard 'options' tag: when a device candidate is also offered (compadd
	# below), the completion system's handling of the reserved 'options' tag
	# suppressed the whole group at an empty prefix, so '--help' etc. only appeared
	# once a '-' was typed. A non-reserved tag sidesteps that.
	_nvme_describe() {
		local desc="$1"
		local -a opts=("${(@P)2}")
		local -a eq_opts noeq_opts
		local opt

		for opt in "${opts[@]}"; do
			if [[ "${opt%%:*}" == *= ]]; then
				eq_opts+=("$opt")
			else
				noeq_opts+=("$opt")
			fi
		done

		(( ${#noeq_opts} )) && _describe -t nvme-noeq-options "$desc" noeq_opts
		(( ${#eq_opts} )) && _describe -t nvme-eq-options "$desc" eq_opts -S ''
	}

	# Complete an option's value from a known set, in both the attached
	# ('--opt=val', '-o=val') and separate-word ('--opt val', '-o val') forms.
	# Called once per command with alternating NAMES VALUES arguments: NAMES is a
	# space-separated spelling list ('--output-format -o'), VALUES its
	# space-separated value list. Completes the first option whose spelling matches
	# the word being entered.
	_nvme_opt_vals() {
		local -a names
		local name
		while (( $# >= 2 )); do
			names=(${=1})
			for name in "${names[@]}"; do
				if [[ ${words[CURRENT]} == ${name}=* ]] || \
				   [[ ${words[CURRENT-1]} == "${name}" ]]; then
					_values '' ${=2}
					return 0
				fi
			done
			shift 2
		done
		return 1
	}

	# Complete an option's value as a filename, in both the attached
	# ('--opt=path', '-o=path') and separate-word ('--opt path', '-o path') forms.
	# Each argument is a space-separated spelling list ('--fw -f'); if the word
	# being entered is that option's value, offer files. Mirrors the value form of
	# _nvme_opt_vals.
	_nvme_opt_files() {
		local -a names
		local name spec
		for spec in "$@"; do
			names=(${=spec})
			for name in "${names[@]}"; do
				if [[ ${words[CURRENT]} == ${name}=* ]]; then
					compset -P '*='
					_files
					return 0
				elif [[ ${words[CURRENT-1]} == "${name}" ]]; then
					_files
					return 0
				fi
			done
		done
		return 1
	}

	# True if a device argument is already present, so we do not offer another.
	# Only words before the one being completed count (the current word may be a
	# partial '/dev/nvme' the user is still typing).
	_nvme_has_device() {
		local -i i
		for (( i = 1; i < CURRENT; i++ )); do
			[[ ${words[i]} == /dev/nvme* ]] && return 0
		done
		return 1
	}

	_arguments '*:: :->subcmds' && return 0

	if (( CURRENT == 1 )); then
		_describe -t commands "nvme subcommands" _cmds
		return
	fi

	case ${words[1]} in
		(amzn)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'id-ctrl:Send NVMe Identify Controller'
					'stats:Get EBS volume stats'
				)
				_describe -t commands "nvme amzn commands" _sub
				return
			fi

			case ${words[2]} in
				(id-ctrl)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _amzn_id_ctrl
					_amzn_id_ctrl=(
						--vendor-specific':dump binary vendor field'
						-V':alias for --vendor-specific'
						--raw-binary':show identify in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme amzn id-ctrl options" _amzn_id_ctrl
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(stats)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _amzn_stats
					_amzn_stats=(
						--details':Detail IO histogram of each block size ranges'
						-d':alias for --details'
						--interval=':Polling interval in seconds'
						-i':alias for --interval'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme amzn stats options" _amzn_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(config)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'validate:Validate an NVMeoF connection configuration'
					'show:Show the resolved NVMeoF connection configuration'
					'status:Report config status'
					'convert:Convert config.json/discovery.conf to INI'
					'create:Create an NVMeoF connection entry in the INI configuration'
				)
				_describe -t commands "nvme config commands" _sub
				return
			fi

			case ${words[2]} in
				(validate)
					_nvme_opt_files "--config -J" && return
					local _config_validate
					_config_validate=(
						--config=':INI configuration file (default: /usr/local/etc/nvme/nvme-fabrics.conf)'
						-J':alias for --config'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme config validate options" _config_validate
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(show)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--config -J" && return
					local _config_show
					_config_show=(
						--config=':INI configuration file (default: /usr/local/etc/nvme/nvme-fabrics.conf)'
						-J':alias for --config'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme config show options" _config_show
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(status)
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(convert)
					_nvme_opt_files "--config -J" \
					                "--output -o" && return
					local _config_convert
					_config_convert=(
						--config=':convert this JSON file (default: config.json)'
						-J':alias for --config'
						--output=':write result here (default: nvme-fabrics.conf)'
						-o':alias for --output'
						--force':overwrite an existing target'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme config convert options" _config_convert
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(create)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--output" && return
					local _config_create
					_config_create=(
						--transport=':transport type'
						-t':alias for --transport'
						--nqn=':subsystem nqn'
						-n':alias for --nqn'
						--traddr=':transport address'
						-a':alias for --traddr'
						--trsvcid=':transport service id (e.g. IP port)'
						-s':alias for --trsvcid'
						--host-traddr=':host traddr (e.g. FC WWN'\''s)'
						-w':alias for --host-traddr'
						--host-iface=':host interface (for tcp transport)'
						-f':alias for --host-iface'
						--hostnqn=':user-defined hostnqn'
						-q':alias for --hostnqn'
						--hostid=':user-defined hostid (if default not used)'
						-I':alias for --hostid'
						--kxchap-secret=':user-defined kxchap secret (if default not used)'
						-S':alias for --kxchap-secret'
						--kxchap-ctrl-secret=':user-defined kxchap controller secret (for bi-directional authentication)'
						-C':alias for --kxchap-ctrl-secret'
						--keyring=':Keyring for TLS key lookup (key id or keyring name)'
						--tls-key=':TLS key to use (key id or key in interchange format)'
						--tls-key-identity=':TLS key identity'
						--nr-io-queues=':number of io queues to use (default is core count)'
						-i':alias for --nr-io-queues'
						--nr-write-queues=':number of write queues to use (default 0)'
						-W':alias for --nr-write-queues'
						--nr-poll-queues=':number of poll queues to use (default 0)'
						-P':alias for --nr-poll-queues'
						--queue-size=':number of io queue elements to use (default 128)'
						-Q':alias for --queue-size'
						--keep-alive-tmo=':keep alive timeout period in seconds'
						-k':alias for --keep-alive-tmo'
						--reconnect-delay=':reconnect timeout period in seconds'
						-c':alias for --reconnect-delay'
						--ctrl-loss-tmo=':controller loss timeout period in seconds'
						-l':alias for --ctrl-loss-tmo'
						--fast-io-fail-tmo=':fast I/O fail timeout (default off)'
						-F':alias for --fast-io-fail-tmo'
						--tos=':type of service'
						-T':alias for --tos'
						--tls_key=':TLS key to use (key id)'
						--duplicate-connect':allow duplicate connections between same transport host and subsystem port'
						-D':alias for --duplicate-connect'
						--disable-sqflow':disable controller sq flow control (default false)'
						--hdr-digest':enable transport protocol header digest (TCP transport)'
						-g':alias for --hdr-digest'
						--data-digest':enable transport protocol data digest (TCP transport)'
						-G':alias for --data-digest'
						--tls':enable TLS'
						--concat':enable secure concatenation'
						--discovery':create a discovery controller entry instead of an I/O controller (subsystem) entry; an I/O controller entry requires --nqn'
						--persistent=':keep the discovery controller connected to receive Asynchronous Event Notifications instead of disconnecting after the discovery log page fetch; "auto" (the default when given bare) persists only where the target'\''s own EPCSD flag supports it, "force" persists regardless, "no" explicitly records non-persistence; requires --discovery'
						--host-symname=':name this host persona, so it gets its own configuration drop-in'
						--output=':add the entry to this INI configuration file (default: /usr/local/etc/nvme/nvme-fabrics.conf)'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme config create options" _config_create
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(dapustor)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'smart-log-add:Retrieve DapuStor SMART Log, show it'
				)
				_describe -t commands "nvme dapustor commands" _sub
				return
			fi

			case ${words[2]} in
				(smart-log-add)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _dapustor_smart_log_add
					_dapustor_smart_log_add=(
						--namespace-id=':(optional) desired namespace'
						-n':alias for --namespace-id'
						--raw-binary':Dump output in binary format'
						-b':alias for --raw-binary'
						--json':Dump output in json format'
						-j':alias for --json'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme dapustor smart-log-add options" _dapustor_smart_log_add
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(dell)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'id-ctrl:Send NVMe Identify Controller'
				)
				_describe -t commands "nvme dell commands" _sub
				return
			fi

			case ${words[2]} in
				(id-ctrl)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _dell_id_ctrl
					_dell_id_ctrl=(
						--vendor-specific':dump binary vendor field'
						-V':alias for --vendor-specific'
						--raw-binary':show identify in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme dell id-ctrl options" _dell_id_ctrl
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(dera)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'smart-log-add:Retrieve Dera SMART Log, show it'
					'stat:Retrieve Dera SMART Log, show it'
				)
				_describe -t commands "nvme dera commands" _sub
				return
			fi

			case ${words[2]} in
				(smart-log-add|stat)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _dera_smart_log_add
					_dera_smart_log_add=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme dera smart-log-add options" _dera_smart_log_add
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(dir)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'receive:Submit a Directive Receive command, return results'
					'send:Submit a Directive Send command, return results'
				)
				_describe -t commands "nvme dir commands" _sub
				return
			fi

			case ${words[2]} in
				(receive)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _dir_receive
					_dir_receive=(
						--namespace-id=':identifier of desired namespace'
						-n':alias for --namespace-id'
						--data-len=':buffer len (if) data is sent or received'
						-l':alias for --data-len'
						--raw-binary':show directive in binary format'
						-b':alias for --raw-binary'
						--dir-type=':directive type'
						-D':alias for --dir-type'
						--dir-spec=':directive specification associated with directive type'
						-S':alias for --dir-spec'
						--dir-oper=':directive operation'
						-O':alias for --dir-oper'
						--req-resource=':namespace stream requested'
						-r':alias for --req-resource'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme dir receive options" _dir_receive
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(send)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--input-file -i" && return
					local _dir_send
					_dir_send=(
						--namespace-id=':identifier of desired namespace'
						-n':alias for --namespace-id'
						--data-len=':buffer len (if) data is sent or received'
						-l':alias for --data-len'
						--dir-type=':directive type'
						-D':alias for --dir-type'
						--target-dir=':target directive type to be enabled/disabled'
						-T':alias for --target-dir'
						--dir-spec=':directive specification associated with directive type'
						-S':alias for --dir-spec'
						--dir-oper=':directive operation'
						-O':alias for --dir-oper'
						--endir=':directive enable'
						-e':alias for --endir'
						--raw-binary':show directive in binary format'
						-b':alias for --raw-binary'
						--input-file=':write/send file (default stdin)'
						-i':alias for --input-file'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme dir send options" _dir_send
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(exclusion)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'create:Create an exclusion list'
					'delete:Delete an exclusion list'
					'edit:Edit an exclusion list interactively'
					'list:List exclusion lists or entries'
					'add:Add an entry to an exclusion list'
					'remove:Remove an entry from an exclusion list'
				)
				_describe -t commands "nvme exclusion commands" _sub
				return
			fi

			case ${words[2]} in
				(create)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _exclusion_create
					_exclusion_create=(
						--name=':exclusion list name (omit for the default list)'
						-N':alias for --name'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme exclusion create options" _exclusion_create
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(delete)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _exclusion_delete
					_exclusion_delete=(
						--name=':exclusion list name (omit for the default list)'
						-N':alias for --name'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme exclusion delete options" _exclusion_delete
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(edit)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _exclusion_edit
					_exclusion_edit=(
						--name=':exclusion list name (omit for the default list)'
						-N':alias for --name'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme exclusion edit options" _exclusion_edit
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(list)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _exclusion_list
					_exclusion_list=(
						--name=':exclusion list name (omit to list all lists)'
						-N':alias for --name'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme exclusion list options" _exclusion_list
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(add)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _exclusion_add
					_exclusion_add=(
						--name=':exclusion list name (omit for the default list)'
						-N':alias for --name'
						--entry=':semicolon-separated key=value entry (e.g. "transport=tcp;traddr=192.168.1.1")'
						-e':alias for --entry'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme exclusion add options" _exclusion_add
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(remove)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _exclusion_remove
					_exclusion_remove=(
						--name=':exclusion list name (omit for the default list)'
						-N':alias for --name'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme exclusion remove options" _exclusion_remove
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(fdp)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'configs:List configurations'
					'usage:Show reclaim unit handle usage'
					'stats:Show statistics'
					'events:List events affecting reclaim units and media usage'
					'status:Show reclaim unit handle status'
					'update:Update a reclaim unit handle'
					'set-events:Enable or disable events'
					'feature:Show, enable or disable FDP configuration'
				)
				_describe -t commands "nvme fdp commands" _sub
				return
			fi

			case ${words[2]} in
				(configs)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _fdp_configs
					_fdp_configs=(
						--endgrp-id=':Endurance group identifier'
						-e':alias for --endgrp-id'
						--raw-binary':use binary output'
						-b':alias for --raw-binary'
						--human-readable':show log in readable format'
						-H':alias for --human-readable'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme fdp configs options" _fdp_configs
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(usage)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _fdp_usage
					_fdp_usage=(
						--endgrp-id=':Endurance group identifier'
						-e':alias for --endgrp-id'
						--raw-binary':use binary output'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme fdp usage options" _fdp_usage
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(stats)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _fdp_stats
					_fdp_stats=(
						--endgrp-id=':Endurance group identifier'
						-e':alias for --endgrp-id'
						--raw-binary':use binary output'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme fdp stats options" _fdp_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(events)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _fdp_events
					_fdp_events=(
						--endgrp-id=':Endurance group identifier'
						-e':alias for --endgrp-id'
						--host-events':Get host events'
						-E':alias for --host-events'
						--raw-binary':use binary output'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme fdp events options" _fdp_events
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(status)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _fdp_status
					_fdp_status=(
						--namespace-id=':Namespace identifier'
						-n':alias for --namespace-id'
						--raw-binary':use binary output'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme fdp status options" _fdp_status
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(update)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _fdp_update
					_fdp_update=(
						--namespace-id=':Namespace identifier'
						-n':alias for --namespace-id'
						--pids=':Comma-separated list of placement identifiers to update'
						-p':alias for --pids'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme fdp update options" _fdp_update
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(set-events)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _fdp_set_events
					_fdp_set_events=(
						--namespace-id=':Namespace identifier'
						-n':alias for --namespace-id'
						--placement-handle=':Placement Handle'
						-p':alias for --placement-handle'
						--enable':Enable/disable event'
						-e':alias for --enable'
						--save':specifies that the controller shall save the attribute'
						-s':alias for --save'
						--event-types=':Comma-separated list of event types'
						-t':alias for --event-types'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme fdp set-events options" _fdp_set_events
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(feature)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _fdp_feature
					_fdp_feature=(
						--endgrp-id=':Endurance group ID'
						-e':alias for --endgrp-id'
						--enable-conf-idx=':FDP configuration index to enable'
						-c':alias for --enable-conf-idx'
						--disable':Disable current FDP configuration'
						-d':alias for --disable'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme fdp feature options" _fdp_feature
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(feat)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'arbitration:Get and set arbitration feature'
					'power-mgmt:Get and set power management feature'
					'temp-thresh:Get and set temperature threshold feature'
					'volatile-wc:Get and set volatile write cache feature'
					'num-queues:Get and set number of queues feature'
					'timestamp:Get and set timestamp feature'
					'hctm:Get and set host controlled thermal management feature'
					'host-behavior-support:Get and set host behavior support feature'
					'perf-characteristics:Get and set perf characteristics feature'
					'power-limit:Get and set power limit feature'
					'power-thresh:Get and set power threshold feature'
					'power-meas:Get and set power measurement feature'
					'err-recovery:Get and set error recovery feature'
				)
				_describe -t commands "nvme feat commands" _sub
				return
			fi

			case ${words[2]} in
				(arbitration)
					_nvme_opt_vals "--sel -S" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _feat_arbitration
					_feat_arbitration=(
						--ab=':arbitration burst'
						-a':alias for --ab'
						--lpw=':low priority weight'
						-l':alias for --lpw'
						--mpw=':medium priority weight'
						-m':alias for --mpw'
						--hpw=':high priority weight'
						-H':alias for --hpw'
						--save':Specifies that the controller shall save the attribute'
						-s':alias for --save'
						--sel=':[0-3]: current/default/saved/supported'
						-S':alias for --sel'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme feat arbitration options" _feat_arbitration
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(power-mgmt)
					_nvme_opt_vals "--sel -S" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _feat_power_mgmt
					_feat_power_mgmt=(
						--ps=':power state'
						-p':alias for --ps'
						--wh=':workload hint'
						-w':alias for --wh'
						--save':Specifies that the controller shall save the attribute'
						-s':alias for --save'
						--sel=':[0-3]: current/default/saved/supported'
						-S':alias for --sel'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme feat power-mgmt options" _feat_power_mgmt
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(temp-thresh)
					_nvme_opt_vals "--sel -S" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _feat_temp_thresh
					_feat_temp_thresh=(
						--tmpth=':temperature threshold'
						-T':alias for --tmpth'
						--tmpsel=':threshold temperature select'
						-m':alias for --tmpsel'
						--thsel=':threshold type select'
						-H':alias for --thsel'
						--tmpthh=':temperature threshold hysteresis'
						-M':alias for --tmpthh'
						--save':Specifies that the controller shall save the attribute'
						-s':alias for --save'
						--sel=':[0-3]: current/default/saved/supported'
						-S':alias for --sel'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme feat temp-thresh options" _feat_temp_thresh
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(volatile-wc)
					_nvme_opt_vals "--sel -S" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _feat_volatile_wc
					_feat_volatile_wc=(
						--wce':volatile write cache enable'
						-w':alias for --wce'
						--save':Specifies that the controller shall save the attribute'
						-s':alias for --save'
						--sel=':[0-3]: current/default/saved/supported'
						-S':alias for --sel'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme feat volatile-wc options" _feat_volatile_wc
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(num-queues)
					_nvme_opt_vals "--sel -S" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _feat_num_queues
					_feat_num_queues=(
						--nsqr=':number of I/O submission queues requested'
						-n':alias for --nsqr'
						--ncqr=':number of I/O completion queues requested'
						-c':alias for --ncqr'
						--save':Specifies that the controller shall save the attribute'
						-s':alias for --save'
						--sel=':[0-3]: current/default/saved/supported'
						-S':alias for --sel'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme feat num-queues options" _feat_num_queues
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(timestamp)
					_nvme_opt_vals "--sel -S" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _feat_timestamp
					_feat_timestamp=(
						--tstmp=':timestamp'
						-t':alias for --tstmp'
						--save':Specifies that the controller shall save the attribute'
						-s':alias for --save'
						--sel=':[0-3]: current/default/saved/supported'
						-S':alias for --sel'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme feat timestamp options" _feat_timestamp
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(hctm)
					_nvme_opt_vals "--sel -S" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _feat_hctm
					_feat_hctm=(
						--tmt1=':thermal management temperature 1'
						-t':alias for --tmt1'
						--tmt2=':thermal management temperature 2'
						-T':alias for --tmt2'
						--save':Specifies that the controller shall save the attribute'
						-s':alias for --save'
						--sel=':[0-3]: current/default/saved/supported'
						-S':alias for --sel'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme feat hctm options" _feat_hctm
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(host-behavior-support)
					_nvme_opt_vals "--sel -S" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _feat_host_behavior_support
					_feat_host_behavior_support=(
						--acre=':Advanced Command Retry Enable (0 or 1)'
						-a':alias for --acre'
						--etdas=':Extended Telemetry Data Area 4 Supported (0 or 1)'
						-e':alias for --etdas'
						--lbafee=':LBA Format Extension Enable (0 or 1)'
						-l':alias for --lbafee'
						--hdisns=':Host Dispersed Namespace Support (0 or 1)'
						-H':alias for --hdisns'
						--cdfe=':Copy Descriptor Formats Enable bitmask'
						-c':alias for --cdfe'
						--save':Specifies that the controller shall save the attribute'
						-s':alias for --save'
						--sel=':[0-3]: current/default/saved/supported'
						-S':alias for --sel'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme feat host-behavior-support options" _feat_host_behavior_support
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(perf-characteristics)
					_nvme_opt_vals "--sel -S" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--vs-data -V" && return
					local _feat_perf_characteristics
					_feat_perf_characteristics=(
						--namespace-id=':optional namespace attached to controller'
						-n':alias for --namespace-id'
						--attri=':attribute index'
						-a':alias for --attri'
						--rvspa':revert vendor specific performance attribute'
						-r':alias for --rvspa'
						--r4karl=':random 4 kib average read latency'
						-R':alias for --r4karl'
						--paid=':performance attribute identifier'
						-p':alias for --paid'
						--attrl=':attribute length'
						-A':alias for --attrl'
						--vs-data=':vendor specific data'
						-V':alias for --vs-data'
						--save':Specifies that the controller shall save the attribute'
						-s':alias for --save'
						--sel=':[0-3]: current/default/saved/supported'
						-S':alias for --sel'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme feat perf-characteristics options" _feat_perf_characteristics
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(power-limit)
					_nvme_opt_vals "--sel -S" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _feat_power_limit
					_feat_power_limit=(
						--plv=':power limit value'
						-p':alias for --plv'
						--pls=':power limit scale'
						-l':alias for --pls'
						--uuid-index=':UUID index'
						-u':alias for --uuid-index'
						--save':Specifies that the controller shall save the attribute'
						-s':alias for --save'
						--sel=':[0-3]: current/default/saved/supported'
						-S':alias for --sel'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme feat power-limit options" _feat_power_limit
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(power-thresh)
					_nvme_opt_vals "--sel -S" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _feat_power_thresh
					_feat_power_thresh=(
						--ptv=':power threshold value'
						-p':alias for --ptv'
						--pts=':power threshold scale'
						-t':alias for --pts'
						--pmts=':power measurement type select'
						-m':alias for --pmts'
						--ept=':enable power threshold'
						-e':alias for --ept'
						--uuid-index=':UUID index'
						-u':alias for --uuid-index'
						--save':Specifies that the controller shall save the attribute'
						-s':alias for --save'
						--sel=':[0-3]: current/default/saved/supported'
						-S':alias for --sel'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme feat power-thresh options" _feat_power_thresh
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(power-meas)
					_nvme_opt_vals "--sel -S" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _feat_power_meas
					_feat_power_meas=(
						--act=':action [0-1]: stop|start'
						--pmts=':power measurement type select'
						--smt=':stop measurement time'
						--uuid-index=':UUID index'
						-u':alias for --uuid-index'
						--save':Specifies that the controller shall save the attribute'
						-s':alias for --save'
						--sel=':[0-3]: current/default/saved/supported'
						-S':alias for --sel'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme feat power-meas options" _feat_power_meas
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(err-recovery)
					_nvme_opt_vals "--sel -S" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _feat_err_recovery
					_feat_err_recovery=(
						--nsid=':identifier of desired namespace'
						-n':alias for --nsid'
						--tler=':time limited error recovery'
						-t':alias for --tler'
						--dulbe':deallocated or unwritten logical block error enable'
						-d':alias for --dulbe'
						--save':Specifies that the controller shall save the attribute'
						-s':alias for --save'
						--sel=':[0-3]: current/default/saved/supported'
						-S':alias for --sel'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme feat err-recovery options" _feat_err_recovery
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(fw)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'download:Download new firmware'
					'commit:Verify and commit firmware to a specific slot (fw-activate in old version < 1.2)'
					'activate:Verify and commit firmware to a specific slot (fw-activate in old version < 1.2)'
				)
				_describe -t commands "nvme fw commands" _sub
				return
			fi

			case ${words[2]} in
				(download)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--fw -f" && return
					local _fw_download
					_fw_download=(
						--fw=':firmware file (required)'
						-f':alias for --fw'
						--ish':Ignore Shutdown (for NVMe-MI command)'
						-I':alias for --ish'
						--xfer=':transfer chunksize limit'
						-x':alias for --xfer'
						--offset=':starting dword offset, default 0'
						-O':alias for --offset'
						--progress':display firmware transfer progress'
						-p':alias for --progress'
						--ignore-ovr':ignore overwrite errors'
						-i':alias for --ignore-ovr'
						--stream':read firmware in transfer-sized chunks'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme fw download options" _fw_download
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(commit|activate)
					_nvme_opt_vals "--action -a" "replace replace-and-activate set-active replace-and-activate-immediate replace-boot-partition activate-boot-partition" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _fw_commit
					_fw_commit=(
						--ish':Ignore Shutdown (for NVMe-MI command)'
						-I':alias for --ish'
						--slot=':[0-7]: firmware slot for commit action'
						-s':alias for --slot'
						--action=':[0-7]: commit action: 0 = replace, 1 = replace and activate, 2 = set active, 3 = replace and activate immediate, 6 = replace boot partition, 7 = activate boot partition'
						-a':alias for --action'
						--bpid=':[0,1]: boot partition identifier, if applicable (default: 0)'
						-b':alias for --bpid'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme fw commit options" _fw_commit
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(huawei)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'list:List all Huawei NVMe devices and namespaces on machine'
					'id-ctrl:Huawei identify controller'
				)
				_describe -t commands "nvme huawei commands" _sub
				return
			fi

			case ${words[2]} in
				(list)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _huawei_list
					_huawei_list=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme huawei list options" _huawei_list
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(id-ctrl)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _huawei_id_ctrl
					_huawei_id_ctrl=(
						--vendor-specific':dump binary vendor field'
						-V':alias for --vendor-specific'
						--raw-binary':show identify in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme huawei id-ctrl options" _huawei_id_ctrl
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(ibm)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'crit-log:Display IBM Smart Log Information'
					'vpd:Display IBM VPD Information'
					'persist-event-log:IBM specific Persistent Event Log'
				)
				_describe -t commands "nvme ibm commands" _sub
				return
			fi

			case ${words[2]} in
				(crit-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ibm_crit_log
					_ibm_crit_log=(
						--raw-binary':Dump output in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ibm crit-log options" _ibm_crit_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vpd)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ibm_vpd
					_ibm_vpd=(
						--raw-binary':dump output in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ibm vpd options" _ibm_vpd
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(persist-event-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ibm_persist_event_log
					_ibm_persist_event_log=(
						--action=':action the controller shall take during processing this persistent log page command.'
						-a':alias for --action'
						--log_len=':number of bytes to retrieve'
						-l':alias for --log_len'
						--raw-binary':use binary output'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ibm persist-event-log options" _ibm_persist_event_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(id)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'ctrl:Send NVMe Identify Controller'
					'ns:Send NVMe Identify Namespace, display structure'
					'ns-granularity:Send NVMe Identify Namespace Granularity List, display structure'
					'ns-lba-format:Send NVMe Identify Namespace for the specified LBA Format index, display structure'
					'ns-list:Send NVMe Identify List, display structure'
					'ctrl-list:Send NVMe Identify Controller List, display structure'
					'nvm-ctrl:Send NVMe Identify Controller NVM Command Set, display structure'
					'nvm-ns:Send NVMe Identify Namespace NVM Command Set, display structure'
					'nvm-ns-lba-format:Send NVMe Identify Namespace NVM Command Set for the specified LBA Format index, display structure'
					'primary-ctrl-caps:Send NVMe Identify Primary Controller Capabilities'
					'secondary-ctrl-list:List Secondary Controllers associated with a Primary Controller'
					'ns-ind:I/O Command Set Independent Identify Namespace'
					'ns-descs:Send NVMe Namespace Descriptor List, display structure'
					'nvmset:Send NVMe Identify NVM Set List, display structure'
					'uuid:Send NVMe Identify UUID List, display structure'
					'iocs:Send NVMe Identify I/O Command Set, display structure'
					'domain:Send NVMe Identify Domain List, display structure'
					'endgrp-list:Send NVMe Identify Endurance Group List, display structure'
				)
				_describe -t commands "nvme id commands" _sub
				return
			fi

			case ${words[2]} in
				(ctrl)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _id_ctrl
					_id_ctrl=(
						--vendor-specific':dump binary vendor field'
						-V':alias for --vendor-specific'
						--raw-binary':show identify in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme id ctrl options" _id_ctrl
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(ns)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _id_ns
					_id_ns=(
						--namespace-id=':identifier of desired namespace'
						-n':alias for --namespace-id'
						--force':Return this namespace, even if not attached (1.2 devices only)'
						--vendor-specific':dump binary vendor fields'
						-V':alias for --vendor-specific'
						--raw-binary':show identify in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme id ns options" _id_ns
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(ns-granularity)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _id_ns_granularity
					_id_ns_granularity=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme id ns-granularity options" _id_ns_granularity
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(ns-lba-format)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _id_ns_lba_format
					_id_ns_lba_format=(
						--lba-format-index=':The index into the LBA Format list identifying the LBA Format capabilities that are to be returned'
						-i':alias for --lba-format-index'
						--uuid-index=':UUID index'
						-U':alias for --uuid-index'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme id ns-lba-format options" _id_ns_lba_format
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(ns-list)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _id_ns_list
					_id_ns_list=(
						--namespace-id=':first nsid returned list should start from'
						-n':alias for --namespace-id'
						--csi=':I/O command set identifier'
						-y':alias for --csi'
						--all':show all namespaces in the subsystem, whether attached or inactive'
						-a':alias for --all'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme id ns-list options" _id_ns_list
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(ctrl-list)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _id_ctrl_list
					_id_ctrl_list=(
						--cntid=':controller to display'
						-c':alias for --cntid'
						--namespace-id=':optional namespace attached to controller'
						-n':alias for --namespace-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme id ctrl-list options" _id_ctrl_list
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(nvm-ctrl)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _id_nvm_ctrl
					_id_nvm_ctrl=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme id nvm-ctrl options" _id_nvm_ctrl
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(nvm-ns)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _id_nvm_ns
					_id_nvm_ns=(
						--namespace-id=':identifier of desired namespace'
						-n':alias for --namespace-id'
						--uuid-index=':UUID index'
						-U':alias for --uuid-index'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme id nvm-ns options" _id_nvm_ns
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(nvm-ns-lba-format)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _id_nvm_ns_lba_format
					_id_nvm_ns_lba_format=(
						--lba-format-index=':The index into the LBA Format list identifying the LBA Format capabilities that are to be returned'
						-i':alias for --lba-format-index'
						--uuid-index=':UUID index'
						-U':alias for --uuid-index'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme id nvm-ns-lba-format options" _id_nvm_ns_lba_format
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(primary-ctrl-caps)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _id_primary_ctrl_caps
					_id_primary_ctrl_caps=(
						--cntlid=':Controller ID'
						-c':alias for --cntlid'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme id primary-ctrl-caps options" _id_primary_ctrl_caps
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(secondary-ctrl-list)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _id_secondary_ctrl_list
					_id_secondary_ctrl_list=(
						--cntid=':lowest controller identifier to display'
						-c':alias for --cntid'
						--num-entries=':number of entries to retrieve'
						-e':alias for --num-entries'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme id secondary-ctrl-list options" _id_secondary_ctrl_list
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(ns-ind)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _id_ns_ind
					_id_ns_ind=(
						--namespace-id=':identifier of desired namespace'
						-n':alias for --namespace-id'
						--raw-binary':show identify in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme id ns-ind options" _id_ns_ind
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(ns-descs)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _id_ns_descs
					_id_ns_descs=(
						--namespace-id=':identifier of desired namespace'
						-n':alias for --namespace-id'
						--raw-binary':show descriptors in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme id ns-descs options" _id_ns_descs
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(nvmset)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _id_nvmset
					_id_nvmset=(
						--nvmset_id=':NVM Set Identify value'
						-i':alias for --nvmset_id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme id nvmset options" _id_nvmset
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(uuid)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _id_uuid
					_id_uuid=(
						--raw-binary':show uuid in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme id uuid options" _id_uuid
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(iocs)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _id_iocs
					_id_iocs=(
						--controller-id=':identifier of desired controller'
						-c':alias for --controller-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme id iocs options" _id_iocs
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(domain)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _id_domain
					_id_domain=(
						--dom-id=':identifier of desired domain'
						-d':alias for --dom-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme id domain options" _id_domain
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(endgrp-list)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _id_endgrp_list
					_id_endgrp_list=(
						--endgrp-id=':Endurance Group ID'
						-i':alias for --endgrp-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme id endgrp-list options" _id_endgrp_list
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(innogrit)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'get-eventlog:get event log'
					'get-cdump:get cdump data'
				)
				_describe -t commands "nvme innogrit commands" _sub
				return
			fi

			case ${words[2]} in
				(get-eventlog)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _innogrit_get_eventlog
					_innogrit_get_eventlog=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme innogrit get-eventlog options" _innogrit_get_eventlog
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-cdump)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _innogrit_get_cdump
					_innogrit_get_cdump=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme innogrit get-cdump options" _innogrit_get_cdump
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(inspur)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'nvme-vendor-log:Retrieve Inspur Vendor Log, show it'
				)
				_describe -t commands "nvme inspur commands" _sub
				return
			fi

			case ${words[2]} in
				(nvme-vendor-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _inspur_nvme_vendor_log
					_inspur_nvme_vendor_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme inspur nvme-vendor-log options" _inspur_nvme_vendor_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(intel)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'id-ctrl:Send NVMe Identify Controller'
					'internal-log:Retrieve Intel internal firmware log, save it'
					'lat-stats:Retrieve Intel IO Latency Statistics log, show it'
					'set-bucket-thresholds:Set Latency Stats Bucket Values, save it'
					'lat-stats-tracking:Enable and disable Latency Statistics logging.'
					'market-name:Retrieve Intel Marketing Name log, show it'
					'smart-log-add:Retrieve Intel SMART Log, show it'
					'temp-stats:Retrieve Intel Temperature Statistics log, show it'
				)
				_describe -t commands "nvme intel commands" _sub
				return
			fi

			case ${words[2]} in
				(id-ctrl)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _intel_id_ctrl
					_intel_id_ctrl=(
						--vendor-specific':dump binary vendor field'
						-V':alias for --vendor-specific'
						--raw-binary':show identify in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme intel id-ctrl options" _intel_id_ctrl
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(internal-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--output-file -O" && return
					local _intel_internal_log
					_intel_internal_log=(
						--log=':Log type: 0, 1, or 2 for nlog, event log, and assert log, respectively.'
						-l':alias for --log'
						--region=':Select which region log should come from. -1 for all'
						-r':alias for --region'
						--nlognum=':Select which nlog to read. -1 for all nlogs'
						-m':alias for --nlognum'
						--namespace-id=':Namespace to get logs from'
						-n':alias for --namespace-id'
						--output-file=':Output file; defaults to device name provided'
						-O':alias for --output-file'
						--verbose-nlog':To print out verbose nlog info'
						-V':alias for --verbose-nlog'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme intel internal-log options" _intel_internal_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(lat-stats)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _intel_lat_stats
					_intel_lat_stats=(
						--write':Get write statistics (read default)'
						-w':alias for --write'
						--raw-binary':Dump output in binary format'
						-b':alias for --raw-binary'
						--json':Dump output in json format'
						-j':alias for --json'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme intel lat-stats options" _intel_lat_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(set-bucket-thresholds)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _intel_set_bucket_thresholds
					_intel_set_bucket_thresholds=(
						--write':Set write bucket Thresholds for latency tracking (read default)'
						-w':alias for --write'
						--bucket-thresholds=':Bucket Threshold List, comma separated list: 0, 10, 20 ...'
						-t':alias for --bucket-thresholds'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme intel set-bucket-thresholds options" _intel_set_bucket_thresholds
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(lat-stats-tracking)
					local _intel_lat_stats_tracking
					_intel_lat_stats_tracking=(
						--enable':Enable LST'
						-e':alias for --enable'
						--disable':Disable LST'
						-d':alias for --disable'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme intel lat-stats-tracking options" _intel_lat_stats_tracking
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(market-name)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _intel_market_name
					_intel_market_name=(
						--raw-binary':dump output in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme intel market-name options" _intel_market_name
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(smart-log-add)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _intel_smart_log_add
					_intel_smart_log_add=(
						--namespace-id=':(optional) desired namespace'
						-n':alias for --namespace-id'
						--raw-binary':Dump output in binary format'
						-b':alias for --raw-binary'
						--json':Dump output in json format'
						-j':alias for --json'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme intel smart-log-add options" _intel_smart_log_add
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(temp-stats)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _intel_temp_stats
					_intel_temp_stats=(
						--raw-binary':dump output in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme intel temp-stats options" _intel_temp_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(io-mgmt)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'recv:I/O Management Receive'
					'send:I/O Management Send'
				)
				_describe -t commands "nvme io-mgmt commands" _sub
				return
			fi

			case ${words[2]} in
				(recv)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--data -d" && return
					local _io_mgmt_recv
					_io_mgmt_recv=(
						--namespace-id=':identifier of desired namespace'
						-n':alias for --namespace-id'
						--mos=':management operation specific'
						-s':alias for --mos'
						--mo=':management operation'
						-m':alias for --mo'
						--data=':optional file for data (default stdout)'
						-d':alias for --data'
						--data-len=':buffer len (if) data is sent or received'
						-l':alias for --data-len'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme io-mgmt recv options" _io_mgmt_recv
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(send)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--data -d" && return
					local _io_mgmt_send
					_io_mgmt_send=(
						--namespace-id=':identifier of desired namespace'
						-n':alias for --namespace-id'
						--mos=':management operation specific'
						-s':alias for --mos'
						--mo=':management operation'
						-m':alias for --mo'
						--data=':optional file for data (default stdin)'
						-d':alias for --data'
						--data-len=':buffer len (if) data is sent or received'
						-l':alias for --data-len'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme io-mgmt send options" _io_mgmt_send
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(keys)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'gen-kxchap-secret:Generate NVMeoF KX-HMAC-CHAP host secret'
					'check-kxchap-secret:Validate NVMeoF KX-HMAC-CHAP host secret format or check if loaded'
					'gen-tls-psk:Generate NVMeoF TLS PSK'
					'check-tls-psk:Validate NVMeoF TLS PSK format or check if loaded'
					'insert-tls-psk:Insert NVMeoF TLS PSK into a keyring'
					'import:Import NVMeoF TLS PSKs and KX-HMAC-CHAP secrets into a keyring'
					'export:Export NVMeoF TLS PSKs from a keyring'
					'revoke:Revoke an NVMeoF TLS PSK from a keyring'
				)
				_describe -t commands "nvme keys commands" _sub
				return
			fi

			case ${words[2]} in
				(gen-kxchap-secret)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _keys_gen_kxchap_secret
					_keys_gen_kxchap_secret=(
						--secret=':Optional secret (in hexadecimal characters) to be placed in the representation.'
						-s':alias for --secret'
						--secret-length=':Length of the secret (32, 48, or 64 bytes).'
						-l':alias for --secret-length'
						--hmac=':Hash function the consumer is to apply to the secret (0 = none, 1 = SHA-256, 2 = SHA-384, 3 = SHA-512).'
						-m':alias for --hmac'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme keys gen-kxchap-secret options" _keys_gen_kxchap_secret
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(check-kxchap-secret)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _keys_check_kxchap_secret
					_keys_check_kxchap_secret=(
						--keydata=':KX-HMAC-CHAP secret (in DHHC-1 interchange format) to be validated. Reads from stdin if not given.'
						-d':alias for --keydata'
						--keyring=':Keyring to check for an already loaded secret.'
						-k':alias for --keyring'
						--keytype=':Key type of the secret to look up.'
						-t':alias for --keytype'
						--identity=':Identity to look up in the keyring to check if the secret is already loaded.'
						-i':alias for --identity'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme keys check-kxchap-secret options" _keys_check_kxchap_secret
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(gen-tls-psk)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _keys_gen_tls_psk
					_keys_gen_tls_psk=(
						--keyring=':Keyring for the TLS PSK.'
						-k':alias for --keyring'
						--keytype=':Key type of the TLS PSK.'
						-t':alias for --keytype'
						--hostnqn=':Host NQN for the retained PSK and the TLS PSK identity.'
						-n':alias for --hostnqn'
						--subsysnqn=':Subsystem NQN for the TLS PSK identity.'
						-c':alias for --subsysnqn'
						--secret=':Optional configured PSK (in hexadecimal characters) to be used.'
						-s':alias for --secret'
						--keyfile=':Append the identity of the TLS PSK, and the TLS PSK itself, to keyfile.'
						-f':alias for --keyfile'
						--hmac=':Hash function for the retained PSK and for the cipher suite the TLS PSK is bound to (1 = SHA-256, 2 = SHA-384).'
						-m':alias for --hmac'
						--identity=':TLS PSK identity version to use (0 = obsolete; 1 = TLS 1.3 with the PSK digest in the identity)'
						-I':alias for --identity'
						--insert':Additionally insert the TLS PSK into the keyring.'
						-i':alias for --insert'
						--compat':Use non-RFC 8446 compliant algorithm for deriving the retained PSK and the TLS PSK for older implementations.'
						-C':alias for --compat'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme keys gen-tls-psk options" _keys_gen_tls_psk
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(check-tls-psk)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _keys_check_tls_psk
					_keys_check_tls_psk=(
						--keyring=':Keyring to check for an already loaded TLS PSK.'
						-k':alias for --keyring'
						--keytype=':Key type of the TLS PSK to look up.'
						-t':alias for --keytype'
						--hostnqn=':Host NQN for the TLS PSK identity.'
						-n':alias for --hostnqn'
						--subsysnqn=':Subsystem NQN for the TLS PSK identity. If not given, only the format is validated.'
						-c':alias for --subsysnqn'
						--keydata=':Configured PSK (in PSK Interchange format) to be validated. Reads from stdin if not given.'
						-d':alias for --keydata'
						--identity=':TLS PSK identity version to use (0 = obsolete; 1 = TLS 1.3 with the PSK digest in the identity)'
						-I':alias for --identity'
						--compat':Use non-RFC 8446 compliant algorithm for deriving the TLS PSK identity for older implementations.'
						-C':alias for --compat'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme keys check-tls-psk options" _keys_check_tls_psk
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(insert-tls-psk)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _keys_insert_tls_psk
					_keys_insert_tls_psk=(
						--keyring=':Keyring for the TLS PSK.'
						-k':alias for --keyring'
						--keytype=':Key type of the TLS PSK.'
						-t':alias for --keytype'
						--hostnqn=':Host NQN for the retained PSK and the TLS PSK identity.'
						-n':alias for --hostnqn'
						--subsysnqn=':Subsystem NQN for the TLS PSK identity.'
						-c':alias for --subsysnqn'
						--keydata=':Configured PSK (in PSK Interchange format) to derive from. Reads from stdin if not given.'
						-d':alias for --keydata'
						--keyfile=':Append the identity of the TLS PSK, and the TLS PSK itself, to keyfile.'
						-f':alias for --keyfile'
						--identity=':TLS PSK identity version to use (0 = obsolete; 1 = TLS 1.3 with the PSK digest in the identity)'
						-I':alias for --identity'
						--compat':Use non-RFC 8446 compliant algorithm for deriving the retained PSK and the TLS PSK for older implementations.'
						-C':alias for --compat'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme keys insert-tls-psk options" _keys_insert_tls_psk
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(import)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _keys_import
					_keys_import=(
						--keyring=':Keyring to import the keys into.'
						-k':alias for --keyring'
						--keyfile=':File to read the keys from (default: stdin).'
						-f':alias for --keyfile'
						--keydata=':Key to insert directly under --identity. Reads from stdin if not given.'
						-d':alias for --keydata'
						--identity=':Identity to store a single key under. If given, --keydata (or stdin) is read as a single key instead of a bulk <identity> <key> list.'
						-i':alias for --identity'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme keys import options" _keys_import
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(export)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _keys_export
					_keys_export=(
						--keyring=':Keyring to export the TLS PSKs from.'
						-k':alias for --keyring'
						--keyfile=':File to write the exported keys to (default: stdout).'
						-f':alias for --keyfile'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme keys export options" _keys_export
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(revoke)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _keys_revoke
					_keys_revoke=(
						--keyring=':Keyring to revoke the key from.'
						-k':alias for --keyring'
						--keytype=':Key type of the key to revoke.'
						-t':alias for --keytype'
						--identity=':Identity (description) of the key to revoke.'
						-i':alias for --identity'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme keys revoke options" _keys_revoke
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(lm)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'create-cdq:Create Controller Data Queue'
					'delete-cdq:Delete Controller Data Queue'
					'track-send:Track Send Command'
					'migration-send:Migration Send'
					'migration-recv:Migration Receive'
					'set-cdq:Set Feature - Controller Data Queue (FID 21h)'
					'get-cdq:Get Feature - Controller Data Queue (FID 21h)'
				)
				_describe -t commands "nvme lm commands" _sub
				return
			fi

			case ${words[2]} in
				(create-cdq)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _lm_create_cdq
					_lm_create_cdq=(
						--size=':CDQ Size (in dwords)'
						-s':alias for --size'
						--cntlid=':Controller ID'
						-c':alias for --cntlid'
						--queue-type=':Queue Type (default: 0 = User Data Migration Queue)'
						-q':alias for --queue-type'
						--consent':I consent this will not work and understand a CDQ cannot be mapped to user space. If I proceed with the creation of a CDQ, the device will write to invalid memory, inevitably leading to MMU faults or worse.'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme lm create-cdq options" _lm_create_cdq
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(delete-cdq)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _lm_delete_cdq
					_lm_delete_cdq=(
						--cdqid=':Controller Data Queue ID'
						-C':alias for --cdqid'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme lm delete-cdq options" _lm_delete_cdq
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(track-send)
					_nvme_opt_vals "--sel -s" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _lm_track_send
					_lm_track_send=(
						--sel=':Type of management operation to perform 0h = Log User Data Changes 1h = Track Memory Changes'
						-s':alias for --sel'
						--mos=':Management operation specific'
						-m':alias for --mos'
						--cdqid=':Controller Data Queue ID'
						-C':alias for --cdqid'
						--start':Equivalent to start tracking with defaults'
						--stop':Equivalent to stop tracking with defaults'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme lm track-send options" _lm_track_send
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(migration-send)
					_nvme_opt_vals "--sel -s" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--input-file -f" && return
					local _lm_migration_send
					_lm_migration_send=(
						--sel=':Select (SEL) the type of management operation to perform (CDW10[07:00]) 0h = Suspend 1h = Resume 2h = Set Controller State'
						-s':alias for --sel'
						--cntlid=':Controller Identifier (CDW11[15:00])'
						-c':alias for --cntlid'
						--stype=':Type of suspend (STYPE) (CDW11[23:16] 0h = Suspend Notification 1h = Suspend'
						-t':alias for --stype'
						--dudmq':Delete user data migration queue (DUDMQ) as part of suspend operation (CDW11[31])'
						-d':alias for --dudmq'
						--seq-ind=':Sequence Indicator (CDW10[17:16]) 0h = Not first not last 1h = First in two or more 2h = Last in two or more 3h = Entire state info'
						-S':alias for --seq-ind'
						--csuuidi=':Controller State UUID Index (CSUUIDI) (CDW11[31:24])'
						-U':alias for --csuuidi'
						--csvi=':Controller State Version Index (CSVI) (CDW11[23:16])'
						-V':alias for --csvi'
						--uidx=':UUID Index (UIDX) (CDW14[16:00])'
						-u':alias for --uidx'
						--offset=':Controller State Offset'
						-O':alias for --offset'
						--numd=':Number of Dwords (NUMD)'
						-n':alias for --numd'
						--input-file=':Controller State Data input file'
						-f':alias for --input-file'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme lm migration-send options" _lm_migration_send
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(migration-recv)
					_nvme_opt_vals "--sel -s" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--output-file -f" && return
					local _lm_migration_recv
					_lm_migration_recv=(
						--sel=':Select (SEL) the type of management operation to perform (CDW10[07:00]) 0h = Get Controller State'
						-s':alias for --sel'
						--cntlid=':Controller Identifier (CDW10[31:16])'
						-c':alias for --cntlid'
						--csuuidi=':Controller State UUID Index (CSUUIDI) (CDW11[23:16])'
						-U':alias for --csuuidi'
						--csvi=':Controller State Version Index (CSVI) (CDW11[7:0])'
						-V':alias for --csvi'
						--uidx=':UUID Index (UIDX) (CDW14[16:00])'
						-u':alias for --uidx'
						--offset=':Controller State Offset'
						-O':alias for --offset'
						--numd=':Number of Dwords (NUMD)'
						-n':alias for --numd'
						--output-file=':Controller State Data output file'
						-f':alias for --output-file'
						--human-readable':show info in readable format'
						-H':alias for --human-readable'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme lm migration-recv options" _lm_migration_recv
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(set-cdq)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _lm_set_cdq
					_lm_set_cdq=(
						--cdqid=':Controller Data Queue ID'
						-C':alias for --cdqid'
						--hp=':The slot of the head pointer for the specified CDQ'
						-H':alias for --hp'
						--tpt=':If specified, the slot that causes the controller to issue a CDQ Tail Pointer event'
						-T':alias for --tpt'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme lm set-cdq options" _lm_set_cdq
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-cdq)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _lm_get_cdq
					_lm_get_cdq=(
						--cdqid=':Controller Data Queue ID'
						-C':alias for --cdqid'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme lm get-cdq options" _lm_get_cdq
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(log)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'supported-pages:Retrieve the Supported Log pages details, show it'
					'smart:Retrieve SMART Log, show it'
					'ana:Retrieve ANA Log, show it'
					'telemetry:Retrieve FW Telemetry log write to file'
					'fw:Retrieve FW Log, show it'
					'endurance:Retrieve Endurance Group Log, show it'
					'effects:Retrieve Command Effects Log, show it'
					'error:Retrieve Error Log, show it'
					'changed-ns-list:Retrieve Changed Attached Namespace List, show it'
					'changed-alloc-ns-list:Retrieve Changed Allocated Namespace List, show it'
					'predictable-lat:Retrieve Predictable Latency per Nvmset Log, show it'
					'pred-lat-event-agg:Retrieve Predictable Latency Event Aggregate Log, show it'
					'persistent-event:Retrieve Persistent Event Log, show it'
					'endurance-event-agg:Retrieve Endurance Group Event Aggregate Log, show it'
					'lba-status:Retrieve LBA Status Information Log, show it'
					'resv-notif:Retrieve Reservation Notification Log, show it'
					'boot-part:Retrieve Boot Partition Log, show it'
					'phy-rx-eom:Retrieve Physical Interface Receiver Eye Opening Measurement, show it'
					'self-test:Retrieve the SELF-TEST Log, show it'
					'fid-support-effects:Retrieve FID Support and Effects log and show it'
					'mi-cmd-support-effects:Retrieve MI Command Support and Effects log and show it'
					'media-unit-stat:Retrieve the configuration and wear of media units, show it'
					'supported-cap-config:Retrieve the list of Supported Capacity Configuration Descriptors'
					'mgmt-addr-list:Retrieve Management Address List Log, show it'
					'rotational-media-info:Retrieve Rotational Media Information Log, show it'
					'dispersed-ns-participating-nss:Retrieve Dispersed Namespace Participating NVM Subsystems Log, show it'
					'reachability-groups:Retrieve Reachability Groups Log, show it'
					'reachability-associations:Retrieve Reachability Associations Log, show it'
					'host-discovery:Retrieve Host Discovery Log, show it'
					'ave-discovery:Retrieve AVE Discovery Log, show it'
					'pull-model-ddc-req:Retrieve Pull Model DDC Request Log, show it'
					'power-measurement:Retrieve Power Measurement Log, show it'
					'sanitize:Retrieve sanitize log, show it'
				)
				_describe -t commands "nvme log commands" _sub
				return
			fi

			case ${words[2]} in
				(supported-pages)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_supported_pages
					_log_supported_pages=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log supported-pages options" _log_supported_pages
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(smart)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_smart
					_log_smart=(
						--namespace-id=':(optional) desired namespace'
						-n':alias for --namespace-id'
						--raw-binary':output in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log smart options" _log_smart
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(ana)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_ana
					_log_ana=(
						--groups':Return ANA groups only.'
						-g':alias for --groups'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log ana options" _log_ana
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(telemetry)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--output-file -O" && return
					local _log_telemetry
					_log_telemetry=(
						--output-file=':File name to save raw binary, includes header'
						-O':alias for --output-file'
						--host-generate=':Have the host tell the controller to generate the report'
						-g':alias for --host-generate'
						--controller-init':Gather report generated by the controller.'
						-c':alias for --controller-init'
						--data-area=':Pick which telemetry data area to report. Default is 3 to fetch areas 1-3. Valid options are 1, 2, 3, 4.'
						-d':alias for --data-area'
						--rae':Retain an Asynchronous Event'
						-r':alias for --rae'
						--mcda=':Host-init Maximum Created Data Area. Valid options are 0 ~ 4 If given, This option will override dgen. 0 : controller determines data area'
						-m':alias for --mcda'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log telemetry options" _log_telemetry
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(fw)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_fw
					_log_fw=(
						--raw-binary':use binary output'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log fw options" _log_fw
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(endurance)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_endurance
					_log_endurance=(
						--group-id=':The endurance group identifier'
						-g':alias for --group-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log endurance options" _log_endurance
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(effects)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_effects
					_log_effects=(
						--raw-binary':show log in binary format'
						-b':alias for --raw-binary'
						--csi=':command set identifier'
						-c':alias for --csi'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log effects options" _log_effects
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(error)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_error
					_log_error=(
						--log-entries=':number of entries to retrieve'
						-e':alias for --log-entries'
						--raw-binary':dump in binary format'
						-b':alias for --raw-binary'
						--valid-entry':output valid entry only'
						-V':alias for --valid-entry'
						--sqid=':output specified SQID entry only'
						-S':alias for --sqid'
						--status=':output specified STATUS entry only'
						-s':alias for --status'
						--lba=':output specified LBA entry only'
						-l':alias for --lba'
						--namespace-id=':output specified NSID entry only'
						-n':alias for --namespace-id'
						--trtype=':output specified TRTYPE entry only'
						-t':alias for --trtype'
						--csi=':output specified CSI entry only'
						-c':alias for --csi'
						--opcode=':output specified OPC entry only'
						-O':alias for --opcode'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log error options" _log_error
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(changed-ns-list)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_changed_ns_list
					_log_changed_ns_list=(
						--raw-binary':output in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log changed-ns-list options" _log_changed_ns_list
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(changed-alloc-ns-list)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_changed_alloc_ns_list
					_log_changed_alloc_ns_list=(
						--raw-binary':output in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log changed-alloc-ns-list options" _log_changed_alloc_ns_list
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(predictable-lat)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_predictable_lat
					_log_predictable_lat=(
						--nvmset-id=':NVM Set Identifier'
						-i':alias for --nvmset-id'
						--raw-binary':use binary output'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log predictable-lat options" _log_predictable_lat
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(pred-lat-event-agg)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_pred_lat_event_agg
					_log_pred_lat_event_agg=(
						--log-entries=':Number of pending NVM Set log Entries list'
						-e':alias for --log-entries'
						--rae':Retain an Asynchronous Event'
						-r':alias for --rae'
						--raw-binary':use binary output'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log pred-lat-event-agg options" _log_pred_lat_event_agg
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(persistent-event)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_persistent_event
					_log_persistent_event=(
						--action=':action the controller shall take during processing this persistent log page command.'
						-a':alias for --action'
						--log_len=':number of bytes to retrieve'
						-l':alias for --log_len'
						--raw-binary':use binary output'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log persistent-event options" _log_persistent_event
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(endurance-event-agg)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_endurance_event_agg
					_log_endurance_event_agg=(
						--log-entries=':Number of pending Endurance Group Event log Entries list'
						-e':alias for --log-entries'
						--rae':Retain an Asynchronous Event'
						-r':alias for --rae'
						--raw-binary':use binary output'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log endurance-event-agg options" _log_endurance_event_agg
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(lba-status)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_lba_status
					_log_lba_status=(
						--rae':Retain an Asynchronous Event'
						-r':alias for --rae'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log lba-status options" _log_lba_status
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(resv-notif)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_resv_notif
					_log_resv_notif=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log resv-notif options" _log_resv_notif
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(boot-part)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--output-file -f" && return
					local _log_boot_part
					_log_boot_part=(
						--lsp=':log specific field'
						-s':alias for --lsp'
						--output-file=':boot partition data output file name'
						-f':alias for --output-file'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log boot-part options" _log_boot_part
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(phy-rx-eom)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_phy_rx_eom
					_log_phy_rx_eom=(
						--lsp=':log specific field'
						-s':alias for --lsp'
						--controller=':Target Controller ID.'
						-c':alias for --controller'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log phy-rx-eom options" _log_phy_rx_eom
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(self-test)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_self_test
					_log_self_test=(
						--dst-entries=':Indicate how many DST log entries to be retrieved, by default all the 20 entries will be retrieved'
						-e':alias for --dst-entries'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log self-test options" _log_self_test
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(fid-support-effects)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_fid_support_effects
					_log_fid_support_effects=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log fid-support-effects options" _log_fid_support_effects
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(mi-cmd-support-effects)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_mi_cmd_support_effects
					_log_mi_cmd_support_effects=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log mi-cmd-support-effects options" _log_mi_cmd_support_effects
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(media-unit-stat)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_media_unit_stat
					_log_media_unit_stat=(
						--domain-id=':Domain Identifier'
						-d':alias for --domain-id'
						--raw-binary':use binary output'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log media-unit-stat options" _log_media_unit_stat
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(supported-cap-config)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_supported_cap_config
					_log_supported_cap_config=(
						--domain-id=':Domain Identifier'
						-d':alias for --domain-id'
						--raw-binary':use binary output'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log supported-cap-config options" _log_supported_cap_config
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(mgmt-addr-list)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_mgmt_addr_list
					_log_mgmt_addr_list=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log mgmt-addr-list options" _log_mgmt_addr_list
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(rotational-media-info)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_rotational_media_info
					_log_rotational_media_info=(
						--endg-id=':Endurance Group Identifier (ENDGID)'
						-e':alias for --endg-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log rotational-media-info options" _log_rotational_media_info
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(dispersed-ns-participating-nss)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_dispersed_ns_participating_nss
					_log_dispersed_ns_participating_nss=(
						--namespace-id=':identifier of desired namespace'
						-n':alias for --namespace-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log dispersed-ns-participating-nss options" _log_dispersed_ns_participating_nss
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(reachability-groups)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_reachability_groups
					_log_reachability_groups=(
						--groups-only':Return Groups Only'
						-g':alias for --groups-only'
						--rae':Retain an Asynchronous Event'
						-r':alias for --rae'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log reachability-groups options" _log_reachability_groups
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(reachability-associations)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_reachability_associations
					_log_reachability_associations=(
						--associations-only':Return Associations Only'
						-a':alias for --associations-only'
						--rae':Retain an Asynchronous Event'
						-r':alias for --rae'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log reachability-associations options" _log_reachability_associations
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(host-discovery)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_host_discovery
					_log_host_discovery=(
						--all-host-entries':All Host Entries'
						-a':alias for --all-host-entries'
						--rae':Retain an Asynchronous Event'
						-r':alias for --rae'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log host-discovery options" _log_host_discovery
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(ave-discovery)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_ave_discovery
					_log_ave_discovery=(
						--rae':Retain an Asynchronous Event'
						-r':alias for --rae'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log ave-discovery options" _log_ave_discovery
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(pull-model-ddc-req)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_pull_model_ddc_req
					_log_pull_model_ddc_req=(
						--rae':Retain an Asynchronous Event'
						-r':alias for --rae'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log pull-model-ddc-req options" _log_pull_model_ddc_req
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(power-measurement)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_power_measurement
					_log_power_measurement=(
						--raw-binary':output in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log power-measurement options" _log_power_measurement
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(sanitize)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _log_sanitize
					_log_sanitize=(
						--rae':Retain an Asynchronous Event'
						-r':alias for --rae'
						--raw-binary':show log in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme log sanitize options" _log_sanitize
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(mangoboost)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'id-ctrl:Send NVMe Identify Controller'
				)
				_describe -t commands "nvme mangoboost commands" _sub
				return
			fi

			case ${words[2]} in
				(id-ctrl)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _mangoboost_id_ctrl
					_mangoboost_id_ctrl=(
						--vendor-specific':dump binary vendor field'
						-V':alias for --vendor-specific'
						--raw-binary':show identify in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme mangoboost id-ctrl options" _mangoboost_id_ctrl
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(memblaze)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'smart-log-add:Retrieve Memblaze SMART Log, show it'
					'get-pm-status:Get Memblaze Power Manager Status'
					'set-pm-status:Set Memblaze Power Manager Status'
					'select-download:Selective Firmware Download'
					'lat-stats:Enable and disable Latency Statistics logging'
					'lat-stats-print:Retrieve IO Latency Statistics log, show it'
					'lat-log:Set Memblaze High Latency Log'
					'lat-log-print:Output Memblaze High Latency Log'
					'clear-error-log:Clear error log'
					'smart-log-add-x:Retrieve Memblaze SMART Log, show it'
					'lat-set-feature-x:Set Enable/Disable for Latency Monitor feature'
					'lat-get-feature-x:Get Enabled/Disabled of Latency Monitor feature'
					'lat-stats-print-x:Get Latency Statistics log and show it.'
					'lat-log-print-x:Get High Latency log and show it.'
					'perf-stats-print-x:Get Performance Stat log and show it.'
				)
				_describe -t commands "nvme memblaze commands" _sub
				return
			fi

			case ${words[2]} in
				(smart-log-add)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _memblaze_smart_log_add
					_memblaze_smart_log_add=(
						--namespace-id=':(optional) desired namespace'
						-n':alias for --namespace-id'
						--raw-binary':dump output in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme memblaze smart-log-add options" _memblaze_smart_log_add
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-pm-status)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _memblaze_get_pm_status
					_memblaze_get_pm_status=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme memblaze get-pm-status options" _memblaze_get_pm_status
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(set-pm-status)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _memblaze_set_pm_status
					_memblaze_set_pm_status=(
						--value=':new value of feature (required)'
						-V':alias for --value'
						--save':specifies that the controller shall save the attribute'
						-s':alias for --save'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme memblaze set-pm-status options" _memblaze_set_pm_status
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(select-download)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--fw -f" && return
					local _memblaze_select_download
					_memblaze_select_download=(
						--fw=':firmware file (required)'
						-f':alias for --fw'
						--select=':FW Select (e.g., --select=OOB, EEP, ALL)'
						-s':alias for --select'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme memblaze select-download options" _memblaze_select_download
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(lat-stats)
					local _memblaze_lat_stats
					_memblaze_lat_stats=(
						--enable':Enable LST'
						-e':alias for --enable'
						--disable':Disable LST'
						-d':alias for --disable'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme memblaze lat-stats options" _memblaze_lat_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(lat-stats-print)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _memblaze_lat_stats_print
					_memblaze_lat_stats_print=(
						--write':Get write statistics (read default)'
						-w':alias for --write'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme memblaze lat-stats-print options" _memblaze_lat_stats_print
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(lat-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _memblaze_lat_log
					_memblaze_lat_log=(
						--param=':input parameters'
						-p':alias for --param'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme memblaze lat-log options" _memblaze_lat_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(lat-log-print)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _memblaze_lat_log_print
					_memblaze_lat_log_print=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme memblaze lat-log-print options" _memblaze_lat_log_print
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(clear-error-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _memblaze_clear_error_log
					_memblaze_clear_error_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme memblaze clear-error-log options" _memblaze_clear_error_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(smart-log-add-x)
					local _memblaze_smart_log_add_x
					_memblaze_smart_log_add_x=(
						--raw-binary':dump the whole log buffer in binary format'
						-b':alias for --raw-binary'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme memblaze smart-log-add-x options" _memblaze_smart_log_add_x
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(lat-set-feature-x)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _memblaze_lat_set_feature_x
					_memblaze_lat_set_feature_x=(
						--sel-perf-log=':Select features to turn on, default: Disable bit 0: latency statistics bit 1: high latency log bit 2: Performance stat'
						-s':alias for --sel-perf-log'
						--set-commands-mask=':Set Enable, default: Disable bit 0: Read commands bit 1: high Write commands bit 2: De-allocate/TRIM (this bit is not worked for Performance stat.)'
						-m':alias for --set-commands-mask'
						--set-read-threshold=':set read high latency log threshold, it'\''s a 0-based value and unit is 10ms'
						-r':alias for --set-read-threshold'
						--set-write-threshold=':set write high latency log threshold, it'\''s a 0-based value and unit is 10ms'
						-w':alias for --set-write-threshold'
						--set-trim-threshold=':set trim high latency log threshold, it'\''s a 0-based value and unit is 10ms'
						-t':alias for --set-trim-threshold'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme memblaze lat-set-feature-x options" _memblaze_lat_set_feature_x
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(lat-get-feature-x)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _memblaze_lat_get_feature_x
					_memblaze_lat_get_feature_x=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme memblaze lat-get-feature-x options" _memblaze_lat_get_feature_x
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(lat-stats-print-x)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _memblaze_lat_stats_print_x
					_memblaze_lat_stats_print_x=(
						--raw-binary':dump the whole log buffer in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme memblaze lat-stats-print-x options" _memblaze_lat_stats_print_x
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(lat-log-print-x)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _memblaze_lat_log_print_x
					_memblaze_lat_log_print_x=(
						--raw-binary':dump the whole log buffer in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme memblaze lat-log-print-x options" _memblaze_lat_log_print_x
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(perf-stats-print-x)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _memblaze_perf_stats_print_x
					_memblaze_perf_stats_print_x=(
						--duration=':[1-24] hours: duration of the log to be printed, default is 1 hour'
						-d':alias for --duration'
						--raw-binary':dump the whole log buffer in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme memblaze perf-stats-print-x options" _memblaze_perf_stats_print_x
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(micron)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'select-download:Selective Firmware Download'
					'vs-temperature-stats:Retrieve Micron temperature statistics'
					'vs-pcie-stats:Retrieve Micron PCIe error stats'
					'clear-pcie-correctable-errors:Clear correctable PCIe errors'
					'vs-internal-log:Retrieve Micron logs'
					'vs-telemetry-controller-option:Enable/Disable controller telemetry log generation'
					'vs-nand-stats:Retrieve NAND Stats'
					'vs-smart-ext-log:Retrieve extended SMART logs'
					'vs-drive-info:Retrieve Drive information'
					'plugin-version:Display plugin version info'
					'cloud-SSD-plugin-version:Display plugin version info'
					'log-page-directory:Retrieve log page directory'
					'vs-fw-activate-history:Display FW activation history'
					'latency-tracking:Latency monitoring feature control'
					'latency-stats:Latency information for tracked commands'
					'latency-logs:Latency log details tracked by drive'
					'vs-smart-add-log:Retrieve extended SMART data'
					'clear-fw-activate-history:Clear FW activation history'
					'vs-smbus-option:Enable/Disable SMBUS on the drive'
					'cloud-boot-SSD-version:Prints HyperScale Boot Version'
					'vs-device-waf:Reports SLC and TLC WAF ratio'
					'vs-cloud-log:Retrieve Extended Health Information of Hyperscale NVMe Boot SSD'
					'vs-work-load-log:Retrieve Workload logs'
					'vs-vendor-telemetry-log:Retrieve Vendor Telemetry logs'
					'smart-log:Retrieve SMART/Health Log'
					'id-ctrl:Identify Controller'
				)
				_describe -t commands "nvme micron commands" _sub
				return
			fi

			case ${words[2]} in
				(select-download)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--fw -f" && return
					local _micron_select_download
					_micron_select_download=(
						--fw=':firmware file (required)'
						-f':alias for --fw'
						--select=':FW Select (e.g., --select=ALL)'
						-s':alias for --select'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron select-download options" _micron_select_download
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-temperature-stats)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_vs_temperature_stats
					_micron_vs_temperature_stats=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron vs-temperature-stats options" _micron_vs_temperature_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-pcie-stats)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_vs_pcie_stats
					_micron_vs_pcie_stats=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron vs-pcie-stats options" _micron_vs_pcie_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(clear-pcie-correctable-errors)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_clear_pcie_correctable_errors
					_micron_clear_pcie_correctable_errors=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron clear-pcie-correctable-errors options" _micron_clear_pcie_correctable_errors
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-internal-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--package -p" && return
					local _micron_vs_internal_log
					_micron_vs_internal_log=(
						--type=':telemetry log type - host or controller'
						-t':alias for --type'
						--package=':Log output data file name (required)'
						-p':alias for --package'
						--data_area=':telemetry log data area 1, 2, 3 or 4'
						-d':alias for --data_area'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron vs-internal-log options" _micron_vs_internal_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-telemetry-controller-option)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_vs_telemetry_controller_option
					_micron_vs_telemetry_controller_option=(
						--option=':enable or disable or status'
						-O':alias for --option'
						--select=':select/save values: enable/disable options1 - save (persistent), 0 - non-persistent and for status options: 0 - current, 1 - default, 2-saved'
						-s':alias for --select'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron vs-telemetry-controller-option options" _micron_vs_telemetry_controller_option
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-nand-stats)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_vs_nand_stats
					_micron_vs_nand_stats=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron vs-nand-stats options" _micron_vs_nand_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-smart-ext-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_vs_smart_ext_log
					_micron_vs_smart_ext_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron vs-smart-ext-log options" _micron_vs_smart_ext_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-drive-info)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_vs_drive_info
					_micron_vs_drive_info=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron vs-drive-info options" _micron_vs_drive_info
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(plugin-version)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_plugin_version
					_micron_plugin_version=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron plugin-version options" _micron_plugin_version
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(cloud-SSD-plugin-version)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_cloud_SSD_plugin_version
					_micron_cloud_SSD_plugin_version=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron cloud-SSD-plugin-version options" _micron_cloud_SSD_plugin_version
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(log-page-directory)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_log_page_directory
					_micron_log_page_directory=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron log-page-directory options" _micron_log_page_directory
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-fw-activate-history)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_vs_fw_activate_history
					_micron_vs_fw_activate_history=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron vs-fw-activate-history options" _micron_vs_fw_activate_history
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(latency-tracking)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_latency_tracking
					_micron_latency_tracking=(
						--option=':enable or disable or status, default is status'
						-O':alias for --option'
						--command=':commands to monitor for - all|read|write|trim, default is all i.e, enabled for all commands'
						-c':alias for --command'
						--threshold=':The threshold value to use for latency monitoring in milliseconds, default is 800ms'
						-t':alias for --threshold'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron latency-tracking options" _micron_latency_tracking
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(latency-stats)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_latency_stats
					_micron_latency_stats=(
						--command=':command to display stats - all|read|write|trim, default is all'
						-c':alias for --command'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron latency-stats options" _micron_latency_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(latency-logs)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_latency_logs
					_micron_latency_logs=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron latency-logs options" _micron_latency_logs
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-smart-add-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_vs_smart_add_log
					_micron_vs_smart_add_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron vs-smart-add-log options" _micron_vs_smart_add_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(clear-fw-activate-history)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_clear_fw_activate_history
					_micron_clear_fw_activate_history=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron clear-fw-activate-history options" _micron_clear_fw_activate_history
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-smbus-option)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_vs_smbus_option
					_micron_vs_smbus_option=(
						--option=':enable or disable or status'
						-O':alias for --option'
						--value=':1 - hottest component temperature, 0 - composite temperature (default) for enable option, 0 (current), 1 (default), 2 (saved) for status options'
						-V':alias for --value'
						--save=':1 - persistent, 0 - non-persistent (default)'
						-s':alias for --save'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron vs-smbus-option options" _micron_vs_smbus_option
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(cloud-boot-SSD-version)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_cloud_boot_SSD_version
					_micron_cloud_boot_SSD_version=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron cloud-boot-SSD-version options" _micron_cloud_boot_SSD_version
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-device-waf)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_vs_device_waf
					_micron_vs_device_waf=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron vs-device-waf options" _micron_vs_device_waf
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-cloud-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_vs_cloud_log
					_micron_vs_cloud_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron vs-cloud-log options" _micron_vs_cloud_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-work-load-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_vs_work_load_log
					_micron_vs_work_load_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron vs-work-load-log options" _micron_vs_work_load_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-vendor-telemetry-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_vs_vendor_telemetry_log
					_micron_vs_vendor_telemetry_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron vs-vendor-telemetry-log options" _micron_vs_vendor_telemetry_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(smart-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_smart_log
					_micron_smart_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron smart-log options" _micron_smart_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(id-ctrl)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _micron_id_ctrl
					_micron_id_ctrl=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme micron id-ctrl options" _micron_id_ctrl
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(nbft)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'show:Show contents of ACPI NBFT tables'
				)
				_describe -t commands "nvme nbft commands" _sub
				return
			fi

			case ${words[2]} in
				(show)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _nbft_show
					_nbft_show=(
						--subsystem':show NBFT subsystems'
						-s':alias for --subsystem'
						--hfi':show NBFT HFIs'
						-H':alias for --hfi'
						--discovery':show NBFT discovery controllers'
						-d':alias for --discovery'
						--nbft-path=':user-defined path for NBFT tables'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme nbft show options" _nbft_show
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(netapp)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'smdevices:NetApp SMdevices'
					'ontapdevices:NetApp ONTAPdevices'
				)
				_describe -t commands "nvme netapp commands" _sub
				return
			fi

			case ${words[2]} in
				(smdevices)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _netapp_smdevices
					_netapp_smdevices=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme netapp smdevices options" _netapp_smdevices
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(ontapdevices)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _netapp_ontapdevices
					_netapp_ontapdevices=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme netapp ontapdevices options" _netapp_ontapdevices
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(ns)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'create:Creates a namespace with the provided parameters'
					'delete:Deletes a namespace from the controller'
					'attach:Attaches a namespace to requested controller(s)'
					'detach:Detaches a namespace from requested controller(s)'
					'get-id:Retrieve the namespace ID of opened block device'
				)
				_describe -t commands "nvme ns commands" _sub
				return
			fi

			case ${words[2]} in
				(create)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ns_create
					_ns_create=(
						--ish':Ignore Shutdown (for NVMe-MI command)'
						-I':alias for --ish'
						--nsze=':size of ns (NSZE)'
						-s':alias for --nsze'
						--ncap=':capacity of ns (NCAP)'
						-c':alias for --ncap'
						--flbas=':Formatted LBA size (FLBAS), if entering this value ignore '\''block-size'\'' field'
						-f':alias for --flbas'
						--dps=':data protection settings (DPS)'
						-d':alias for --dps'
						--nmic=':multipath and sharing capabilities (NMIC)'
						-m':alias for --nmic'
						--anagrp-id=':ANA Group Identifier (ANAGRPID)'
						-a':alias for --anagrp-id'
						--nvmset-id=':NVM Set Identifier (NVMSETID)'
						-i':alias for --nvmset-id'
						--endg-id=':Endurance Group Identifier (ENDGID)'
						-e':alias for --endg-id'
						--block-size=':target block size, specify only if '\''FLBAS'\'' value not entered'
						-b':alias for --block-size'
						--csi=':command set identifier (CSI)'
						-y':alias for --csi'
						--lbstm=':logical block storage tag mask (LBSTM)'
						-l':alias for --lbstm'
						--nphndls=':Number of Placement Handles (NPHNDLS)'
						-n':alias for --nphndls'
						--nsze-si=':size of ns (NSZE) in standard SI units'
						-S':alias for --nsze-si'
						--ncap-si=':capacity of ns (NCAP) in standard SI units'
						-C':alias for --ncap-si'
						--azr':Allocate ZRWA Resources (AZR) for Zoned Namespace Command Set'
						-z':alias for --azr'
						--rar=':Requested Active Resources (RAR) for Zoned Namespace Command Set'
						-r':alias for --rar'
						--ror=':Requested Open Resources (ROR) for Zoned Namespace Command Set'
						-O':alias for --ror'
						--rnumzrwa=':Requested Number of ZRWA Resources (RNUMZRWA) for Zoned Namespace Command Set'
						-u':alias for --rnumzrwa'
						--phndls=':Comma separated list of Placement Handle Associated RUH'
						-p':alias for --phndls'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ns create options" _ns_create
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(delete)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ns_delete
					_ns_delete=(
						--ish':Ignore Shutdown (for NVMe-MI command)'
						-I':alias for --ish'
						--namespace-id=':namespace to delete'
						-n':alias for --namespace-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ns delete options" _ns_delete
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(attach)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ns_attach
					_ns_attach=(
						--ish':Ignore Shutdown (for NVMe-MI command)'
						-I':alias for --ish'
						--namespace-id=':namespace to attach'
						-n':alias for --namespace-id'
						--controllers=':optional comma-sep controller id list'
						-c':alias for --controllers'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ns attach options" _ns_attach
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(detach)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ns_detach
					_ns_detach=(
						--ish':Ignore Shutdown (for NVMe-MI command)'
						-I':alias for --ish'
						--namespace-id=':namespace to attach'
						-n':alias for --namespace-id'
						--controllers=':optional comma-sep controller id list'
						-c':alias for --controllers'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ns detach options" _ns_detach
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-id)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ns_get_id
					_ns_get_id=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ns get-id options" _ns_get_id
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(nvidia)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'id-ctrl:Send NVMe Identify Controller'
				)
				_describe -t commands "nvme nvidia commands" _sub
				return
			fi

			case ${words[2]} in
				(id-ctrl)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _nvidia_id_ctrl
					_nvidia_id_ctrl=(
						--vendor-specific':dump binary vendor field'
						-V':alias for --vendor-specific'
						--raw-binary':show identify in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme nvidia id-ctrl options" _nvidia_id_ctrl
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(nvme-mi)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'recv:Submit a NVMe-MI Receive command, return results'
					'send:Submit a NVMe-MI Send command, return results'
				)
				_describe -t commands "nvme nvme-mi commands" _sub
				return
			fi

			case ${words[2]} in
				(recv)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--input-file -i" && return
					local _nvme_mi_recv
					_nvme_mi_recv=(
						--opcode=':opcode (required)'
						-O':alias for --opcode'
						--namespace-id=':desired namespace'
						-n':alias for --namespace-id'
						--data-len=':data I/O length (bytes)'
						-l':alias for --data-len'
						--nmimt=':nvme-mi message type'
						-m':alias for --nmimt'
						--nmd0=':nvme management dword 0 value'
						-0':alias for --nmd0'
						--nmd1=':nvme management dword 1 value'
						-1':alias for --nmd1'
						--input-file=':data input or output file'
						-i':alias for --input-file'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme nvme-mi recv options" _nvme_mi_recv
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(send)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--input-file -i" && return
					local _nvme_mi_send
					_nvme_mi_send=(
						--opcode=':opcode (required)'
						-O':alias for --opcode'
						--namespace-id=':desired namespace'
						-n':alias for --namespace-id'
						--data-len=':data I/O length (bytes)'
						-l':alias for --data-len'
						--nmimt=':nvme-mi message type'
						-m':alias for --nmimt'
						--nmd0=':nvme management dword 0 value'
						-0':alias for --nmd0'
						--nmd1=':nvme management dword 1 value'
						-1':alias for --nmd1'
						--input-file=':data input or output file'
						-i':alias for --input-file'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme nvme-mi send options" _nvme_mi_send
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(ocp)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'smart-add-log:Retrieve Extended SMART Information'
					'latency-monitor-log:Retrieve Latency Monitor Log Page'
					'set-latency-monitor-feature:Set Latency Monitor Feature'
					'internal-log:Retrieve and Save Internal Device Telemetry Log'
					'clear-fw-activate-history:Clear Firmware Update History'
					'eol-plp-failure-mode:Define EOL or PLP Circuitry Failure Mode'
					'clear-pcie-correctable-errors:Clear PCIe Correctable Error Counters'
					'fw-activate-history:Retrieve Firmware Activation History Log Page'
					'unsupported-reqs-log:Retrieve Unsupported Requirements Log Page'
					'error-recovery-log:Retrieve Error Recovery Log Page'
					'device-capability-log:Retrieve Device Capabilities Log Page'
					'set-dssd-power-state-feature:Set DSSD Power State Feature'
					'get-dssd-power-state-feature:Get DSSD Power State Feature'
					'set-plp-health-check-interval:Set PLP Health Check Interval'
					'get-plp-health-check-interval:Get PLP Health Check Interval'
					'telemetry-string-log:Retrieve Telemetry String Log Page'
					'set-telemetry-profile:Set Telemetry Profile Feature'
					'set-dssd-async-event-config:Set DSSD Asynchronous Event Configuration'
					'get-dssd-async-event-config:Get DSSD Asynchronous Event Configuration'
					'tcg-configuration-log:Retrieve TCG Configuration Log Page'
					'get-error-injection:Get Error Injection Feature'
					'set-error-injection:Set Error Injection Feature'
					'get-enable-ieee1667-silo:Get Enable IEEE1667 Silo Feature'
					'set-enable-ieee1667-silo:Set Enable IEEE1667 Silo Feature'
					'hardware-component-log:Retrieve Hardware Component Log Page'
					'get-latency-monitor:Get Latency Monitor Feature'
					'get-clear-pcie-correctable-errors:Get Clear PCIe Correctable Error Counters Feature'
					'get-telemetry-profile:Get Telemetry Profile Feature'
					'persistent-event-log:Retrieve Persistent Event Log with OCP Events'
					'get-idle-wakeup-time:Get Idle Wake Up Time Configuration'
				)
				_describe -t commands "nvme ocp commands" _sub
				return
			fi

			case ${words[2]} in
				(smart-add-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_smart_add_log
					_ocp_smart_add_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp smart-add-log options" _ocp_smart_add_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(latency-monitor-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_latency_monitor_log
					_ocp_latency_monitor_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp latency-monitor-log options" _ocp_latency_monitor_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(set-latency-monitor-feature)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_set_latency_monitor_feature
					_ocp_set_latency_monitor_feature=(
						--active_bucket_timer_threshold=':This is the value that loads the Active Bucket Timer Threshold.'
						-t':alias for --active_bucket_timer_threshold'
						--active_threshold_a=':This is the value that loads into the Active Threshold A.'
						-a':alias for --active_threshold_a'
						--active_threshold_b=':This is the value that loads into the Active Threshold B.'
						-b':alias for --active_threshold_b'
						--active_threshold_c=':This is the value that loads into the Active Threshold C.'
						-c':alias for --active_threshold_c'
						--active_threshold_d=':This is the value that loads into the Active Threshold D.'
						-d':alias for --active_threshold_d'
						--active_latency_config=':This is the value that loads into the Active Latency Configuration.'
						-f':alias for --active_latency_config'
						--active_latency_minimum_window=':This is the value that loads into the Active Latency Minimum Window.'
						-w':alias for --active_latency_minimum_window'
						--debug_log_trigger_enable=':This is the value that loads into the Debug Log Trigger Enable.'
						-r':alias for --debug_log_trigger_enable'
						--discard_debug_log=':Discard Debug Log.'
						-l':alias for --discard_debug_log'
						--latency_monitor_feature_enable=':Latency Monitor Feature Enable.'
						-e':alias for --latency_monitor_feature_enable'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp set-latency-monitor-feature options" _ocp_set_latency_monitor_feature
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(internal-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--output-file -f" && return
					local _ocp_internal_log
					_ocp_internal_log=(
						--telemetry-log=':Telemetry log binary; '\''host.bin'\'' or '\''controller.bin'\'''
						-l':alias for --telemetry-log'
						--string-log=':String log binary; '\''C9.bin'\'''
						-s':alias for --string-log'
						--output-file=':Output file name with path; e.g. '\''-f ./path/name'\'' '\''-f ./path1/path2/'\''; If requested path does not exist, the directory will be newly created.'
						-f':alias for --output-file'
						--data-area=':Telemetry Data Area; 1, 2, 3, or 4; e.g. '\''-a 1 for Data Area 1.'\'' e.g. '\''-a 2 for Data Areas 1 and 2.'\'' e.g. '\''-a 3 for Data Areas 1, 2, and 3.'\'' e.g. '\''-a 4 for Data Areas 1, 2, 3, and 4.'\'';'
						-a':alias for --data-area'
						--telemetry-type=':Telemetry Type; '\''host'\'', '\''host0'\'', '\''host1'\'' or '\''controller'\'''
						-t':alias for --telemetry-type'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp internal-log options" _ocp_internal_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(clear-fw-activate-history)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_clear_fw_activate_history
					_ocp_clear_fw_activate_history=(
						--no-uuid':Skip UUID index search (UUID index not required for OCP 1.0)'
						-n':alias for --no-uuid'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp clear-fw-activate-history options" _ocp_clear_fw_activate_history
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(eol-plp-failure-mode)
					_nvme_opt_vals "--sel -S" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_eol_plp_failure_mode
					_ocp_eol_plp_failure_mode=(
						--mode=':[0-3]: default/rom/wtm/normal'
						-m':alias for --mode'
						--save':Specifies that the controller shall save the attribute'
						-s':alias for --save'
						--sel=':[0-3]: current/default/saved/supported'
						-S':alias for --sel'
						--no-uuid':Skip UUID index search (UUID index not required for OCP 1.0)'
						-n':alias for --no-uuid'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp eol-plp-failure-mode options" _ocp_eol_plp_failure_mode
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(clear-pcie-correctable-errors)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_clear_pcie_correctable_errors
					_ocp_clear_pcie_correctable_errors=(
						--no-uuid':Skip UUID index search (UUID index not required for OCP 1.0)'
						-n':alias for --no-uuid'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp clear-pcie-correctable-errors options" _ocp_clear_pcie_correctable_errors
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(fw-activate-history)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_fw_activate_history
					_ocp_fw_activate_history=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp fw-activate-history options" _ocp_fw_activate_history
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(unsupported-reqs-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_unsupported_reqs_log
					_ocp_unsupported_reqs_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp unsupported-reqs-log options" _ocp_unsupported_reqs_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(error-recovery-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_error_recovery_log
					_ocp_error_recovery_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp error-recovery-log options" _ocp_error_recovery_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(device-capability-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_device_capability_log
					_ocp_device_capability_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp device-capability-log options" _ocp_device_capability_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(set-dssd-power-state-feature)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_set_dssd_power_state_feature
					_ocp_set_dssd_power_state_feature=(
						--power-state=':DSSD Power State to set in watts'
						-p':alias for --power-state'
						--save':Specifies that the controller shall save the attribute'
						-s':alias for --save'
						--no-uuid':Skip UUID index search (UUID index not required for OCP 1.0)'
						-n':alias for --no-uuid'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp set-dssd-power-state-feature options" _ocp_set_dssd_power_state_feature
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-dssd-power-state-feature)
					_nvme_opt_vals "--sel -S" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_get_dssd_power_state_feature
					_ocp_get_dssd_power_state_feature=(
						--sel=':[0-3]: current/default/saved/supported/'
						-S':alias for --sel'
						--all':Print out all 3 values at once - Current, Default, and Saved'
						-a':alias for --all'
						--no-uuid':Skip UUID index search (UUID index not required for OCP 1.0)'
						-n':alias for --no-uuid'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp get-dssd-power-state-feature options" _ocp_get_dssd_power_state_feature
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(set-plp-health-check-interval)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_set_plp_health_check_interval
					_ocp_set_plp_health_check_interval=(
						--plp_health_interval=':[31:16]:PLP Health Check Interval'
						-p':alias for --plp_health_interval'
						--save':Specifies that the controller shall save the attribute'
						-s':alias for --save'
						--no-uuid':Skip UUID index search (UUID index not required for OCP 1.0)'
						-n':alias for --no-uuid'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp set-plp-health-check-interval options" _ocp_set_plp_health_check_interval
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-plp-health-check-interval)
					_nvme_opt_vals "--sel -S" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_get_plp_health_check_interval
					_ocp_get_plp_health_check_interval=(
						--sel=':[0-3]: current/default/saved/supported'
						-S':alias for --sel'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp get-plp-health-check-interval options" _ocp_get_plp_health_check_interval
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(telemetry-string-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--output-file -f" && return
					local _ocp_telemetry_string_log
					_ocp_telemetry_string_log=(
						--output-file=':Output file name with path; e.g. '\''-f ./path/name'\'' '\''-f ./path1/path2/'\''; If requested path does not exist, the directory will be newly created.'
						-f':alias for --output-file'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp telemetry-string-log options" _ocp_telemetry_string_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(set-telemetry-profile)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_set_telemetry_profile
					_ocp_set_telemetry_profile=(
						--telemetry-profile-select=':Telemetry Profile Select for device debug data collection'
						-t':alias for --telemetry-profile-select'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp set-telemetry-profile options" _ocp_set_telemetry_profile
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(set-dssd-async-event-config)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_set_dssd_async_event_config
					_ocp_set_dssd_async_event_config=(
						--enable-panic-notices':[0]:Enable Panic Notices'
						-e':alias for --enable-panic-notices'
						--save':Specifies that the controller shall save the attribute'
						-s':alias for --save'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp set-dssd-async-event-config options" _ocp_set_dssd_async_event_config
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-dssd-async-event-config)
					_nvme_opt_vals "--sel -S" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_get_dssd_async_event_config
					_ocp_get_dssd_async_event_config=(
						--sel=':[0-3]: current/default/saved/supported'
						-S':alias for --sel'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp get-dssd-async-event-config options" _ocp_get_dssd_async_event_config
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(tcg-configuration-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_tcg_configuration_log
					_ocp_tcg_configuration_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp tcg-configuration-log options" _ocp_tcg_configuration_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-error-injection)
					_nvme_opt_vals "--sel -s" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_get_error_injection
					_ocp_get_error_injection=(
						--sel=':[0-3]: current/default/saved/supported'
						-s':alias for --sel'
						--no-uuid':Skip UUID index search (UUID index not required for OCP 1.0)'
						-n':alias for --no-uuid'
						--all-ns':Apply to all namespaces'
						-a':alias for --all-ns'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp get-error-injection options" _ocp_get_error_injection
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(set-error-injection)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--data -d" && return
					local _ocp_set_error_injection
					_ocp_set_error_injection=(
						--data=':Error injection data structure entries'
						-d':alias for --data'
						--number=':Number of valid error injection data entries'
						-n':alias for --number'
						--no-uuid':Skip UUID index search (UUID index not required for OCP 1.0)'
						-N':alias for --no-uuid'
						--all-ns':Apply to all namespaces'
						-a':alias for --all-ns'
						--type=':Error injection type'
						-t':alias for --type'
						--nrtdp=':Number of reads to trigger device panic'
						-r':alias for --nrtdp'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp set-error-injection options" _ocp_set_error_injection
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-enable-ieee1667-silo)
					_nvme_opt_vals "--sel -s" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_get_enable_ieee1667_silo
					_ocp_get_enable_ieee1667_silo=(
						--sel=':[0-3]: current/default/saved/supported'
						-s':alias for --sel'
						--no-uuid':Skip UUID index search (UUID index not required for OCP 1.0)'
						-n':alias for --no-uuid'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp get-enable-ieee1667-silo options" _ocp_get_enable_ieee1667_silo
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(set-enable-ieee1667-silo)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_set_enable_ieee1667_silo
					_ocp_set_enable_ieee1667_silo=(
						--enable':Skip UUID index search (UUID index not required for OCP 1.0)'
						-e':alias for --enable'
						--save':Specifies that the controller shall save the attribute'
						-s':alias for --save'
						--no-uuid':Skip UUID index search (UUID index not required for OCP 1.0)'
						-n':alias for --no-uuid'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp set-enable-ieee1667-silo options" _ocp_set_enable_ieee1667_silo
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(hardware-component-log)
					_nvme_opt_vals "--comp-id -i" "asic nand dram pmic pcb cap reg case sn country hw-rev born-on-date vendor" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_hardware_component_log
					_ocp_hardware_component_log=(
						--comp-id=':component identifier'
						-i':alias for --comp-id'
						--list':list component descriptions'
						-l':alias for --list'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp hardware-component-log options" _ocp_hardware_component_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-latency-monitor)
					_nvme_opt_vals "--sel -s" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_get_latency_monitor
					_ocp_get_latency_monitor=(
						--sel=':[0-3]: current/default/saved/supported/'
						-s':alias for --sel'
						--namespace-id=':Byte[04-07]: Namespace Identifier Valid/Invalid/Inactive'
						-n':alias for --namespace-id'
						--no-uuid':Skip UUID index search (UUID index not required for OCP 1.0)'
						-u':alias for --no-uuid'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp get-latency-monitor options" _ocp_get_latency_monitor
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-clear-pcie-correctable-errors)
					_nvme_opt_vals "--sel -s" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_get_clear_pcie_correctable_errors
					_ocp_get_clear_pcie_correctable_errors=(
						--sel=':[0-3]: current/default/saved/supported/'
						-s':alias for --sel'
						--namespace-id=':Byte[04-07]: Namespace Identifier Valid/Invalid/Inactive'
						-n':alias for --namespace-id'
						--no-uuid':Do not try to automatically detect UUID index'
						-u':alias for --no-uuid'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp get-clear-pcie-correctable-errors options" _ocp_get_clear_pcie_correctable_errors
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-telemetry-profile)
					_nvme_opt_vals "--sel -s" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_get_telemetry_profile
					_ocp_get_telemetry_profile=(
						--sel=':[0-3]: current/default/saved/supported/'
						-s':alias for --sel'
						--namespace-id=':Byte[04-07]: Namespace Identifier Valid/Invalid/Inactive'
						-n':alias for --namespace-id'
						--no-uuid':Skip UUID index search (UUID index not required for OCP 1.0)'
						-u':alias for --no-uuid'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp get-telemetry-profile options" _ocp_get_telemetry_profile
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(persistent-event-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_persistent_event_log
					_ocp_persistent_event_log=(
						--action=':action the controller shall take during processing this persistent log page command.'
						-a':alias for --action'
						--log_len=':number of bytes to retrieve'
						-l':alias for --log_len'
						--raw-binary':use binary output'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp persistent-event-log options" _ocp_persistent_event_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-idle-wakeup-time)
					_nvme_opt_vals "--sel -s" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ocp_get_idle_wakeup_time
					_ocp_get_idle_wakeup_time=(
						--sel=':[0-3]: current/default/saved/supported/'
						-s':alias for --sel'
						--namespace-id=':Byte[04-07]: NSID Valid/Invalid/Inactive'
						-n':alias for --namespace-id'
						--no-uuid':Skip UUID index search (UUID index not required for OCP 1.0)'
						-u':alias for --no-uuid'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ocp get-idle-wakeup-time options" _ocp_get_idle_wakeup_time
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(registry)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'list:List live registry entries'
					'retrieve:Read an attribute from a controller'\''s entry'
					'update:Write an attribute to a controller'\''s entry'
					'delete:Remove a controller'\''s registry entry'
				)
				_describe -t commands "nvme registry commands" _sub
				return
			fi

			case ${words[2]} in
				(list)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _registry_list
					_registry_list=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme registry list options" _registry_list
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(retrieve)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _registry_retrieve
					_registry_retrieve=(
						--attr=':attribute name (e.g. owner, note)'
						-a':alias for --attr'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme registry retrieve options" _registry_retrieve
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(update)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _registry_update
					_registry_update=(
						--attr=':attribute name (e.g. note, owner)'
						-a':alias for --attr'
						--value=':new attribute value'
						-V':alias for --value'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme registry update options" _registry_update
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(delete)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _registry_delete
					_registry_delete=(
						--attr=':attribute to remove (default: whole entry)'
						-a':alias for --attr'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme registry delete options" _registry_delete
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(resv)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'acquire:Submit a Reservation Acquire, return results'
					'register:Submit a Reservation Register, return results'
					'release:Submit a Reservation Release, return results'
					'report:Submit a Reservation Report, return results'
				)
				_describe -t commands "nvme resv commands" _sub
				return
			fi

			case ${words[2]} in
				(acquire)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _resv_acquire
					_resv_acquire=(
						--namespace-id=':identifier of desired namespace'
						-n':alias for --namespace-id'
						--crkey=':current reservation key'
						-c':alias for --crkey'
						--prkey=':pre-empt reservation key'
						-p':alias for --prkey'
						--rtype=':reservation type'
						-t':alias for --rtype'
						--racqa=':reservation acquire action'
						-a':alias for --racqa'
						--iekey':ignore existing res. key'
						-i':alias for --iekey'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme resv acquire options" _resv_acquire
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(register)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _resv_register
					_resv_register=(
						--namespace-id=':identifier of desired namespace'
						-n':alias for --namespace-id'
						--crkey=':current reservation key'
						-c':alias for --crkey'
						--nrkey=':new reservation key'
						-k':alias for --nrkey'
						--rrega=':reservation registration action'
						-r':alias for --rrega'
						--cptpl=':change persistence through power loss setting'
						-p':alias for --cptpl'
						--iekey':ignore existing res. key'
						-i':alias for --iekey'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme resv register options" _resv_register
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(release)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _resv_release
					_resv_release=(
						--namespace-id=':desired namespace'
						-n':alias for --namespace-id'
						--crkey=':current reservation key'
						-c':alias for --crkey'
						--rtype=':reservation type'
						-t':alias for --rtype'
						--rrela=':reservation release action'
						-a':alias for --rrela'
						--iekey':ignore existing res. key'
						-i':alias for --iekey'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme resv release options" _resv_release
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(report)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _resv_report
					_resv_report=(
						--namespace-id=':identifier of desired namespace'
						-n':alias for --namespace-id'
						--numd=':number of dwords to transfer'
						-d':alias for --numd'
						--eds':request extended data structure'
						-e':alias for --eds'
						--raw-binary':dump output in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme resv report options" _resv_report
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(rpmb)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'info:Print RPMB support information for the controller'
					'program-key:Program the RPMB authentication key'
					'read-counter:Read the RPMB write counter'
					'read-data:Read authenticated data from an RPMB target'
					'write-data:Write authenticated data to an RPMB target'
					'read-config:Read the RPMB device configuration block'
					'write-config:Write the RPMB device configuration block'
				)
				_describe -t commands "nvme rpmb commands" _sub
				return
			fi

			case ${words[2]} in
				(info)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _rpmb_info
					_rpmb_info=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme rpmb info options" _rpmb_info
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(program-key)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--keyfile -g" && return
					local _rpmb_program_key
					_rpmb_program_key=(
						--key=':key to be used for authentication'
						-k':alias for --key'
						--keyfile=':key file that has authentication key to be used'
						-g':alias for --keyfile'
						--target=':RPMB target - numerical value of 0 to 6, default 0'
						-t':alias for --target'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme rpmb program-key options" _rpmb_program_key
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(read-counter)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _rpmb_read_counter
					_rpmb_read_counter=(
						--target=':RPMB target - numerical value of 0 to 6, default 0'
						-t':alias for --target'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme rpmb read-counter options" _rpmb_read_counter
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(read-data)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--msgfile -f" && return
					local _rpmb_read_data
					_rpmb_read_data=(
						--msgfile=':data file to save read data to'
						-f':alias for --msgfile'
						--address=':Sector offset to read from for an RPMB target, default 0'
						-o':alias for --address'
						--blocks=':Number of 512 byte blocks to read'
						-b':alias for --blocks'
						--target=':RPMB target - numerical value of 0 to 6, default 0'
						-t':alias for --target'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme rpmb read-data options" _rpmb_read_data
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(write-data)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--msgfile -f" \
					                "--keyfile -g" && return
					local _rpmb_write_data
					_rpmb_write_data=(
						--msgfile=':data file to be written'
						-f':alias for --msgfile'
						--keyfile=':key file that has authentication key to be used'
						-g':alias for --keyfile'
						--key=':key to be used for authentication'
						-k':alias for --key'
						--msg=':data to be written'
						-d':alias for --msg'
						--address=':Sector offset to write to for an RPMB target, default 0'
						-o':alias for --address'
						--blocks=':Number of 512 byte blocks to write'
						-b':alias for --blocks'
						--target=':RPMB target - numerical value of 0 to 6, default 0'
						-t':alias for --target'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme rpmb write-data options" _rpmb_write_data
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(read-config)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--msgfile -f" && return
					local _rpmb_read_config
					_rpmb_read_config=(
						--msgfile=':data file to save the read configuration block to'
						-f':alias for --msgfile'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme rpmb read-config options" _rpmb_read_config
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(write-config)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--msgfile -f" \
					                "--keyfile -g" && return
					local _rpmb_write_config
					_rpmb_write_config=(
						--msgfile=':data file with the configuration block to be written'
						-f':alias for --msgfile'
						--keyfile=':key file that has authentication key to be used'
						-g':alias for --keyfile'
						--key=':key to be used for authentication'
						-k':alias for --key'
						--msg=':configuration block data to be written'
						-d':alias for --msg'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme rpmb write-config options" _rpmb_write_config
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(sndk)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'vs-internal-log:Sandisk Internal Firmware Log'
					'vs-nand-stats:Sandisk NAND Statistics'
					'vs-smart-add-log:Sandisk Additional Smart Log'
					'clear-pcie-correctable-errors:Sandisk Clear PCIe Correctable Error Count'
					'get-drive-status:Sandisk Get Drive Status'
					'clear-assert-dump:Sandisk Clear Assert Dump'
					'drive-resize:Sandisk Drive Resize'
					'vs-fw-activate-history:Sandisk Get FW Activate History'
					'clear-fw-activate-history:Sandisk Clear FW Activate History'
					'vs-telemetry-controller-option:Sandisk Enable/Disable Controller Initiated Telemetry Log'
					'vs-error-reason-identifier:Sandisk Telemetry Reason Identifier'
					'log-page-directory:Sandisk Get Log Page Directory'
					'namespace-resize:Sandisk NamespaceDrive Resize'
					'vs-drive-info:Sandisk Get Drive Info'
					'vs-temperature-stats:Sandisk Get Temperature Stats'
					'capabilities:Sandisk Device Capabilities'
					'cloud-SSD-plugin-version:Sandisk Cloud SSD Plugin Version'
					'vs-pcie-stats:Sandisk VS PCIE Statistics'
					'get-latency-monitor-log:Sandisk Get Latency Monitor Log Page'
					'get-error-recovery-log:Sandisk Get Error Recovery Log Page'
					'get-dev-capabilities-log:Sandisk Get Device Capabilities Log Page'
					'get-unsupported-reqs-log:Sandisk Get Unsupported Requirements Log Page'
					'cloud-boot-SSD-version:Sandisk Get the Cloud Boot SSD Version'
					'vs-cloud-log:Sandisk Get the Cloud Log Page'
					'vs-hw-rev-log:Sandisk Get the Hardware Revision Log Page'
					'vs-device-waf:Sandisk Calculate Device Write Amplication Factor'
					'set-latency-monitor-feature:Sandisk set Latency Monitor feature'
					'cu-smart-log:Sandisk Get Customer Unique Smart Log'
				)
				_describe -t commands "nvme sndk commands" _sub
				return
			fi

			case ${words[2]} in
				(vs-internal-log)
					_nvme_opt_files "--output-file -O" \
					                "--type -t" && return
					local _sndk_vs_internal_log
					_sndk_vs_internal_log=(
						--output-file=':Output file pathname.'
						-O':alias for --output-file'
						--transfer-size=':Data retrieval transfer size.'
						-s':alias for --transfer-size'
						--data-area=':Data area to retrieve up to. Supported for telemetry, see man page for other use cases.'
						-d':alias for --data-area'
						--type=':Telemetry type - NONE, HOST, CONTROLLER, or BOTH: NONE - Default, capture without using NVMe telemetry. HOST - Host-initiated telemetry. CONTROLLER - Controller-initiated telemetry. BOTH - Both HOST and CONTROLLER telemetry packaged in tar file.'
						-t':alias for --type'
						--verbose':Display more debug messages.'
						-V':alias for --verbose'
						--file-size=':Output file size. Deprecated, see man page for supported devices.'
						-f':alias for --file-size'
						--offset=':Output file data offset. Deprecated, see man page for supported devices.'
						-e':alias for --offset'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk vs-internal-log options" _sndk_vs_internal_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-nand-stats)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_vs_nand_stats
					_sndk_vs_nand_stats=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk vs-nand-stats options" _sndk_vs_nand_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-smart-add-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_vs_smart_add_log
					_sndk_vs_smart_add_log=(
						--interval=':Interval to read the statistics from [1, 15].'
						-i':alias for --interval'
						--log-page-version=':Log Page Version: 0 = vendor, 1 = WDC'
						-l':alias for --log-page-version'
						--log-page-mask=':Log Page Mask, comma separated list: 0xC0, 0xC1, 0xCA, 0xD0'
						-p':alias for --log-page-mask'
						--namespace-id=':desired namespace id'
						-n':alias for --namespace-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk vs-smart-add-log options" _sndk_vs_smart_add_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(clear-pcie-correctable-errors)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_clear_pcie_correctable_errors
					_sndk_clear_pcie_correctable_errors=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk clear-pcie-correctable-errors options" _sndk_clear_pcie_correctable_errors
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-drive-status)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_get_drive_status
					_sndk_get_drive_status=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk get-drive-status options" _sndk_get_drive_status
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(clear-assert-dump)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_clear_assert_dump
					_sndk_clear_assert_dump=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk clear-assert-dump options" _sndk_clear_assert_dump
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(drive-resize)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_drive_resize
					_sndk_drive_resize=(
						--size=':The new size (in GB) to resize the drive to.'
						-s':alias for --size'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk drive-resize options" _sndk_drive_resize
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-fw-activate-history)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_vs_fw_activate_history
					_sndk_vs_fw_activate_history=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk vs-fw-activate-history options" _sndk_vs_fw_activate_history
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(clear-fw-activate-history)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_clear_fw_activate_history
					_sndk_clear_fw_activate_history=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk clear-fw-activate-history options" _sndk_clear_fw_activate_history
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-telemetry-controller-option)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_vs_telemetry_controller_option
					_sndk_vs_telemetry_controller_option=(
						--disable':Disable controller option of the telemetry log page.'
						-d':alias for --disable'
						--enable':Enable controller option of the telemetry log page.'
						-e':alias for --enable'
						--status':Displays the current state of the controller initiated log page.'
						-s':alias for --status'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk vs-telemetry-controller-option options" _sndk_vs_telemetry_controller_option
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-error-reason-identifier)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--file -O" && return
					local _sndk_vs_error_reason_identifier
					_sndk_vs_error_reason_identifier=(
						--log-id=':Log ID to retrieve - host - 7 or controller - 8'
						-i':alias for --log-id'
						--file=':File name to save raw binary identifier'
						-O':alias for --file'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk vs-error-reason-identifier options" _sndk_vs_error_reason_identifier
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(log-page-directory)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_log_page_directory
					_sndk_log_page_directory=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk log-page-directory options" _sndk_log_page_directory
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(namespace-resize)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_namespace_resize
					_sndk_namespace_resize=(
						--namespace-id=':The namespace id to resize.'
						-n':alias for --namespace-id'
						--op-option=':The over provisioning option to set for namespace.'
						-O':alias for --op-option'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk namespace-resize options" _sndk_namespace_resize
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-drive-info)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_vs_drive_info
					_sndk_vs_drive_info=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk vs-drive-info options" _sndk_vs_drive_info
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-temperature-stats)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_vs_temperature_stats
					_sndk_vs_temperature_stats=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk vs-temperature-stats options" _sndk_vs_temperature_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(capabilities)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_capabilities
					_sndk_capabilities=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk capabilities options" _sndk_capabilities
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(cloud-SSD-plugin-version)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_cloud_SSD_plugin_version
					_sndk_cloud_SSD_plugin_version=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk cloud-SSD-plugin-version options" _sndk_cloud_SSD_plugin_version
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-pcie-stats)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_vs_pcie_stats
					_sndk_vs_pcie_stats=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk vs-pcie-stats options" _sndk_vs_pcie_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-latency-monitor-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_get_latency_monitor_log
					_sndk_get_latency_monitor_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk get-latency-monitor-log options" _sndk_get_latency_monitor_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-error-recovery-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_get_error_recovery_log
					_sndk_get_error_recovery_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk get-error-recovery-log options" _sndk_get_error_recovery_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-dev-capabilities-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_get_dev_capabilities_log
					_sndk_get_dev_capabilities_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk get-dev-capabilities-log options" _sndk_get_dev_capabilities_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-unsupported-reqs-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_get_unsupported_reqs_log
					_sndk_get_unsupported_reqs_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk get-unsupported-reqs-log options" _sndk_get_unsupported_reqs_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(cloud-boot-SSD-version)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_cloud_boot_SSD_version
					_sndk_cloud_boot_SSD_version=(
						--namespace-id=':desired namespace id'
						-n':alias for --namespace-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk cloud-boot-SSD-version options" _sndk_cloud_boot_SSD_version
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-cloud-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_vs_cloud_log
					_sndk_vs_cloud_log=(
						--namespace-id=':desired namespace id'
						-n':alias for --namespace-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk vs-cloud-log options" _sndk_vs_cloud_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-hw-rev-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_vs_hw_rev_log
					_sndk_vs_hw_rev_log=(
						--namespace-id=':desired namespace id'
						-n':alias for --namespace-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk vs-hw-rev-log options" _sndk_vs_hw_rev_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-device-waf)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_vs_device_waf
					_sndk_vs_device_waf=(
						--namespace-id=':desired namespace id'
						-n':alias for --namespace-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk vs-device-waf options" _sndk_vs_device_waf
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(set-latency-monitor-feature)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_set_latency_monitor_feature
					_sndk_set_latency_monitor_feature=(
						--active_bucket_timer_threshold=':This is the value that loads the Active Bucket Timer Threshold.'
						-t':alias for --active_bucket_timer_threshold'
						--active_threshold_a=':This is the value that loads into the Active Threshold A.'
						-a':alias for --active_threshold_a'
						--active_threshold_b=':This is the value that loads into the Active Threshold B.'
						-b':alias for --active_threshold_b'
						--active_threshold_c=':This is the value that loads into the Active Threshold C.'
						-c':alias for --active_threshold_c'
						--active_threshold_d=':This is the value that loads into the Active Threshold D.'
						-d':alias for --active_threshold_d'
						--active_latency_config=':This is the value that loads into the Active Latency Configuration.'
						-f':alias for --active_latency_config'
						--active_latency_minimum_window=':This is the value that loads into the Active Latency Minimum Window.'
						-w':alias for --active_latency_minimum_window'
						--debug_log_trigger_enable=':This is the value that loads into the Debug Log Trigger Enable.'
						-r':alias for --debug_log_trigger_enable'
						--discard_debug_log=':Discard Debug Log.'
						-l':alias for --discard_debug_log'
						--latency_monitor_feature_enable=':Latency Monitor Feature Enable.'
						-e':alias for --latency_monitor_feature_enable'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk set-latency-monitor-feature options" _sndk_set_latency_monitor_feature
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(cu-smart-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sndk_cu_smart_log
					_sndk_cu_smart_log=(
						--uuid-index=':The uuid index to select the correct log page implementation.'
						-u':alias for --uuid-index'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sndk cu-smart-log options" _sndk_cu_smart_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(sfx)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'smart-log-add:Retrieve ScaleFlux SMART Log, show it'
					'lat-stats:Retrieve ScaleFlux IO Latency Statistics log, show it'
					'get-bad-block:Retrieve bad block table of block device, show it'
					'query-cap:Query current capacity info'
					'change-cap:Dynamic change capacity'
					'set-feature:Set a feature'
					'get-feature:Get a feature'
					'dump-evtlog:dump evtlog into file and parse warning & error log'
					'expand-cap:expand the last namespace capacity lossless'
					'status:Retrieve the ScaleFlux status output, show it'
				)
				_describe -t commands "nvme sfx commands" _sub
				return
			fi

			case ${words[2]} in
				(smart-log-add)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sfx_smart_log_add
					_sfx_smart_log_add=(
						--namespace-id=':(optional) desired namespace'
						-n':alias for --namespace-id'
						--raw-binary':dump output in binary format'
						-b':alias for --raw-binary'
						--json':Dump output in json format'
						-j':alias for --json'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sfx smart-log-add options" _sfx_smart_log_add
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(lat-stats)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sfx_lat_stats
					_sfx_lat_stats=(
						--write':Get write statistics (read default)'
						-w':alias for --write'
						--raw-binary':dump output in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sfx lat-stats options" _sfx_lat_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-bad-block)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sfx_get_bad_block
					_sfx_get_bad_block=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sfx get-bad-block options" _sfx_get_bad_block
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(query-cap)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sfx_query_cap
					_sfx_query_cap=(
						--raw-binary':dump output in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sfx query-cap options" _sfx_query_cap
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(change-cap)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sfx_change_cap
					_sfx_change_cap=(
						--cap=':cap size in GB'
						-c':alias for --cap'
						--cap-byte=':cap size in byte'
						-z':alias for --cap-byte'
						--force':The "I know what I'\''m doing" flag, skip confirmation before sending command'
						-f':alias for --force'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sfx change-cap options" _sfx_change_cap
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(set-feature)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sfx_set_feature
					_sfx_set_feature=(
						--namespace-id=':desired namespace'
						-n':alias for --namespace-id'
						--feature-id=':hex feature name (required)'
						-f':alias for --feature-id'
						--value=':new value of feature (required)'
						-V':alias for --value'
						--force':The "I know what I'\''m doing" flag, skip confirmation before sending command'
						-s':alias for --force'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sfx set-feature options" _sfx_set_feature
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-feature)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sfx_get_feature
					_sfx_get_feature=(
						--namespace-id=':desired namespace'
						-n':alias for --namespace-id'
						--feature-id=':hex feature name (required)'
						-f':alias for --feature-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sfx get-feature options" _sfx_get_feature
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(dump-evtlog)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--file -f" \
					                "--output -O" && return
					local _sfx_dump_evtlog
					_sfx_dump_evtlog=(
						--file=':evtlog file(required)'
						-f':alias for --file'
						--namespace_id=':desired namespace'
						-n':alias for --namespace_id'
						--storage_medium=':evtlog storage medium 0: nand(default) 1: nor'
						-s':alias for --storage_medium'
						--parse':parse error & warning evtlog from evtlog file'
						-p':alias for --parse'
						--output=':parse result output file'
						-O':alias for --output'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sfx dump-evtlog options" _sfx_dump_evtlog
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(expand-cap)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sfx_expand_cap
					_sfx_expand_cap=(
						--namespace_id=':desired namespace'
						-n':alias for --namespace_id'
						--namespace_size=':namespace size(required)'
						-s':alias for --namespace_size'
						--namespace_cap=':namespace capacity(required)'
						-c':alias for --namespace_cap'
						--lbaf=':LBA format to apply 0: 512(default) 1: 4096'
						-l':alias for --lbaf'
						--units=':namespace size/capacity units 0: GB(default) 1: LBA'
						-u':alias for --units'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sfx expand-cap options" _sfx_expand_cap
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(status)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _sfx_status
					_sfx_status=(
						--json-print':Print output in JSON format, otherwise human readable'
						-j':alias for --json-print'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sfx status options" _sfx_status
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(seagate)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'vs-temperature-stats:Retrieve Seagate temperature statistics'
					'vs-log-page-sup:Retrieve Seagate Supported Log-pages Information'
					'vs-smart-add-log:Retrieve Seagate extended-SMART Information'
					'vs-pcie-stats:Retrieve Seagate PCIe error statistics'
					'clear-pcie-correctable-errors:Clear Seagate PCIe error statistics'
					'get-host-tele:Retrieve Seagate Host-Initiated Telemetry'
					'get-ctrl-tele:Retrieve Seagate Controller-Initiated Telemetry'
					'vs-internal-log:Retrieve Seagate Controller-Initiated Telemetry in binary format'
					'vs-fw-activate-history:Retrieve the Firmware Activation History'
					'clear-fw-activate-history:Clear Firmware Activation History'
					'plugin-version:Shows Seagate plugin'\''s version information'
					'cloud-SSD-plugin-version:Shows OCP Seagate plugin'\''s version information'
				)
				_describe -t commands "nvme seagate commands" _sub
				return
			fi

			case ${words[2]} in
				(vs-temperature-stats)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _seagate_vs_temperature_stats
					_seagate_vs_temperature_stats=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme seagate vs-temperature-stats options" _seagate_vs_temperature_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-log-page-sup)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _seagate_vs_log_page_sup
					_seagate_vs_log_page_sup=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme seagate vs-log-page-sup options" _seagate_vs_log_page_sup
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-smart-add-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _seagate_vs_smart_add_log
					_seagate_vs_smart_add_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme seagate vs-smart-add-log options" _seagate_vs_smart_add_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-pcie-stats)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _seagate_vs_pcie_stats
					_seagate_vs_pcie_stats=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme seagate vs-pcie-stats options" _seagate_vs_pcie_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(clear-pcie-correctable-errors)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _seagate_clear_pcie_correctable_errors
					_seagate_clear_pcie_correctable_errors=(
						--save':specifies that the controller shall save the attribute'
						-s':alias for --save'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme seagate clear-pcie-correctable-errors options" _seagate_clear_pcie_correctable_errors
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-host-tele)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _seagate_get_host_tele
					_seagate_get_host_tele=(
						--namespace-id=':desired namespace'
						-n':alias for --namespace-id'
						--log_specific=':1 - controller shall capture Data representing the internal state of the controller at the time the command is processed. 0 - controller shall not update the Telemetry Host Initiated Data.'
						-i':alias for --log_specific'
						--raw-binary':output in raw format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme seagate get-host-tele options" _seagate_get_host_tele
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-ctrl-tele)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _seagate_get_ctrl_tele
					_seagate_get_ctrl_tele=(
						--namespace-id=':desired namespace'
						-n':alias for --namespace-id'
						--raw-binary':output in raw format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme seagate get-ctrl-tele options" _seagate_get_ctrl_tele
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-internal-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--dump-file -f" && return
					local _seagate_vs_internal_log
					_seagate_vs_internal_log=(
						--namespace-id=':desired namespace'
						-n':alias for --namespace-id'
						--dump-file=':dump file'
						-f':alias for --dump-file'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme seagate vs-internal-log options" _seagate_vs_internal_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-fw-activate-history)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _seagate_vs_fw_activate_history
					_seagate_vs_fw_activate_history=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme seagate vs-fw-activate-history options" _seagate_vs_fw_activate_history
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(clear-fw-activate-history)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _seagate_clear_fw_activate_history
					_seagate_clear_fw_activate_history=(
						--save':specifies that the controller shall save the attribute'
						-s':alias for --save'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme seagate clear-fw-activate-history options" _seagate_clear_fw_activate_history
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(plugin-version)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _seagate_plugin_version
					_seagate_plugin_version=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme seagate plugin-version options" _seagate_plugin_version
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(cloud-SSD-plugin-version)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _seagate_cloud_SSD_plugin_version
					_seagate_cloud_SSD_plugin_version=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme seagate cloud-SSD-plugin-version options" _seagate_cloud_SSD_plugin_version
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(security)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'send:Submit a Security Send command, return results'
					'recv:Submit a Security Receive command, return results'
				)
				_describe -t commands "nvme security commands" _sub
				return
			fi

			case ${words[2]} in
				(send)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--file -f" && return
					local _security_send
					_security_send=(
						--ish':Ignore Shutdown (for NVMe-MI command)'
						-I':alias for --ish'
						--namespace-id=':desired namespace'
						-n':alias for --namespace-id'
						--file=':transfer payload'
						-f':alias for --file'
						--nssf=':NVMe Security Specific Field'
						-N':alias for --nssf'
						--secp=':security protocol (cf. SPC-4)'
						-p':alias for --secp'
						--spsp=':security-protocol-specific (cf. SPC-4)'
						-s':alias for --spsp'
						--tl=':transfer length (cf. SPC-4)'
						-t':alias for --tl'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme security send options" _security_send
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(recv)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _security_recv
					_security_recv=(
						--ish':Ignore Shutdown (for NVMe-MI command)'
						-I':alias for --ish'
						--namespace-id=':desired namespace'
						-n':alias for --namespace-id'
						--size=':size of buffer (prints to stdout on success)'
						-x':alias for --size'
						--nssf=':NVMe Security Specific Field'
						-N':alias for --nssf'
						--secp=':security protocol (cf. SPC-4)'
						-p':alias for --secp'
						--spsp=':security-protocol-specific (cf. SPC-4)'
						-s':alias for --spsp'
						--al=':allocation length (cf. SPC-4)'
						-t':alias for --al'
						--raw-binary':dump output in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme security recv options" _security_recv
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(sed)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'discover:Discover SED Opal Locking Features'
					'1:Discover SED Opal Locking Features'
					'initialize:Initialize a SED Opal Device for locking'
					'revert:Revert a SED Opal Device from locking'
					'lock:Lock a SED Opal Device'
					'unlock:Unlock a SED Opal Device'
					'password:Change the SED Opal Device password'
				)
				_describe -t commands "nvme sed commands" _sub
				return
			fi

			case ${words[2]} in
				(discover|1)
					local _sed_discover
					_sed_discover=(
						--verbose':Print extended discovery information'
						-V':alias for --verbose'
						--udev':Print locking information in form suitable for udev rules'
						-u':alias for --udev'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sed discover options" _sed_discover
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(initialize)
					local _sed_initialize
					_sed_initialize=(
						--read-only':Set locking range to read-only'
						-r':alias for --read-only'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sed initialize options" _sed_initialize
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(revert)
					local _sed_revert
					_sed_revert=(
						--destructive':destructive revert'
						-e':alias for --destructive'
						--psid':PSID revert'
						-p':alias for --psid'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sed revert options" _sed_revert
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(lock)
					local _sed_lock
					_sed_lock=(
						--read-only':Set locking range to read-only'
						-r':alias for --read-only'
						--ask-key':prompt for SED authentication key'
						-k':alias for --ask-key'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sed lock options" _sed_lock
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(unlock)
					local _sed_unlock
					_sed_unlock=(
						--read-only':Set locking range to read-only'
						-r':alias for --read-only'
						--ask-key':prompt for SED authentication key'
						-k':alias for --ask-key'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme sed unlock options" _sed_unlock
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(password)
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(shannon)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'smart-log-add:Retrieve Shannon SMART Log, show it'
					'set-additioal-feature:Set additional Shannon feature'
					'get-additional-feature:Get additional Shannon feature'
					'id-ctrl:Retrieve Shannon ctrl id, show it'
				)
				_describe -t commands "nvme shannon commands" _sub
				return
			fi

			case ${words[2]} in
				(smart-log-add)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _shannon_smart_log_add
					_shannon_smart_log_add=(
						--namespace-id=':(optional) desired namespace'
						-n':alias for --namespace-id'
						--raw-binary':dump output in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme shannon smart-log-add options" _shannon_smart_log_add
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(set-additioal-feature)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--data -d" && return
					local _shannon_set_additioal_feature
					_shannon_set_additioal_feature=(
						--namespace-id=':desired namespace'
						-n':alias for --namespace-id'
						--feature-id=':hex feature name (required)'
						-f':alias for --feature-id'
						--value=':new value of feature (required)'
						-V':alias for --value'
						--data-len=':buffer length if data required'
						-l':alias for --data-len'
						--data=':optional file for feature data (default stdin)'
						-d':alias for --data'
						--save':specifies that the controller shall save the attribute'
						-s':alias for --save'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme shannon set-additioal-feature options" _shannon_set_additioal_feature
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-additional-feature)
					_nvme_opt_vals "--sel -s" "0 1 2 3" \
					               "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _shannon_get_additional_feature
					_shannon_get_additional_feature=(
						--namespace-id=':identifier of desired namespace'
						-n':alias for --namespace-id'
						--feature-id=':hexadecimal feature name'
						-f':alias for --feature-id'
						--sel=':[0-3]: curr./default/saved/supp.'
						-s':alias for --sel'
						--data-len=':buffer len (if) data is returned'
						-l':alias for --data-len'
						--raw-binary':show infos in binary format'
						-b':alias for --raw-binary'
						--cdw11=':dword 11 for interrupt vector config'
						-c':alias for --cdw11'
						--human-readable':show infos in readable format'
						-H':alias for --human-readable'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme shannon get-additional-feature options" _shannon_get_additional_feature
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(id-ctrl)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _shannon_id_ctrl
					_shannon_id_ctrl=(
						--vendor-specific':dump binary vendor field'
						-V':alias for --vendor-specific'
						--raw-binary':show identify in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme shannon id-ctrl options" _shannon_id_ctrl
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(solidigm)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'id-ctrl:Send NVMe Identify Controller'
					'smart-log-add:Retrieve Solidigm SMART Log'
					'vs-smart-add-log:Get SMART / health extended log (redirects to ocp plug-in)'
					'vs-internal-log:Retrieve Debug log binaries'
					'garbage-collect-log:Retrieve Garbage Collection Log'
					'market-log:Retrieve Market Log'
					'latency-tracking-log:Enable/Retrieve Latency tracking Log'
					'parse-telemetry-log:Parse Telemetry Log binary'
					'clear-pcie-correctable-errors:Clear PCIe Correctable Error Counters (redirects to ocp plug-in)'
					'clear-fw-activate-history:Clear firmware update history log (redirects to ocp plug-in)'
					'vs-fw-activate-history:Get firmware activation history log (redirects to ocp plug-in)'
					'log-page-directory:Retrieve log page directory'
					'temp-stats:Retrieve Temperature Statistics log'
					'vs-drive-info:Retrieve drive information'
					'cloud-SSDplugin-version:Prints plug-in OCP version'
					'workload-tracker:Real Time capture Workload Tracker samples'
				)
				_describe -t commands "nvme solidigm commands" _sub
				return
			fi

			case ${words[2]} in
				(id-ctrl)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _solidigm_id_ctrl
					_solidigm_id_ctrl=(
						--vendor-specific':dump binary vendor field'
						-V':alias for --vendor-specific'
						--raw-binary':show identify in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme solidigm id-ctrl options" _solidigm_id_ctrl
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(smart-log-add)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _solidigm_smart_log_add
					_solidigm_smart_log_add=(
						--namespace-id=':(optional) desired namespace'
						-n':alias for --namespace-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme solidigm smart-log-add options" _solidigm_smart_log_add
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-smart-add-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _solidigm_vs_smart_add_log
					_solidigm_vs_smart_add_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme solidigm vs-smart-add-log options" _solidigm_vs_smart_add_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-internal-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--dir-name -d" && return
					local _solidigm_vs_internal_log
					_solidigm_vs_internal_log=(
						--type=':Log type; Defaults to ALL.'
						-t':alias for --type'
						--dir-name=':Output directory; defaults to current working directory.'
						-d':alias for --dir-name'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme solidigm vs-internal-log options" _solidigm_vs_internal_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(garbage-collect-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _solidigm_garbage_collect_log
					_solidigm_garbage_collect_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme solidigm garbage-collect-log options" _solidigm_garbage_collect_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(market-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _solidigm_market_log
					_solidigm_market_log=(
						--raw-binary':dump output in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme solidigm market-log options" _solidigm_market_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(latency-tracking-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _solidigm_latency_tracking_log
					_solidigm_latency_tracking_log=(
						--enable':Enable Latency Tracking'
						-e':alias for --enable'
						--disable':Disable Latency Tracking'
						-d':alias for --disable'
						--read':Get read statistics'
						-r':alias for --read'
						--write':Get write statistics'
						-w':alias for --write'
						--type=':Log type to get'
						-t':alias for --type'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme solidigm latency-tracking-log options" _solidigm_latency_tracking_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(parse-telemetry-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--config-file -j" \
					                "--source-file -s" && return
					local _solidigm_parse_telemetry_log
					_solidigm_parse_telemetry_log=(
						--host-generate=':Controls when to generate new host initiated report. Default value '\''1'\'' generates new host initiated report, value '\''0'\'' causes retrieval of existing log.'
						-g':alias for --host-generate'
						--controller-init':Gather report generated by the controller.'
						-c':alias for --controller-init'
						--data-area=':Pick which telemetry data area to report. Default is 3 to fetch areas 1-3. Valid options are 1, 2, 3, 4.'
						-d':alias for --data-area'
						--config-file=':JSON configuration file'
						-j':alias for --config-file'
						--source-file=':binary file containing log dump'
						-s':alias for --source-file'
						--jq-filter=':JSON config entry name containing jq filter'
						-q':alias for --jq-filter'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme solidigm parse-telemetry-log options" _solidigm_parse_telemetry_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(clear-pcie-correctable-errors)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _solidigm_clear_pcie_correctable_errors
					_solidigm_clear_pcie_correctable_errors=(
						--no-uuid':Skip UUID index search (UUID index not required for OCP 1.0)'
						-n':alias for --no-uuid'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme solidigm clear-pcie-correctable-errors options" _solidigm_clear_pcie_correctable_errors
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(clear-fw-activate-history)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _solidigm_clear_fw_activate_history
					_solidigm_clear_fw_activate_history=(
						--no-uuid':Skip UUID index search (UUID index not required for OCP 1.0)'
						-n':alias for --no-uuid'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme solidigm clear-fw-activate-history options" _solidigm_clear_fw_activate_history
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-fw-activate-history)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _solidigm_vs_fw_activate_history
					_solidigm_vs_fw_activate_history=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme solidigm vs-fw-activate-history options" _solidigm_vs_fw_activate_history
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(log-page-directory)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _solidigm_log_page_directory
					_solidigm_log_page_directory=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme solidigm log-page-directory options" _solidigm_log_page_directory
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(temp-stats)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _solidigm_temp_stats
					_solidigm_temp_stats=(
						--raw-binary':dump output in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme solidigm temp-stats options" _solidigm_temp_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-drive-info)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _solidigm_vs_drive_info
					_solidigm_vs_drive_info=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme solidigm vs-drive-info options" _solidigm_vs_drive_info
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(cloud-SSDplugin-version)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _solidigm_cloud_SSDplugin_version
					_solidigm_cloud_SSDplugin_version=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme solidigm cloud-SSDplugin-version options" _solidigm_cloud_SSDplugin_version
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(workload-tracker)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _solidigm_workload_tracker
					_solidigm_workload_tracker=(
						--uuid-index=':specify uuid index'
						-U':alias for --uuid-index'
						--enable':tracker enable'
						-e':alias for --enable'
						--disable':tracker disable'
						-d':alias for --disable'
						--sample-time=':Sample interval'
						-s':alias for --sample-time'
						--type=':Tracker type'
						-t':alias for --type'
						--run-time=':Limit runtime capture time in seconds'
						-r':alias for --run-time'
						--flush-freq=':Samples (1 to 126) to wait for extracting data. Default 100 samples'
						-f':alias for --flush-freq'
						--wall-clock':Logs current wall timestamp when entry was retrieved'
						-w':alias for --wall-clock'
						--trigger-field=':Field name to stop trigger on'
						-T':alias for --trigger-field'
						--trigger-threshold=':Field value to trigger stop sampling'
						-V':alias for --trigger-threshold'
						--trigger-on-delta':Trigger on delta to stop sampling'
						-D':alias for --trigger-on-delta'
						--trigger-on-latency':Use latency tracker to trigger stop sampling'
						-L':alias for --trigger-on-latency'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme solidigm workload-tracker options" _solidigm_workload_tracker
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(ssstc)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'smart-log-add:Retrieve ssstc SMART Log, show it'
				)
				_describe -t commands "nvme ssstc commands" _sub
				return
			fi

			case ${words[2]} in
				(smart-log-add)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ssstc_smart_log_add
					_ssstc_smart_log_add=(
						--namespace-id=':(optional) desired namespace'
						-n':alias for --namespace-id'
						--raw-binary':Dump output in binary format'
						-b':alias for --raw-binary'
						--json':Dump output in json format'
						-j':alias for --json'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ssstc smart-log-add options" _ssstc_smart_log_add
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(toshiba)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'vs-smart-add-log:Extended SMART information'
					'vs-internal-log:Get Internal Log'
					'clear-pcie-correctable-errors:Clear PCIe correctable error count'
				)
				_describe -t commands "nvme toshiba commands" _sub
				return
			fi

			case ${words[2]} in
				(vs-smart-add-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--output-file -O" && return
					local _toshiba_vs_smart_add_log
					_toshiba_vs_smart_add_log=(
						--namespace-id=':(optional) desired namespace'
						-n':alias for --namespace-id'
						--output-file=':(optional) binary output filename'
						-O':alias for --output-file'
						--log=':(optional) log ID (0xC0, or 0xCA), default 0xCA'
						-l':alias for --log'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme toshiba vs-smart-add-log options" _toshiba_vs_smart_add_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-internal-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--output-file -O" && return
					local _toshiba_vs_internal_log
					_toshiba_vs_internal_log=(
						--output-file=':(optional) binary output filename'
						-O':alias for --output-file'
						--prev-log':(optional) use previous log. Otherwise uses current log.'
						-p':alias for --prev-log'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme toshiba vs-internal-log options" _toshiba_vs_internal_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(clear-pcie-correctable-errors)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _toshiba_clear_pcie_correctable_errors
					_toshiba_clear_pcie_correctable_errors=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme toshiba clear-pcie-correctable-errors options" _toshiba_clear_pcie_correctable_errors
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(transcend)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'healthvalue:NVME health percentage'
					'badblock:Get NVME bad block number'
				)
				_describe -t commands "nvme transcend commands" _sub
				return
			fi

			case ${words[2]} in
				(healthvalue)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _transcend_healthvalue
					_transcend_healthvalue=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme transcend healthvalue options" _transcend_healthvalue
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(badblock)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _transcend_badblock
					_transcend_badblock=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme transcend badblock options" _transcend_badblock
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(utils)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'dump-command-metadata:Dump all commands and their options as JSON'
				)
				_describe -t commands "nvme utils commands" _sub
				return
			fi

			case ${words[2]} in
				(dump-command-metadata)
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(virtium)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'save-smart-to-vtview-log:Periodically save smart attributes into a log file. The data in this log file can be analyzed using excel or using Virtium’s vtView. Visit vtView.virtium.com to see full potential uses of the data'
					'show-identify:Shows detail features and current settings'
				)
				_describe -t commands "nvme virtium commands" _sub
				return
			fi

			case ${words[2]} in
				(save-smart-to-vtview-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--output-file -O" && return
					local _virtium_save_smart_to_vtview_log
					_virtium_save_smart_to_vtview_log=(
						--run-time=':(optional) Number of hours to log data (default = 20 hours)'
						-r':alias for --run-time'
						--freq=':(optional) How often you want to log SMART data (0.25 = 15'\'' , 0.5 = 30'\'' , 1 = 1 hour, 2 = 2 hours, etc.). Default = 10 hours.'
						-f':alias for --freq'
						--output-file=':(optional) Name of the log file (give it a name that easy for you to remember what the test is). You can leave it blank too, we will take care it for you.'
						-O':alias for --output-file'
						--test-name=':(optional) Name of the test you are doing. We use this as part of the name of the log file.'
						-n':alias for --test-name'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme virtium save-smart-to-vtview-log options" _virtium_save_smart_to_vtview_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(show-identify)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _virtium_show_identify
					_virtium_show_identify=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme virtium show-identify options" _virtium_show_identify
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(wdc)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'cap-diag:WDC Capture-Diagnostics'
					'drive-log:WDC Drive Log'
					'get-crash-dump:WDC Crash Dump'
					'get-pfail-dump:WDC Pfail Dump'
					'id-ctrl:WDC identify controller'
					'purge:WDC Purge'
					'purge-monitor:WDC Purge Monitor'
					'vs-internal-log:WDC Internal Firmware Log'
					'vs-nand-stats:WDC NAND Statistics'
					'vs-smart-add-log:WDC Additional Smart Log'
					'clear-pcie-correctable-errors:WDC Clear PCIe Correctable Error Count'
					'drive-essentials:WDC Drive Essentials'
					'get-drive-status:WDC Get Drive Status'
					'clear-assert-dump:WDC Clear Assert Dump'
					'drive-resize:WDC Drive Resize'
					'vs-fw-activate-history:WDC Get FW Activate History'
					'clear-fw-activate-history:WDC Clear FW Activate History'
					'enc-get-log:WDC Get Enclosure Log'
					'vs-telemetry-controller-option:WDC Enable/Disable Controller Initiated Telemetry Log'
					'vs-error-reason-identifier:WDC Telemetry Reason Identifier'
					'log-page-directory:WDC Get Log Page Directory'
					'namespace-resize:WDC NamespaceDrive Resize'
					'vs-drive-info:WDC Get Drive Info'
					'vs-temperature-stats:WDC Get Temperature Stats'
					'capabilities:WDC Device Capabilities'
					'cloud-SSD-plugin-version:WDC Cloud SSD Plugin Version'
					'vs-pcie-stats:WDC VS PCIE Statistics'
					'get-latency-monitor-log:WDC Get Latency Monitor Log Page'
					'get-error-recovery-log:WDC Get Error Recovery Log Page'
					'get-dev-capabilities-log:WDC Get Device Capabilities Log Page'
					'get-unsupported-reqs-log:WDC Get Unsupported Requirements Log Page'
					'cloud-boot-SSD-version:WDC Get the Cloud Boot SSD Version'
					'vs-cloud-log:WDC Get the Cloud Log Page'
					'vs-hw-rev-log:WDC Get the Hardware Revision Log Page'
					'vs-device-waf:WDC Calculate Device Write Amplication Factor'
					'set-latency-monitor-feature:WDC set Latency Monitor feature'
					'cu-smart-log:WDC Get Customer Unique Smart Log'
				)
				_describe -t commands "nvme wdc commands" _sub
				return
			fi

			case ${words[2]} in
				(cap-diag)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--output-file -O" && return
					local _wdc_cap_diag
					_wdc_cap_diag=(
						--output-file=':Output file pathname.'
						-O':alias for --output-file'
						--transfer-size=':Data retrieval transfer size.'
						-s':alias for --transfer-size'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc cap-diag options" _wdc_cap_diag
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(drive-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--output-file -O" && return
					local _wdc_drive_log
					_wdc_drive_log=(
						--output-file=':Output file pathname.'
						-O':alias for --output-file'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc drive-log options" _wdc_drive_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-crash-dump)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--output-file -O" && return
					local _wdc_get_crash_dump
					_wdc_get_crash_dump=(
						--output-file=':Output file pathname.'
						-O':alias for --output-file'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc get-crash-dump options" _wdc_get_crash_dump
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-pfail-dump)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--output-file -O" && return
					local _wdc_get_pfail_dump
					_wdc_get_pfail_dump=(
						--output-file=':Output file pathname.'
						-O':alias for --output-file'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc get-pfail-dump options" _wdc_get_pfail_dump
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(id-ctrl)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_id_ctrl
					_wdc_id_ctrl=(
						--vendor-specific':dump binary vendor field'
						-V':alias for --vendor-specific'
						--raw-binary':show identify in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc id-ctrl options" _wdc_id_ctrl
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(purge)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_purge
					_wdc_purge=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc purge options" _wdc_purge
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(purge-monitor)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_purge_monitor
					_wdc_purge_monitor=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc purge-monitor options" _wdc_purge_monitor
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-internal-log)
					_nvme_opt_files "--output-file -O" \
					                "--type -t" && return
					local _wdc_vs_internal_log
					_wdc_vs_internal_log=(
						--output-file=':Output file pathname.'
						-O':alias for --output-file'
						--transfer-size=':Data retrieval transfer size.'
						-s':alias for --transfer-size'
						--data-area=':Data area to retrieve up to. Supported for telemetry, see man page for other use cases.'
						-d':alias for --data-area'
						--type=':Telemetry type - NONE, HOST, or CONTROLLER: NONE - Default, capture without using NVMe telemetry. HOST - Host-initiated telemetry. CONTROLLER - Controller-initiated telemetry.'
						-t':alias for --type'
						--verbose':Display more debug messages.'
						-V':alias for --verbose'
						--file-size=':Output file size. Deprecated, see man page for supported devices.'
						-f':alias for --file-size'
						--offset=':Output file data offset. Deprecated, see man page for supported devices.'
						-e':alias for --offset'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc vs-internal-log options" _wdc_vs_internal_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-nand-stats)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_vs_nand_stats
					_wdc_vs_nand_stats=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc vs-nand-stats options" _wdc_vs_nand_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-smart-add-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_vs_smart_add_log
					_wdc_vs_smart_add_log=(
						--interval=':Interval to read the statistics from [1, 15].'
						-i':alias for --interval'
						--log-page-version=':Log Page Version: 0 = vendor, 1 = WDC'
						-l':alias for --log-page-version'
						--log-page-mask=':Log Page Mask, comma separated list: 0xC0, 0xC1, 0xCA, 0xD0'
						-p':alias for --log-page-mask'
						--namespace-id=':desired namespace id'
						-n':alias for --namespace-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc vs-smart-add-log options" _wdc_vs_smart_add_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(clear-pcie-correctable-errors)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_clear_pcie_correctable_errors
					_wdc_clear_pcie_correctable_errors=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc clear-pcie-correctable-errors options" _wdc_clear_pcie_correctable_errors
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(drive-essentials)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--dir-name -d" && return
					local _wdc_drive_essentials
					_wdc_drive_essentials=(
						--dir-name=':Output directory pathname.'
						-d':alias for --dir-name'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc drive-essentials options" _wdc_drive_essentials
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-drive-status)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_get_drive_status
					_wdc_get_drive_status=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc get-drive-status options" _wdc_get_drive_status
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(clear-assert-dump)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_clear_assert_dump
					_wdc_clear_assert_dump=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc clear-assert-dump options" _wdc_clear_assert_dump
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(drive-resize)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_drive_resize
					_wdc_drive_resize=(
						--size=':The new size (in GB) to resize the drive to.'
						-s':alias for --size'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc drive-resize options" _wdc_drive_resize
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-fw-activate-history)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_vs_fw_activate_history
					_wdc_vs_fw_activate_history=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc vs-fw-activate-history options" _wdc_vs_fw_activate_history
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(clear-fw-activate-history)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_clear_fw_activate_history
					_wdc_clear_fw_activate_history=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc clear-fw-activate-history options" _wdc_clear_fw_activate_history
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(enc-get-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--output-file -O" && return
					local _wdc_enc_get_log
					_wdc_enc_get_log=(
						--output-file=':Output file pathname.'
						-O':alias for --output-file'
						--transfer-size=':Data retrieval transfer size.'
						-s':alias for --transfer-size'
						--log-id=':Enclosure Log Page ID.'
						-l':alias for --log-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc enc-get-log options" _wdc_enc_get_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-telemetry-controller-option)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_vs_telemetry_controller_option
					_wdc_vs_telemetry_controller_option=(
						--disable':Disable controller option of the telemetry log page.'
						-d':alias for --disable'
						--enable':Enable controller option of the telemetry log page.'
						-e':alias for --enable'
						--status':Displays the current state of the controller initiated log page.'
						-s':alias for --status'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc vs-telemetry-controller-option options" _wdc_vs_telemetry_controller_option
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-error-reason-identifier)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--file -O" && return
					local _wdc_vs_error_reason_identifier
					_wdc_vs_error_reason_identifier=(
						--log-id=':Log ID to retrieve - host - 7 or controller - 8'
						-i':alias for --log-id'
						--file=':File name to save raw binary identifier'
						-O':alias for --file'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc vs-error-reason-identifier options" _wdc_vs_error_reason_identifier
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(log-page-directory)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_log_page_directory
					_wdc_log_page_directory=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc log-page-directory options" _wdc_log_page_directory
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(namespace-resize)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_namespace_resize
					_wdc_namespace_resize=(
						--namespace-id=':The namespace id to resize.'
						-n':alias for --namespace-id'
						--op-option=':The over provisioning option to set for namespace.'
						-O':alias for --op-option'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc namespace-resize options" _wdc_namespace_resize
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-drive-info)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_vs_drive_info
					_wdc_vs_drive_info=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc vs-drive-info options" _wdc_vs_drive_info
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-temperature-stats)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_vs_temperature_stats
					_wdc_vs_temperature_stats=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc vs-temperature-stats options" _wdc_vs_temperature_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(capabilities)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_capabilities
					_wdc_capabilities=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc capabilities options" _wdc_capabilities
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(cloud-SSD-plugin-version)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_cloud_SSD_plugin_version
					_wdc_cloud_SSD_plugin_version=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc cloud-SSD-plugin-version options" _wdc_cloud_SSD_plugin_version
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-pcie-stats)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_vs_pcie_stats
					_wdc_vs_pcie_stats=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc vs-pcie-stats options" _wdc_vs_pcie_stats
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-latency-monitor-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_get_latency_monitor_log
					_wdc_get_latency_monitor_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc get-latency-monitor-log options" _wdc_get_latency_monitor_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-error-recovery-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_get_error_recovery_log
					_wdc_get_error_recovery_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc get-error-recovery-log options" _wdc_get_error_recovery_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-dev-capabilities-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_get_dev_capabilities_log
					_wdc_get_dev_capabilities_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc get-dev-capabilities-log options" _wdc_get_dev_capabilities_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(get-unsupported-reqs-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_get_unsupported_reqs_log
					_wdc_get_unsupported_reqs_log=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc get-unsupported-reqs-log options" _wdc_get_unsupported_reqs_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(cloud-boot-SSD-version)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_cloud_boot_SSD_version
					_wdc_cloud_boot_SSD_version=(
						--namespace-id=':desired namespace id'
						-n':alias for --namespace-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc cloud-boot-SSD-version options" _wdc_cloud_boot_SSD_version
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-cloud-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_vs_cloud_log
					_wdc_vs_cloud_log=(
						--namespace-id=':desired namespace id'
						-n':alias for --namespace-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc vs-cloud-log options" _wdc_vs_cloud_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-hw-rev-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_vs_hw_rev_log
					_wdc_vs_hw_rev_log=(
						--namespace-id=':desired namespace id'
						-n':alias for --namespace-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc vs-hw-rev-log options" _wdc_vs_hw_rev_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(vs-device-waf)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_vs_device_waf
					_wdc_vs_device_waf=(
						--namespace-id=':desired namespace id'
						-n':alias for --namespace-id'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc vs-device-waf options" _wdc_vs_device_waf
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(set-latency-monitor-feature)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_set_latency_monitor_feature
					_wdc_set_latency_monitor_feature=(
						--active_bucket_timer_threshold=':This is the value that loads the Active Bucket Timer Threshold.'
						-t':alias for --active_bucket_timer_threshold'
						--active_threshold_a=':This is the value that loads into the Active Threshold A.'
						-a':alias for --active_threshold_a'
						--active_threshold_b=':This is the value that loads into the Active Threshold B.'
						-b':alias for --active_threshold_b'
						--active_threshold_c=':This is the value that loads into the Active Threshold C.'
						-c':alias for --active_threshold_c'
						--active_threshold_d=':This is the value that loads into the Active Threshold D.'
						-d':alias for --active_threshold_d'
						--active_latency_config=':This is the value that loads into the Active Latency Configuration.'
						-f':alias for --active_latency_config'
						--active_latency_minimum_window=':This is the value that loads into the Active Latency Minimum Window.'
						-w':alias for --active_latency_minimum_window'
						--debug_log_trigger_enable=':This is the value that loads into the Debug Log Trigger Enable.'
						-r':alias for --debug_log_trigger_enable'
						--discard_debug_log=':Discard Debug Log.'
						-l':alias for --discard_debug_log'
						--latency_monitor_feature_enable=':Latency Monitor Feature Enable.'
						-e':alias for --latency_monitor_feature_enable'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc set-latency-monitor-feature options" _wdc_set_latency_monitor_feature
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(cu-smart-log)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _wdc_cu_smart_log
					_wdc_cu_smart_log=(
						--uuid-index=':The uuid index to select the correct log page implementation.'
						-u':alias for --uuid-index'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme wdc cu-smart-log options" _wdc_cu_smart_log
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(ymtc)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'smart-log-add:Retrieve YMTC SMART Log, show it'
				)
				_describe -t commands "nvme ymtc commands" _sub
				return
			fi

			case ${words[2]} in
				(smart-log-add)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _ymtc_smart_log_add
					_ymtc_smart_log_add=(
						--namespace-id=':(optional) desired namespace'
						-n':alias for --namespace-id'
						--raw-binary':dump output in binary format'
						-b':alias for --raw-binary'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme ymtc smart-log-add options" _ymtc_smart_log_add
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(zns)
			if (( CURRENT == 2 )); then
				local -a _sub
				_sub=(
					'list:List all NVMe devices with Zoned Namespace Command Set support'
					'id-ctrl:Send NVMe Identify Zoned Namespace Controller, display structure'
					'id-ns:Send NVMe Identify Zoned Namespace Namespace, display structure'
					'report-zones:Report zones associated to a Zoned Namespace'
					'reset-zone:Reset one or more zones'
					'close-zone:Close one or more zones'
					'finish-zone:Finish one or more zones'
					'open-zone:Open one or more zones'
					'offline-zone:Offline one or more zones'
					'set-zone-desc:Attach zone descriptor extension data to a zone'
					'zrwa-flush-zone:Flush LBAs associated with a ZRWA to a zone.'
					'changed-zone-list:Retrieve the changed zone list log'
					'zone-mgmt-recv:Send the zone management receive command'
					'zone-mgmt-send:Send the zone management send command'
					'zone-append:Append data and metadata (if applicable) to a zone'
				)
				_describe -t commands "nvme zns commands" _sub
				return
			fi

			case ${words[2]} in
				(list)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _zns_list
					_zns_list=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme zns list options" _zns_list
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(id-ctrl)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _zns_id_ctrl
					_zns_id_ctrl=(
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme zns id-ctrl options" _zns_id_ctrl
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(id-ns)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _zns_id_ns
					_zns_id_ns=(
						--namespace-id=':Namespace identifier to use'
						-n':alias for --namespace-id'
						--vendor-specific':dump binary vendor fields'
						-V':alias for --vendor-specific'
						--human-readable':show identify in readable format'
						-H':alias for --human-readable'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme zns id-ns options" _zns_id_ns
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(report-zones)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _zns_report_zones
					_zns_report_zones=(
						--namespace-id=':Namespace identifier to use'
						-n':alias for --namespace-id'
						--start-lba=':starting LBA of the zone'
						-s':alias for --start-lba'
						--descs=':number of descriptors to retrieve (default: all of them)'
						-d':alias for --descs'
						--state=':state of zones to list'
						-S':alias for --state'
						--verbose':show report zones verbosity'
						-V':alias for --verbose'
						--extended':set to use the extended report zones'
						-e':alias for --extended'
						--partial':set to use the partial report'
						-p':alias for --partial'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme zns report-zones options" _zns_report_zones
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(reset-zone)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _zns_reset_zone
					_zns_reset_zone=(
						--namespace-id=':Namespace identifier to use'
						-n':alias for --namespace-id'
						--start-lba=':starting LBA of the zone for this command'
						-s':alias for --start-lba'
						--select-all':send command to all zones'
						-a':alias for --select-all'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme zns reset-zone options" _zns_reset_zone
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(close-zone)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _zns_close_zone
					_zns_close_zone=(
						--namespace-id=':Namespace identifier to use'
						-n':alias for --namespace-id'
						--start-lba=':starting LBA of the zone for this command'
						-s':alias for --start-lba'
						--select-all':send command to all zones'
						-a':alias for --select-all'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme zns close-zone options" _zns_close_zone
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(finish-zone)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _zns_finish_zone
					_zns_finish_zone=(
						--namespace-id=':Namespace identifier to use'
						-n':alias for --namespace-id'
						--start-lba=':starting LBA of the zone for this command'
						-s':alias for --start-lba'
						--select-all':send command to all zones'
						-a':alias for --select-all'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme zns finish-zone options" _zns_finish_zone
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(open-zone)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _zns_open_zone
					_zns_open_zone=(
						--namespace-id=':Namespace identifier to use'
						-n':alias for --namespace-id'
						--start-lba=':starting LBA of the zone for this command'
						-s':alias for --start-lba'
						--zrwaa':Allocate Zone Random Write Area to zone'
						-r':alias for --zrwaa'
						--select-all':send command to all zones'
						-a':alias for --select-all'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme zns open-zone options" _zns_open_zone
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(offline-zone)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _zns_offline_zone
					_zns_offline_zone=(
						--namespace-id=':Namespace identifier to use'
						-n':alias for --namespace-id'
						--start-lba=':starting LBA of the zone for this command'
						-s':alias for --start-lba'
						--select-all':send command to all zones'
						-a':alias for --select-all'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme zns offline-zone options" _zns_offline_zone
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(set-zone-desc)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--data -d" && return
					local _zns_set_zone_desc
					_zns_set_zone_desc=(
						--namespace-id=':Namespace identifier to use'
						-n':alias for --namespace-id'
						--start-lba=':starting LBA of the zone for this command'
						-s':alias for --start-lba'
						--zrwaa':Allocate Zone Random Write Area to zone'
						-r':alias for --zrwaa'
						--data=':optional file for zone extension data (default stdin)'
						-d':alias for --data'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme zns set-zone-desc options" _zns_set_zone_desc
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(zrwa-flush-zone)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _zns_zrwa_flush_zone
					_zns_zrwa_flush_zone=(
						--namespace-id=':Namespace identifier to use'
						-n':alias for --namespace-id'
						--lba=':LBA to flush up to'
						-l':alias for --lba'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme zns zrwa-flush-zone options" _zns_zrwa_flush_zone
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(changed-zone-list)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _zns_changed_zone_list
					_zns_changed_zone_list=(
						--namespace-id=':Namespace identifier to use'
						-n':alias for --namespace-id'
						--rae':retain an asynchronous event'
						-r':alias for --rae'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme zns changed-zone-list options" _zns_changed_zone_list
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(zone-mgmt-recv)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					local _zns_zone_mgmt_recv
					_zns_zone_mgmt_recv=(
						--namespace-id=':Namespace identifier to use'
						-n':alias for --namespace-id'
						--start-lba=':starting LBA of the zone'
						-s':alias for --start-lba'
						--zra=':Zone Receive Action'
						-z':alias for --zra'
						--zrasf=':Zone Receive Action Specific Field(Reporting Options)'
						-S':alias for --zrasf'
						--partial':Zone Receive Action Specific Features(Partial Report)'
						-p':alias for --partial'
						--data-len=':length of data in bytes'
						-l':alias for --data-len'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme zns zone-mgmt-recv options" _zns_zone_mgmt_recv
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(zone-mgmt-send)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--data -d" && return
					local _zns_zone_mgmt_send
					_zns_zone_mgmt_send=(
						--namespace-id=':Namespace identifier to use'
						-n':alias for --namespace-id'
						--start-lba=':starting LBA of the zone for this command(for flush action, last lba to flush)'
						-s':alias for --start-lba'
						--zsaso':Zone Send Action Specific Option'
						-O':alias for --zsaso'
						--select-all':send command to all zones'
						-a':alias for --select-all'
						--zsa=':zone send action'
						-z':alias for --zsa'
						--data-len=':buffer length if data required'
						-l':alias for --data-len'
						--data=':optional file for data (default stdin)'
						-d':alias for --data'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme zns zone-mgmt-send options" _zns_zone_mgmt_send
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(zone-append)
					_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
					               "--output-format-version" "1 2" && return
					_nvme_opt_files "--data -d" \
					                "--metadata -M" && return
					local _zns_zone_append
					_zns_zone_append=(
						--namespace-id=':Namespace identifier to use'
						-n':alias for --namespace-id'
						--zslba=':starting LBA of the zone'
						-s':alias for --zslba'
						--data-size=':size of data in bytes'
						-z':alias for --data-size'
						--metadata-size=':size of metadata in bytes'
						-y':alias for --metadata-size'
						--data=':file containing data to write'
						-d':alias for --data'
						--metadata=':file with metadata to be written'
						-M':alias for --metadata'
						--limited-retry':limit media access attempts'
						-l':alias for --limited-retry'
						--force-unit-access':force unit access'
						-f':alias for --force-unit-access'
						--prinfo=':protection information action and checks field'
						-p':alias for --prinfo'
						--piremap':protection information remap (for type 1 PI)'
						-P':alias for --piremap'
						--latency':output latency statistics'
						-t':alias for --latency'
						--verbose':Increase output verbosity'
						-v':alias for --verbose'
						--quiet':suppress output messages, overwrites verbose mode'
						--output-format=':Output format: normal|json|binary'
						-o':alias for --output-format'
						--timeout=':timeout value, in milliseconds'
						--dry-run':show command instead of executing'
						--no-retries':disable retry logic on errors'
						--no-ioctl-probing':disable 64-bit IOCTL support probing'
						--output-format-version=':output format version: 1|2'
						--set-options=':set a libnvme library option (key=value[,key=value,...]);'
						--help':show help'
						-h':alias for --help'
					)
					_arguments '*:: :->subcmds'
					_nvme_describe "nvme zns zone-append options" _zns_zone_append
					_nvme_has_device || compadd -- /dev/nvme*(N)
					;;

				(*)
					_files
					;;
			esac
			;;

		(list)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _list
			_list=(
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme list options" _list
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(list-subsys)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _list_subsys
			_list_subsys=(
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme list-subsys options" _list_subsys
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(show-topology)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _show_topology
			_show_topology=(
				--ranking=':Ranking order: namespace|ctrl|multipath'
				-r':alias for --ranking'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|tabular'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme show-topology options" _show_topology
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(top)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _top
			_top=(
				--delay=':refresh interval in seconds'
				-d':alias for --delay'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme top options" _top
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(reset)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _reset
			_reset=(
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme reset options" _reset
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(subsystem-reset)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _subsystem_reset
			_subsystem_reset=(
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme subsystem-reset options" _subsystem_reset
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(ns-rescan)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _ns_rescan
			_ns_rescan=(
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme ns-rescan options" _ns_rescan
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(virt-mgmt)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _virt_mgmt
			_virt_mgmt=(
				--cntlid=':Controller Identifier(CNTLID)'
				-c':alias for --cntlid'
				--rt=':Resource Type(RT): [0,1] 0h: VQ Resources 1h: VI Resources'
				-r':alias for --rt'
				--act=':Action(ACT): [1,7,8,9] 1h: Primary Flexible 7h: Secondary Offline 8h: Secondary Assign 9h: Secondary Online'
				-a':alias for --act'
				--nr=':Number of Controller Resources(NR)'
				-n':alias for --nr'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme virt-mgmt options" _virt_mgmt
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(id-ctrl)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _id_ctrl
			_id_ctrl=(
				--vendor-specific':dump binary vendor field'
				-V':alias for --vendor-specific'
				--raw-binary':show identify in binary format'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme id-ctrl options" _id_ctrl
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(id-ns)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _id_ns
			_id_ns=(
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--force':Return this namespace, even if not attached (1.2 devices only)'
				--vendor-specific':dump binary vendor fields'
				-V':alias for --vendor-specific'
				--raw-binary':show identify in binary format'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme id-ns options" _id_ns
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(id-ns-granularity)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _id_ns_granularity
			_id_ns_granularity=(
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme id-ns-granularity options" _id_ns_granularity
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(id-ns-lba-format)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _id_ns_lba_format
			_id_ns_lba_format=(
				--lba-format-index=':The index into the LBA Format list identifying the LBA Format capabilities that are to be returned'
				-i':alias for --lba-format-index'
				--uuid-index=':UUID index'
				-U':alias for --uuid-index'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme id-ns-lba-format options" _id_ns_lba_format
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(list-ns)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _list_ns
			_list_ns=(
				--namespace-id=':first nsid returned list should start from'
				-n':alias for --namespace-id'
				--csi=':I/O command set identifier'
				-y':alias for --csi'
				--all':show all namespaces in the subsystem, whether attached or inactive'
				-a':alias for --all'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme list-ns options" _list_ns
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(list-ctrl)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _list_ctrl
			_list_ctrl=(
				--cntid=':controller to display'
				-c':alias for --cntid'
				--namespace-id=':optional namespace attached to controller'
				-n':alias for --namespace-id'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme list-ctrl options" _list_ctrl
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(nvm-id-ctrl)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _nvm_id_ctrl
			_nvm_id_ctrl=(
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme nvm-id-ctrl options" _nvm_id_ctrl
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(nvm-id-ns)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _nvm_id_ns
			_nvm_id_ns=(
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--uuid-index=':UUID index'
				-U':alias for --uuid-index'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme nvm-id-ns options" _nvm_id_ns
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(nvm-id-ns-lba-format)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _nvm_id_ns_lba_format
			_nvm_id_ns_lba_format=(
				--lba-format-index=':The index into the LBA Format list identifying the LBA Format capabilities that are to be returned'
				-i':alias for --lba-format-index'
				--uuid-index=':UUID index'
				-U':alias for --uuid-index'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme nvm-id-ns-lba-format options" _nvm_id_ns_lba_format
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(primary-ctrl-caps)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _primary_ctrl_caps
			_primary_ctrl_caps=(
				--cntlid=':Controller ID'
				-c':alias for --cntlid'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme primary-ctrl-caps options" _primary_ctrl_caps
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(list-secondary)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _list_secondary
			_list_secondary=(
				--cntid=':lowest controller identifier to display'
				-c':alias for --cntid'
				--num-entries=':number of entries to retrieve'
				-e':alias for --num-entries'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme list-secondary options" _list_secondary
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(cmdset-ind-id-ns)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _cmdset_ind_id_ns
			_cmdset_ind_id_ns=(
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--raw-binary':show identify in binary format'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme cmdset-ind-id-ns options" _cmdset_ind_id_ns
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(ns-descs)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _ns_descs
			_ns_descs=(
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--raw-binary':show descriptors in binary format'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme ns-descs options" _ns_descs
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(id-nvmset)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _id_nvmset
			_id_nvmset=(
				--nvmset_id=':NVM Set Identify value'
				-i':alias for --nvmset_id'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme id-nvmset options" _id_nvmset
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(id-uuid)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _id_uuid
			_id_uuid=(
				--raw-binary':show uuid in binary format'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme id-uuid options" _id_uuid
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(id-iocs)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _id_iocs
			_id_iocs=(
				--controller-id=':identifier of desired controller'
				-c':alias for --controller-id'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme id-iocs options" _id_iocs
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(id-domain)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _id_domain
			_id_domain=(
				--dom-id=':identifier of desired domain'
				-d':alias for --dom-id'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme id-domain options" _id_domain
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(list-endgrp)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _list_endgrp
			_list_endgrp=(
				--endgrp-id=':Endurance Group ID'
				-i':alias for --endgrp-id'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme list-endgrp options" _list_endgrp
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(create-ns)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _create_ns
			_create_ns=(
				--ish':Ignore Shutdown (for NVMe-MI command)'
				-I':alias for --ish'
				--nsze=':size of ns (NSZE)'
				-s':alias for --nsze'
				--ncap=':capacity of ns (NCAP)'
				-c':alias for --ncap'
				--flbas=':Formatted LBA size (FLBAS), if entering this value ignore '\''block-size'\'' field'
				-f':alias for --flbas'
				--dps=':data protection settings (DPS)'
				-d':alias for --dps'
				--nmic=':multipath and sharing capabilities (NMIC)'
				-m':alias for --nmic'
				--anagrp-id=':ANA Group Identifier (ANAGRPID)'
				-a':alias for --anagrp-id'
				--nvmset-id=':NVM Set Identifier (NVMSETID)'
				-i':alias for --nvmset-id'
				--endg-id=':Endurance Group Identifier (ENDGID)'
				-e':alias for --endg-id'
				--block-size=':target block size, specify only if '\''FLBAS'\'' value not entered'
				-b':alias for --block-size'
				--csi=':command set identifier (CSI)'
				-y':alias for --csi'
				--lbstm=':logical block storage tag mask (LBSTM)'
				-l':alias for --lbstm'
				--nphndls=':Number of Placement Handles (NPHNDLS)'
				-n':alias for --nphndls'
				--nsze-si=':size of ns (NSZE) in standard SI units'
				-S':alias for --nsze-si'
				--ncap-si=':capacity of ns (NCAP) in standard SI units'
				-C':alias for --ncap-si'
				--azr':Allocate ZRWA Resources (AZR) for Zoned Namespace Command Set'
				-z':alias for --azr'
				--rar=':Requested Active Resources (RAR) for Zoned Namespace Command Set'
				-r':alias for --rar'
				--ror=':Requested Open Resources (ROR) for Zoned Namespace Command Set'
				-O':alias for --ror'
				--rnumzrwa=':Requested Number of ZRWA Resources (RNUMZRWA) for Zoned Namespace Command Set'
				-u':alias for --rnumzrwa'
				--phndls=':Comma separated list of Placement Handle Associated RUH'
				-p':alias for --phndls'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme create-ns options" _create_ns
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(delete-ns)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _delete_ns
			_delete_ns=(
				--ish':Ignore Shutdown (for NVMe-MI command)'
				-I':alias for --ish'
				--namespace-id=':namespace to delete'
				-n':alias for --namespace-id'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme delete-ns options" _delete_ns
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(attach-ns)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _attach_ns
			_attach_ns=(
				--ish':Ignore Shutdown (for NVMe-MI command)'
				-I':alias for --ish'
				--namespace-id=':namespace to attach'
				-n':alias for --namespace-id'
				--controllers=':optional comma-sep controller id list'
				-c':alias for --controllers'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme attach-ns options" _attach_ns
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(detach-ns)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _detach_ns
			_detach_ns=(
				--ish':Ignore Shutdown (for NVMe-MI command)'
				-I':alias for --ish'
				--namespace-id=':namespace to attach'
				-n':alias for --namespace-id'
				--controllers=':optional comma-sep controller id list'
				-c':alias for --controllers'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme detach-ns options" _detach_ns
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(get-ns-id)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _get_ns_id
			_get_ns_id=(
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme get-ns-id options" _get_ns_id
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(supported-log-pages)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _supported_log_pages
			_supported_log_pages=(
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme supported-log-pages options" _supported_log_pages
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(telemetry-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			_nvme_opt_files "--output-file -O" && return
			local _telemetry_log
			_telemetry_log=(
				--output-file=':File name to save raw binary, includes header'
				-O':alias for --output-file'
				--host-generate=':Have the host tell the controller to generate the report'
				-g':alias for --host-generate'
				--controller-init':Gather report generated by the controller.'
				-c':alias for --controller-init'
				--data-area=':Pick which telemetry data area to report. Default is 3 to fetch areas 1-3. Valid options are 1, 2, 3, 4.'
				-d':alias for --data-area'
				--rae':Retain an Asynchronous Event'
				-r':alias for --rae'
				--mcda=':Host-init Maximum Created Data Area. Valid options are 0 ~ 4 If given, This option will override dgen. 0 : controller determines data area'
				-m':alias for --mcda'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme telemetry-log options" _telemetry_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(fw-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _fw_log
			_fw_log=(
				--raw-binary':use binary output'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme fw-log options" _fw_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(changed-ns-list-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _changed_ns_list_log
			_changed_ns_list_log=(
				--raw-binary':output in binary format'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme changed-ns-list-log options" _changed_ns_list_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(smart-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _smart_log
			_smart_log=(
				--namespace-id=':(optional) desired namespace'
				-n':alias for --namespace-id'
				--raw-binary':output in binary format'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme smart-log options" _smart_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(ana-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _ana_log
			_ana_log=(
				--groups':Return ANA groups only.'
				-g':alias for --groups'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme ana-log options" _ana_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(error-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _error_log
			_error_log=(
				--log-entries=':number of entries to retrieve'
				-e':alias for --log-entries'
				--raw-binary':dump in binary format'
				-b':alias for --raw-binary'
				--valid-entry':output valid entry only'
				-V':alias for --valid-entry'
				--sqid=':output specified SQID entry only'
				-S':alias for --sqid'
				--status=':output specified STATUS entry only'
				-s':alias for --status'
				--lba=':output specified LBA entry only'
				-l':alias for --lba'
				--namespace-id=':output specified NSID entry only'
				-n':alias for --namespace-id'
				--trtype=':output specified TRTYPE entry only'
				-t':alias for --trtype'
				--csi=':output specified CSI entry only'
				-c':alias for --csi'
				--opcode=':output specified OPC entry only'
				-O':alias for --opcode'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme error-log options" _error_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(effects-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _effects_log
			_effects_log=(
				--raw-binary':show log in binary format'
				-b':alias for --raw-binary'
				--csi=':command set identifier'
				-c':alias for --csi'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme effects-log options" _effects_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(endurance-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _endurance_log
			_endurance_log=(
				--group-id=':The endurance group identifier'
				-g':alias for --group-id'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme endurance-log options" _endurance_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(predictable-lat-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _predictable_lat_log
			_predictable_lat_log=(
				--nvmset-id=':NVM Set Identifier'
				-i':alias for --nvmset-id'
				--raw-binary':use binary output'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme predictable-lat-log options" _predictable_lat_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(pred-lat-event-agg-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _pred_lat_event_agg_log
			_pred_lat_event_agg_log=(
				--log-entries=':Number of pending NVM Set log Entries list'
				-e':alias for --log-entries'
				--rae':Retain an Asynchronous Event'
				-r':alias for --rae'
				--raw-binary':use binary output'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme pred-lat-event-agg-log options" _pred_lat_event_agg_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(persistent-event-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _persistent_event_log
			_persistent_event_log=(
				--action=':action the controller shall take during processing this persistent log page command.'
				-a':alias for --action'
				--log_len=':number of bytes to retrieve'
				-l':alias for --log_len'
				--raw-binary':use binary output'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme persistent-event-log options" _persistent_event_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(endurance-event-agg-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _endurance_event_agg_log
			_endurance_event_agg_log=(
				--log-entries=':Number of pending Endurance Group Event log Entries list'
				-e':alias for --log-entries'
				--rae':Retain an Asynchronous Event'
				-r':alias for --rae'
				--raw-binary':use binary output'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme endurance-event-agg-log options" _endurance_event_agg_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(lba-status-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _lba_status_log
			_lba_status_log=(
				--rae':Retain an Asynchronous Event'
				-r':alias for --rae'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme lba-status-log options" _lba_status_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(resv-notif-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _resv_notif_log
			_resv_notif_log=(
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme resv-notif-log options" _resv_notif_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(boot-part-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			_nvme_opt_files "--output-file -f" && return
			local _boot_part_log
			_boot_part_log=(
				--lsp=':log specific field'
				-s':alias for --lsp'
				--output-file=':boot partition data output file name'
				-f':alias for --output-file'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme boot-part-log options" _boot_part_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(phy-rx-eom-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _phy_rx_eom_log
			_phy_rx_eom_log=(
				--lsp=':log specific field'
				-s':alias for --lsp'
				--controller=':Target Controller ID.'
				-c':alias for --controller'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme phy-rx-eom-log options" _phy_rx_eom_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(self-test-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _self_test_log
			_self_test_log=(
				--dst-entries=':Indicate how many DST log entries to be retrieved, by default all the 20 entries will be retrieved'
				-e':alias for --dst-entries'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme self-test-log options" _self_test_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(fid-support-effects-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _fid_support_effects_log
			_fid_support_effects_log=(
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme fid-support-effects-log options" _fid_support_effects_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(mi-cmd-support-effects-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _mi_cmd_support_effects_log
			_mi_cmd_support_effects_log=(
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme mi-cmd-support-effects-log options" _mi_cmd_support_effects_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(media-unit-stat-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _media_unit_stat_log
			_media_unit_stat_log=(
				--domain-id=':Domain Identifier'
				-d':alias for --domain-id'
				--raw-binary':use binary output'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme media-unit-stat-log options" _media_unit_stat_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(supported-cap-config-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _supported_cap_config_log
			_supported_cap_config_log=(
				--domain-id=':Domain Identifier'
				-d':alias for --domain-id'
				--raw-binary':use binary output'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme supported-cap-config-log options" _supported_cap_config_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(mgmt-addr-list-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _mgmt_addr_list_log
			_mgmt_addr_list_log=(
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme mgmt-addr-list-log options" _mgmt_addr_list_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(rotational-media-info-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _rotational_media_info_log
			_rotational_media_info_log=(
				--endg-id=':Endurance Group Identifier (ENDGID)'
				-e':alias for --endg-id'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme rotational-media-info-log options" _rotational_media_info_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(changed-alloc-ns-list-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _changed_alloc_ns_list_log
			_changed_alloc_ns_list_log=(
				--raw-binary':output in binary format'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme changed-alloc-ns-list-log options" _changed_alloc_ns_list_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(dispersed-ns-participating-nss-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _dispersed_ns_participating_nss_log
			_dispersed_ns_participating_nss_log=(
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme dispersed-ns-participating-nss-log options" _dispersed_ns_participating_nss_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(reachability-groups-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _reachability_groups_log
			_reachability_groups_log=(
				--groups-only':Return Groups Only'
				-g':alias for --groups-only'
				--rae':Retain an Asynchronous Event'
				-r':alias for --rae'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme reachability-groups-log options" _reachability_groups_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(reachability-associations-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _reachability_associations_log
			_reachability_associations_log=(
				--associations-only':Return Associations Only'
				-a':alias for --associations-only'
				--rae':Retain an Asynchronous Event'
				-r':alias for --rae'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme reachability-associations-log options" _reachability_associations_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(host-discovery-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _host_discovery_log
			_host_discovery_log=(
				--all-host-entries':All Host Entries'
				-a':alias for --all-host-entries'
				--rae':Retain an Asynchronous Event'
				-r':alias for --rae'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme host-discovery-log options" _host_discovery_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(ave-discovery-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _ave_discovery_log
			_ave_discovery_log=(
				--rae':Retain an Asynchronous Event'
				-r':alias for --rae'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme ave-discovery-log options" _ave_discovery_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(pull-model-ddc-req-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _pull_model_ddc_req_log
			_pull_model_ddc_req_log=(
				--rae':Retain an Asynchronous Event'
				-r':alias for --rae'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme pull-model-ddc-req-log options" _pull_model_ddc_req_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(power-measurement-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _power_measurement_log
			_power_measurement_log=(
				--raw-binary':output in binary format'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme power-measurement-log options" _power_measurement_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(fw-commit|fw-activate)
			_nvme_opt_vals "--action -a" "replace replace-and-activate set-active replace-and-activate-immediate replace-boot-partition activate-boot-partition" \
			               "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _fw_commit
			_fw_commit=(
				--ish':Ignore Shutdown (for NVMe-MI command)'
				-I':alias for --ish'
				--slot=':[0-7]: firmware slot for commit action'
				-s':alias for --slot'
				--action=':[0-7]: commit action: 0 = replace, 1 = replace and activate, 2 = set active, 3 = replace and activate immediate, 6 = replace boot partition, 7 = activate boot partition'
				-a':alias for --action'
				--bpid=':[0,1]: boot partition identifier, if applicable (default: 0)'
				-b':alias for --bpid'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme fw-commit options" _fw_commit
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(fw-download)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			_nvme_opt_files "--fw -f" && return
			local _fw_download
			_fw_download=(
				--fw=':firmware file (required)'
				-f':alias for --fw'
				--ish':Ignore Shutdown (for NVMe-MI command)'
				-I':alias for --ish'
				--xfer=':transfer chunksize limit'
				-x':alias for --xfer'
				--offset=':starting dword offset, default 0'
				-O':alias for --offset'
				--progress':display firmware transfer progress'
				-p':alias for --progress'
				--ignore-ovr':ignore overwrite errors'
				-i':alias for --ignore-ovr'
				--stream':read firmware in transfer-sized chunks'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme fw-download options" _fw_download
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(security-send)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			_nvme_opt_files "--file -f" && return
			local _security_send
			_security_send=(
				--ish':Ignore Shutdown (for NVMe-MI command)'
				-I':alias for --ish'
				--namespace-id=':desired namespace'
				-n':alias for --namespace-id'
				--file=':transfer payload'
				-f':alias for --file'
				--nssf=':NVMe Security Specific Field'
				-N':alias for --nssf'
				--secp=':security protocol (cf. SPC-4)'
				-p':alias for --secp'
				--spsp=':security-protocol-specific (cf. SPC-4)'
				-s':alias for --spsp'
				--tl=':transfer length (cf. SPC-4)'
				-t':alias for --tl'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme security-send options" _security_send
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(security-recv)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _security_recv
			_security_recv=(
				--ish':Ignore Shutdown (for NVMe-MI command)'
				-I':alias for --ish'
				--namespace-id=':desired namespace'
				-n':alias for --namespace-id'
				--size=':size of buffer (prints to stdout on success)'
				-x':alias for --size'
				--nssf=':NVMe Security Specific Field'
				-N':alias for --nssf'
				--secp=':security protocol (cf. SPC-4)'
				-p':alias for --secp'
				--spsp=':security-protocol-specific (cf. SPC-4)'
				-s':alias for --spsp'
				--al=':allocation length (cf. SPC-4)'
				-t':alias for --al'
				--raw-binary':dump output in binary format'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme security-recv options" _security_recv
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(resv-acquire)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _resv_acquire
			_resv_acquire=(
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--crkey=':current reservation key'
				-c':alias for --crkey'
				--prkey=':pre-empt reservation key'
				-p':alias for --prkey'
				--rtype=':reservation type'
				-t':alias for --rtype'
				--racqa=':reservation acquire action'
				-a':alias for --racqa'
				--iekey':ignore existing res. key'
				-i':alias for --iekey'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme resv-acquire options" _resv_acquire
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(resv-register)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _resv_register
			_resv_register=(
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--crkey=':current reservation key'
				-c':alias for --crkey'
				--nrkey=':new reservation key'
				-k':alias for --nrkey'
				--rrega=':reservation registration action'
				-r':alias for --rrega'
				--cptpl=':change persistence through power loss setting'
				-p':alias for --cptpl'
				--iekey':ignore existing res. key'
				-i':alias for --iekey'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme resv-register options" _resv_register
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(resv-release)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _resv_release
			_resv_release=(
				--namespace-id=':desired namespace'
				-n':alias for --namespace-id'
				--crkey=':current reservation key'
				-c':alias for --crkey'
				--rtype=':reservation type'
				-t':alias for --rtype'
				--rrela=':reservation release action'
				-a':alias for --rrela'
				--iekey':ignore existing res. key'
				-i':alias for --iekey'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme resv-release options" _resv_release
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(resv-report)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _resv_report
			_resv_report=(
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--numd=':number of dwords to transfer'
				-d':alias for --numd'
				--eds':request extended data structure'
				-e':alias for --eds'
				--raw-binary':dump output in binary format'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme resv-report options" _resv_report
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(sanitize-log)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _sanitize_log
			_sanitize_log=(
				--rae':Retain an Asynchronous Event'
				-r':alias for --rae'
				--raw-binary':show log in binary format'
				-b':alias for --raw-binary'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme sanitize-log options" _sanitize_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(gen-dhchap-key)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _gen_dhchap_key
			_gen_dhchap_key=(
				--secret=':Optional secret (in hexadecimal characters) to be placed in the representation.'
				-s':alias for --secret'
				--key-length=':Length of the secret (32, 48, or 64 bytes).'
				-l':alias for --key-length'
				--nqn=':Accepted and ignored; nvme-cli 2.x keyed the transform with it.'
				-n':alias for --nqn'
				--hmac=':Hash function the consumer is to apply to the secret (0 = none, 1 = SHA-256, 2 = SHA-384, 3 = SHA-512).'
				-m':alias for --hmac'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme gen-dhchap-key options" _gen_dhchap_key
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(check-dhchap-key)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _check_dhchap_key
			_check_dhchap_key=(
				--key=':KX-HMAC-CHAP secret (in DHHC-1 interchange format) to be validated. Reads from stdin if not given.'
				-k':alias for --key'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme check-dhchap-key options" _check_dhchap_key
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(gen-tls-key)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _gen_tls_key
			_gen_tls_key=(
				--keyring=':Keyring for the TLS PSK.'
				-k':alias for --keyring'
				--keytype=':Key type of the TLS PSK.'
				-t':alias for --keytype'
				--hostnqn=':Host NQN for the retained PSK and the TLS PSK identity.'
				-n':alias for --hostnqn'
				--subsysnqn=':Subsystem NQN for the TLS PSK identity.'
				-c':alias for --subsysnqn'
				--secret=':Optional configured PSK (in hexadecimal characters) to be used.'
				-s':alias for --secret'
				--keyfile=':Append the identity of the TLS PSK, and the TLS PSK itself, to keyfile.'
				-f':alias for --keyfile'
				--hmac=':Hash function for the retained PSK and for the cipher suite the TLS PSK is bound to (1 = SHA-256, 2 = SHA-384).'
				-m':alias for --hmac'
				--identity=':TLS PSK identity version to use (0 = obsolete; 1 = TLS 1.3 with the PSK digest in the identity)'
				-I':alias for --identity'
				--insert':Additionally insert the TLS PSK into the keyring.'
				-i':alias for --insert'
				--compat':Use non-RFC 8446 compliant algorithm for deriving the retained PSK and the TLS PSK for older implementations.'
				-C':alias for --compat'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme gen-tls-key options" _gen_tls_key
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(check-tls-key)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _check_tls_key
			_check_tls_key=(
				--keyring=':Keyring to check for an already loaded TLS PSK.'
				-k':alias for --keyring'
				--keytype=':Key type of the TLS PSK to look up.'
				-t':alias for --keytype'
				--hostnqn=':Host NQN for the TLS PSK identity.'
				-n':alias for --hostnqn'
				--subsysnqn=':Subsystem NQN for the TLS PSK identity. If not given, only the format is validated.'
				-c':alias for --subsysnqn'
				--keydata=':Configured PSK (in PSK Interchange format) to be validated. Reads from stdin if not given.'
				-d':alias for --keydata'
				--identity=':TLS PSK identity version to use (0 = obsolete; 1 = TLS 1.3 with the PSK digest in the identity)'
				-I':alias for --identity'
				--compat':Use non-RFC 8446 compliant algorithm for deriving the TLS PSK identity for older implementations.'
				-C':alias for --compat'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme check-tls-key options" _check_tls_key
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(tls-key)
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(dir-receive)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _dir_receive
			_dir_receive=(
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--data-len=':buffer len (if) data is sent or received'
				-l':alias for --data-len'
				--raw-binary':show directive in binary format'
				-b':alias for --raw-binary'
				--dir-type=':directive type'
				-D':alias for --dir-type'
				--dir-spec=':directive specification associated with directive type'
				-S':alias for --dir-spec'
				--dir-oper=':directive operation'
				-O':alias for --dir-oper'
				--req-resource=':namespace stream requested'
				-r':alias for --req-resource'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme dir-receive options" _dir_receive
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(dir-send)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			_nvme_opt_files "--input-file -i" && return
			local _dir_send
			_dir_send=(
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--data-len=':buffer len (if) data is sent or received'
				-l':alias for --data-len'
				--dir-type=':directive type'
				-D':alias for --dir-type'
				--target-dir=':target directive type to be enabled/disabled'
				-T':alias for --target-dir'
				--dir-spec=':directive specification associated with directive type'
				-S':alias for --dir-spec'
				--dir-oper=':directive operation'
				-O':alias for --dir-oper'
				--endir=':directive enable'
				-e':alias for --endir'
				--raw-binary':show directive in binary format'
				-b':alias for --raw-binary'
				--input-file=':write/send file (default stdin)'
				-i':alias for --input-file'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme dir-send options" _dir_send
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(io-mgmt-recv)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			_nvme_opt_files "--data -d" && return
			local _io_mgmt_recv
			_io_mgmt_recv=(
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--mos=':management operation specific'
				-s':alias for --mos'
				--mo=':management operation'
				-m':alias for --mo'
				--data=':optional file for data (default stdout)'
				-d':alias for --data'
				--data-len=':buffer len (if) data is sent or received'
				-l':alias for --data-len'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme io-mgmt-recv options" _io_mgmt_recv
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(io-mgmt-send)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			_nvme_opt_files "--data -d" && return
			local _io_mgmt_send
			_io_mgmt_send=(
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--mos=':management operation specific'
				-s':alias for --mos'
				--mo=':management operation'
				-m':alias for --mo'
				--data=':optional file for data (default stdin)'
				-d':alias for --data'
				--data-len=':buffer len (if) data is sent or received'
				-l':alias for --data-len'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme io-mgmt-send options" _io_mgmt_send
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(nvme-mi-recv)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			_nvme_opt_files "--input-file -i" && return
			local _nvme_mi_recv
			_nvme_mi_recv=(
				--opcode=':opcode (required)'
				-O':alias for --opcode'
				--namespace-id=':desired namespace'
				-n':alias for --namespace-id'
				--data-len=':data I/O length (bytes)'
				-l':alias for --data-len'
				--nmimt=':nvme-mi message type'
				-m':alias for --nmimt'
				--nmd0=':nvme management dword 0 value'
				-0':alias for --nmd0'
				--nmd1=':nvme management dword 1 value'
				-1':alias for --nmd1'
				--input-file=':data input or output file'
				-i':alias for --input-file'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme nvme-mi-recv options" _nvme_mi_recv
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(nvme-mi-send)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			_nvme_opt_files "--input-file -i" && return
			local _nvme_mi_send
			_nvme_mi_send=(
				--opcode=':opcode (required)'
				-O':alias for --opcode'
				--namespace-id=':desired namespace'
				-n':alias for --namespace-id'
				--data-len=':data I/O length (bytes)'
				-l':alias for --data-len'
				--nmimt=':nvme-mi message type'
				-m':alias for --nmimt'
				--nmd0=':nvme management dword 0 value'
				-0':alias for --nmd0'
				--nmd1=':nvme management dword 1 value'
				-1':alias for --nmd1'
				--input-file=':data input or output file'
				-i':alias for --input-file'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme nvme-mi-send options" _nvme_mi_send
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(get-log)
			_nvme_opt_vals "--log-id -i" "supported-log-pages error smart fw-slot changed-attached-ns changed-ns cmd-effects device-self-test telemetry-host telemetry-ctrl endurance-group predictable-lat-nvmset predictable-lat-agg ana persistent-event lba-status endurance-grp-evt media-unit-status supported-cap-config-list fid-supported-effects mi-cmd-supported-effects cmd-and-feat-lockdown boot-partition rotational-media-info dispersed-ns-participating-ns mgmt-addr-list phy-rx-eom reachability-groups reachability-associations changed-alloc-ns-list fdp-configs fdp-ruh-usage fdp-stats fdp-events discover host-discover ave-discover pull-model-ddc-req reservation sanitize zns-changed-zones" \
			               "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _get_log
			_get_log=(
				--ish':Ignore Shutdown (for NVMe-MI command)'
				-I':alias for --ish'
				--namespace-id=':desired namespace'
				-n':alias for --namespace-id'
				--log-id=':identifier of log to retrieve'
				-i':alias for --log-id'
				--log-len=':how many bytes to retrieve'
				-l':alias for --log-len'
				--aen=':result of the aen, use to override log id'
				-a':alias for --aen'
				--lpo=':log page offset specifies the location within a log page from where to start returning data'
				-L':alias for --lpo'
				--lsp=':log specific field'
				-s':alias for --lsp'
				--lsi=':log specific identifier specifies an identifier that is required for a particular log page'
				-S':alias for --lsi'
				--rae':Retain an Asynchronous Event'
				-r':alias for --rae'
				--uuid-index=':UUID index'
				-U':alias for --uuid-index'
				--raw-binary':output in raw format'
				-b':alias for --raw-binary'
				--csi=':command set identifier'
				-y':alias for --csi'
				--ot':offset type'
				-O':alias for --ot'
				--xfer-len=':read chunk size (default 4k)'
				-x':alias for --xfer-len'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme get-log options" _get_log
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(discover)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			_nvme_opt_files "--raw -r" \
			                "--config -J" && return
			local _discover
			_discover=(
				--transport=':transport type'
				-t':alias for --transport'
				--nqn=':subsystem nqn'
				-n':alias for --nqn'
				--traddr=':transport address'
				-a':alias for --traddr'
				--trsvcid=':transport service id (e.g. IP port)'
				-s':alias for --trsvcid'
				--host-traddr=':host traddr (e.g. FC WWN'\''s)'
				-w':alias for --host-traddr'
				--host-iface=':host interface (for tcp transport)'
				-f':alias for --host-iface'
				--hostnqn=':user-defined hostnqn'
				-q':alias for --hostnqn'
				--hostid=':user-defined hostid (if default not used)'
				-I':alias for --hostid'
				--kxchap-secret=':user-defined kxchap secret (if default not used)'
				-S':alias for --kxchap-secret'
				--kxchap-ctrl-secret=':user-defined kxchap controller secret (for bi-directional authentication)'
				-C':alias for --kxchap-ctrl-secret'
				--keyring=':Keyring for TLS key lookup (key id or keyring name)'
				--tls-key=':TLS key to use (key id or key in interchange format)'
				--tls-key-identity=':TLS key identity'
				--nr-io-queues=':number of io queues to use (default is core count)'
				-i':alias for --nr-io-queues'
				--nr-write-queues=':number of write queues to use (default 0)'
				-W':alias for --nr-write-queues'
				--nr-poll-queues=':number of poll queues to use (default 0)'
				-P':alias for --nr-poll-queues'
				--queue-size=':number of io queue elements to use (default 128)'
				-Q':alias for --queue-size'
				--keep-alive-tmo=':keep alive timeout period in seconds'
				-k':alias for --keep-alive-tmo'
				--reconnect-delay=':reconnect timeout period in seconds'
				-c':alias for --reconnect-delay'
				--ctrl-loss-tmo=':controller loss timeout period in seconds'
				-l':alias for --ctrl-loss-tmo'
				--fast-io-fail-tmo=':fast I/O fail timeout (default off)'
				-F':alias for --fast-io-fail-tmo'
				--tos=':type of service'
				-T':alias for --tos'
				--tls_key=':TLS key to use (key id)'
				--duplicate-connect':allow duplicate connections between same transport host and subsystem port'
				-D':alias for --duplicate-connect'
				--disable-sqflow':disable controller sq flow control (default false)'
				--hdr-digest':enable transport protocol header digest (TCP transport)'
				-g':alias for --hdr-digest'
				--data-digest':enable transport protocol data digest (TCP transport)'
				-G':alias for --data-digest'
				--tls':enable TLS'
				--concat':enable secure concatenation'
				--device=':use existing discovery controller device'
				-d':alias for --device'
				--raw=':save raw output to file'
				-r':alias for --raw'
				--persistent=':persistent discovery connection mode (default: no; auto if given bare)'
				-p':alias for --persistent'
				--config=':Use specified INI configuration file (auto-converts a legacy .json) or '\''none'\'' to disable'
				-J':alias for --config'
				--no-reuse':always create a new connection, never reuse an existing one'
				--force':deprecated, see --no-reuse'
				--nbft':Only look at NBFT tables'
				--no-nbft':Do not look at NBFT tables'
				--owner=':record this owner in the registry'
				--nbft-path=':user-defined path for NBFT tables'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme discover options" _discover
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(connect-all)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			_nvme_opt_files "--raw -r" \
			                "--config -J" && return
			local _connect_all
			_connect_all=(
				--transport=':transport type'
				-t':alias for --transport'
				--nqn=':subsystem nqn'
				-n':alias for --nqn'
				--traddr=':transport address'
				-a':alias for --traddr'
				--trsvcid=':transport service id (e.g. IP port)'
				-s':alias for --trsvcid'
				--host-traddr=':host traddr (e.g. FC WWN'\''s)'
				-w':alias for --host-traddr'
				--host-iface=':host interface (for tcp transport)'
				-f':alias for --host-iface'
				--hostnqn=':user-defined hostnqn'
				-q':alias for --hostnqn'
				--hostid=':user-defined hostid (if default not used)'
				-I':alias for --hostid'
				--kxchap-secret=':user-defined kxchap secret (if default not used)'
				-S':alias for --kxchap-secret'
				--kxchap-ctrl-secret=':user-defined kxchap controller secret (for bi-directional authentication)'
				-C':alias for --kxchap-ctrl-secret'
				--keyring=':Keyring for TLS key lookup (key id or keyring name)'
				--tls-key=':TLS key to use (key id or key in interchange format)'
				--tls-key-identity=':TLS key identity'
				--nr-io-queues=':number of io queues to use (default is core count)'
				-i':alias for --nr-io-queues'
				--nr-write-queues=':number of write queues to use (default 0)'
				-W':alias for --nr-write-queues'
				--nr-poll-queues=':number of poll queues to use (default 0)'
				-P':alias for --nr-poll-queues'
				--queue-size=':number of io queue elements to use (default 128)'
				-Q':alias for --queue-size'
				--keep-alive-tmo=':keep alive timeout period in seconds'
				-k':alias for --keep-alive-tmo'
				--reconnect-delay=':reconnect timeout period in seconds'
				-c':alias for --reconnect-delay'
				--ctrl-loss-tmo=':controller loss timeout period in seconds'
				-l':alias for --ctrl-loss-tmo'
				--fast-io-fail-tmo=':fast I/O fail timeout (default off)'
				-F':alias for --fast-io-fail-tmo'
				--tos=':type of service'
				-T':alias for --tos'
				--tls_key=':TLS key to use (key id)'
				--duplicate-connect':allow duplicate connections between same transport host and subsystem port'
				-D':alias for --duplicate-connect'
				--disable-sqflow':disable controller sq flow control (default false)'
				--hdr-digest':enable transport protocol header digest (TCP transport)'
				-g':alias for --hdr-digest'
				--data-digest':enable transport protocol data digest (TCP transport)'
				-G':alias for --data-digest'
				--tls':enable TLS'
				--concat':enable secure concatenation'
				--device=':use existing discovery controller device'
				-d':alias for --device'
				--raw=':save raw output to file'
				-r':alias for --raw'
				--persistent=':persistent discovery connection mode (default: no; auto if given bare)'
				-p':alias for --persistent'
				--config=':Use specified INI configuration file (auto-converts a legacy .json) or '\''none'\'' to disable'
				-J':alias for --config'
				--no-reuse':always create a new connection, never reuse an existing one'
				--force':deprecated, see --no-reuse'
				--nbft':Only look at NBFT tables'
				--no-nbft':Do not look at NBFT tables'
				--owner=':record this owner in the registry'
				--nbft-path=':user-defined path for NBFT tables'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme connect-all options" _connect_all
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(connect)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			_nvme_opt_files "--config -J" \
			                "--devid-file" && return
			local _connect
			_connect=(
				--transport=':transport type'
				-t':alias for --transport'
				--nqn=':subsystem nqn'
				-n':alias for --nqn'
				--traddr=':transport address'
				-a':alias for --traddr'
				--trsvcid=':transport service id (e.g. IP port)'
				-s':alias for --trsvcid'
				--host-traddr=':host traddr (e.g. FC WWN'\''s)'
				-w':alias for --host-traddr'
				--host-iface=':host interface (for tcp transport)'
				-f':alias for --host-iface'
				--hostnqn=':user-defined hostnqn'
				-q':alias for --hostnqn'
				--hostid=':user-defined hostid (if default not used)'
				-I':alias for --hostid'
				--kxchap-secret=':user-defined kxchap secret (if default not used)'
				-S':alias for --kxchap-secret'
				--kxchap-ctrl-secret=':user-defined kxchap controller secret (for bi-directional authentication)'
				-C':alias for --kxchap-ctrl-secret'
				--keyring=':Keyring for TLS key lookup (key id or keyring name)'
				--tls-key=':TLS key to use (key id or key in interchange format)'
				--tls-key-identity=':TLS key identity'
				--nr-io-queues=':number of io queues to use (default is core count)'
				-i':alias for --nr-io-queues'
				--nr-write-queues=':number of write queues to use (default 0)'
				-W':alias for --nr-write-queues'
				--nr-poll-queues=':number of poll queues to use (default 0)'
				-P':alias for --nr-poll-queues'
				--queue-size=':number of io queue elements to use (default 128)'
				-Q':alias for --queue-size'
				--keep-alive-tmo=':keep alive timeout period in seconds'
				-k':alias for --keep-alive-tmo'
				--reconnect-delay=':reconnect timeout period in seconds'
				-c':alias for --reconnect-delay'
				--ctrl-loss-tmo=':controller loss timeout period in seconds'
				-l':alias for --ctrl-loss-tmo'
				--fast-io-fail-tmo=':fast I/O fail timeout (default off)'
				-F':alias for --fast-io-fail-tmo'
				--tos=':type of service'
				-T':alias for --tos'
				--tls_key=':TLS key to use (key id)'
				--duplicate-connect':allow duplicate connections between same transport host and subsystem port'
				-D':alias for --duplicate-connect'
				--disable-sqflow':disable controller sq flow control (default false)'
				--hdr-digest':enable transport protocol header digest (TCP transport)'
				-g':alias for --hdr-digest'
				--data-digest':enable transport protocol data digest (TCP transport)'
				-G':alias for --data-digest'
				--tls':enable TLS'
				--concat':enable secure concatenation'
				--config=':Use specified INI configuration file (auto-converts a legacy .json) or '\''none'\'' to disable'
				-J':alias for --config'
				--owner=':record this owner in the registry'
				--devid-file=':write connected device name to FILE'
				--idempotent':exit 0 if already connected'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme connect options" _connect
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(disconnect)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _disconnect
			_disconnect=(
				--transport=':transport type'
				-t':alias for --transport'
				--nqn=':subsystem nqn'
				-n':alias for --nqn'
				--traddr=':transport address'
				-a':alias for --traddr'
				--trsvcid=':transport service id (e.g. IP port)'
				-s':alias for --trsvcid'
				--host-traddr=':host traddr (e.g. FC WWN'\''s)'
				-w':alias for --host-traddr'
				--host-iface=':host interface (for tcp transport)'
				-f':alias for --host-iface'
				--hostnqn=':user-defined hostnqn'
				-q':alias for --hostnqn'
				--hostid=':user-defined hostid (if default not used)'
				-I':alias for --hostid'
				--kxchap-secret=':user-defined kxchap secret (if default not used)'
				-S':alias for --kxchap-secret'
				--kxchap-ctrl-secret=':user-defined kxchap controller secret (for bi-directional authentication)'
				-C':alias for --kxchap-ctrl-secret'
				--keyring=':Keyring for TLS key lookup (key id or keyring name)'
				--tls-key=':TLS key to use (key id or key in interchange format)'
				--tls-key-identity=':TLS key identity'
				--nr-io-queues=':number of io queues to use (default is core count)'
				-i':alias for --nr-io-queues'
				--nr-write-queues=':number of write queues to use (default 0)'
				-W':alias for --nr-write-queues'
				--nr-poll-queues=':number of poll queues to use (default 0)'
				-P':alias for --nr-poll-queues'
				--queue-size=':number of io queue elements to use (default 128)'
				-Q':alias for --queue-size'
				--keep-alive-tmo=':keep alive timeout period in seconds'
				-k':alias for --keep-alive-tmo'
				--reconnect-delay=':reconnect timeout period in seconds'
				-c':alias for --reconnect-delay'
				--ctrl-loss-tmo=':controller loss timeout period in seconds'
				-l':alias for --ctrl-loss-tmo'
				--fast-io-fail-tmo=':fast I/O fail timeout (default off)'
				-F':alias for --fast-io-fail-tmo'
				--tos=':type of service'
				-T':alias for --tos'
				--tls_key=':TLS key to use (key id)'
				--duplicate-connect':allow duplicate connections between same transport host and subsystem port'
				-D':alias for --duplicate-connect'
				--disable-sqflow':disable controller sq flow control (default false)'
				--hdr-digest':enable transport protocol header digest (TCP transport)'
				-g':alias for --hdr-digest'
				--data-digest':enable transport protocol data digest (TCP transport)'
				-G':alias for --data-digest'
				--tls':enable TLS'
				--concat':enable secure concatenation'
				--device=':nvme device handle'
				-d':alias for --device'
				--exclude':write exclusion entry before disconnecting'
				-x':alias for --exclude'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme disconnect options" _disconnect
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(disconnect-all)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _disconnect_all
			_disconnect_all=(
				--transport=':transport type'
				-t':alias for --transport'
				--owner=':disconnect only controllers owned by NAME'
				--force':disconnect all controllers regardless of ownership'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme disconnect-all options" _disconnect_all
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(dim)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _dim
			_dim=(
				--nqn=':Comma-separated list of DC nqn'
				-n':alias for --nqn'
				--device=':Comma-separated list of DC nvme device handle.'
				-d':alias for --device'
				--task=':[register|deregister]'
				-t':alias for --task'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme dim options" _dim
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(gen-hostnqn)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _gen_hostnqn
			_gen_hostnqn=(
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme gen-hostnqn options" _gen_hostnqn
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(show-hostnqn)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _show_hostnqn
			_show_hostnqn=(
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme show-hostnqn options" _show_hostnqn
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(get-feature)
			_nvme_opt_vals "--feature-id -f" "arbitration power-mgmt lba-range temp-thresh err-recovery volatile-wc num-queues irq-coalesce irq-config write-atomic async-event auto-pst host-mem-buf timestamp kato hctm nopsc rrl plm-config plm-window lba-sts-interval host-behavior sanitize endurance-evt-cfg iocs-profile spinup-control power-loss-signal perf-characteristics fdp fdp-events ns-admin-label key-value ctrl-data-queue emb-mgmt-ctrl-addr host-mgmt-agent-addr enh-ctrl-metadata ctrl-metadata ns-metadata sw-progress host-id resv-nf-mask resv-persist write-protect bp-write-protect" \
			               "--sel -s" "0 1 2 3" \
			               "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _get_feature
			_get_feature=(
				--feature-id=':feature identifier'
				-f':alias for --feature-id'
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--sel=':[0-3]: current/default/saved/supported'
				-s':alias for --sel'
				--data-len=':buffer len (if) data is sent or received'
				-l':alias for --data-len'
				--raw-binary':show feature in binary format'
				-b':alias for --raw-binary'
				--cdw11=':feature specific dword 11'
				-c':alias for --cdw11'
				--uuid-index=':specify uuid index'
				-U':alias for --uuid-index'
				--changed':show feature changed'
				-C':alias for --changed'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme get-feature options" _get_feature
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(set-feature)
			_nvme_opt_vals "--feature-id -f" "arbitration power-mgmt lba-range temp-thresh err-recovery volatile-wc num-queues irq-coalesce irq-config write-atomic async-event auto-pst host-mem-buf timestamp kato hctm nopsc rrl plm-config plm-window lba-sts-interval host-behavior sanitize endurance-evt-cfg iocs-profile spinup-control power-loss-signal perf-characteristics fdp fdp-events ns-admin-label key-value ctrl-data-queue emb-mgmt-ctrl-addr host-mgmt-agent-addr enh-ctrl-metadata ctrl-metadata ns-metadata sw-progress host-id resv-nf-mask resv-persist write-protect bp-write-protect" \
			               "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			_nvme_opt_files "--data -d" && return
			local _set_feature
			_set_feature=(
				--namespace-id=':desired namespace'
				-n':alias for --namespace-id'
				--feature-id=':feature identifier (required)'
				-f':alias for --feature-id'
				--value=':new value of feature (required)'
				-V':alias for --value'
				--cdw12=':feature cdw12, if used'
				-c':alias for --cdw12'
				--uuid-index=':specify uuid index'
				-U':alias for --uuid-index'
				--data-len=':buffer len (if) data is sent or received'
				-l':alias for --data-len'
				--data=':optional file for feature data (default stdin)'
				-d':alias for --data'
				--save':specifies that the controller shall save the attribute'
				-s':alias for --save'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme set-feature options" _set_feature
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(dsm)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _dsm
			_dsm=(
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--ctx-attrs=':Comma separated list of the context attributes in each range'
				-a':alias for --ctx-attrs'
				--blocks=':Comma separated list of the number of blocks in each range'
				-b':alias for --blocks'
				--slbs=':Comma separated list of the starting block in each range'
				-s':alias for --slbs'
				--ad':Attribute Deallocate'
				-d':alias for --ad'
				--idw':Attribute Integral Dataset for Write'
				-w':alias for --idw'
				--idr':Attribute Integral Dataset for Read'
				-r':alias for --idr'
				--cdw11=':All the command DWORD 11 attributes. Use instead of specifying individual attributes'
				-c':alias for --cdw11'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme dsm options" _dsm
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(copy)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _copy
			_copy=(
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--sdlba=':64-bit addr of first destination logical block'
				-d':alias for --sdlba'
				--slbs=':64-bit addr of first block per range (comma-separated list)'
				-s':alias for --slbs'
				--blocks=':number of blocks per range (comma-separated list, zeroes-based values)'
				-b':alias for --blocks'
				--snsids=':source namespace identifier per range (comma-separated list)'
				-N':alias for --snsids'
				--sopts=':source options per range (comma-separated list)'
				-O':alias for --sopts'
				--limited-retry':limited retry'
				-l':alias for --limited-retry'
				--force-unit-access':force unit access'
				-f':alias for --force-unit-access'
				--prinfow=':protection information and check field (write part)'
				-p':alias for --prinfow'
				--prinfor=':protection information and check field (read part)'
				-P':alias for --prinfor'
				--ref-tag=':initial lba reference tag (write part)'
				-r':alias for --ref-tag'
				--expected-ref-tags=':expected lba reference tags (read part, comma-separated list)'
				-R':alias for --expected-ref-tags'
				--app-tag=':lba application tag (write part)'
				-a':alias for --app-tag'
				--expected-app-tags=':expected lba application tags (read part, comma-separated list)'
				-A':alias for --expected-app-tags'
				--app-tag-mask=':lba application tag mask (write part)'
				-m':alias for --app-tag-mask'
				--expected-app-tag-masks=':expected lba application tag masks (read part, comma-separated list)'
				-M':alias for --expected-app-tag-masks'
				--dir-type=':directive type (write part)'
				-T':alias for --dir-type'
				--dir-spec=':directive specific (write part)'
				-S':alias for --dir-spec'
				--format=':source range entry format'
				-F':alias for --format'
				--storage-tag=':storage tag for end-to-end PI'
				-t':alias for --storage-tag'
				--storage-tag-check':This bit specifies if the Storage Tag field shall be checked as part of end-to-end data protection processing'
				-c':alias for --storage-tag-check'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme copy options" _copy
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(flush)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _flush
			_flush=(
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme flush options" _flush
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(compare)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			_nvme_opt_files "--data -d" \
			                "--metadata -M" && return
			local _compare
			_compare=(
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--start-block=':64-bit addr of first block to access'
				-s':alias for --start-block'
				--block-count=':number of blocks (zeroes based) on device to access'
				-c':alias for --block-count'
				--block-size=':if specified, logical block size in bytes; discovered by identify namespace otherwise'
				-b':alias for --block-size'
				--data-size=':size of data in bytes'
				-z':alias for --data-size'
				--metadata-size=':size of metadata in bytes'
				-y':alias for --metadata-size'
				--ref-tag=':reference tag for end-to-end PI'
				-r':alias for --ref-tag'
				--data=':data file'
				-d':alias for --data'
				--metadata=':metadata file'
				-M':alias for --metadata'
				--prinfo=':PI and check field'
				-p':alias for --prinfo'
				--app-tag-mask=':app tag mask for end-to-end PI'
				-m':alias for --app-tag-mask'
				--app-tag=':app tag for end-to-end PI'
				-a':alias for --app-tag'
				--storage-tag=':storage tag for end-to-end PI'
				-g':alias for --storage-tag'
				--limited-retry':limit num. media access attempts'
				-l':alias for --limited-retry'
				--force-unit-access':force device to commit data before command completes'
				-f':alias for --force-unit-access'
				--storage-tag-check':This bit specifies if the Storage Tag field shall be checked as part of end-to-end data protection processing'
				-C':alias for --storage-tag-check'
				--dir-type=':directive type (for write-only)'
				-T':alias for --dir-type'
				--dir-spec=':directive specific (for write-only)'
				-S':alias for --dir-spec'
				--dsm=':dataset management attributes (lower 8 bits)'
				-D':alias for --dsm'
				--show-command':show command before sending'
				-V':alias for --show-command'
				--latency':output latency statistics'
				-t':alias for --latency'
				--force':The "I know what I'\''m doing" flag, do not enforce exclusive access for write'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme compare options" _compare
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(read)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			_nvme_opt_files "--data -d" \
			                "--metadata -M" && return
			local _read
			_read=(
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--start-block=':64-bit addr of first block to access'
				-s':alias for --start-block'
				--block-count=':number of blocks (zeroes based) on device to access'
				-c':alias for --block-count'
				--block-size=':if specified, logical block size in bytes; discovered by identify namespace otherwise'
				-b':alias for --block-size'
				--data-size=':size of data in bytes'
				-z':alias for --data-size'
				--metadata-size=':size of metadata in bytes'
				-y':alias for --metadata-size'
				--ref-tag=':reference tag for end-to-end PI'
				-r':alias for --ref-tag'
				--data=':data file'
				-d':alias for --data'
				--metadata=':metadata file'
				-M':alias for --metadata'
				--prinfo=':PI and check field'
				-p':alias for --prinfo'
				--app-tag-mask=':app tag mask for end-to-end PI'
				-m':alias for --app-tag-mask'
				--app-tag=':app tag for end-to-end PI'
				-a':alias for --app-tag'
				--storage-tag=':storage tag for end-to-end PI'
				-g':alias for --storage-tag'
				--limited-retry':limit num. media access attempts'
				-l':alias for --limited-retry'
				--force-unit-access':force device to commit data before command completes'
				-f':alias for --force-unit-access'
				--storage-tag-check':This bit specifies if the Storage Tag field shall be checked as part of end-to-end data protection processing'
				-C':alias for --storage-tag-check'
				--dir-type=':directive type (for write-only)'
				-T':alias for --dir-type'
				--dir-spec=':directive specific (for write-only)'
				-S':alias for --dir-spec'
				--dsm=':dataset management attributes (lower 8 bits)'
				-D':alias for --dsm'
				--show-command':show command before sending'
				-V':alias for --show-command'
				--latency':output latency statistics'
				-t':alias for --latency'
				--force':The "I know what I'\''m doing" flag, do not enforce exclusive access for write'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme read options" _read
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(write)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			_nvme_opt_files "--data -d" \
			                "--metadata -M" && return
			local _write
			_write=(
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--start-block=':64-bit addr of first block to access'
				-s':alias for --start-block'
				--block-count=':number of blocks (zeroes based) on device to access'
				-c':alias for --block-count'
				--block-size=':if specified, logical block size in bytes; discovered by identify namespace otherwise'
				-b':alias for --block-size'
				--data-size=':size of data in bytes'
				-z':alias for --data-size'
				--metadata-size=':size of metadata in bytes'
				-y':alias for --metadata-size'
				--ref-tag=':reference tag for end-to-end PI'
				-r':alias for --ref-tag'
				--data=':data file'
				-d':alias for --data'
				--metadata=':metadata file'
				-M':alias for --metadata'
				--prinfo=':PI and check field'
				-p':alias for --prinfo'
				--app-tag-mask=':app tag mask for end-to-end PI'
				-m':alias for --app-tag-mask'
				--app-tag=':app tag for end-to-end PI'
				-a':alias for --app-tag'
				--storage-tag=':storage tag for end-to-end PI'
				-g':alias for --storage-tag'
				--limited-retry':limit num. media access attempts'
				-l':alias for --limited-retry'
				--force-unit-access':force device to commit data before command completes'
				-f':alias for --force-unit-access'
				--storage-tag-check':This bit specifies if the Storage Tag field shall be checked as part of end-to-end data protection processing'
				-C':alias for --storage-tag-check'
				--dir-type=':directive type (for write-only)'
				-T':alias for --dir-type'
				--dir-spec=':directive specific (for write-only)'
				-S':alias for --dir-spec'
				--dsm=':dataset management attributes (lower 8 bits)'
				-D':alias for --dsm'
				--show-command':show command before sending'
				-V':alias for --show-command'
				--latency':output latency statistics'
				-t':alias for --latency'
				--force':The "I know what I'\''m doing" flag, do not enforce exclusive access for write'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme write options" _write
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(write-zeroes)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _write_zeroes
			_write_zeroes=(
				--namespace-id=':desired namespace'
				-n':alias for --namespace-id'
				--start-block=':64-bit LBA of first block to access'
				-s':alias for --start-block'
				--block-count=':number of blocks (zeroes based) on device to access'
				-c':alias for --block-count'
				--dir-type=':directive type'
				-T':alias for --dir-type'
				--deac':Set DEAC bit, requesting controller to deallocate specified logical blocks'
				-d':alias for --deac'
				--limited-retry':limit media access attempts'
				-l':alias for --limited-retry'
				--force-unit-access':force device to commit data before command completes'
				-f':alias for --force-unit-access'
				--prinfo=':PI and check field'
				-p':alias for --prinfo'
				--ref-tag=':reference tag for end-to-end PI'
				-r':alias for --ref-tag'
				--app-tag-mask=':app tag mask for end-to-end PI'
				-m':alias for --app-tag-mask'
				--app-tag=':app tag for end-to-end PI'
				-a':alias for --app-tag'
				--storage-tag=':storage tag for end-to-end PI'
				-S':alias for --storage-tag'
				--storage-tag-check':This bit specifies if the Storage Tag field shall be checked as part of end-to-end data protection processing'
				-C':alias for --storage-tag-check'
				--dir-spec=':directive specification associated with directive type'
				-D':alias for --dir-spec'
				--namespace-zeroes':Clear all logical blocks to zero in the entire namespace'
				-Z':alias for --namespace-zeroes'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme write-zeroes options" _write_zeroes
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(write-uncor)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _write_uncor
			_write_uncor=(
				--namespace-id=':desired namespace'
				-n':alias for --namespace-id'
				--start-block=':64-bit LBA of first block to access'
				-s':alias for --start-block'
				--block-count=':number of blocks (zeroes based) on device to access'
				-c':alias for --block-count'
				--dir-type=':directive type'
				-T':alias for --dir-type'
				--dir-spec=':directive specification associated with directive type'
				-S':alias for --dir-spec'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme write-uncor options" _write_uncor
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(verify)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _verify
			_verify=(
				--namespace-id=':desired namespace'
				-n':alias for --namespace-id'
				--start-block=':64-bit LBA of first block to access'
				-s':alias for --start-block'
				--block-count=':number of blocks (zeroes based) on device to access'
				-c':alias for --block-count'
				--limited-retry':limit media access attempts'
				-l':alias for --limited-retry'
				--force-unit-access':force device to commit cached data before performing the verify operation'
				-f':alias for --force-unit-access'
				--prinfo=':PI and check field'
				-p':alias for --prinfo'
				--ref-tag=':reference tag for end-to-end PI'
				-r':alias for --ref-tag'
				--app-tag=':app tag for end-to-end PI'
				-a':alias for --app-tag'
				--app-tag-mask=':app tag mask for end-to-end PI'
				-m':alias for --app-tag-mask'
				--storage-tag=':storage tag for end-to-end PI'
				-S':alias for --storage-tag'
				--storage-tag-check':This bit specifies the Storage Tag field shall be checked as part of Verify operation'
				-C':alias for --storage-tag-check'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme verify options" _verify
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(get-lba-status)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _get_lba_status
			_get_lba_status=(
				--ish':Ignore Shutdown (for NVMe-MI command)'
				-I':alias for --ish'
				--namespace-id=':desired namespace'
				-n':alias for --namespace-id'
				--start-lba=':Starting LBA(SLBA) in 64-bit address of the first logical block addressed by this command'
				-s':alias for --start-lba'
				--max-dw=':Maximum Number of Dwords(MNDW) specifies maximum number of dwords to return'
				-m':alias for --max-dw'
				--action=':Action Type(ATYPE) specifies the mechanism the controller uses in determining the LBA Status Descriptors to return.'
				-a':alias for --action'
				--range-len=':Range Length(RL) specifies the length of the range of contiguous LBAs beginning at SLBA'
				-l':alias for --range-len'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme get-lba-status options" _get_lba_status
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(capacity-mgmt)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _capacity_mgmt
			_capacity_mgmt=(
				--ish':Ignore Shutdown (for NVMe-MI command)'
				-I':alias for --ish'
				--operation=':Operation to be performed by the controller'
				-O':alias for --operation'
				--element-id=':Value specific to the value of the Operation field.'
				-i':alias for --element-id'
				--cap-lower=':Least significant 32 bits of the capacity in bytes of the Endurance Group or NVM Set to be created'
				-l':alias for --cap-lower'
				--cap-upper=':Most significant 32 bits of the capacity in bytes of the Endurance Group or NVM Set to be created'
				-u':alias for --cap-upper'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme capacity-mgmt options" _capacity_mgmt
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(admin-passthru)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			_nvme_opt_files "--input-file -i" \
			                "--metadata -M" && return
			local _admin_passthru
			_admin_passthru=(
				--opcode=':opcode (required)'
				-O':alias for --opcode'
				--flags=':command flags'
				-f':alias for --flags'
				--prefill=':prefill buffers with known byte-value, default 0'
				-p':alias for --prefill'
				--rsvd=':value for reserved field'
				-R':alias for --rsvd'
				--namespace-id=':desired namespace'
				-n':alias for --namespace-id'
				--data-len=':data I/O length (bytes)'
				-l':alias for --data-len'
				--metadata-len=':metadata seg. length (bytes)'
				-m':alias for --metadata-len'
				--cdw2=':command dword 2 value'
				-2':alias for --cdw2'
				--cdw3=':command dword 3 value'
				-3':alias for --cdw3'
				--cdw10=':command dword 10 value'
				-4':alias for --cdw10'
				--cdw11=':command dword 11 value'
				-5':alias for --cdw11'
				--cdw12=':command dword 12 value'
				-6':alias for --cdw12'
				--cdw13=':command dword 13 value'
				-7':alias for --cdw13'
				--cdw14=':command dword 14 value'
				-8':alias for --cdw14'
				--cdw15=':command dword 15 value'
				-9':alias for --cdw15'
				--input-file=':data input or output file'
				-i':alias for --input-file'
				--metadata=':metadata input or output file'
				-M':alias for --metadata'
				--raw-binary':dump output in binary format'
				-b':alias for --raw-binary'
				--show-command':print command before sending'
				-s':alias for --show-command'
				--read':set dataflow direction to receive'
				-r':alias for --read'
				--write':set dataflow direction to send'
				-w':alias for --write'
				--latency':output latency statistics'
				-T':alias for --latency'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme admin-passthru options" _admin_passthru
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(io-passthru)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			_nvme_opt_files "--input-file -i" \
			                "--metadata -M" && return
			local _io_passthru
			_io_passthru=(
				--opcode=':opcode (required)'
				-O':alias for --opcode'
				--flags=':command flags'
				-f':alias for --flags'
				--prefill=':prefill buffers with known byte-value, default 0'
				-p':alias for --prefill'
				--rsvd=':value for reserved field'
				-R':alias for --rsvd'
				--namespace-id=':desired namespace'
				-n':alias for --namespace-id'
				--data-len=':data I/O length (bytes)'
				-l':alias for --data-len'
				--metadata-len=':metadata seg. length (bytes)'
				-m':alias for --metadata-len'
				--cdw2=':command dword 2 value'
				-2':alias for --cdw2'
				--cdw3=':command dword 3 value'
				-3':alias for --cdw3'
				--cdw10=':command dword 10 value'
				-4':alias for --cdw10'
				--cdw11=':command dword 11 value'
				-5':alias for --cdw11'
				--cdw12=':command dword 12 value'
				-6':alias for --cdw12'
				--cdw13=':command dword 13 value'
				-7':alias for --cdw13'
				--cdw14=':command dword 14 value'
				-8':alias for --cdw14'
				--cdw15=':command dword 15 value'
				-9':alias for --cdw15'
				--input-file=':data input or output file'
				-i':alias for --input-file'
				--metadata=':metadata input or output file'
				-M':alias for --metadata'
				--raw-binary':dump output in binary format'
				-b':alias for --raw-binary'
				--show-command':print command before sending'
				-s':alias for --show-command'
				--read':set dataflow direction to receive'
				-r':alias for --read'
				--write':set dataflow direction to send'
				-w':alias for --write'
				--latency':output latency statistics'
				-T':alias for --latency'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme io-passthru options" _io_passthru
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(show-regs)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _show_regs
			_show_regs=(
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme show-regs options" _show_regs
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(set-reg)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _set_reg
			_set_reg=(
				--offset=':offset of the requested register'
				-O':alias for --offset'
				--value=':the value of the register to be set'
				-V':alias for --value'
				--mmio32':Access 64-bit registers as 2 32-bit'
				-m':alias for --mmio32'
				--intms=':INTMS=0xc register offset'
				--intmc=':INTMC=0x10 register offset'
				--cc=':CC=0x14 register offset'
				--csts=':CSTS=0x1c register offset'
				--nssr=':NSSR=0x20 register offset'
				--aqa=':AQA=0x24 register offset'
				--asq=':ASQ=0x28 register offset'
				--acq=':ACQ=0x30 register offset'
				--bprsel=':BPRSEL=0x44 register offset'
				--bpmbl=':BPMBL=0x48 register offset'
				--cmbmsc=':CMBMSC=0x50 register offset'
				--nssd=':NSSD=0x64 register offset'
				--pmrctl=':PMRCTL=0xe04 register offset'
				--pmrmscl=':PMRMSCL=0xe14 register offset'
				--pmrmscu=':PMRMSCU=0xe18 register offset'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme set-reg options" _set_reg
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(get-reg)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _get_reg
			_get_reg=(
				--offset=':offset of the requested register'
				-O':alias for --offset'
				--cap':CAP=0x0 register offset'
				--vs':VS=0x8 register offset'
				--cmbloc':CMBLOC=0x38 register offset'
				--cmbsz':CMBSZ=0x3c register offset'
				--bpinfo':BPINFO=0x40 register offset'
				--cmbsts':CMBSTS=0x58 register offset'
				--cmbebs':CMBEBS=0x5c register offset'
				--cmbswtp':CMBSWTP=0x60 register offset'
				--crto':CRTO=0x68 register offset'
				--pmrcap':PMRCAP=0xe00 register offset'
				--pmrsts':PMRSTS=0xe08 register offset'
				--pmrebs':PMREBS=0xe0c register offset'
				--pmrswtp':PMRSWTP=0xe10 register offset'
				--intms':INTMS=0xc register offset'
				--intmc':INTMC=0x10 register offset'
				--cc':CC=0x14 register offset'
				--csts':CSTS=0x1c register offset'
				--nssr':NSSR=0x20 register offset'
				--aqa':AQA=0x24 register offset'
				--asq':ASQ=0x28 register offset'
				--acq':ACQ=0x30 register offset'
				--bprsel':BPRSEL=0x44 register offset'
				--bpmbl':BPMBL=0x48 register offset'
				--cmbmsc':CMBMSC=0x50 register offset'
				--nssd':NSSD=0x64 register offset'
				--pmrctl':PMRCTL=0xe04 register offset'
				--pmrmscl':PMRMSCL=0xe14 register offset'
				--pmrmscu':PMRMSCU=0xe18 register offset'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme get-reg options" _get_reg
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(set-property)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _set_property
			_set_property=(
				--offset=':the offset of the property'
				-O':alias for --offset'
				--value=':the value of the property to be set'
				-V':alias for --value'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme set-property options" _set_property
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(get-property)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _get_property
			_get_property=(
				--offset=':offset of the requested property'
				-O':alias for --offset'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme get-property options" _get_property
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(device-self-test)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _device_self_test
			_device_self_test=(
				--ish':Ignore Shutdown (for NVMe-MI command)'
				-I':alias for --ish'
				--namespace-id=':Indicate the namespace in which the device self-test has to be carried out'
				-n':alias for --namespace-id'
				--self-test-code=':This field specifies the action taken by the device self-test command : 0h Show current state of device self-test operation 1h Start a short device self-test operation 2h Start a extended device self-test operation 3h Start a Host-Initiated Refresh operation eh Start a vendor specific device self-test operation fh Abort the device self-test operation'
				-s':alias for --self-test-code'
				--wait':Wait for the test to finish'
				-w':alias for --wait'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme device-self-test options" _device_self_test
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(sanitize)
			_nvme_opt_vals "--sanact -a" "exit-failure start-block-erase start-overwrite start-crypto-erase exit-media-verification" \
			               "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _sanitize
			_sanitize=(
				--ish':Ignore Shutdown (for NVMe-MI command)'
				-I':alias for --ish'
				--no-dealloc':No deallocate after sanitize.'
				-d':alias for --no-dealloc'
				--oipbp':Overwrite invert pattern between passes.'
				-i':alias for --oipbp'
				--owpass=':Overwrite pass count.'
				-n':alias for --owpass'
				--ause':Allow unrestricted sanitize exit.'
				-u':alias for --ause'
				--sanact=':Sanitize action: 1 = Exit failure mode, 2 = Start block erase,3 = Start overwrite, 4 = Start crypto erase, 5 = Exit media verification'
				-a':alias for --sanact'
				--ovrpat=':Overwrite pattern.'
				-p':alias for --ovrpat'
				--emvs':Enter media verification state.'
				-e':alias for --emvs'
				--preq':Require the sanitize operation to purge user data, as defined by IEEE Std 2883, or fail.'
				-q':alias for --preq'
				--wait':Wait for the sanitize to finish'
				-w':alias for --wait'
				--repeat=':Repeat for the multi cycle sanitization'
				-r':alias for --repeat'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme sanitize options" _sanitize
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(sanitize-ns)
			_nvme_opt_vals "--sanact -a" "exit-failure start-crypto-erase exit-media-verification" \
			               "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _sanitize_ns
			_sanitize_ns=(
				--ish':Ignore Shutdown (for NVMe-MI command)'
				-I':alias for --ish'
				--ause':Allow unrestricted sanitize exit.'
				-u':alias for --ause'
				--sanact=':Sanitize action: 1 = Exit failure mode, 4 = Start a crypto erase namespace sanitize operation, 5 = Exit media verification state'
				-a':alias for --sanact'
				--emvs':Enter media verification state.'
				-e':alias for --emvs'
				--preq':Require the sanitize operation to purge user data, as defined by IEEE Std 2883, or fail.'
				-q':alias for --preq'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme sanitize-ns options" _sanitize_ns
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(format)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _format
			_format=(
				--ish':Ignore Shutdown (for NVMe-MI command)'
				-I':alias for --ish'
				--namespace-id=':identifier of desired namespace'
				-n':alias for --namespace-id'
				--lbaf=':LBA format to apply (required)'
				-l':alias for --lbaf'
				--ses=':[0-2]: secure erase'
				-s':alias for --ses'
				--pi=':[0-3]: protection info off/Type 1/Type 2/Type 3'
				-i':alias for --pi'
				--pil=':[0-1]: protection info location last/first bytes of metadata'
				-p':alias for --pil'
				--ms=':[0-1]: extended format off/on'
				-m':alias for --ms'
				--reset':Automatically reset the controller after successful format'
				-r':alias for --reset'
				--force':The "I know what I'\''m doing" flag, skip confirmation before sending command'
				--block-size=':target block size'
				-b':alias for --block-size'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme format options" _format
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(lockdown)
			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" && return
			local _lockdown
			_lockdown=(
				--ofi=':Opcode or Feature Identifier (OFI) specifies the command opcode or Set Features Feature Identifier identified by the Scope field.'
				-O':alias for --ofi'
				--ifc=':[0-3] Interface (INF) field identifies the interfaces affected by this command.'
				-f':alias for --ifc'
				--prhbt=':[0-1]Prohibit(PRHBT) bit specifies whether to prohibit or allow the command opcode or Set Features Feature Identifier specified by this command.'
				-p':alias for --prhbt'
				--scp=':[0-15]Scope(SCP) field specifies the contents of the Opcode or Feature Identifier field.'
				-s':alias for --scp'
				--uuid=':UUID Index - If this field is set to a non-zero value, then the value of this field is the index of a UUID in the UUID List that is used by the command.If this field is cleared to 0h, then no UUID index is specified'
				-U':alias for --uuid'
				--csel=':[0,1,2,15] Controller Select (CSEL) specifies the controller(s) affected by this command: 0 = NVM subsystem, 1 = specific controller (see --css), 2 = secondary controllers for a specific primary controller (see --css), 15 = vendor specific.'
				-c':alias for --csel'
				--css=':Controller Select Specific (CSS) - meaning depends on --csel: the Controller Identifier if --csel=1, or the Primary Controller Identifier if --csel=2. Ignored if --csel=0.'
				-C':alias for --css'
				--verbose':Increase output verbosity'
				-v':alias for --verbose'
				--quiet':suppress output messages, overwrites verbose mode'
				--output-format=':Output format: normal|json|binary'
				-o':alias for --output-format'
				--timeout=':timeout value, in milliseconds'
				--dry-run':show command instead of executing'
				--no-retries':disable retry logic on errors'
				--no-ioctl-probing':disable 64-bit IOCTL support probing'
				--output-format-version=':output format version: 1|2'
				--set-options=':set a libnvme library option (key=value[,key=value,...]);'
				--help':show help'
				-h':alias for --help'
			)
			_arguments '*:: :->subcmds'
			_nvme_describe "nvme lockdown options" _lockdown
			_nvme_has_device || compadd -- /dev/nvme*(N)
			;;

		(help)
			(( CURRENT == 2 )) && \
				_describe -t commands "nvme subcommands" _cmds
			return
			;;

		(version)
			return
			;;

		(*)
			_files
			;;
	esac
}
