# SPDX-License-Identifier: GPL-2.0-or-later
#
# bash tab completion for the nvme command line utility
#
# ============================================================================
#  DO NOT EDIT - THIS FILE IS GENERATED
#
#  Generated by completions/generate-completions.py from the nvme binary's
#  command metadata. Manual edits WILL be overwritten. Regenerate with:
#      meson compile -C <build-dir> update-completions
# ============================================================================

# COMPREPLY=( $(compgen ...) ) is the standard bash-completion idiom; the word
# splitting SC2207 warns about is intentional here.
# shellcheck disable=SC2207

# Helper function to detect if we're completing an option's value.
# Uses: $cur, $prev, $words, $cword (from _init_completion)
# Sets: $opt (the option name), $val (partial value), $completing_value (0 or 1)
# Known limitation: a value beginning with '-' (e.g. '--value -5') is
# indistinguishable from an option name here and is treated as one, so its value
# is not completed. Rare for nvme options and not worth the ambiguity to chase.
_nvme_detect_value_completion() {
	completing_value=0
	opt=""
	val=""

	if [[ $cur == -*=* ]]; then
		opt="${cur%%=*}"
		val="${cur#*=}"
		completing_value=1
	elif [[ $cur == "=" ]] && [[ $prev == -* ]]; then
		opt="$prev"
		completing_value=1
	elif [[ $cur != -* ]] && [[ $cur != "" ]] && [[ $prev == "=" ]] && [[ ${words[$cword-2]} == -* ]]; then
		opt="${words[$cword-2]}"
		val="$cur"
		completing_value=1
	elif [[ $cur != -* ]] && [[ $cur != "" ]] && [[ $prev == --* ]]; then
		opt="$prev"
		val="$cur"
		completing_value=1
	elif [[ $cur == "" ]] && [[ $prev == --* ]]; then
		opt="$prev"
		completing_value=1
	elif [[ $cur == "" ]] && [[ $prev == "=" ]]; then
		opt="${words[$cword-2]}"
		completing_value=1
	elif [[ $cur == "" ]] && [[ $prev == -? ]]; then
		opt="$prev"
		completing_value=1
	elif [[ $cur != -* ]] && [[ $cur != "" ]] && [[ $prev == -? ]]; then
		opt="$prev"
		val="$cur"
		completing_value=1
	fi

	# When the option word was captured unsplit (e.g. '--output-format='), drop
	# the trailing '=' so $opt matches the option names below.
	opt="${opt%=}"
}

# Complete an option's value from a known set. Called once per command with
# alternating NAMES VALUES arguments: NAMES is the option's spellings
# ('--output-format -o'), VALUES its value list. When completing the value of a
# matching option, appends it to $vals. No-op unless completing a value.
_nvme_opt_vals () {
	[[ $completing_value -eq 1 ]] || return 0
	local name
	while (( $# >= 2 )); do
		# shellcheck disable=SC2086  # $1 is a space-separated spelling list
		for name in $1; do
			[[ $opt == "$name" ]] && { vals+=" $2"; return 0; }
		done
		shift 2
	done
}

# Mark that an option's value is a filename/path. Called once per command with
# each argument an option's spellings ('--firmware -f'). When completing the
# value of a matching option, sets $wantfiles so 'complete -o default' offers
# files. No-op unless completing a value.
_nvme_opt_files () {
	[[ $completing_value -eq 1 ]] || return 0
	local names name
	for names; do
		# shellcheck disable=SC2086  # $names is a space-separated spelling list
		for name in $names; do
			[[ $opt == "$name" ]] && { wantfiles=1; return 0; }
		done
	done
}

_nvme_finish_completion () {
	opts+=" -h --help"

	if [[ $completing_value -eq 1 ]] && [[ " $valopts " != *" $opt "* ]]; then
		completing_value=0
	fi

	if [[ $completing_value -eq 0 ]]; then
		local nonopt_args=0 has_device=0 i prevopt
		for (( i=0; i < ${#words[@]}-1; i++ )); do
			[[ ${words[i]} == -* || ${words[i]} == "=" ]] && continue
			# Skip words[i] if it is the value of a preceding value-taking option.
			# That option is the previous word ('--opt val'), or the word before a
			# split '=' ('--opt = val').
			if [[ $i -gt 0 ]]; then
				prevopt="${words[i-1]}"
				[[ $i -ge 2 && $prevopt == "=" ]] && prevopt="${words[i-2]}"
				# Strip a trailing '=' so an unsplit '--opt=' token still matches
				# $valopts (whose entries carry no '=').
				[[ " $valopts " == *" ${prevopt%=} "* ]] && continue
			fi
			(( nonopt_args += 1 ))
			[[ ${words[i]} == /dev/nvme* ]] && has_device=1
		done
		if [[ $nonopt_args -ge $2 ]] && [[ $has_device -eq 0 ]] && \
		   [[ "$1" != "help" ]] && [[ "$1" != "version" ]]; then
			opts="/dev/nvme* $opts"
		fi
	fi

	if [[ $completing_value -eq 1 ]]; then
		if [[ $vals != " " ]]; then
			COMPREPLY+=( $( compgen -W "$vals" -- "$val" ) )
		elif [[ $wantfiles -eq 1 ]]; then
			: # value is a filename; let 'complete -o default' offer files
		else
			# No candidate values (e.g. a NUM or free-form string); offer
			# nothing and suppress the filename fallback.
			compopt +o default
		fi
	else
		COMPREPLY+=( $( compgen -W "$opts" -- "$cur" ) )
		# Suppress the trailing space only when the sole completion ends in '=',
		# so the user can type the value immediately. With more than one candidate
		# bash appends nothing, so nospace must not fire.
		[[ ${#COMPREPLY[@]} -eq 1 && ${COMPREPLY[0]} == *= ]] && compopt -o nospace
	fi

	return 0
}

nvme_list_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"admin-passthru")
			opts+=" --cdw10= -4 --cdw11= -5 --cdw12= -6 --cdw13= -7 --cdw14= -8 --cdw15= -9 --cdw2= -2 --cdw3= -3 --data-len= -l --dry-run --flags= -f --input-file= -i --latency -T --metadata= -M --metadata-len= -m --namespace-id= -n --no-ioctl-probing --no-retries --opcode= -O --output-format= -o --output-format-version= --prefill= -p --quiet --raw-binary -b --read -r --rsvd= -R --set-options= --show-command -s --timeout= --verbose -v --write -w"
			valopts+=" --cdw10 -4 --cdw11 -5 --cdw12 -6 --cdw13 -7 --cdw14 -8 --cdw15 -9 --cdw2 -2 --cdw3 -3 --data-len -l --flags -f --input-file -i --metadata -M --metadata-len -m --namespace-id -n --opcode -O --output-format -o --output-format-version --prefill -p --rsvd -R --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--input-file -i" "--metadata -M"
			;;

		"ana-log")
			opts+=" --dry-run --groups -g --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"attach-ns")
			opts+=" --controllers= -c --dry-run --ish -I --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --controllers -c --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"ave-discovery-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"boot-part-log")
			opts+=" --dry-run --lsp= -s --no-ioctl-probing --no-retries --output-file= -f --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --lsp -s --output-file -f --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--output-file -f"
			;;

		"capacity-mgmt")
			opts+=" --cap-lower= -l --cap-upper= -u --dry-run --element-id= -i --ish -I --no-ioctl-probing --no-retries --operation= -O --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --cap-lower -l --cap-upper -u --element-id -i --operation -O --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"changed-alloc-ns-list-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"changed-ns-list-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"check-dhchap-key")
			opts+=" --dry-run --key= -k --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --key -k --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"check-tls-key")
			opts+=" --compat -C --dry-run --hostnqn= -n --identity= -I --keydata= -d --keyring= -k --keytype= -t --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --subsysnqn= -c --timeout= --verbose -v"
			valopts+=" --hostnqn -n --identity -I --keydata -d --keyring -k --keytype -t --output-format -o --output-format-version --set-options --subsysnqn -c --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"cmdset-ind-id-ns")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"compare")
			opts+=" --app-tag= -a --app-tag-mask= -m --block-count= -c --block-size= -b --data= -d --data-size= -z --dir-spec= -S --dir-type= -T --dry-run --dsm= -D --force --force-unit-access -f --latency -t --limited-retry -l --metadata= -M --metadata-size= -y --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --prinfo= -p --quiet --ref-tag= -r --set-options= --show-command -V --start-block= -s --storage-tag= -g --storage-tag-check -C --timeout= --verbose -v"
			valopts+=" --app-tag -a --app-tag-mask -m --block-count -c --block-size -b --data -d --data-size -z --dir-spec -S --dir-type -T --dsm -D --metadata -M --metadata-size -y --namespace-id -n --output-format -o --output-format-version --prinfo -p --ref-tag -r --set-options --start-block -s --storage-tag -g --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--data -d" "--metadata -M"
			;;

		"connect")
			opts+=" --concat --config= -J --ctrl-loss-tmo= -l --data-digest -G --devid-file= --disable-sqflow --dry-run --duplicate-connect -D --fast-io-fail-tmo= -F --hdr-digest -g --host-iface= -f --host-traddr= -w --hostid= -I --hostnqn= -q --idempotent --keep-alive-tmo= -k --keyring= --kxchap-ctrl-secret= -C --kxchap-secret= -S --no-ioctl-probing --no-retries --nqn= -n --nr-io-queues= -i --nr-poll-queues= -P --nr-write-queues= -W --output-format= -o --output-format-version= --owner= --queue-size= -Q --quiet --reconnect-delay= -c --set-options= --timeout= --tls --tls-key= --tls-key-identity= --tls_key= --tos= -T --traddr= -a --transport= -t --trsvcid= -s --verbose -v"
			valopts+=" --config -J --ctrl-loss-tmo -l --devid-file --fast-io-fail-tmo -F --host-iface -f --host-traddr -w --hostid -I --hostnqn -q --keep-alive-tmo -k --keyring --kxchap-ctrl-secret -C --kxchap-secret -S --nqn -n --nr-io-queues -i --nr-poll-queues -P --nr-write-queues -W --output-format -o --output-format-version --owner --queue-size -Q --reconnect-delay -c --set-options --timeout --tls-key --tls-key-identity --tls_key --tos -T --traddr -a --transport -t --trsvcid -s"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--config -J" "--devid-file"
			;;

		"connect-all")
			opts+=" --concat --config= -J --ctrl-loss-tmo= -l --data-digest -G --device= -d --disable-sqflow --dry-run --duplicate-connect -D --fast-io-fail-tmo= -F --force --hdr-digest -g --host-iface= -f --host-traddr= -w --hostid= -I --hostnqn= -q --keep-alive-tmo= -k --keyring= --kxchap-ctrl-secret= -C --kxchap-secret= -S --nbft --nbft-path= --no-ioctl-probing --no-nbft --no-retries --no-reuse --nqn= -n --nr-io-queues= -i --nr-poll-queues= -P --nr-write-queues= -W --output-format= -o --output-format-version= --owner= --persistent= -p --queue-size= -Q --quiet --raw= -r --reconnect-delay= -c --set-options= --timeout= --tls --tls-key= --tls-key-identity= --tls_key= --tos= -T --traddr= -a --transport= -t --trsvcid= -s --verbose -v"
			valopts+=" --config -J --ctrl-loss-tmo -l --device -d --fast-io-fail-tmo -F --host-iface -f --host-traddr -w --hostid -I --hostnqn -q --keep-alive-tmo -k --keyring --kxchap-ctrl-secret -C --kxchap-secret -S --nbft-path --nqn -n --nr-io-queues -i --nr-poll-queues -P --nr-write-queues -W --output-format -o --output-format-version --owner --persistent -p --queue-size -Q --raw -r --reconnect-delay -c --set-options --timeout --tls-key --tls-key-identity --tls_key --tos -T --traddr -a --transport -t --trsvcid -s"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--config -J" "--raw -r"
			;;

		"copy")
			opts+=" --app-tag= -a --app-tag-mask= -m --blocks= -b --dir-spec= -S --dir-type= -T --dry-run --expected-app-tag-masks= -M --expected-app-tags= -A --expected-ref-tags= -R --force-unit-access -f --format= -F --limited-retry -l --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --prinfor= -P --prinfow= -p --quiet --ref-tag= -r --sdlba= -d --set-options= --slbs= -s --snsids= -N --sopts= -O --storage-tag= -t --storage-tag-check -c --timeout= --verbose -v"
			valopts+=" --app-tag -a --app-tag-mask -m --blocks -b --dir-spec -S --dir-type -T --expected-app-tag-masks -M --expected-app-tags -A --expected-ref-tags -R --format -F --namespace-id -n --output-format -o --output-format-version --prinfor -P --prinfow -p --ref-tag -r --sdlba -d --set-options --slbs -s --snsids -N --sopts -O --storage-tag -t --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"create-ns")
			opts+=" --anagrp-id= -a --azr -z --block-size= -b --csi= -y --dps= -d --dry-run --endg-id= -e --flbas= -f --ish -I --lbstm= -l --ncap= -c --ncap-si= -C --nmic= -m --no-ioctl-probing --no-retries --nphndls= -n --nsze= -s --nsze-si= -S --nvmset-id= -i --output-format= -o --output-format-version= --phndls= -p --quiet --rar= -r --rnumzrwa= -u --ror= -O --set-options= --timeout= --verbose -v"
			valopts+=" --anagrp-id -a --block-size -b --csi -y --dps -d --endg-id -e --flbas -f --lbstm -l --ncap -c --ncap-si -C --nmic -m --nphndls -n --nsze -s --nsze-si -S --nvmset-id -i --output-format -o --output-format-version --phndls -p --rar -r --rnumzrwa -u --ror -O --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"delete-ns")
			opts+=" --dry-run --ish -I --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"detach-ns")
			opts+=" --controllers= -c --dry-run --ish -I --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --controllers -c --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"device-self-test")
			opts+=" --dry-run --ish -I --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --self-test-code= -s --set-options= --timeout= --verbose -v --wait -w"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --self-test-code -s --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"dim")
			opts+=" --device= -d --dry-run --no-ioctl-probing --no-retries --nqn= -n --output-format= -o --output-format-version= --quiet --set-options= --task= -t --timeout= --verbose -v"
			valopts+=" --device -d --nqn -n --output-format -o --output-format-version --set-options --task -t --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"dir-receive")
			opts+=" --data-len= -l --dir-oper= -O --dir-spec= -S --dir-type= -D --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --req-resource= -r --set-options= --timeout= --verbose -v"
			valopts+=" --data-len -l --dir-oper -O --dir-spec -S --dir-type -D --namespace-id -n --output-format -o --output-format-version --req-resource -r --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"dir-send")
			opts+=" --data-len= -l --dir-oper= -O --dir-spec= -S --dir-type= -D --dry-run --endir= -e --input-file= -i --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --target-dir= -T --timeout= --verbose -v"
			valopts+=" --data-len -l --dir-oper -O --dir-spec -S --dir-type -D --endir -e --input-file -i --namespace-id -n --output-format -o --output-format-version --set-options --target-dir -T --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--input-file -i"
			;;

		"disconnect")
			opts+=" --concat --ctrl-loss-tmo= -l --data-digest -G --device= -d --disable-sqflow --dry-run --duplicate-connect -D --exclude -x --fast-io-fail-tmo= -F --hdr-digest -g --host-iface= -f --host-traddr= -w --hostid= -I --hostnqn= -q --keep-alive-tmo= -k --keyring= --kxchap-ctrl-secret= -C --kxchap-secret= -S --no-ioctl-probing --no-retries --nqn= -n --nr-io-queues= -i --nr-poll-queues= -P --nr-write-queues= -W --output-format= -o --output-format-version= --queue-size= -Q --quiet --reconnect-delay= -c --set-options= --timeout= --tls --tls-key= --tls-key-identity= --tls_key= --tos= -T --traddr= -a --transport= -t --trsvcid= -s --verbose -v"
			valopts+=" --ctrl-loss-tmo -l --device -d --fast-io-fail-tmo -F --host-iface -f --host-traddr -w --hostid -I --hostnqn -q --keep-alive-tmo -k --keyring --kxchap-ctrl-secret -C --kxchap-secret -S --nqn -n --nr-io-queues -i --nr-poll-queues -P --nr-write-queues -W --output-format -o --output-format-version --queue-size -Q --reconnect-delay -c --set-options --timeout --tls-key --tls-key-identity --tls_key --tos -T --traddr -a --transport -t --trsvcid -s"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"disconnect-all")
			opts+=" --dry-run --force --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --owner= --quiet --set-options= --timeout= --transport= -t --verbose -v"
			valopts+=" --output-format -o --output-format-version --owner --set-options --timeout --transport -t"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"discover")
			opts+=" --concat --config= -J --ctrl-loss-tmo= -l --data-digest -G --device= -d --disable-sqflow --dry-run --duplicate-connect -D --fast-io-fail-tmo= -F --force --hdr-digest -g --host-iface= -f --host-traddr= -w --hostid= -I --hostnqn= -q --keep-alive-tmo= -k --keyring= --kxchap-ctrl-secret= -C --kxchap-secret= -S --nbft --nbft-path= --no-ioctl-probing --no-nbft --no-retries --no-reuse --nqn= -n --nr-io-queues= -i --nr-poll-queues= -P --nr-write-queues= -W --output-format= -o --output-format-version= --owner= --persistent= -p --queue-size= -Q --quiet --raw= -r --reconnect-delay= -c --set-options= --timeout= --tls --tls-key= --tls-key-identity= --tls_key= --tos= -T --traddr= -a --transport= -t --trsvcid= -s --verbose -v"
			valopts+=" --config -J --ctrl-loss-tmo -l --device -d --fast-io-fail-tmo -F --host-iface -f --host-traddr -w --hostid -I --hostnqn -q --keep-alive-tmo -k --keyring --kxchap-ctrl-secret -C --kxchap-secret -S --nbft-path --nqn -n --nr-io-queues -i --nr-poll-queues -P --nr-write-queues -W --output-format -o --output-format-version --owner --persistent -p --queue-size -Q --raw -r --reconnect-delay -c --set-options --timeout --tls-key --tls-key-identity --tls_key --tos -T --traddr -a --transport -t --trsvcid -s"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--config -J" "--raw -r"
			;;

		"dispersed-ns-participating-nss-log")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"dsm")
			opts+=" --ad -d --blocks= -b --cdw11= -c --ctx-attrs= -a --dry-run --idr -r --idw -w --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --slbs= -s --timeout= --verbose -v"
			valopts+=" --blocks -b --cdw11 -c --ctx-attrs -a --namespace-id -n --output-format -o --output-format-version --set-options --slbs -s --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"effects-log")
			opts+=" --csi= -c --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --csi -c --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"endurance-event-agg-log")
			opts+=" --dry-run --log-entries= -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --log-entries -e --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"endurance-log")
			opts+=" --dry-run --group-id= -g --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --group-id -g --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"error-log")
			opts+=" --csi= -c --dry-run --lba= -l --log-entries= -e --namespace-id= -n --no-ioctl-probing --no-retries --opcode= -O --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --sqid= -S --status= -s --timeout= --trtype= -t --valid-entry -V --verbose -v"
			valopts+=" --csi -c --lba -l --log-entries -e --namespace-id -n --opcode -O --output-format -o --output-format-version --set-options --sqid -S --status -s --timeout --trtype -t"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"fid-support-effects-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"flush")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"format")
			opts+=" --block-size= -b --dry-run --force --ish -I --lbaf= -l --ms= -m --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --pi= -i --pil= -p --quiet --reset -r --ses= -s --set-options= --timeout= --verbose -v"
			valopts+=" --block-size -b --lbaf -l --ms -m --namespace-id -n --output-format -o --output-format-version --pi -i --pil -p --ses -s --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"fw-commit"|"fw-activate")
			opts+=" --action= -a --bpid= -b --dry-run --ish -I --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --slot= -s --timeout= --verbose -v"
			valopts+=" --action -a --bpid -b --output-format -o --output-format-version --set-options --slot -s --timeout"

			_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"
			;;

		"fw-download")
			opts+=" --dry-run --fw= -f --ignore-ovr -i --ish -I --no-ioctl-probing --no-retries --offset= -O --output-format= -o --output-format-version= --progress -p --quiet --set-options= --stream --timeout= --verbose -v --xfer= -x"
			valopts+=" --fw -f --offset -O --output-format -o --output-format-version --set-options --timeout --xfer -x"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--fw -f"
			;;

		"fw-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"gen-dhchap-key")
			opts+=" --dry-run --hmac= -m --key-length= -l --no-ioctl-probing --no-retries --nqn= -n --output-format= -o --output-format-version= --quiet --secret= -s --set-options= --timeout= --verbose -v"
			valopts+=" --hmac -m --key-length -l --nqn -n --output-format -o --output-format-version --secret -s --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"gen-hostnqn")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"gen-tls-key")
			opts+=" --compat -C --dry-run --hmac= -m --hostnqn= -n --identity= -I --insert -i --keyfile= -f --keyring= -k --keytype= -t --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --secret= -s --set-options= --subsysnqn= -c --timeout= --verbose -v"
			valopts+=" --hmac -m --hostnqn -n --identity -I --keyfile -f --keyring -k --keytype -t --output-format -o --output-format-version --secret -s --set-options --subsysnqn -c --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-feature")
			opts+=" --cdw11= -c --changed -C --data-len= -l --dry-run --feature-id= -f --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --sel= -s --set-options= --timeout= --uuid-index= -U --verbose -v"
			valopts+=" --cdw11 -c --data-len -l --feature-id -f --namespace-id -n --output-format -o --output-format-version --sel -s --set-options --timeout --uuid-index -U"

			_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" \
			               "--sel -s" "0 1 2 3"
			;;

		"get-lba-status")
			opts+=" --action= -a --dry-run --ish -I --max-dw= -m --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --range-len= -l --set-options= --start-lba= -s --timeout= --verbose -v"
			valopts+=" --action -a --max-dw -m --namespace-id -n --output-format -o --output-format-version --range-len -l --set-options --start-lba -s --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-log")
			opts+=" --aen= -a --csi= -y --dry-run --ish -I --log-id= -i --log-len= -l --lpo= -L --lsi= -S --lsp= -s --namespace-id= -n --no-ioctl-probing --no-retries --ot -O --output-format= -o --output-format-version= --quiet --rae -r --raw-binary -b --set-options= --timeout= --uuid-index= -U --verbose -v --xfer-len= -x"
			valopts+=" --aen -a --csi -y --log-id -i --log-len -l --lpo -L --lsi -S --lsp -s --namespace-id -n --output-format -o --output-format-version --set-options --timeout --uuid-index -U --xfer-len -x"

			_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"
			;;

		"get-ns-id")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-property")
			opts+=" --dry-run --no-ioctl-probing --no-retries --offset= -O --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --offset -O --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-reg")
			opts+=" --acq --aqa --asq --bpinfo --bpmbl --bprsel --cap --cc --cmbebs --cmbloc --cmbmsc --cmbsts --cmbswtp --cmbsz --crto --csts --dry-run --intmc --intms --no-ioctl-probing --no-retries --nssd --nssr --offset= -O --output-format= -o --output-format-version= --pmrcap --pmrctl --pmrebs --pmrmscl --pmrmscu --pmrsts --pmrswtp --quiet --set-options= --timeout= --verbose -v --vs"
			valopts+=" --offset -O --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"host-discovery-log")
			opts+=" --all-host-entries -a --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"id-ctrl")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --vendor-specific -V --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"id-domain")
			opts+=" --dom-id= -d --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --dom-id -d --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"id-iocs")
			opts+=" --controller-id= -c --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --controller-id -c --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"id-ns")
			opts+=" --dry-run --force --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --vendor-specific -V --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"id-ns-granularity")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"id-ns-lba-format")
			opts+=" --dry-run --lba-format-index= -i --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --uuid-index= -U --verbose -v"
			valopts+=" --lba-format-index -i --output-format -o --output-format-version --set-options --timeout --uuid-index -U"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"id-nvmset")
			opts+=" --dry-run --no-ioctl-probing --no-retries --nvmset_id= -i --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --nvmset_id -i --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"id-uuid")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"io-mgmt-recv")
			opts+=" --data= -d --data-len= -l --dry-run --mo= -m --mos= -s --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --data -d --data-len -l --mo -m --mos -s --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--data -d"
			;;

		"io-mgmt-send")
			opts+=" --data= -d --data-len= -l --dry-run --mo= -m --mos= -s --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --data -d --data-len -l --mo -m --mos -s --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--data -d"
			;;

		"io-passthru")
			opts+=" --cdw10= -4 --cdw11= -5 --cdw12= -6 --cdw13= -7 --cdw14= -8 --cdw15= -9 --cdw2= -2 --cdw3= -3 --data-len= -l --dry-run --flags= -f --input-file= -i --latency -T --metadata= -M --metadata-len= -m --namespace-id= -n --no-ioctl-probing --no-retries --opcode= -O --output-format= -o --output-format-version= --prefill= -p --quiet --raw-binary -b --read -r --rsvd= -R --set-options= --show-command -s --timeout= --verbose -v --write -w"
			valopts+=" --cdw10 -4 --cdw11 -5 --cdw12 -6 --cdw13 -7 --cdw14 -8 --cdw15 -9 --cdw2 -2 --cdw3 -3 --data-len -l --flags -f --input-file -i --metadata -M --metadata-len -m --namespace-id -n --opcode -O --output-format -o --output-format-version --prefill -p --rsvd -R --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--input-file -i" "--metadata -M"
			;;

		"lba-status-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"list")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"list-ctrl")
			opts+=" --cntid= -c --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --cntid -c --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"list-endgrp")
			opts+=" --dry-run --endgrp-id= -i --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --endgrp-id -i --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"list-ns")
			opts+=" --all -a --csi= -y --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --csi -y --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"list-secondary")
			opts+=" --cntid= -c --dry-run --no-ioctl-probing --no-retries --num-entries= -e --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --cntid -c --num-entries -e --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"list-subsys")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"lockdown")
			opts+=" --csel= -c --css= -C --dry-run --ifc= -f --no-ioctl-probing --no-retries --ofi= -O --output-format= -o --output-format-version= --prhbt= -p --quiet --scp= -s --set-options= --timeout= --uuid= -U --verbose -v"
			valopts+=" --csel -c --css -C --ifc -f --ofi -O --output-format -o --output-format-version --prhbt -p --scp -s --set-options --timeout --uuid -U"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"media-unit-stat-log")
			opts+=" --domain-id= -d --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --domain-id -d --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"mgmt-addr-list-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"mi-cmd-support-effects-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"ns-descs")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"ns-rescan")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"nvm-id-ctrl")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"nvm-id-ns")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --uuid-index= -U --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout --uuid-index -U"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"nvm-id-ns-lba-format")
			opts+=" --dry-run --lba-format-index= -i --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --uuid-index= -U --verbose -v"
			valopts+=" --lba-format-index -i --output-format -o --output-format-version --set-options --timeout --uuid-index -U"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"nvme-mi-recv")
			opts+=" --data-len= -l --dry-run --input-file= -i --namespace-id= -n --nmd0= -0 --nmd1= -1 --nmimt= -m --no-ioctl-probing --no-retries --opcode= -O --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --data-len -l --input-file -i --namespace-id -n --nmd0 -0 --nmd1 -1 --nmimt -m --opcode -O --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--input-file -i"
			;;

		"nvme-mi-send")
			opts+=" --data-len= -l --dry-run --input-file= -i --namespace-id= -n --nmd0= -0 --nmd1= -1 --nmimt= -m --no-ioctl-probing --no-retries --opcode= -O --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --data-len -l --input-file -i --namespace-id -n --nmd0 -0 --nmd1 -1 --nmimt -m --opcode -O --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--input-file -i"
			;;

		"persistent-event-log")
			opts+=" --action= -a --dry-run --log_len= -l --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --action -a --log_len -l --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"phy-rx-eom-log")
			opts+=" --controller= -c --dry-run --lsp= -s --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --controller -c --lsp -s --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"power-measurement-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"pred-lat-event-agg-log")
			opts+=" --dry-run --log-entries= -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --log-entries -e --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"predictable-lat-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --nvmset-id= -i --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --nvmset-id -i --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"primary-ctrl-caps")
			opts+=" --cntlid= -c --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --cntlid -c --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"pull-model-ddc-req-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"reachability-associations-log")
			opts+=" --associations-only -a --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"reachability-groups-log")
			opts+=" --dry-run --groups-only -g --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"read")
			opts+=" --app-tag= -a --app-tag-mask= -m --block-count= -c --block-size= -b --data= -d --data-size= -z --dir-spec= -S --dir-type= -T --dry-run --dsm= -D --force --force-unit-access -f --latency -t --limited-retry -l --metadata= -M --metadata-size= -y --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --prinfo= -p --quiet --ref-tag= -r --set-options= --show-command -V --start-block= -s --storage-tag= -g --storage-tag-check -C --timeout= --verbose -v"
			valopts+=" --app-tag -a --app-tag-mask -m --block-count -c --block-size -b --data -d --data-size -z --dir-spec -S --dir-type -T --dsm -D --metadata -M --metadata-size -y --namespace-id -n --output-format -o --output-format-version --prinfo -p --ref-tag -r --set-options --start-block -s --storage-tag -g --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--data -d" "--metadata -M"
			;;

		"reset")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"resv-acquire")
			opts+=" --crkey= -c --dry-run --iekey -i --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --prkey= -p --quiet --racqa= -a --rtype= -t --set-options= --timeout= --verbose -v"
			valopts+=" --crkey -c --namespace-id -n --output-format -o --output-format-version --prkey -p --racqa -a --rtype -t --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"resv-notif-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"resv-register")
			opts+=" --cptpl= -p --crkey= -c --dry-run --iekey -i --namespace-id= -n --no-ioctl-probing --no-retries --nrkey= -k --output-format= -o --output-format-version= --quiet --rrega= -r --set-options= --timeout= --verbose -v"
			valopts+=" --cptpl -p --crkey -c --namespace-id -n --nrkey -k --output-format -o --output-format-version --rrega -r --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"resv-release")
			opts+=" --crkey= -c --dry-run --iekey -i --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rrela= -a --rtype= -t --set-options= --timeout= --verbose -v"
			valopts+=" --crkey -c --namespace-id -n --output-format -o --output-format-version --rrela -a --rtype -t --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"resv-report")
			opts+=" --dry-run --eds -e --namespace-id= -n --no-ioctl-probing --no-retries --numd= -d --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --numd -d --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"rotational-media-info-log")
			opts+=" --dry-run --endg-id= -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --endg-id -e --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"sanitize")
			opts+=" --ause -u --dry-run --emvs -e --ish -I --no-dealloc -d --no-ioctl-probing --no-retries --oipbp -i --output-format= -o --output-format-version= --ovrpat= -p --owpass= -n --preq -q --quiet --repeat= -r --sanact= -a --set-options= --timeout= --verbose -v --wait -w"
			valopts+=" --output-format -o --output-format-version --ovrpat -p --owpass -n --repeat -r --sanact -a --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sanact -a" "exit-failure start-block-erase start-overwrite start-crypto-erase exit-media-verification"
			;;

		"sanitize-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"sanitize-ns")
			opts+=" --ause -u --dry-run --emvs -e --ish -I --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --preq -q --quiet --sanact= -a --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --sanact -a --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sanact -a" "exit-failure start-crypto-erase exit-media-verification"
			;;

		"security-recv")
			opts+=" --al= -t --dry-run --ish -I --namespace-id= -n --no-ioctl-probing --no-retries --nssf= -N --output-format= -o --output-format-version= --quiet --raw-binary -b --secp= -p --set-options= --size= -x --spsp= -s --timeout= --verbose -v"
			valopts+=" --al -t --namespace-id -n --nssf -N --output-format -o --output-format-version --secp -p --set-options --size -x --spsp -s --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"security-send")
			opts+=" --dry-run --file= -f --ish -I --namespace-id= -n --no-ioctl-probing --no-retries --nssf= -N --output-format= -o --output-format-version= --quiet --secp= -p --set-options= --spsp= -s --timeout= --tl= -t --verbose -v"
			valopts+=" --file -f --namespace-id -n --nssf -N --output-format -o --output-format-version --secp -p --set-options --spsp -s --timeout --tl -t"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--file -f"
			;;

		"self-test-log")
			opts+=" --dry-run --dst-entries= -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --dst-entries -e --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"set-feature")
			opts+=" --cdw12= -c --data= -d --data-len= -l --dry-run --feature-id= -f --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --save -s --set-options= --timeout= --uuid-index= -U --value= -V --verbose -v"
			valopts+=" --cdw12 -c --data -d --data-len -l --feature-id -f --namespace-id -n --output-format -o --output-format-version --set-options --timeout --uuid-index -U --value -V"

			_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"
			_nvme_opt_files "--data -d"
			;;

		"set-property")
			opts+=" --dry-run --no-ioctl-probing --no-retries --offset= -O --output-format= -o --output-format-version= --quiet --set-options= --timeout= --value= -V --verbose -v"
			valopts+=" --offset -O --output-format -o --output-format-version --set-options --timeout --value -V"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"set-reg")
			opts+=" --acq= --aqa= --asq= --bpmbl= --bprsel= --cc= --cmbmsc= --csts= --dry-run --intmc= --intms= --mmio32 -m --no-ioctl-probing --no-retries --nssd= --nssr= --offset= -O --output-format= -o --output-format-version= --pmrctl= --pmrmscl= --pmrmscu= --quiet --set-options= --timeout= --value= -V --verbose -v"
			valopts+=" --acq --aqa --asq --bpmbl --bprsel --cc --cmbmsc --csts --intmc --intms --nssd --nssr --offset -O --output-format -o --output-format-version --pmrctl --pmrmscl --pmrmscu --set-options --timeout --value -V"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"show-hostnqn")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"show-regs")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"show-topology")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --ranking= -r --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --ranking -r --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"smart-log")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"subsystem-reset")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"supported-cap-config-log")
			opts+=" --domain-id= -d --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --domain-id -d --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"supported-log-pages")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"telemetry-log")
			opts+=" --controller-init -c --data-area= -d --dry-run --force --host-generate= -g --mcda= -m --no-ioctl-probing --no-retries --output-file= -O --output-format= -o --output-format-version= --quiet --rae -r --set-options= --timeout= --verbose -v"
			valopts+=" --data-area -d --host-generate -g --mcda -m --output-file -O --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--output-file -O"
			;;

		"top")
			opts+=" --delay= -d --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --delay -d --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"verify")
			opts+=" --app-tag= -a --app-tag-mask= -m --block-count= -c --dry-run --force-unit-access -f --limited-retry -l --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --prinfo= -p --quiet --ref-tag= -r --set-options= --start-block= -s --storage-tag= -S --storage-tag-check -C --timeout= --verbose -v"
			valopts+=" --app-tag -a --app-tag-mask -m --block-count -c --namespace-id -n --output-format -o --output-format-version --prinfo -p --ref-tag -r --set-options --start-block -s --storage-tag -S --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"virt-mgmt")
			opts+=" --act= -a --cntlid= -c --dry-run --no-ioctl-probing --no-retries --nr= -n --output-format= -o --output-format-version= --quiet --rt= -r --set-options= --timeout= --verbose -v"
			valopts+=" --act -a --cntlid -c --nr -n --output-format -o --output-format-version --rt -r --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"write")
			opts+=" --app-tag= -a --app-tag-mask= -m --block-count= -c --block-size= -b --data= -d --data-size= -z --dir-spec= -S --dir-type= -T --dry-run --dsm= -D --force --force-unit-access -f --latency -t --limited-retry -l --metadata= -M --metadata-size= -y --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --prinfo= -p --quiet --ref-tag= -r --set-options= --show-command -V --start-block= -s --storage-tag= -g --storage-tag-check -C --timeout= --verbose -v"
			valopts+=" --app-tag -a --app-tag-mask -m --block-count -c --block-size -b --data -d --data-size -z --dir-spec -S --dir-type -T --dsm -D --metadata -M --metadata-size -y --namespace-id -n --output-format -o --output-format-version --prinfo -p --ref-tag -r --set-options --start-block -s --storage-tag -g --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--data -d" "--metadata -M"
			;;

		"write-uncor")
			opts+=" --block-count= -c --dir-spec= -S --dir-type= -T --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --start-block= -s --timeout= --verbose -v"
			valopts+=" --block-count -c --dir-spec -S --dir-type -T --namespace-id -n --output-format -o --output-format-version --set-options --start-block -s --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"write-zeroes")
			opts+=" --app-tag= -a --app-tag-mask= -m --block-count= -c --deac -d --dir-spec= -D --dir-type= -T --dry-run --force-unit-access -f --limited-retry -l --namespace-id= -n --namespace-zeroes -Z --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --prinfo= -p --quiet --ref-tag= -r --set-options= --start-block= -s --storage-tag= -S --storage-tag-check -C --timeout= --verbose -v"
			valopts+=" --app-tag -a --app-tag-mask -m --block-count -c --dir-spec -D --dir-type -T --namespace-id -n --output-format -o --output-format-version --prinfo -p --ref-tag -r --set-options --start-block -s --storage-tag -S --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 2
}

plugin_amzn_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"id-ctrl")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --vendor-specific -V --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"stats")
			opts+=" --details -d --dry-run --interval= -i --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --interval -i --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_config_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"convert")
			opts+=" --config= -J --force --output= -o"
			valopts+=" --config -J --output -o"

			_nvme_opt_files "--config -J" "--output -o"
			;;

		"create")
			opts+=" --concat --ctrl-loss-tmo= -l --data-digest -G --disable-sqflow --discovery --dry-run --duplicate-connect -D --fast-io-fail-tmo= -F --hdr-digest -g --host-iface= -f --host-symname= --host-traddr= -w --hostid= -I --hostnqn= -q --keep-alive-tmo= -k --keyring= --kxchap-ctrl-secret= -C --kxchap-secret= -S --no-ioctl-probing --no-retries --nqn= -n --nr-io-queues= -i --nr-poll-queues= -P --nr-write-queues= -W --output= --output-format= -o --output-format-version= --persistent= --queue-size= -Q --quiet --reconnect-delay= -c --set-options= --timeout= --tls --tls-key= --tls-key-identity= --tls_key= --tos= -T --traddr= -a --transport= -t --trsvcid= -s --verbose -v"
			valopts+=" --ctrl-loss-tmo -l --fast-io-fail-tmo -F --host-iface -f --host-symname --host-traddr -w --hostid -I --hostnqn -q --keep-alive-tmo -k --keyring --kxchap-ctrl-secret -C --kxchap-secret -S --nqn -n --nr-io-queues -i --nr-poll-queues -P --nr-write-queues -W --output --output-format -o --output-format-version --persistent --queue-size -Q --reconnect-delay -c --set-options --timeout --tls-key --tls-key-identity --tls_key --tos -T --traddr -a --transport -t --trsvcid -s"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--output"
			;;

		"show")
			opts+=" --config= -J --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --config -J --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--config -J"
			;;

		"validate")
			opts+=" --config= -J"
			valopts+=" --config -J"

			_nvme_opt_files "--config -J"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_dapustor_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"smart-log-add")
			opts+=" --dry-run --json -j --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_dell_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"id-ctrl")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --vendor-specific -V --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_dera_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"smart-log-add"|"stat")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_dir_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"receive")
			opts+=" --data-len= -l --dir-oper= -O --dir-spec= -S --dir-type= -D --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --req-resource= -r --set-options= --timeout= --verbose -v"
			valopts+=" --data-len -l --dir-oper -O --dir-spec -S --dir-type -D --namespace-id -n --output-format -o --output-format-version --req-resource -r --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"send")
			opts+=" --data-len= -l --dir-oper= -O --dir-spec= -S --dir-type= -D --dry-run --endir= -e --input-file= -i --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --target-dir= -T --timeout= --verbose -v"
			valopts+=" --data-len -l --dir-oper -O --dir-spec -S --dir-type -D --endir -e --input-file -i --namespace-id -n --output-format -o --output-format-version --set-options --target-dir -T --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--input-file -i"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_exclusion_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"add")
			opts+=" --dry-run --entry= -e --name= -N --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --entry -e --name -N --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"create")
			opts+=" --dry-run --name= -N --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --name -N --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"delete")
			opts+=" --dry-run --name= -N --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --name -N --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"edit")
			opts+=" --dry-run --name= -N --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --name -N --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"list")
			opts+=" --dry-run --name= -N --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --name -N --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"remove")
			opts+=" --dry-run --name= -N --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --name -N --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_fdp_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"configs")
			opts+=" --dry-run --endgrp-id= -e --human-readable -H --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --endgrp-id -e --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"events")
			opts+=" --dry-run --endgrp-id= -e --host-events -E --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --endgrp-id -e --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"feature")
			opts+=" --disable -d --dry-run --enable-conf-idx= -c --endgrp-id= -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --enable-conf-idx -c --endgrp-id -e --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"set-events")
			opts+=" --dry-run --enable -e --event-types= -t --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --placement-handle= -p --quiet --save -s --set-options= --timeout= --verbose -v"
			valopts+=" --event-types -t --namespace-id -n --output-format -o --output-format-version --placement-handle -p --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"stats")
			opts+=" --dry-run --endgrp-id= -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --endgrp-id -e --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"status")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"update")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --pids= -p --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --pids -p --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"usage")
			opts+=" --dry-run --endgrp-id= -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --endgrp-id -e --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_feat_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"arbitration")
			opts+=" --ab= -a --dry-run --hpw= -H --lpw= -l --mpw= -m --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --save -s --sel= -S --set-options= --timeout= --verbose -v"
			valopts+=" --ab -a --hpw -H --lpw -l --mpw -m --output-format -o --output-format-version --sel -S --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -S" "0 1 2 3"
			;;

		"err-recovery")
			opts+=" --dry-run --dulbe -d --no-ioctl-probing --no-retries --nsid= -n --output-format= -o --output-format-version= --quiet --save -s --sel= -S --set-options= --timeout= --tler= -t --verbose -v"
			valopts+=" --nsid -n --output-format -o --output-format-version --sel -S --set-options --timeout --tler -t"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -S" "0 1 2 3"
			;;

		"hctm")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --save -s --sel= -S --set-options= --timeout= --tmt1= -t --tmt2= -T --verbose -v"
			valopts+=" --output-format -o --output-format-version --sel -S --set-options --timeout --tmt1 -t --tmt2 -T"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -S" "0 1 2 3"
			;;

		"host-behavior-support")
			opts+=" --acre= -a --cdfe= -c --dry-run --etdas= -e --hdisns= -H --lbafee= -l --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --save -s --sel= -S --set-options= --timeout= --verbose -v"
			valopts+=" --acre -a --cdfe -c --etdas -e --hdisns -H --lbafee -l --output-format -o --output-format-version --sel -S --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -S" "0 1 2 3"
			;;

		"lba-range-type")
			opts+=" --dry-run --guids= -g --hlbars= -h --lbaros= -l --nlbs= -b --no-ioctl-probing --no-retries --nsid= -n --num= -N --output-format= -o --output-format-version= --quiet --save -s --sel= -S --set-options= --slbas= -s --timeout= --types= -t --verbose -v"
			valopts+=" --guids -g --hlbars -h --lbaros -l --nlbs -b --nsid -n --num -N --output-format -o --output-format-version --sel -S --set-options --slbas -s --timeout --types -t"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -S" "0 1 2 3"
			;;

		"num-queues")
			opts+=" --dry-run --ncqr= -c --no-ioctl-probing --no-retries --nsqr= -n --output-format= -o --output-format-version= --quiet --save -s --sel= -S --set-options= --timeout= --verbose -v"
			valopts+=" --ncqr -c --nsqr -n --output-format -o --output-format-version --sel -S --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -S" "0 1 2 3"
			;;

		"perf-characteristics")
			opts+=" --attri= -a --attrl= -A --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --paid= -p --quiet --r4karl= -R --rvspa -r --save -s --sel= -S --set-options= --timeout= --verbose -v --vs-data= -V"
			valopts+=" --attri -a --attrl -A --namespace-id -n --output-format -o --output-format-version --paid -p --r4karl -R --sel -S --set-options --timeout --vs-data -V"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -S" "0 1 2 3"
			_nvme_opt_files "--vs-data -V"
			;;

		"power-limit")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --pls= -l --plv= -p --quiet --save -s --sel= -S --set-options= --timeout= --uuid-index= -u --verbose -v"
			valopts+=" --output-format -o --output-format-version --pls -l --plv -p --sel -S --set-options --timeout --uuid-index -u"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -S" "0 1 2 3"
			;;

		"power-meas")
			opts+=" --act= --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --pmts= --quiet --save -s --sel= -S --set-options= --smt= --timeout= --uuid-index= -u --verbose -v"
			valopts+=" --act --output-format -o --output-format-version --pmts --sel -S --set-options --smt --timeout --uuid-index -u"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -S" "0 1 2 3"
			;;

		"power-mgmt")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --ps= -p --quiet --save -s --sel= -S --set-options= --timeout= --verbose -v --wh= -w"
			valopts+=" --output-format -o --output-format-version --ps -p --sel -S --set-options --timeout --wh -w"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -S" "0 1 2 3"
			;;

		"power-thresh")
			opts+=" --dry-run --ept= -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --pmts= -m --pts= -t --ptv= -p --quiet --save -s --sel= -S --set-options= --timeout= --uuid-index= -u --verbose -v"
			valopts+=" --ept -e --output-format -o --output-format-version --pmts -m --pts -t --ptv -p --sel -S --set-options --timeout --uuid-index -u"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -S" "0 1 2 3"
			;;

		"temp-thresh")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --save -s --sel= -S --set-options= --thsel= -H --timeout= --tmpsel= -m --tmpth= -T --tmpthh= -M --verbose -v"
			valopts+=" --output-format -o --output-format-version --sel -S --set-options --thsel -H --timeout --tmpsel -m --tmpth -T --tmpthh -M"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -S" "0 1 2 3"
			;;

		"timestamp")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --save -s --sel= -S --set-options= --timeout= --tstmp= -t --verbose -v"
			valopts+=" --output-format -o --output-format-version --sel -S --set-options --timeout --tstmp -t"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -S" "0 1 2 3"
			;;

		"volatile-wc")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --save -s --sel= -S --set-options= --timeout= --verbose -v --wce -w"
			valopts+=" --output-format -o --output-format-version --sel -S --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -S" "0 1 2 3"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_fw_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"commit"|"activate")
			opts+=" --action= -a --bpid= -b --dry-run --ish -I --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --slot= -s --timeout= --verbose -v"
			valopts+=" --action -a --bpid -b --output-format -o --output-format-version --set-options --slot -s --timeout"

			_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"
			;;

		"download")
			opts+=" --dry-run --fw= -f --ignore-ovr -i --ish -I --no-ioctl-probing --no-retries --offset= -O --output-format= -o --output-format-version= --progress -p --quiet --set-options= --stream --timeout= --verbose -v --xfer= -x"
			valopts+=" --fw -f --offset -O --output-format -o --output-format-version --set-options --timeout --xfer -x"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--fw -f"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_huawei_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"id-ctrl")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --vendor-specific -V --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"list")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_ibm_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"crit-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"persist-event-log")
			opts+=" --action= -a --dry-run --log_len= -l --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --action -a --log_len -l --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vpd")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_id_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"ctrl")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --vendor-specific -V --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"ctrl-list")
			opts+=" --cntid= -c --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --cntid -c --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"domain")
			opts+=" --dom-id= -d --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --dom-id -d --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"endgrp-list")
			opts+=" --dry-run --endgrp-id= -i --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --endgrp-id -i --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"iocs")
			opts+=" --controller-id= -c --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --controller-id -c --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"ns")
			opts+=" --dry-run --force --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --vendor-specific -V --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"ns-descs")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"ns-granularity")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"ns-ind")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"ns-lba-format")
			opts+=" --dry-run --lba-format-index= -i --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --uuid-index= -U --verbose -v"
			valopts+=" --lba-format-index -i --output-format -o --output-format-version --set-options --timeout --uuid-index -U"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"ns-list")
			opts+=" --all -a --csi= -y --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --csi -y --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"nvm-ctrl")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"nvm-ns")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --uuid-index= -U --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout --uuid-index -U"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"nvm-ns-lba-format")
			opts+=" --dry-run --lba-format-index= -i --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --uuid-index= -U --verbose -v"
			valopts+=" --lba-format-index -i --output-format -o --output-format-version --set-options --timeout --uuid-index -U"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"nvmset")
			opts+=" --dry-run --no-ioctl-probing --no-retries --nvmset_id= -i --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --nvmset_id -i --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"primary-ctrl-caps")
			opts+=" --cntlid= -c --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --cntlid -c --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"secondary-ctrl-list")
			opts+=" --cntid= -c --dry-run --no-ioctl-probing --no-retries --num-entries= -e --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --cntid -c --num-entries -e --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"uuid")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_innogrit_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"get-cdump")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-eventlog")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_inspur_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"nvme-vendor-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_intel_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"id-ctrl")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --vendor-specific -V --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"internal-log")
			opts+=" --dry-run --log= -l --namespace-id= -n --nlognum= -m --no-ioctl-probing --no-retries --output-file= -O --output-format= -o --output-format-version= --quiet --region= -r --set-options= --timeout= --verbose -v --verbose-nlog -V"
			valopts+=" --log -l --namespace-id -n --nlognum -m --output-file -O --output-format -o --output-format-version --region -r --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--output-file -O"
			;;

		"lat-stats")
			opts+=" --dry-run --json -j --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v --write -w"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"lat-stats-tracking")
			opts+=" --disable -d --enable -e"
			;;

		"market-name")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"set-bucket-thresholds")
			opts+=" --bucket-thresholds= -t --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v --write -w"
			valopts+=" --bucket-thresholds -t --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"smart-log-add")
			opts+=" --dry-run --json -j --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"temp-stats")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_io_mgmt_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"recv")
			opts+=" --data= -d --data-len= -l --dry-run --mo= -m --mos= -s --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --data -d --data-len -l --mo -m --mos -s --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--data -d"
			;;

		"send")
			opts+=" --data= -d --data-len= -l --dry-run --mo= -m --mos= -s --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --data -d --data-len -l --mo -m --mos -s --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--data -d"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_keys_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"check-kxchap-secret")
			opts+=" --dry-run --identity= -i --keydata= -d --keyring= -k --keytype= -t --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --identity -i --keydata -d --keyring -k --keytype -t --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"check-tls-psk")
			opts+=" --compat -C --dry-run --hostnqn= -n --identity= -I --keydata= -d --keyring= -k --keytype= -t --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --subsysnqn= -c --timeout= --verbose -v"
			valopts+=" --hostnqn -n --identity -I --keydata -d --keyring -k --keytype -t --output-format -o --output-format-version --set-options --subsysnqn -c --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"export")
			opts+=" --dry-run --keyfile= -f --keyring= -k --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --keyfile -f --keyring -k --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"gen-kxchap-secret")
			opts+=" --dry-run --hmac= -m --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --secret= -s --secret-length= -l --set-options= --timeout= --verbose -v"
			valopts+=" --hmac -m --output-format -o --output-format-version --secret -s --secret-length -l --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"gen-tls-psk")
			opts+=" --compat -C --dry-run --hmac= -m --hostnqn= -n --identity= -I --insert -i --keyfile= -f --keyring= -k --keytype= -t --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --secret= -s --set-options= --subsysnqn= -c --timeout= --verbose -v"
			valopts+=" --hmac -m --hostnqn -n --identity -I --keyfile -f --keyring -k --keytype -t --output-format -o --output-format-version --secret -s --set-options --subsysnqn -c --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"import")
			opts+=" --dry-run --identity= -i --keydata= -d --keyfile= -f --keyring= -k --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --identity -i --keydata -d --keyfile -f --keyring -k --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"insert-tls-psk")
			opts+=" --compat -C --dry-run --hostnqn= -n --identity= -I --keydata= -d --keyfile= -f --keyring= -k --keytype= -t --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --subsysnqn= -c --timeout= --verbose -v"
			valopts+=" --hostnqn -n --identity -I --keydata -d --keyfile -f --keyring -k --keytype -t --output-format -o --output-format-version --set-options --subsysnqn -c --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"revoke")
			opts+=" --dry-run --identity= -i --keyring= -k --keytype= -t --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --identity -i --keyring -k --keytype -t --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_lm_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"create-cdq")
			opts+=" --cntlid= -c --consent --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --queue-type= -q --quiet --set-options= --size= -s --timeout= --verbose -v"
			valopts+=" --cntlid -c --output-format -o --output-format-version --queue-type -q --set-options --size -s --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"delete-cdq")
			opts+=" --cdqid= -C --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --cdqid -C --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-cdq")
			opts+=" --cdqid= -C --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --cdqid -C --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"migration-recv")
			opts+=" --cntlid= -c --csuuidi= -U --csvi= -V --dry-run --human-readable -H --no-ioctl-probing --no-retries --numd= -n --offset= -O --output-file= -f --output-format= -o --output-format-version= --quiet --sel= -s --set-options= --timeout= --uidx= -u --verbose -v"
			valopts+=" --cntlid -c --csuuidi -U --csvi -V --numd -n --offset -O --output-file -f --output-format -o --output-format-version --sel -s --set-options --timeout --uidx -u"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -s" "0 1 2 3"
			_nvme_opt_files "--output-file -f"
			;;

		"migration-send")
			opts+=" --cntlid= -c --csuuidi= -U --csvi= -V --dry-run --dudmq -d --input-file= -f --no-ioctl-probing --no-retries --numd= -n --offset= -O --output-format= -o --output-format-version= --quiet --sel= -s --seq-ind= -S --set-options= --stype= -t --timeout= --uidx= -u --verbose -v"
			valopts+=" --cntlid -c --csuuidi -U --csvi -V --input-file -f --numd -n --offset -O --output-format -o --output-format-version --sel -s --seq-ind -S --set-options --stype -t --timeout --uidx -u"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -s" "0 1 2 3"
			_nvme_opt_files "--input-file -f"
			;;

		"set-cdq")
			opts+=" --cdqid= -C --dry-run --hp= -H --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --tpt= -T --verbose -v"
			valopts+=" --cdqid -C --hp -H --output-format -o --output-format-version --set-options --timeout --tpt -T"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"track-send")
			opts+=" --cdqid= -C --dry-run --mos= -m --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --sel= -s --set-options= --start --stop --timeout= --verbose -v"
			valopts+=" --cdqid -C --mos -m --output-format -o --output-format-version --sel -s --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -s" "0 1 2 3"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_log_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"ana")
			opts+=" --dry-run --groups -g --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"ave-discovery")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"boot-part")
			opts+=" --dry-run --lsp= -s --no-ioctl-probing --no-retries --output-file= -f --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --lsp -s --output-file -f --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--output-file -f"
			;;

		"changed-alloc-ns-list")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"changed-ns-list")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"dispersed-ns-participating-nss")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"effects")
			opts+=" --csi= -c --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --csi -c --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"endurance")
			opts+=" --dry-run --group-id= -g --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --group-id -g --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"endurance-event-agg")
			opts+=" --dry-run --log-entries= -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --log-entries -e --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"error")
			opts+=" --csi= -c --dry-run --lba= -l --log-entries= -e --namespace-id= -n --no-ioctl-probing --no-retries --opcode= -O --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --sqid= -S --status= -s --timeout= --trtype= -t --valid-entry -V --verbose -v"
			valopts+=" --csi -c --lba -l --log-entries -e --namespace-id -n --opcode -O --output-format -o --output-format-version --set-options --sqid -S --status -s --timeout --trtype -t"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"fid-support-effects")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"fw")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"host-discovery")
			opts+=" --all-host-entries -a --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"lba-status")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"media-unit-stat")
			opts+=" --domain-id= -d --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --domain-id -d --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"mgmt-addr-list")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"mi-cmd-support-effects")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"persistent-event")
			opts+=" --action= -a --dry-run --log_len= -l --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --action -a --log_len -l --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"phy-rx-eom")
			opts+=" --controller= -c --dry-run --lsp= -s --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --controller -c --lsp -s --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"power-measurement")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"pred-lat-event-agg")
			opts+=" --dry-run --log-entries= -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --log-entries -e --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"predictable-lat")
			opts+=" --dry-run --no-ioctl-probing --no-retries --nvmset-id= -i --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --nvmset-id -i --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"pull-model-ddc-req")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"reachability-associations")
			opts+=" --associations-only -a --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"reachability-groups")
			opts+=" --dry-run --groups-only -g --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"resv-notif")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"rotational-media-info")
			opts+=" --dry-run --endg-id= -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --endg-id -e --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"sanitize")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"self-test")
			opts+=" --dry-run --dst-entries= -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --dst-entries -e --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"smart")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"supported-cap-config")
			opts+=" --domain-id= -d --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --domain-id -d --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"supported-pages")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"telemetry")
			opts+=" --controller-init -c --data-area= -d --dry-run --force --host-generate= -g --mcda= -m --no-ioctl-probing --no-retries --output-file= -O --output-format= -o --output-format-version= --quiet --rae -r --set-options= --timeout= --verbose -v"
			valopts+=" --data-area -d --host-generate -g --mcda -m --output-file -O --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--output-file -O"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_mangoboost_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"id-ctrl")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --vendor-specific -V --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_memblaze_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"clear-error-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-pm-status")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"lat-get-feature-x")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"lat-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --param= -p --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --param -p --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"lat-log-print")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"lat-log-print-x")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"lat-set-feature-x")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --sel-perf-log= -s --set-commands-mask= -m --set-options= --set-read-threshold= -r --set-trim-threshold= -t --set-write-threshold= -w --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --sel-perf-log -s --set-commands-mask -m --set-options --set-read-threshold -r --set-trim-threshold -t --set-write-threshold -w --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"lat-stats")
			opts+=" --disable -d --enable -e"
			;;

		"lat-stats-print")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v --write -w"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"lat-stats-print-x")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"perf-stats-print-x")
			opts+=" --dry-run --duration= -d --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --duration -d --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"select-download")
			opts+=" --dry-run --fw= -f --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --select= -s --set-options= --timeout= --verbose -v"
			valopts+=" --fw -f --output-format -o --output-format-version --select -s --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--fw -f"
			;;

		"set-pm-status")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --save -s --set-options= --timeout= --value= -V --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout --value -V"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"smart-log-add")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"smart-log-add-x")
			opts+=" --raw-binary -b"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_micron_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"clear-fw-activate-history")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"clear-pcie-correctable-errors")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"cloud-SSD-plugin-version")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"cloud-boot-SSD-version")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"id-ctrl")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"latency-logs")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"latency-stats")
			opts+=" --command= -c --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --command -c --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"latency-tracking")
			opts+=" --command= -c --dry-run --no-ioctl-probing --no-retries --option= -O --output-format= -o --output-format-version= --quiet --set-options= --threshold= -t --timeout= --verbose -v"
			valopts+=" --command -c --option -O --output-format -o --output-format-version --set-options --threshold -t --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"log-page-directory")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"plugin-version")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"select-download")
			opts+=" --dry-run --fw= -f --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --select= -s --set-options= --timeout= --verbose -v"
			valopts+=" --fw -f --output-format -o --output-format-version --select -s --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--fw -f"
			;;

		"smart-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-cloud-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-device-waf")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-drive-info")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-fw-activate-history")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-internal-log")
			opts+=" --data_area= -d --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --package= -p --quiet --set-options= --timeout= --type= -t --verbose -v"
			valopts+=" --data_area -d --output-format -o --output-format-version --package -p --set-options --timeout --type -t"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--package -p"
			;;

		"vs-nand-stats")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-pcie-stats")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-smart-add-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-smart-ext-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-smbus-option")
			opts+=" --dry-run --no-ioctl-probing --no-retries --option= -O --output-format= -o --output-format-version= --quiet --save= -s --set-options= --timeout= --value= -V --verbose -v"
			valopts+=" --option -O --output-format -o --output-format-version --save -s --set-options --timeout --value -V"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-telemetry-controller-option")
			opts+=" --dry-run --no-ioctl-probing --no-retries --option= -O --output-format= -o --output-format-version= --quiet --select= -s --set-options= --timeout= --verbose -v"
			valopts+=" --option -O --output-format -o --output-format-version --select -s --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-temperature-stats")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-vendor-telemetry-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-work-load-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_nbft_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"show")
			opts+=" --discovery -d --dry-run --hfi -H --nbft-path= --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --subsystem -s --timeout= --verbose -v"
			valopts+=" --nbft-path --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_netapp_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"ontapdevices")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"smdevices")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_ns_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"attach")
			opts+=" --controllers= -c --dry-run --ish -I --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --controllers -c --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"create")
			opts+=" --anagrp-id= -a --azr -z --block-size= -b --csi= -y --dps= -d --dry-run --endg-id= -e --flbas= -f --ish -I --lbstm= -l --ncap= -c --ncap-si= -C --nmic= -m --no-ioctl-probing --no-retries --nphndls= -n --nsze= -s --nsze-si= -S --nvmset-id= -i --output-format= -o --output-format-version= --phndls= -p --quiet --rar= -r --rnumzrwa= -u --ror= -O --set-options= --timeout= --verbose -v"
			valopts+=" --anagrp-id -a --block-size -b --csi -y --dps -d --endg-id -e --flbas -f --lbstm -l --ncap -c --ncap-si -C --nmic -m --nphndls -n --nsze -s --nsze-si -S --nvmset-id -i --output-format -o --output-format-version --phndls -p --rar -r --rnumzrwa -u --ror -O --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"delete")
			opts+=" --dry-run --ish -I --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"detach")
			opts+=" --controllers= -c --dry-run --ish -I --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --controllers -c --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-id")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_nvidia_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"id-ctrl")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --vendor-specific -V --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_nvme_mi_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"recv")
			opts+=" --data-len= -l --dry-run --input-file= -i --namespace-id= -n --nmd0= -0 --nmd1= -1 --nmimt= -m --no-ioctl-probing --no-retries --opcode= -O --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --data-len -l --input-file -i --namespace-id -n --nmd0 -0 --nmd1 -1 --nmimt -m --opcode -O --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--input-file -i"
			;;

		"send")
			opts+=" --data-len= -l --dry-run --input-file= -i --namespace-id= -n --nmd0= -0 --nmd1= -1 --nmimt= -m --no-ioctl-probing --no-retries --opcode= -O --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --data-len -l --input-file -i --namespace-id -n --nmd0 -0 --nmd1 -1 --nmimt -m --opcode -O --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--input-file -i"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_ocp_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"clear-fw-activate-history")
			opts+=" --dry-run --no-ioctl-probing --no-retries --no-uuid -n --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"clear-pcie-correctable-errors")
			opts+=" --dry-run --no-ioctl-probing --no-retries --no-uuid -n --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"device-capability-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"eol-plp-failure-mode")
			opts+=" --dry-run --mode= -m --no-ioctl-probing --no-retries --no-uuid -n --output-format= -o --output-format-version= --quiet --save -s --sel= -S --set-options= --timeout= --verbose -v"
			valopts+=" --mode -m --output-format -o --output-format-version --sel -S --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -S" "0 1 2 3"
			;;

		"error-recovery-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"fw-activate-history")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-clear-pcie-correctable-errors")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --no-uuid -u --output-format= -o --output-format-version= --quiet --sel= -s --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --sel -s --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -s" "0 1 2 3"
			;;

		"get-dssd-async-event-config")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --sel= -S --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --sel -S --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -S" "0 1 2 3"
			;;

		"get-dssd-power-state-feature")
			opts+=" --all -a --dry-run --no-ioctl-probing --no-retries --no-uuid -n --output-format= -o --output-format-version= --quiet --sel= -S --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --sel -S --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -S" "0 1 2 3"
			;;

		"get-enable-ieee1667-silo")
			opts+=" --dry-run --no-ioctl-probing --no-retries --no-uuid -n --output-format= -o --output-format-version= --quiet --sel= -s --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --sel -s --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -s" "0 1 2 3"
			;;

		"get-error-injection")
			opts+=" --all-ns -a --dry-run --no-ioctl-probing --no-retries --no-uuid -n --output-format= -o --output-format-version= --quiet --sel= -s --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --sel -s --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -s" "0 1 2 3"
			;;

		"get-idle-wakeup-time")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --no-uuid -u --output-format= -o --output-format-version= --quiet --sel= -s --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --sel -s --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -s" "0 1 2 3"
			;;

		"get-latency-monitor")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --no-uuid -u --output-format= -o --output-format-version= --quiet --sel= -s --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --sel -s --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -s" "0 1 2 3"
			;;

		"get-plp-health-check-interval")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --sel= -S --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --sel -S --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -S" "0 1 2 3"
			;;

		"get-telemetry-profile")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --no-uuid -u --output-format= -o --output-format-version= --quiet --sel= -s --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --sel -s --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -s" "0 1 2 3"
			;;

		"hardware-component-log")
			opts+=" --comp-id= -i --dry-run --list -l --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --comp-id -i --output-format -o --output-format-version --set-options --timeout"

			_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"
			;;

		"internal-log")
			opts+=" --data-area= -a --dry-run --no-ioctl-probing --no-retries --output-file= -f --output-format= -o --output-format-version= --quiet --set-options= --string-log= -s --telemetry-log= -l --telemetry-type= -t --timeout= --verbose -v"
			valopts+=" --data-area -a --output-file -f --output-format -o --output-format-version --set-options --string-log -s --telemetry-log -l --telemetry-type -t --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--output-file -f"
			;;

		"latency-monitor-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"persistent-event-log")
			opts+=" --action= -a --dry-run --log_len= -l --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --action -a --log_len -l --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"set-dssd-async-event-config")
			opts+=" --dry-run --enable-panic-notices -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --save -s --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"set-dssd-power-state-feature")
			opts+=" --dry-run --no-ioctl-probing --no-retries --no-uuid -n --output-format= -o --output-format-version= --power-state= -p --quiet --save -s --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --power-state -p --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"set-enable-ieee1667-silo")
			opts+=" --dry-run --enable -e --no-ioctl-probing --no-retries --no-uuid -n --output-format= -o --output-format-version= --quiet --save -s --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"set-error-injection")
			opts+=" --all-ns -a --data= -d --dry-run --no-ioctl-probing --no-retries --no-uuid -N --nrtdp= -r --number= -n --output-format= -o --output-format-version= --quiet --set-options= --timeout= --type= -t --verbose -v"
			valopts+=" --data -d --nrtdp -r --number -n --output-format -o --output-format-version --set-options --timeout --type -t"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--data -d"
			;;

		"set-latency-monitor-feature")
			opts+=" --active_bucket_timer_threshold= -t --active_latency_config= -f --active_latency_minimum_window= -w --active_threshold_a= -a --active_threshold_b= -b --active_threshold_c= -c --active_threshold_d= -d --debug_log_trigger_enable= -r --discard_debug_log= -l --dry-run --latency_monitor_feature_enable= -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --active_bucket_timer_threshold -t --active_latency_config -f --active_latency_minimum_window -w --active_threshold_a -a --active_threshold_b -b --active_threshold_c -c --active_threshold_d -d --debug_log_trigger_enable -r --discard_debug_log -l --latency_monitor_feature_enable -e --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"set-plp-health-check-interval")
			opts+=" --dry-run --no-ioctl-probing --no-retries --no-uuid -n --output-format= -o --output-format-version= --plp_health_interval= -p --quiet --save -s --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --plp_health_interval -p --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"set-telemetry-profile")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --telemetry-profile-select= -t --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --telemetry-profile-select -t --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"smart-add-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"tcg-configuration-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"telemetry-string-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-file= -f --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-file -f --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--output-file -f"
			;;

		"unsupported-reqs-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_registry_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"delete")
			opts+=" --attr= -a --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --attr -a --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"list")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"retrieve")
			opts+=" --attr= -a --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --attr -a --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"update")
			opts+=" --attr= -a --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --value= -V --verbose -v"
			valopts+=" --attr -a --output-format -o --output-format-version --set-options --timeout --value -V"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_resv_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"acquire")
			opts+=" --crkey= -c --dry-run --iekey -i --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --prkey= -p --quiet --racqa= -a --rtype= -t --set-options= --timeout= --verbose -v"
			valopts+=" --crkey -c --namespace-id -n --output-format -o --output-format-version --prkey -p --racqa -a --rtype -t --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"register")
			opts+=" --cptpl= -p --crkey= -c --dry-run --iekey -i --namespace-id= -n --no-ioctl-probing --no-retries --nrkey= -k --output-format= -o --output-format-version= --quiet --rrega= -r --set-options= --timeout= --verbose -v"
			valopts+=" --cptpl -p --crkey -c --namespace-id -n --nrkey -k --output-format -o --output-format-version --rrega -r --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"release")
			opts+=" --crkey= -c --dry-run --iekey -i --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rrela= -a --rtype= -t --set-options= --timeout= --verbose -v"
			valopts+=" --crkey -c --namespace-id -n --output-format -o --output-format-version --rrela -a --rtype -t --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"report")
			opts+=" --dry-run --eds -e --namespace-id= -n --no-ioctl-probing --no-retries --numd= -d --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --numd -d --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_rpmb_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"info")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"program-key")
			opts+=" --dry-run --key= -k --keyfile= -g --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --target= -t --timeout= --verbose -v"
			valopts+=" --key -k --keyfile -g --output-format -o --output-format-version --set-options --target -t --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--keyfile -g"
			;;

		"read-config")
			opts+=" --dry-run --msgfile= -f --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --msgfile -f --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--msgfile -f"
			;;

		"read-counter")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --target= -t --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --target -t --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"read-data")
			opts+=" --address= -o --blocks= -b --dry-run --msgfile= -f --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --target= -t --timeout= --verbose -v"
			valopts+=" --address -o --blocks -b --msgfile -f --output-format -o --output-format-version --set-options --target -t --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--msgfile -f"
			;;

		"write-config")
			opts+=" --dry-run --key= -k --keyfile= -g --msg= -d --msgfile= -f --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --key -k --keyfile -g --msg -d --msgfile -f --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--keyfile -g" "--msgfile -f"
			;;

		"write-data")
			opts+=" --address= -o --blocks= -b --dry-run --key= -k --keyfile= -g --msg= -d --msgfile= -f --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --target= -t --timeout= --verbose -v"
			valopts+=" --address -o --blocks -b --key -k --keyfile -g --msg -d --msgfile -f --output-format -o --output-format-version --set-options --target -t --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--keyfile -g" "--msgfile -f"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_samsung_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"vs-internal-log")
			opts+=" --compress -z --dry-run --dump-type= -t --hide-progress -H --no-ioctl-probing --no-retries --output-file= -O --output-format= -o --output-format-version= --quiet --set-options= --telemetry-data-area= -a --timeout= --verbose -v"
			valopts+=" --dump-type -t --output-file -O --output-format -o --output-format-version --set-options --telemetry-data-area -a --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--output-file -O"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_seagate_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"clear-fw-activate-history")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --save -s --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"clear-pcie-correctable-errors")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --save -s --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"cloud-SSD-plugin-version")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-ctrl-tele")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-host-tele")
			opts+=" --dry-run --log_specific= -i --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --log_specific -i --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"plugin-version")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-fw-activate-history")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-internal-log")
			opts+=" --dry-run --dump-file= -f --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --dump-file -f --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--dump-file -f"
			;;

		"vs-log-page-sup")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-pcie-stats")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-smart-add-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-temperature-stats")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_security_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"recv")
			opts+=" --al= -t --dry-run --ish -I --namespace-id= -n --no-ioctl-probing --no-retries --nssf= -N --output-format= -o --output-format-version= --quiet --raw-binary -b --secp= -p --set-options= --size= -x --spsp= -s --timeout= --verbose -v"
			valopts+=" --al -t --namespace-id -n --nssf -N --output-format -o --output-format-version --secp -p --set-options --size -x --spsp -s --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"send")
			opts+=" --dry-run --file= -f --ish -I --namespace-id= -n --no-ioctl-probing --no-retries --nssf= -N --output-format= -o --output-format-version= --quiet --secp= -p --set-options= --spsp= -s --timeout= --tl= -t --verbose -v"
			valopts+=" --file -f --namespace-id -n --nssf -N --output-format -o --output-format-version --secp -p --set-options --spsp -s --timeout --tl -t"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--file -f"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_sed_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"discover"|"1")
			opts+=" --udev -u --verbose -V"
			;;

		"initialize")
			opts+=" --read-only -r"
			;;

		"lock")
			opts+=" --ask-key -k --read-only -r"
			;;

		"revert")
			opts+=" --destructive -e --psid -p"
			;;

		"unlock")
			opts+=" --ask-key -k --read-only -r"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_sfx_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"change-cap")
			opts+=" --cap= -c --cap-byte= -z --dry-run --force -f --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --cap -c --cap-byte -z --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"dump-evtlog")
			opts+=" --dry-run --file= -f --namespace_id= -n --no-ioctl-probing --no-retries --output= -O --output-format= -o --output-format-version= --parse -p --quiet --set-options= --storage_medium= -s --timeout= --verbose -v"
			valopts+=" --file -f --namespace_id -n --output -O --output-format -o --output-format-version --set-options --storage_medium -s --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--file -f" "--output -O"
			;;

		"expand-cap")
			opts+=" --dry-run --lbaf= -l --namespace_cap= -c --namespace_id= -n --namespace_size= -s --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --units= -u --verbose -v"
			valopts+=" --lbaf -l --namespace_cap -c --namespace_id -n --namespace_size -s --output-format -o --output-format-version --set-options --timeout --units -u"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-bad-block")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-feature")
			opts+=" --dry-run --feature-id= -f --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --feature-id -f --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"lat-stats")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v --write -w"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"query-cap")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"set-feature")
			opts+=" --dry-run --feature-id= -f --force -s --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --value= -V --verbose -v"
			valopts+=" --feature-id -f --namespace-id -n --output-format -o --output-format-version --set-options --timeout --value -V"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"smart-log-add")
			opts+=" --dry-run --json -j --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"status")
			opts+=" --dry-run --json-print -j --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_shannon_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"get-additional-feature")
			opts+=" --cdw11= -c --data-len= -l --dry-run --feature-id= -f --human-readable -H --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --sel= -s --set-options= --timeout= --verbose -v"
			valopts+=" --cdw11 -c --data-len -l --feature-id -f --namespace-id -n --output-format -o --output-format-version --sel -s --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2" \
			               "--sel -s" "0 1 2 3"
			;;

		"id-ctrl")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --vendor-specific -V --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"set-additioal-feature")
			opts+=" --data= -d --data-len= -l --dry-run --feature-id= -f --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --save -s --set-options= --timeout= --value= -V --verbose -v"
			valopts+=" --data -d --data-len -l --feature-id -f --namespace-id -n --output-format -o --output-format-version --set-options --timeout --value -V"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--data -d"
			;;

		"smart-log-add")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_sndk_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"capabilities")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"clear-assert-dump")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"clear-fw-activate-history")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"clear-pcie-correctable-errors")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"cloud-SSD-plugin-version")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"cloud-boot-SSD-version")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"cu-smart-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --uuid-index= -u --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout --uuid-index -u"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"drive-resize")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --size= -s --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --size -s --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-dev-capabilities-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-drive-status")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-error-recovery-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-latency-monitor-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-unsupported-reqs-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"log-page-directory")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"namespace-resize")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --op-option= -O --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --op-option -O --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"set-latency-monitor-feature")
			opts+=" --active_bucket_timer_threshold= -t --active_latency_config= -f --active_latency_minimum_window= -w --active_threshold_a= -a --active_threshold_b= -b --active_threshold_c= -c --active_threshold_d= -d --debug_log_trigger_enable= -r --discard_debug_log= -l --dry-run --latency_monitor_feature_enable= -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --active_bucket_timer_threshold -t --active_latency_config -f --active_latency_minimum_window -w --active_threshold_a -a --active_threshold_b -b --active_threshold_c -c --active_threshold_d -d --debug_log_trigger_enable -r --discard_debug_log -l --latency_monitor_feature_enable -e --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-cloud-log")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-device-waf")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-drive-info")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-error-reason-identifier")
			opts+=" --dry-run --file= -O --log-id= -i --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --file -O --log-id -i --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--file -O"
			;;

		"vs-fw-activate-history")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-hw-rev-log")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-internal-log")
			opts+=" --data-area= -d --file-size= -f --offset= -e --output-file= -O --transfer-size= -s --type= -t --verbose -V"
			valopts+=" --data-area -d --file-size -f --offset -e --output-file -O --transfer-size -s --type -t"

			_nvme_opt_files "--output-file -O" "--type -t"
			;;

		"vs-nand-stats")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-pcie-stats")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-smart-add-log")
			opts+=" --dry-run --interval= -i --log-page-mask= -p --log-page-version= -l --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --interval -i --log-page-mask -p --log-page-version -l --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-telemetry-controller-option")
			opts+=" --disable -d --dry-run --enable -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --status -s --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-temperature-stats")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_solidigm_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"clear-fw-activate-history")
			opts+=" --dry-run --no-ioctl-probing --no-retries --no-uuid -n --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"clear-pcie-correctable-errors")
			opts+=" --dry-run --no-ioctl-probing --no-retries --no-uuid -n --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"cloud-SSDplugin-version")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"garbage-collect-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"id-ctrl")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --vendor-specific -V --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"latency-tracking-log")
			opts+=" --disable -d --dry-run --enable -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --read -r --set-options= --timeout= --type= -t --verbose -v --write -w"
			valopts+=" --output-format -o --output-format-version --set-options --timeout --type -t"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"log-page-directory")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"market-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"parse-telemetry-log")
			opts+=" --config-file= -j --controller-init -c --data-area= -d --dry-run --host-generate= -g --jq-filter= -q --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --source-file= -s --timeout= --verbose -v"
			valopts+=" --config-file -j --data-area -d --host-generate -g --jq-filter -q --output-format -o --output-format-version --set-options --source-file -s --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--config-file -j" "--source-file -s"
			;;

		"smart-log-add")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"temp-stats")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-drive-info")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-fw-activate-history")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-internal-log")
			opts+=" --dir-name= -d --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --type= -t --verbose -v"
			valopts+=" --dir-name -d --output-format -o --output-format-version --set-options --timeout --type -t"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--dir-name -d"
			;;

		"vs-smart-add-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"workload-tracker")
			opts+=" --disable -d --dry-run --enable -e --flush-freq= -f --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --run-time= -r --sample-time= -s --set-options= --timeout= --trigger-field= -T --trigger-on-delta -D --trigger-on-latency -L --trigger-threshold= -V --type= -t --uuid-index= -U --verbose -v --wall-clock -w"
			valopts+=" --flush-freq -f --output-format -o --output-format-version --run-time -r --sample-time -s --set-options --timeout --trigger-field -T --trigger-threshold -V --type -t --uuid-index -U"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_ssstc_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"smart-log-add")
			opts+=" --dry-run --json -j --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_toshiba_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"clear-pcie-correctable-errors")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-internal-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-file= -O --output-format= -o --output-format-version= --prev-log -p --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-file -O --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--output-file -O"
			;;

		"vs-smart-add-log")
			opts+=" --dry-run --log= -l --namespace-id= -n --no-ioctl-probing --no-retries --output-file= -O --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --log -l --namespace-id -n --output-file -O --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--output-file -O"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_transcend_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"badblock")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"healthvalue")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_utils_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	_nvme_finish_completion "$1" 3
}

plugin_virtium_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"save-smart-to-vtview-log")
			opts+=" --dry-run --freq= -f --no-ioctl-probing --no-retries --output-file= -O --output-format= -o --output-format-version= --quiet --run-time= -r --set-options= --test-name= -n --timeout= --verbose -v"
			valopts+=" --freq -f --output-file -O --output-format -o --output-format-version --run-time -r --set-options --test-name -n --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--output-file -O"
			;;

		"show-identify")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_wdc_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"cap-diag")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-file= -O --output-format= -o --output-format-version= --quiet --set-options= --timeout= --transfer-size= -s --verbose -v"
			valopts+=" --output-file -O --output-format -o --output-format-version --set-options --timeout --transfer-size -s"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--output-file -O"
			;;

		"capabilities")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"clear-assert-dump")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"clear-fw-activate-history")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"clear-pcie-correctable-errors")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"cloud-SSD-plugin-version")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"cloud-boot-SSD-version")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"cu-smart-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --uuid-index= -u --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout --uuid-index -u"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"drive-essentials")
			opts+=" --dir-name= -d --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --dir-name -d --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--dir-name -d"
			;;

		"drive-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-file= -O --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-file -O --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--output-file -O"
			;;

		"drive-resize")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --size= -s --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --size -s --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"enc-get-log")
			opts+=" --dry-run --log-id= -l --no-ioctl-probing --no-retries --output-file= -O --output-format= -o --output-format-version= --quiet --set-options= --timeout= --transfer-size= -s --verbose -v"
			valopts+=" --log-id -l --output-file -O --output-format -o --output-format-version --set-options --timeout --transfer-size -s"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--output-file -O"
			;;

		"get-crash-dump")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-file= -O --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-file -O --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--output-file -O"
			;;

		"get-dev-capabilities-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-drive-status")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-error-recovery-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-latency-monitor-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"get-pfail-dump")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-file= -O --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-file -O --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--output-file -O"
			;;

		"get-unsupported-reqs-log")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"id-ctrl")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --vendor-specific -V --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"log-page-directory")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"namespace-resize")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --op-option= -O --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --op-option -O --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"purge")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"purge-monitor")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"set-latency-monitor-feature")
			opts+=" --active_bucket_timer_threshold= -t --active_latency_config= -f --active_latency_minimum_window= -w --active_threshold_a= -a --active_threshold_b= -b --active_threshold_c= -c --active_threshold_d= -d --debug_log_trigger_enable= -r --discard_debug_log= -l --dry-run --latency_monitor_feature_enable= -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --active_bucket_timer_threshold -t --active_latency_config -f --active_latency_minimum_window -w --active_threshold_a -a --active_threshold_b -b --active_threshold_c -c --active_threshold_d -d --debug_log_trigger_enable -r --discard_debug_log -l --latency_monitor_feature_enable -e --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-cloud-log")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-device-waf")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-drive-info")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-error-reason-identifier")
			opts+=" --dry-run --file= -O --log-id= -i --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --file -O --log-id -i --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--file -O"
			;;

		"vs-fw-activate-history")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-hw-rev-log")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-internal-log")
			opts+=" --data-area= -d --file-size= -f --offset= -e --output-file= -O --transfer-size= -s --type= -t --verbose -V"
			valopts+=" --data-area -d --file-size -f --offset -e --output-file -O --transfer-size -s --type -t"

			_nvme_opt_files "--output-file -O" "--type -t"
			;;

		"vs-nand-stats")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-pcie-stats")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-smart-add-log")
			opts+=" --dry-run --interval= -i --log-page-mask= -p --log-page-version= -l --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --interval -i --log-page-mask -p --log-page-version -l --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-telemetry-controller-option")
			opts+=" --disable -d --dry-run --enable -e --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --status -s --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"vs-temperature-stats")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_ymtc_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"smart-log-add")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --raw-binary -b --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

plugin_zns_opts () {
	local opts=""
	local valopts=""
	local vals=""
	local opt=""
	local val=""

	opts+=" "
	vals+=" "

	local completing_value=0
	local wantfiles=0
	_nvme_detect_value_completion
	case "$1" in
		"changed-zone-list")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --rae -r --set-options= --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"close-zone")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --select-all -a --set-options= --start-lba= -s --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --start-lba -s --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"finish-zone")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --select-all -a --set-options= --start-lba= -s --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --start-lba -s --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"id-ctrl")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"id-ns")
			opts+=" --dry-run --human-readable -H --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --vendor-specific -V --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"list")
			opts+=" --dry-run --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"offline-zone")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --select-all -a --set-options= --start-lba= -s --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --start-lba -s --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"open-zone")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --select-all -a --set-options= --start-lba= -s --timeout= --verbose -v --zrwaa -r"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --start-lba -s --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"report-zones")
			opts+=" --descs= -d --dry-run --extended -e --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --partial -p --quiet --set-options= --start-lba= -s --state= -S --timeout= --verbose -V --verbose -v"
			valopts+=" --descs -d --namespace-id -n --output-format -o --output-format-version --set-options --start-lba -s --state -S --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"reset-zone")
			opts+=" --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --select-all -a --set-options= --start-lba= -s --timeout= --verbose -v"
			valopts+=" --namespace-id -n --output-format -o --output-format-version --set-options --start-lba -s --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"set-zone-desc")
			opts+=" --data= -d --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --start-lba= -s --timeout= --verbose -v --zrwaa -r"
			valopts+=" --data -d --namespace-id -n --output-format -o --output-format-version --set-options --start-lba -s --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--data -d"
			;;

		"zone-append")
			opts+=" --data= -d --data-size= -z --dry-run --force-unit-access -f --latency -t --limited-retry -l --metadata= -M --metadata-size= -y --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --piremap -P --prinfo= -p --quiet --set-options= --timeout= --verbose -v --zslba= -s"
			valopts+=" --data -d --data-size -z --metadata -M --metadata-size -y --namespace-id -n --output-format -o --output-format-version --prinfo -p --set-options --timeout --zslba -s"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--data -d" "--metadata -M"
			;;

		"zone-mgmt-recv")
			opts+=" --data-len= -l --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --partial -p --quiet --set-options= --start-lba= -s --timeout= --verbose -v --zra= -z --zrasf= -S"
			valopts+=" --data-len -l --namespace-id -n --output-format -o --output-format-version --set-options --start-lba -s --timeout --zra -z --zrasf -S"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;

		"zone-mgmt-send")
			opts+=" --data= -d --data-len= -l --dry-run --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --select-all -a --set-options= --start-lba= -s --timeout= --verbose -v --zsa= -z --zsaso -O"
			valopts+=" --data -d --data-len -l --namespace-id -n --output-format -o --output-format-version --set-options --start-lba -s --timeout --zsa -z"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			_nvme_opt_files "--data -d"
			;;

		"zrwa-flush-zone")
			opts+=" --dry-run --lba= -l --namespace-id= -n --no-ioctl-probing --no-retries --output-format= -o --output-format-version= --quiet --set-options= --timeout= --verbose -v"
			valopts+=" --lba -l --namespace-id -n --output-format -o --output-format-version --set-options --timeout"

			_nvme_opt_vals "--output-format -o" "normal json binary tabular" \
			               "--output-format-version" "1 2"
			;;
	esac
	_nvme_finish_completion "$1" 3
}

_nvme_subcmds () {
	local cur prev words cword
	_init_completion || return

	typeset -Ar _plugin_subcmds=(
		[amzn]="id-ctrl stats"
		[config]="convert create show status validate"
		[dapustor]="smart-log-add"
		[dell]="id-ctrl"
		[dera]="smart-log-add stat"
		[dir]="receive send"
		[exclusion]="add create delete edit list remove"
		[fdp]="configs events feature set-events stats status update usage"
		[feat]="arbitration err-recovery hctm host-behavior-support lba-range-type num-queues perf-characteristics power-limit power-meas power-mgmt power-thresh temp-thresh timestamp volatile-wc"
		[fw]="activate commit download"
		[huawei]="id-ctrl list"
		[ibm]="crit-log persist-event-log vpd"
		[id]="ctrl ctrl-list domain endgrp-list iocs ns ns-descs ns-granularity ns-ind ns-lba-format ns-list nvm-ctrl nvm-ns nvm-ns-lba-format nvmset primary-ctrl-caps secondary-ctrl-list uuid"
		[innogrit]="get-cdump get-eventlog"
		[inspur]="nvme-vendor-log"
		[intel]="id-ctrl internal-log lat-stats lat-stats-tracking market-name set-bucket-thresholds smart-log-add temp-stats"
		[io-mgmt]="recv send"
		[keys]="check-kxchap-secret check-tls-psk export gen-kxchap-secret gen-tls-psk import insert-tls-psk revoke"
		[lm]="create-cdq delete-cdq get-cdq migration-recv migration-send set-cdq track-send"
		[log]="ana ave-discovery boot-part changed-alloc-ns-list changed-ns-list dispersed-ns-participating-nss effects endurance endurance-event-agg error fid-support-effects fw host-discovery lba-status media-unit-stat mgmt-addr-list mi-cmd-support-effects persistent-event phy-rx-eom power-measurement pred-lat-event-agg predictable-lat pull-model-ddc-req reachability-associations reachability-groups resv-notif rotational-media-info sanitize self-test smart supported-cap-config supported-pages telemetry"
		[mangoboost]="id-ctrl"
		[memblaze]="clear-error-log get-pm-status lat-get-feature-x lat-log lat-log-print lat-log-print-x lat-set-feature-x lat-stats lat-stats-print lat-stats-print-x perf-stats-print-x select-download set-pm-status smart-log-add smart-log-add-x"
		[micron]="clear-fw-activate-history clear-pcie-correctable-errors cloud-SSD-plugin-version cloud-boot-SSD-version id-ctrl latency-logs latency-stats latency-tracking log-page-directory plugin-version select-download smart-log vs-cloud-log vs-device-waf vs-drive-info vs-fw-activate-history vs-internal-log vs-nand-stats vs-pcie-stats vs-smart-add-log vs-smart-ext-log vs-smbus-option vs-telemetry-controller-option vs-temperature-stats vs-vendor-telemetry-log vs-work-load-log"
		[nbft]="show"
		[netapp]="ontapdevices smdevices"
		[ns]="attach create delete detach get-id"
		[nvidia]="id-ctrl"
		[nvme-mi]="recv send"
		[ocp]="clear-fw-activate-history clear-pcie-correctable-errors device-capability-log eol-plp-failure-mode error-recovery-log fw-activate-history get-clear-pcie-correctable-errors get-dssd-async-event-config get-dssd-power-state-feature get-enable-ieee1667-silo get-error-injection get-idle-wakeup-time get-latency-monitor get-plp-health-check-interval get-telemetry-profile hardware-component-log internal-log latency-monitor-log persistent-event-log set-dssd-async-event-config set-dssd-power-state-feature set-enable-ieee1667-silo set-error-injection set-latency-monitor-feature set-plp-health-check-interval set-telemetry-profile smart-add-log tcg-configuration-log telemetry-string-log unsupported-reqs-log"
		[registry]="delete list retrieve update"
		[resv]="acquire register release report"
		[rpmb]="info program-key read-config read-counter read-data write-config write-data"
		[samsung]="vs-internal-log"
		[seagate]="clear-fw-activate-history clear-pcie-correctable-errors cloud-SSD-plugin-version get-ctrl-tele get-host-tele plugin-version vs-fw-activate-history vs-internal-log vs-log-page-sup vs-pcie-stats vs-smart-add-log vs-temperature-stats"
		[security]="recv send"
		[sed]="1 discover initialize lock password revert unlock"
		[sfx]="change-cap dump-evtlog expand-cap get-bad-block get-feature lat-stats query-cap set-feature smart-log-add status"
		[shannon]="get-additional-feature id-ctrl set-additioal-feature smart-log-add"
		[sndk]="capabilities clear-assert-dump clear-fw-activate-history clear-pcie-correctable-errors cloud-SSD-plugin-version cloud-boot-SSD-version cu-smart-log drive-resize get-dev-capabilities-log get-drive-status get-error-recovery-log get-latency-monitor-log get-unsupported-reqs-log log-page-directory namespace-resize set-latency-monitor-feature vs-cloud-log vs-device-waf vs-drive-info vs-error-reason-identifier vs-fw-activate-history vs-hw-rev-log vs-internal-log vs-nand-stats vs-pcie-stats vs-smart-add-log vs-telemetry-controller-option vs-temperature-stats"
		[solidigm]="clear-fw-activate-history clear-pcie-correctable-errors cloud-SSDplugin-version garbage-collect-log id-ctrl latency-tracking-log log-page-directory market-log parse-telemetry-log smart-log-add temp-stats vs-drive-info vs-fw-activate-history vs-internal-log vs-smart-add-log workload-tracker"
		[ssstc]="smart-log-add"
		[toshiba]="clear-pcie-correctable-errors vs-internal-log vs-smart-add-log"
		[transcend]="badblock healthvalue"
		[utils]="dump-command-metadata"
		[virtium]="save-smart-to-vtview-log show-identify"
		[wdc]="cap-diag capabilities clear-assert-dump clear-fw-activate-history clear-pcie-correctable-errors cloud-SSD-plugin-version cloud-boot-SSD-version cu-smart-log drive-essentials drive-log drive-resize enc-get-log get-crash-dump get-dev-capabilities-log get-drive-status get-error-recovery-log get-latency-monitor-log get-pfail-dump get-unsupported-reqs-log id-ctrl log-page-directory namespace-resize purge purge-monitor set-latency-monitor-feature vs-cloud-log vs-device-waf vs-drive-info vs-error-reason-identifier vs-fw-activate-history vs-hw-rev-log vs-internal-log vs-nand-stats vs-pcie-stats vs-smart-add-log vs-telemetry-controller-option vs-temperature-stats"
		[ymtc]="smart-log-add"
		[zns]="changed-zone-list close-zone finish-zone id-ctrl id-ns list offline-zone open-zone report-zones reset-zone set-zone-desc zone-append zone-mgmt-recv zone-mgmt-send zrwa-flush-zone"
	)

	typeset -Ar _plugin_funcs=(
		[amzn]="plugin_amzn_opts"
		[config]="plugin_config_opts"
		[dapustor]="plugin_dapustor_opts"
		[dell]="plugin_dell_opts"
		[dera]="plugin_dera_opts"
		[dir]="plugin_dir_opts"
		[exclusion]="plugin_exclusion_opts"
		[fdp]="plugin_fdp_opts"
		[feat]="plugin_feat_opts"
		[fw]="plugin_fw_opts"
		[huawei]="plugin_huawei_opts"
		[ibm]="plugin_ibm_opts"
		[id]="plugin_id_opts"
		[innogrit]="plugin_innogrit_opts"
		[inspur]="plugin_inspur_opts"
		[intel]="plugin_intel_opts"
		[io-mgmt]="plugin_io_mgmt_opts"
		[keys]="plugin_keys_opts"
		[lm]="plugin_lm_opts"
		[log]="plugin_log_opts"
		[mangoboost]="plugin_mangoboost_opts"
		[memblaze]="plugin_memblaze_opts"
		[micron]="plugin_micron_opts"
		[nbft]="plugin_nbft_opts"
		[netapp]="plugin_netapp_opts"
		[ns]="plugin_ns_opts"
		[nvidia]="plugin_nvidia_opts"
		[nvme-mi]="plugin_nvme_mi_opts"
		[ocp]="plugin_ocp_opts"
		[registry]="plugin_registry_opts"
		[resv]="plugin_resv_opts"
		[rpmb]="plugin_rpmb_opts"
		[samsung]="plugin_samsung_opts"
		[seagate]="plugin_seagate_opts"
		[security]="plugin_security_opts"
		[sed]="plugin_sed_opts"
		[sfx]="plugin_sfx_opts"
		[shannon]="plugin_shannon_opts"
		[sndk]="plugin_sndk_opts"
		[solidigm]="plugin_solidigm_opts"
		[ssstc]="plugin_ssstc_opts"
		[toshiba]="plugin_toshiba_opts"
		[transcend]="plugin_transcend_opts"
		[utils]="plugin_utils_opts"
		[virtium]="plugin_virtium_opts"
		[wdc]="plugin_wdc_opts"
		[ymtc]="plugin_ymtc_opts"
		[zns]="plugin_zns_opts"
	)

	local -a _cmds=(
		admin-passthru amzn ana-log attach-ns ave-discovery-log boot-part-log
		capacity-mgmt changed-alloc-ns-list-log changed-ns-list-log
		check-dhchap-key check-tls-key cmdset-ind-id-ns compare config connect
		connect-all copy create-ns dapustor delete-ns dell dera detach-ns
		device-self-test dim dir dir-receive dir-send disconnect
		disconnect-all discover dispersed-ns-participating-nss-log dsm
		effects-log endurance-event-agg-log endurance-log error-log exclusion
		fdp feat fid-support-effects-log flush format fw fw-activate fw-commit
		fw-download fw-log gen-dhchap-key gen-hostnqn gen-tls-key get-feature
		get-lba-status get-log get-ns-id get-property get-reg help
		host-discovery-log huawei ibm id id-ctrl id-domain id-iocs id-ns
		id-ns-granularity id-ns-lba-format id-nvmset id-uuid innogrit inspur
		intel io-mgmt io-mgmt-recv io-mgmt-send io-passthru keys
		lba-status-log list list-ctrl list-endgrp list-ns list-secondary
		list-subsys lm lockdown log mangoboost media-unit-stat-log memblaze
		mgmt-addr-list-log mi-cmd-support-effects-log micron nbft netapp ns
		ns-descs ns-rescan nvidia nvm-id-ctrl nvm-id-ns nvm-id-ns-lba-format
		nvme-mi nvme-mi-recv nvme-mi-send ocp persistent-event-log
		phy-rx-eom-log power-measurement-log pred-lat-event-agg-log
		predictable-lat-log primary-ctrl-caps pull-model-ddc-req-log
		reachability-associations-log reachability-groups-log read registry
		reset resv resv-acquire resv-notif-log resv-register resv-release
		resv-report rotational-media-info-log rpmb samsung sanitize
		sanitize-log sanitize-ns seagate security security-recv security-send
		sed self-test-log set-feature set-property set-reg sfx shannon
		show-hostnqn show-regs show-topology smart-log sndk solidigm ssstc
		subsystem-reset supported-cap-config-log supported-log-pages
		telemetry-log tls-key top toshiba transcend utils verify version
		virt-mgmt virtium wdc write write-uncor write-zeroes ymtc zns
	)

	local func subcmd
	if [[ ${#words[*]} -lt 3 ]]; then
		COMPREPLY+=( $(compgen -W "${_cmds[*]}" -- "$cur" ) )
	else
		for subcmd in "${!_plugin_subcmds[@]}"; do
			if [[ ${words[1]} == "$subcmd" ]]; then
				if [[ ${#words[*]} -lt 4 ]]; then
					COMPREPLY+=( $(compgen -W "${_plugin_subcmds[$subcmd]}" -- "$cur" ) )
				else
					func=${_plugin_funcs[$subcmd]}
					$func "${words[2]}" "$prev"
				fi
				return 0
			fi
		done

		nvme_list_opts "${words[1]}" "$prev"
	fi

	return 0
}

complete -o default -F _nvme_subcmds nvme
