diff options
Diffstat (limited to 'completions')
-rw-r--r-- | completions/README | 120 | ||||
-rw-r--r-- | completions/_nvme | 2316 | ||||
-rw-r--r-- | completions/bash-nvme-completion.sh | 1604 |
3 files changed, 4040 insertions, 0 deletions
diff --git a/completions/README b/completions/README new file mode 100644 index 0000000..ba1032a --- /dev/null +++ b/completions/README @@ -0,0 +1,120 @@ +Kelly Kaoudis, kelly.n.kaoudis at intel.com, June 2015 + +Setting Up NVMe Tab Autocompletion for bash or zsh +================================================== + +If your working shell is bash... +-------------------------------- +the following gets bash autocompletion to behave properly +#echo "bind 'set show-all-if-ambiguous on'" >> ~/.bashrc +#echo "bind 'set show-all-if-unmodified on'" >> ~/.bashrc +#echo "bind 'set completion-ignore-case on'" >> ~/.bashrc +#echo "bind 'set completion-map-case on'" >> ~/.bashrc + +add NVMe autocompletion script to your autocompletes directory +#cp `pwd`/bash-nvme-completion.sh /etc/bash_completion.d/nvme + +make sure this bash knows where everything is +#source /etc/bash_completion.d/nvme && source ~/.bashrc + +you should be able to autocomplete with the nvme utility now +(double TABs still apply)! If autocompleting has disappeared, +just re-source nvme and .bashrc. To see a full list of auto-completable +NVMe commands, type "nvme help " and hit TAB. + +You may also need to uncomment the "enable bash completion in interactive +shells" part of /etc/bash.bashrc, which hopefully looks something like: + +if [ -f /usr/share/bash-completion/bash_completion ]; then + . /usr/share/bash-completion/bash_completion +elif [ -f /etc/bash_completion ]; then + . /etc/bash_completion +fi + +(don't bother with the shopt part, your Bash version might not support shopt). + +Bash footnote: for bash vers >= 4.2, it appears to be the case that +menu-complete **no longer works.** If the bash dev folks ever re-patch this, +try binding TAB to menu-complete to cycle through the NVMe subcommand matches +on whatever you typed. + +if your working shell is zsh... +------------------------------- +create the zsh completions directory if you don't have it +#if [ ! -e "~/.zsh" ]; then +# mkdir ~/.zsh +# mkdir ~/.zsh/completion +#fi + +#cp `pwd`/_nvme ~/.zsh/completion/_nvme + +add compinit if you don't have it in your .zshrc +#echo "autoload -Uz compinit && compinit" >> ~/.zshrc + +add nvme autocompletions to your .zshrc +#echo "# source for tab autocompletions" >> ~/.zshrc +#echo "fpath=(~/.zsh/completion $fpath)" >> ~/.zshrc +#echo "source ~/.zsh/completion/_nvme" >> ~/.zshrc + +make sure this zsh knows where everything is +#source ~/.zsh/completion/_nvme && source ~/.zshrc + +You should be able to autocomplete with the nvme utility now (single TAB press +should get you a completion with descriptions -- sadly, bash doesn't support +descriptions within completions). If autocompletes disappear, just re-source +_nvme and .zshrc. Also, make sure your .zshrc is ordered correctly: we want to +source _nvme before updating our fpath. Both of these should occur before +compinit is loaded. + +Updating NVMe Tab Autocompletions +================================= + +zsh +--- + +Add your new command to the _cmds array in the following format: + +'command:short-form description' + +Add a case to the zsh case statement for autocompletion of subopts +in the following format (as seen in _nvme): + +(bar) + local _list_of_subopts + _list_of_subopts=( + /dev/nvme':supply a device to use (required)' + --foo':do something cool' + -f':alias of --foo' + ) + + _arguments '*:: :->subcmds' + _describe -t commands "nvme bar options" _list_of_subopts + ;; + +All zsh autocompletion built-ins start with _, and so should anything +internal to your autocompletes. _arguments and _describe are built-ins. +The '*:: :->subcmds' bit describes the format in which we want our +options to be displayed (don't change this, unless you like pain.) +_describe -t adds our list of options to the data structure associated with +our command `bar'. + +Add the name of your command to the (help) case as well. + +Update your ~/.zsh/completion/_nvme with your new changes and re-source as needed. + +bash +---- + +Add the name of your command to _cmds in bash_nvme_completion.sh. Add a case to +_nvme_list_opts in the following format: + +"bar") +opts+="--foo= -f --baz= -b" +;; + +Update your /etc/bash_completion.d/nvme version, and re-source things as needed. + +TO DO +----- +Automatically generate man pages and autocompletions for new NVMe commands, possibly +with kerneldoc. diff --git a/completions/_nvme b/completions/_nvme new file mode 100644 index 0000000..e90fc42 --- /dev/null +++ b/completions/_nvme @@ -0,0 +1,2316 @@ +#compdef _nvme nvme +# SPDX-License-Identifier: GPL-2.0-or-later + +# zsh completions for the nvme command-line interface, +# very loosely based on git and adb command completion +# Kelly Kaoudis kelly.n.kaoudis at intel.com, June 2015 + +_nvme () { + local -a _cmds + _cmds=( + 'list:identify basic information for all NVMe namespaces' + 'list-subsys:identify information for subsystems' + 'id-ctrl:display information about the controller' + 'id-ns:display information about the namespace' + 'id-ns-granularity:display namespace granularity list' + 'id-ns-lba-format:display information about the namespace capability fields for specific LBA format' + 'list-ns:identify all namespace(s) attached' + 'cmdset-ind-id-ns:display I/O Command Set Independent information about the namespace' + 'id-iocs:display information about I/O command sets' + 'id-domain:display information about domain list' + 'create-ns:create a new namespace before attachment' + 'delete-ns:delete a detached namespace' + 'attach-ns:attach namespace to controller' + 'detach-ns:detach namespace from controller' + 'list-ctrl:identify all controller(s) attached' + 'nvm-id-ctrl:display information about the nvm command set' + 'nvm-id-ns:display information about the namespace of nvm command set' + 'nvm-id-ns-lba-format:display information about the namespace of nvm command set capability fields for specific LBA format' + 'primary-ctrl-caps:display primary controller capabilities' + 'list-secondary:identify secondary controller list associated with the primary controller' + 'ns-descs:display namespace identification descriptors' + 'id-nvmset:display entries for NVM Set identifiers' + 'id-uuid:display list of supported Vendor Specific UUIDs' + 'list-endgrp:display information about nvme endurance group list' + 'get-ns-id:get namespace id of opened block device' + 'get-log:retrieve any log in raw format' + 'predictable-lat-log:retrieve predictable latency per nvmset log' + 'pred-lat-event-agg-log:retrieve predictable latency event aggregate log' + 'persistent-event-log:retrieve persistent event log' + 'telemetry-log:retrieve telemetry log' + 'fw-log:retrieve fw log' + 'changed-ns-list-log:retrieve changed namespaces log' + 'smart-log:retrieve SMART log' + 'smart-log-add:retrieve additional SMART log' + 'ana-log:retrieve ANA log' + 'error-log:retrieve error log' + 'effects-log:retrieve command effects log page and print the table' + 'endurance-log:retrieves endurance groups log page and prints the log' + 'endurance-event-agg-log:retrieve endurance group event aggregate log' + 'lba-status-log:retrieve lba status log' + 'resv-notif-log:retrieve reservation notification log' + 'get-feature:display a controller feature' + 'device-self-test:implementing the device self-test feature' + 'self-test-log:retrieve the self-test log' + 'set-feature:set a controller feature and show results' + 'set-property:writes and shows the defined NVMe controller property for NVMe over Fabric' + 'get-property:Reads and shows the defined NVMe controller property for NVMe over Fabric' + 'format:apply new block format to namespace' + 'fw-activate:activate a firmware on the device' + 'fw-download:download a firmware to the device' + 'admin-passthru:submit a passthrough admin command IOCTL' + 'io-passthru:submit a passthrough io command IOCTL' + 'security-send:send security/secure data to controller' + 'security-recv:ask for security/secure data from controller' + 'get-lba-status:display information about potentially unrecoverable LBAs' + 'resv-acquire:acquire reservation on a namespace' + 'resv-register:register reservation on a namespace' + 'resv-release:release reservation on a namespace' + 'resv-report:report reservation on a namespace' + 'dsm:submit a Data Set Management command' + 'copy:submit a simple copy command' + 'flush:submit a flush' + 'compare:compare data on device to data elsewhere' + 'read:submit a read command' + 'write:submit a write command' + 'capacity-mgmt:submit capacity management command' + 'write-zeroes:submit an NVMe write zeroes command' + 'write-uncor:submit an NVMe write uncorrectable command' + 'verify:submit an NVMe Verify command' + 'sanitize:submit a sanitize command' + 'sanitize-log:retrieve sanitize log and show it' + 'reset:reset the NVMe controller' + 'subsystem-reset:reset the NVMe subsystem' + 'ns-rescan:rescan the NVMe namespaces' + 'show-regs:show the controller registers; require admin character device' + 'boot-part-log:retrieve boot partition log' + 'fid-support-effects-log:retrieve fid support and effects log' + 'supported-log-pages:retrieve support log pages details' + 'lockdown:submit a lockdown command' + 'media-unit-stat-log:retrieve media unit status log pages details' + 'supported-cap-config-log:retrieve the list of Supported Capacity Configuration Descriptors' + 'discover:send Get Log Page request to Discovery Controller' + 'connect-all:discover NVMeoF subsystems and connect to them' + 'connect:connect to NVMeoF subsystem' + 'dim:send Discovery Information Management command to a Discovery Controller (DC)' + 'disconnect:disconnect from NVMeoF subsystem' + 'disconnect-all:disconnect from all connected NVMeoF subsystems' + 'gen-hostnqn:generate a host NVMe Qualified Name' + 'show-hostnqn:show the host NQN configured for the system' + 'dir-receive:read directive parameters of the specified directive type' + 'dir-send:set directive parameters of the specified directive type' + 'virt-mgmt:submit a Virtualization Management command' + 'rpmb:submit an NVMe RPMB command' + 'show-topology:show subsystem topology' + 'nvme-mi-recv:send a NVMe-MI receive command' + 'nvme-mi-send:send a NVMe-MI send command' + 'version:show the program version' + 'ocp:OCP cloud SSD extensions' + 'solidigm:Solidigm plug-in extensions' + 'help:print brief descriptions of all nvme commands' + 'json:dump output in json format' + ) + + local expl + + _arguments '*:: :->subcmds' && return 0 + + if (( CURRENT == 1 )); then + _describe -t commands "nvme subcommands" _cmds + return + elif (( CURRENT > 2 )); then + case ${words[1]} in + (ocp) + case ${words[2]} in + (smart-add-log) + local _smart_add_log + _smart_add_log=( + /dev/nvme':supply a device to use (required)' + --output-format=':Output format: normal|json' + -o':alias for --output-format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme ocp smart-add-log options" _smart_add_log + ;; + (latency-monitor-log) + local _latency_monitor_log + _latency_monitor_log=( + /dev/nvme':supply a device to use (required)' + --output-format=':Output format: normal|json' + -o':alias for --output-format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme ocp latency-monitor-log options" _latency_monitor_log + ;; + (set-latency-monitor-feature) + local _set_latency_monitor_feature + _set_latency_monitor_feature=( + /dev/nvme':supply a device to use (required)' + --active_bucket_timer_threshold=':Active Bucket Timer Threshold' + -t':alias for --active_bucket_timer_threshold' + --active_threshold_a=':Active Threshold A' + -a':alias for --active_threshold_a' + --active_threshold_a=':Active Threshold B' + -b':alias for --active_threshold_b' + --active_threshold_c=':Active Threshold C' + -c':alias for --active_threshold_c' + --active_threshold_d=':Active Threshold D' + -d':alias for --active_threshold_d' + --active_latency_config=':Active Latency Configuration' + -f':alias for --active_latency_config' + --active_latency_minimum_window=':Active Latency Minimum Window' + -w':alias for --active_latency_minimum_window' + --debug_log_trigger_enable='Debug Log Trigger Enable' + -r':alias for --debug_log_trigger_enable' + --discard_debug_log='Discard Debug Log' + -l':alias for --discard_debug_log' + --latency_monitor_feature_enable='Latency Monitor Feature Enable' + -e':alias for --latency_monitor_feature_enable' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme ocp set-latency-monitor-feature options" _set_latency_monitor_feature + ;; + (internal-log) + local _internal_log + _internal_log=( + /dev/nvme':supply a device to use (required)' + --telemetry_type=':Telemetry Type; host (Create bit) or controller' + -t':alias for --telemetry_type' + --telemetry_data_area=':Telemetry Data Area; 1 or 3' + -a':alias for --telemetry_data_area' + --output-file=':Output file name with path' + -o':alias for --output-file' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme ocp internal-log options" _internal_log + ;; + (clear-fw-activate-history) + local _clear_fw_activate_history + _clear_fw_activate_history=( + /dev/nvme':supply a device to use (required)' + --no-uuid':Skip UUID index search' + -n':alias for --no-uuid' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme ocp clear-fw-activate-history options" _clear_fw_activate_history + ;; + (eol-plp-failure-mode) + local _eol_plp_failure_mode + _eol_plp_failure_mode=( + /dev/nvme':supply a device to use (required)' + --mode=':0-3: default/rom/wtm/normal' + -m':alias for --mode' + --save':Specifies that the controller shall save the attribute' + -s':alias for --save' + --sel=':0-3,8: current/default/saved/supported/changed:' + -S':alias for --sel' + --no-uuid':Skip UUID index search' + -n':alias for --no-uuid' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme ocp eol-plp-failure-mode options" _eol_plp_failure_mode + ;; + (clear-pcie-correctable-error-counters) + local _clear_pcie_correctable_error_counters + _clear_pcie_correctable_error_counters=( + /dev/nvme':supply a device to use (required)' + --no-uuid':Skip UUID index search' + -n':alias for --no-uuid' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme ocp clear-pcie-correctable-error-counters options" _clear_pcie_correctable_error_counters + ;; + (fw-activate-history) + local _fw_activate_history + _fw_activate_history=( + /dev/nvme':supply a device to use (required)' + --output-format=':Output format: normal|json' + -o':alias for --output-format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme ocp fw-activate-history options" _fw_activate_history + ;; + (device-capability-log) + local _device_capability_log + _device_capability_log=( + /dev/nvme':supply a device to use (required)' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme ocp device-capability-log options" _device_capability_log + ;; + (set-dssd-power-state-feature) + local _set_dssd_power_state_feature + _set_dssd_power_state_feature=( + /dev/nvme':supply a device to use (required)' + --power-state=':DSSD Power State to set in watts' + -p':alias for --power-state' + --save':Specifies that the controller shall save the attribute' + -s':alias for --save' + --no-uuid':Skip UUID index search' + -n':alias for --no-uuid' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme ocp set-dssd-power-state-feature options" _set_dssd_power_state_feature + ;; + (telemetry-string-log) + local _telemetry_string_log + _telemetry_string_log=( + /dev/nvme':supply a device to use (required)' + --output-file=':Output file name with path' + -o':alias for --output-file' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme ocp telemetry-string-log options" _telemetry_string_log + ;; + (*) + _files + ;; + esac + ;; + (solidigm) + case ${words[2]} in + (id-ctrl) + local _id_ctrl + _id_ctrl=( + --verbose':Increase output verbosity' + -v':alias for --verbose' + --output-format':Output format: normal|json|binary' + -o':alias for --output-format' + --vendor-specific':dump binary vendor field' + -V':alias for --vendor-specific' + --raw-binary':show identify in binary format' + -b':alias for --raw-binary' + --human-readable':show identify in readable format' + -H':alias for --human-readable' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme solidigm id-ctrl options" _id_ctrl + ;; + (smart-log-add) + local _smart_log_add + _smart_log_add=( + --namespace-id':(optional) desired namespace' + -n':alias for --namespace-id' + --output-format':Output format: normal|json|binary' + -o':alias for --output-format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme solidigm smart-log-add options" _smart_log_add + ;; + (vs-smart-add-log) + local _vs_smart_add_log + _vs_smart_add_log=( + --output-format':output Format: normal|json' + -o':alias for --output-format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme solidigm vs-smart-add-log options" _vs_smart_add_log + ;; + (vs-internal-log) + local _vs_internal_log + _vs_internal_log=( + --type':Log type: ALL, + CONTROLLERINITTELEMETRY, + HOSTINITTELEMETRY, + HOSTINITTELEMETRYNOGEN, NLOG, + ASSERT, EVENT. Defaults to ALL.' + -t':alias for --type' + --namespace-id':Namespace to get logs from.' + -n':alias for --namespace-id' + --dir-prefix':Output dir prefix; defaults to device serial number.' + -p':alias for --dir-prefix' + --verbose':To print out verbose info.' + -v':alias for --verbose' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme solidigm vs-internal-log" _vs_internal_log + ;; + (garbage-collect-log) + local _garbage_collect_log + _garbage_collect_log=( + --output-format':Output format: normal|json|binary' + -o':alias for --output-format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme solidigm garbage-collect-log" _garbage_collect_log + ;; + (market-log) + local _market_log + _market_log=( + --raw-binary':dump output in binary format' + -b':alias for --raw-binary' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme solidigm market-log" _market_log + ;; + (latency-tracking-log) + local _latency_tracking_log + _latency_tracking_log=( + --enable':Enable Latency Tracking' + -e':alias for --enable' + --disable':Disable Latency Tracking' + -d':alias for --disable' + --read':Get read statistics' + -r':alias for --read' + --write':Get write statistics' + -w':alias for --write' + --type':Log type to get' + -t':alias for --type' + --output-format':Output format: normal|json|binary' + -o':alias for --output-format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme solidigm latency-tracking-log" _latency_tracking_log + ;; + (parse-telemetry-log) + local _parse_telemetry_log + _parse_telemetry_log=( + --host-generate':Controls when to generate new + host initiated report. Default + value '1' generates new host + initiated report, value '0' + causes retrieval of existing + log.' + -g':alias for --host-generate' + --controller-init':Gather report generated by the controller.' + -c':alias for --controller-init' + --data-area':Pick which telemetry data area to + report. Default is 3 to fetch + areas 1-3. Valid options are 1, + 2, 3, 4.' + -d':alias for --data-area' + --config-file':JSON configuration file' + -j':alias for --config-file' + --source-file':data source <device> is binary + file containing log dump instead + of block or character device' + -s':alias for --source-file' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme solidigm parse-telemetry-log" _parse_telemetry_log + ;; + (clear-pcie-correctable-errors) + local _clear_pcie_correctable_errors + _clear_pcie_correctable_errors=( + --no-uuid':Skip UUID index search (UUID index not required for OCP 1.0)' + -n':alias for --no-uuid' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme solidigm clear-pcie-correctable-errors" _clear_pcie_correctable_errors + ;; + (clear-fw-activate-history) + local _clear_fw_activate_history + _clear_fw_activate_history=( + --no-uuid':Skip UUID index search (UUID index not required for OCP 1.0)' + -n':alias for --no-uuid' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme solidigm clear-fw-activate-history" _clear_fw_activate_history + ;; + (vs-fw-activate-history) + local _vs_fw_activate_history + _vs_fw_activate_history=( + --output-format':output format : normal | json' + -o':alias for --output-format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme solidigm vs-fw-activate-history" _vs_fw_activate_history + ;; + (log-page-directory) + local _log_page_directory + _log_page_directory=( + --output-format':output format : normal | json' + -o':alias for --output-format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme solidigm log-page-directory" _log_page_directory + ;; + (temp-stats) + local _temp_stats + _temp_stats=( + --raw-binary':dump output in binary format' + -b':alias for --raw-binary' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme solidigm temp-stats" _temp_stats + ;; + (vs-drive-info) + local _vs_drive_info + _vs_drive_info=( + --output-format':output format : normal | json' + -o':alias for --output-format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme solidigm vs-drive-info" _vs_drive_info + ;; + (*) + _files + ;; + esac + ;; + (sanitize) + case ${words[CURRENT-1]} in + (--sanact=|-a) + _values '' 'exit-failure' 'start-block-erase' 'start-overwrite' 'start-crypto-erase' + ;; + (*) + _files + ;; + esac + ;; + (*) + _files + ;; + esac + return + else + case ${words[CURRENT-1]} in + (list) + local _list + _list=( + --output-format=':Output format: normal|json' + -o':alias for --output-format' + --verbose':show infos verbosely' + -v':alias of --verbose' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme list options" _list + ;; + (list-subsys) + local _listsubsys + _listsubsys=( + --output-format=':Output format: normal|json' + -o':alias for --output-format' + --verbose':show infos verbosely' + -v':alias of --verbose' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme list-subsys options" _listsubsys + ;; + (id-ctrl) + local _idctrl + _idctrl=( + /dev/nvme':supply a device to use (required)' + --raw-binary':dump infos in binary format' + -b':alias of --raw-binary' + --human-readable':show infos in readable format' + -H':alias of --human-readable' + --vendor-specific':also dump binary vendor infos' + -V':alias of --vendor-specific' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme id-ctrl options" _idctrl + ;; + (id-ns) + local _idns + _idns=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':show infos for namespace <nsid>' + -n':alias of --namespace-id' + --raw-binary':dump infos in binary format' + -b':alias of --raw-binary' + --human-readable':show infos in readable format' + -H':alias of --human-readable' + --vendor-specific':also dump binary vendor infos' + -V':alias of --vendor-specific' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme id-ns options" _idns + ;; + (id-ns-granularity) + local _idns_granularity + _idns_granularity=( + /dev/nvme':supply a device to use (required)' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme id-ns-granularity options" _idns_granularity + ;; + (id-ns-lba-format) + local _idns_lba_format + _idns_lba_format=( + /dev/nvme':supply a device to use (required)' + --lba-format-index=':show infos for lba format index <lba-format-index>' + -i':alias of --lba-format-index' + --uuid-index=':uuid index' + -U':alias for --uuid-index' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + --verbose':show infos verbosely' + -v':alias of --verbose' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme id-ns-lba-format options" _idns_lba_format + ;; + (list-ns) + local _listns + _listns=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':start namespace infos listing with this nsid' + -n':alias of --namespace-id' + --csi=':command set identifier' + -y':alias of --csi' + --all':show all namespaces in the subsystem, whether attached or inactive' + -a':alias of --all' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme list-ns options" _listns + ;; + (cmdset-ind-id-ns) + local _cmdset_ind_idns + _cmdset_ind_idns=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':show infos for namespace <nsid>' + -n':alias of --namespace-id' + --raw-binary':dump infos in binary format' + -b':alias of --raw-binary' + --human-readable':show infos in readable format' + -H':alias of --human-readable' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme cmdset-ind-id-ns options" _cmdset_ind_idns + ;; + (id-iocs) + local _idiocs + _idiocs=( + /dev/nvme':supply a device to use (required)' + --controller-id=':show infos for controller <cntid>' + -c':alias of --controller-id' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme id-iocs options" _idiocs + ;; + (id-domain) + local _iddomain + _iddomain=( + /dev/nvme':supply a device to use (required)' + --dom-id=':show infos for domain id <cntid>' + -d':alias of --dom-id' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme id-domain options" _iddomain + ;; + (nvm-id-ctrl) + local _nvmidctrl + _nvmidctrl=( + /dev/nvme':supply a device to use (required)' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme nvm-id-ctrl options" _nvmidctrl + ;; + (nvm-id-ns) + local _nvmidns + _nvmidns=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':show infos for namespace <nsid>' + -n':alias of --namespace-id' + --uuid-index=':uuid index' + -U':alias for --uuid-index' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + --verbose':show infos verbosely' + -v':alias of --verbose' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme nvm-id-ns options" _nvmidns + ;; + (nvm-id-ns-lba-format) + local _nvm_idns_lba_format + _nvm_idns_lba_format=( + /dev/nvme':supply a device to use (required)' + --lba-format-index=':show infos for lba format index <lba-format-index>' + -i':alias of --lba-format-index' + --uuid-index=':uuid index' + -U':alias for --uuid-index' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + --verbose':show infos verbosely' + -v':alias of --verbose' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme nvm-id-ns-lba-format options" _nvm_idns_lba_format + ;; + (primary-ctrl-caps) + local _primary_ctrl_caps + _primary_ctrl_caps=( + /dev/nvme':supply a device to use (required)' + --cntlid=':show infos for controller <cntid>' + -c':alias of --cntlid' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + --human-readable':show infos in readable format' + -H':alias of --human-readable' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme primary-ctrl-caps options" _primary_ctrl_caps + ;; + (list-secondary) + local _listsecondary + _listsecondary=( + /dev/nvme':supply a device to use (required)' + --cntid=':show infos for lowest controller <cntid>' + -c':alias of --cntid' + --namespace-id=':show infos for namespace <nsid>' + -n':alias of --namespace-id' + --num-entries=':number of entries to retrieve' + -e':alias of --num-entries' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme list-secondary options" _listsecondary + ;; + (ns-descs) + local _ns_descs + _ns_descs=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':show infos for namespace <nsid>' + -n':alias of --namespace-id' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + --raw-binary':dump infos in binary format' + -b':alias of --raw-binary' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme ns-descs options" _ns_descs + ;; + (id-nvmset) + local _id_nvmset + _id_nvmset=( + /dev/nvme':supply a device to use (required)' + --nvmset_id=':NVM Set Identify value' + -i':alias of --nvmset_id' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme id-nvmset options" _id_nvmset + ;; + (id-uuid) + local _id_uuid + _id_uuid=( + /dev/nvme':supply a device to use (required)' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + --raw-binary':dump infos in binary format' + -b':alias of --raw-binary' + --human-readable':show infos in readable format' + -H':alias of --human-readable' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme id-uuid options" _id_uuid + ;; + (list-endgrp) + local _listendgrp + _listendgrp=( + /dev/nvme':supply a device to use (required)' + --endgrp-id=':endurance group id' + -i':alias of --endgrp-id' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme list-endgrp options" _listendgrp + ;; + (create-ns) + local _createns + _createns=( + /dev/nvme':supply a device to use (required)' + --nsze=':namespace size to create' + -s':alias of --nsze' + --ncap=':namespace capacity' + -c':alias of --ncap' + --flbas=':FLBA size' + -f':alias of --flbas' + --dps=':data protection?' + -d':alias of --dps' + --nmic=':multipath and sharing' + -m':alias of --nmic' + --anagrp-id=':ANA Group Identifier' + -a':alias of --anagrp-id' + --nvmset-id=':NVM Set Identifier' + -i':alias of --nvmset-id' + --endg-id=':Endurance Group Identifier' + -e':alias of --endg-id' + --block-size=':target block size' + -b':alias of --block-size' + --timeout=':value for timeout' + -t':alias of --timeout' + --csi=':command set identifier' + -y':alias of --csi' + --lbstm=':logical block storage tag mask' + -l':alias of --lbstm' + --nsze-si=':size of ns (NSZE) in standard SI units' + -S':alias of --nsze-si' + --ncap-si=':capacity of ns (NCAP) in standard SI units' + -C':alias of --ncap-si' + --azr=':Allocate ZRWA Resources (AZR) for Zoned Namespace Command Set' + -z':alias of --azr' + --rar=':Requested Active Resources (RAR) for Zoned Namespace Command Set' + -r':alias of --rar' + --ror=':Requested Open Resources (ROR) for Zoned Namespace Command Set' + -O':alias of --ror' + --rnumzrwa=':Requested Number of ZRWA Resources (RNUMZRWA) for Zoned Namespace Command Set' + -u':alias of --rnumzrwa' + --phndls=':Comma separated list of Placement Handle Associated RUH' + -p':alias of --phndls' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme create-ns options" _createns + ;; + (delete-ns) + local _deletens + _deletens=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':namespace to delete' + -n':alias of --namespace-id' + --timeout=':value for timeout' + -t':alias of --timeout' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme delete-ns options" _deletens + ;; + (attach-ns) + local _attachns + _attachns=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':namespace to attach to the controller' + -n':alias of --namespace-id' + --controllers=':if a device is not provided, supply a comma-sep list of controllers' + -c':alias of --controllers' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme attach-ns options" _attachns + ;; + (detach-ns) + local _detachns + _detachns=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':namespace to detach from controller' + -n':alias of --namespace-id' + --controllers=':if a device is not provided, supply a comma-sep list of controllers' + -c':alias of --controllers' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme detach-ns options" _detachns + ;; + (list-ctrl) + local _listctrl + _listctrl=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':show controllers attached to this namespace' + -n':alias of --namespace-id' + --cntid=':start the list with this controller' + -c':alias of --cntid' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme list-ctrl options" _listctrl + ;; + (get-ns-id) + local _getnsid + _getnsid=( + /dev/nvme':supply a device to use (required)' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme get-ns-id options" _getnsid + ;; + (get-log) + local _getlog + _getlog=( + /dev/nvme':supply a device to use (required)' + --log-id=':requested log number' + -i':alias of --log-id' + --log-len=':number of bytes to show for requested log' + -l':alias of --log-len' + --namespace-id=':get log specific to <nsid> if namespace logs are supported' + -n':alias of --namespace-id' + --raw-binary':dump infos in binary format' + -b':alias of --raw-binary' + --aen=':result of the aen, use to override log id' + -a':alias of --aen' + --lpo=':log page offset specifies the location within a log page from where to start returning data' + -L':alias of --lpo' + --lsi=':log specific identifier specifies an identifier that is required for a particular log page' + -S':alias of --lsi' + --rae':Retain an Asynchronous Event' + -r':alias of --rae' + --uuid-index=':uuid index' + -U':alias for --uuid-index' + --csi=':command set identifier' + -y':alias of --csi' + --ot':offset type' + -O':alias of --ot' + --xfer-len=':read chunk size (default 4k)' + -x':alias of --xfer-len' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme get-log options" _getlog + ;; + (persistent-event-log) + local _persistenteventlog + _persistenteventlog=( + /dev/nvme':supply a device to use (required)' + --action=':action the controller shall take for this log page' + -a':alias to --action' + --log-len=':number of bytes to show for requested log' + -l':alias of --log-len' + --raw-binary':dump infos in binary format' + -b':alias of --raw-binary' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme persistent-event-log options" _persistenteventlog + ;; + (telemetry-log) + local _telemetry_log + _telemetry_log=( + /dev/nvme':supply a device to use (required)' + --output-file=':telemetry data output write' + -O':alias for --output-file' + --host-generate=':Have the host tell the controller to generate the report' + -g':alias to --host-generate' + --controller-init':Gather report generated by the controller' + -c':alias of --controller-init' + --data-area':Pick which telemetry data area to report' + -d':alias of --data-area' + --data-area':Pick which telemetry data area to report' + -d':alias of --data-area' + --rae':Retain an Asynchronous Event' + -r':alias to --rae' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme telemetry-log options" _telemetry_log + ;; + (pred-lat-event-agg-log) + local _predlateventagglog + _predlateventagglog=( + /dev/nvme':supply a device to use (required)' + --log-entries=':Number of pending NVM Set Entries log list' + -e':alias to --log-entries' + --rae':Retain an Asynchronous Event' + -r':alias to --rae' + --raw-binary':dump infos in binary format' + -b':alias of --raw-binary' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme pred-lat-event-agg-log options" _predlateventagglog + ;; + (predictable-lat-log) + local _predictablelatlog + _predictablelatlog=( + /dev/nvme':supply a device to use (required)' + --nvmset-id=':NVM Set Identifier on which log page retrieve info' + -i':alias to --nvmset-id' + --raw-binary':dump infos in binary format' + -b':alias of --raw-binary' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme predictable-lat-log options" _predictablelatlog + ;; + (fw-log) + local _fwlog + _fwlog=( + /dev/nvme':supply a device to use (required)' + --raw-binary':dump infos in binary format' + -b':alias of --raw-binary' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme fw-log options" _fwlog + ;; + (changed-ns-list-log) + local _changed_ns_list_log + _changed_ns_list_log=( + /dev/nvme':supply a device to use (required)' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + --raw-binary':dump infos in binary format' + -b':alias of --raw-binary' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme changed-ns-list-log options" _changed_ns_list_log + ;; + (smart-log) + local _smartlog + _smartlog=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':get SMART log specific to <nsid> if namespace logs are supported' + -n':alias to --namespace-id' + --raw-binary':dump infos in binary format' + -b':alias to --raw-binary' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme smart-log options" _smartlog + ;; + (smart-log-add) + local _add + _add=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':get additional SMART log specific to <nsid> if namespace logs supported' + -n':alias to --namespace-id' + --raw-binary':dump infos in binary format' + -b':alias to --raw-binary' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme smart-log-add options" _add + ;; + (ana-log) + local _ana_log + _ana_log=( + /dev/nvme':supply a device to use (required)' + --groups':Return ANA groups only' + -g':alias to --groups' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme ana-log options" _ana_log + ;; + (error-log) + local _errlog + _errlog=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':get log specific to <nsid> if namespace logs are supported' + -n':alias to --namespace-id' + --raw-binary':dump infos in binary format' + -b':alias to --raw-binary' + --log-entries=':request n >= 1 log entries' + -e':alias to --log-entries' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme error-log options" _errlog + ;; + (effects-log) + local _effects_log + _effects_log=( + /dev/nvme':supply a device to use (required)' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + --human-readable':show infos in readable format' + -H':alias of --human-readable' + --raw-binary':dump infos in binary format' + -b':alias to --raw-binary' + --csi=':command set identifier' + -c':alias of --csi' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme effects-log options" _effects_log + ;; + (endurance-log) + local _endurance_log + _endurance_log=( + /dev/nvme':supply a device to use (required)' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + --group-id=':The endurance group identifier' + -g':alias of --group-id' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme endurance-log options" _endurance_log + ;; + (endurance-event-agg-log) + local _enduranceeventagglog + _enduranceeventagglog=( + /dev/nvme':supply a device to use (required)' + --log-entries=':Number of Endurance Group Event Agg Entries log list' + -e':alias to --log-entries' + --rae':Retain an Asynchronous Event' + -r':alias to --rae' + --raw-binary':dump infos in binary format' + -b':alias of --raw-binary' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme endurance-event-agg-log options" _enduranceeventagglog + ;; + (lba-status-log) + local _lbastatuslog + _lbastatuslog=( + /dev/nvme':supply a device to use (required)' + --rae':Retain an Asynchronous Event' + -r':alias to --rae' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme lba-status-log options" _lbastatuslog + ;; + (resv-notif-log) + local _resvnotiflog + _resvnotiflog=( + /dev/nvme':supply a device to use (required)' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme resv-notif-log options" _resvnotiflog + ;; + (boot-part-log) + local _bootpartlog + _bootpartlog=( + /dev/nvme':supply a device to use (required)' + --lsp=':log specific field' + -s':alias to --lsp' + --output-file=':boot partition data output write' + -f':alias for --output-file' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme boot-part-log options" _bootpartlog + ;; + (get-feature) + local _getf + _getf=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':get feature specific to <nsid>' + -n':alias to --namespace-id' + --feature-id=':hexadecimal name of feature to examine (required)' + -f':alias to --feature-id' + --sel=':select from 0 - current, 1 - default, 2 - saved, 3 - supported' + -s':alias to --sel' + --data-len=':buffer len for returned LBA Type Range or host identifier data' + -l':alias for --data-len' + --uuid-index=':uuid index' + -U':alias for --uuid-index' + --cdw11=':dword 11 value, used for interrupt vector configuration only' + --raw-binary':dump infos in binary format' + -b':alias to --raw-binary' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme get-feature options" _getf + ;; + (device-self-test) + local _device_self_test + _device_self_test=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':Indicate the namespace in which the device self-test has to be carried out' + -n':alias to --namespace-id' + --self-test-code=':This field specifies the action taken by the device self-test command' + -s':alias for --self-test-code' + --wait':Wait for the test to finish' + -w':alias to --wait' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme device-self-test options" _device_self_test + ;; + (self-test-log) + local _self_test_log + _self_test_log=( + /dev/nvme':supply a device to use (required)' + --dst-entries=':Indicate how many DST log entries to be retrieved' + -e':alias to --dst-entries' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + --verbose':show infos verbosely' + -v':alias of --verbose' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme self-test-log options" _self_test_log + ;; + (lockdown) + local _lockdown + _lockdown=( + /dev/nvme':supply a device to use (required)' + --ofi=':Opcode or Feature Identifier(OFI) (required)' + -O':alias of --ofi' + --ifc=':Interface (INF) field Information (required)' + -f':alias of --ifc' + --prhbt=':Prohibit(PRHBT) bit field (required)' + -p':alias of --prhbt' + --scp=':Scope(SCP) field for identifying opcode or feature id (required)' + -s':alias of --scp' + --uuid=':UUID Index field required aligned with Scope' + -U':alias of --uuid' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme lockdown options" _lockdown + ;; + (set-feature) + local _setf + _setf=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':feature is specific to <nsid>' + -n':alias to --namespace-id' + --feature-id=':hexadecimal name of feature to set (required)' + -f':alias to --feature-id' + --data-len=':buffer length, only used for LBA Type Range or host identifier data' + -l':alias for --data-len' + --data=':data file for LBA Type Range or host identifier buffer (defaults to stdin)' + -d':alias to --data' + --value=':new value of feature (required)' + -V'alias to --value' + --uuid-index=':uuid index' + -U':alias for --uuid-index' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme set-feature options" _setf + ;; + (set-property) + local _set_property + _set_property=( + /dev/nvme':supply a device to use (required)' + --offset=':the offset of the property' + -O':alias to --offset' + --value=':the value of the property to be set' + -V':alias to --value' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme set-property options" _set_property + ;; + (get-property) + local _get_property + _get_property=( + /dev/nvme':supply a device to use (required)' + --offset=':the offset of the property' + -O':alias to --offset' + --human-readable':show infos in readable format' + -H':alias of --human-readable' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme get-property options" _get_property + ;; + (format) + local _format + _format=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':<nsid> of namespace to format (required)' + -n':alias of --namespace-id' + --timeout=':value for timeout' + -t':alias of --timeout' + --lbaf=':LBA format to apply to namespace (required)' + -l':alias of --lbaf' + --ses=':secure erase? 0 - no-op (default), 1 - user-data erase, 2 - cryptographic erase' + -s':alias of --ses' + --pil=':location of protection information? 0 - end, 1 - start' + -p':alias of --pil' + --pi=':protection information? 0 - off, 1 - Type 1 on, 2 - Type 2 on, 3 - Type 3 on' + -i':alias of --pi' + --ms=':extended format? 0 - off (metadata in separate buffer), 1 - on (extended LBA used)' + -m':alias of --ms' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme format options" _format + ;; + (fw-activate) + local _fwact + _fwact=( + /dev/nvme':supply a device to use (required)' + --action=':activation action (required)? 0 - replace fw without activating, 1 - replace with activation, 2 - replace with activation at next reset' + -a':alias of --action' + --slot=':firmware slot to activate' + -s':alias of --slot' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme fw-activate options" _fwact + ;; + (fw-download) + local _fwd + _fwd=( + /dev/nvme':supply a device to use (required)' + --fw=':firmware file to download (required)' + -f':alias of --fw' + --xfer=':limit on chunk-size of transfer (if device has download size limit)' + -x':alias of --xfer' + --offset=':starting offset, in dwords (defaults to 0, only useful if download is split across multiple files)' + -O':alias of --offset' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme fw-download options" _fwd + ;; + (capacity-mgmt) + local _fwd + _fwd=( + /dev/nvme':supply a device to use (required)' + --operation=':Operation to be performed by the controller' + -O':alias of --operation' + --element-id=':specific to the value of the Operation field' + -i':alias of --element-id' + --cap-lower=':Least significant 32 bits of the capacity in bytes' + -l':alias of --cap-lower' + --cap-upper=':Most significant 32 bits of the capacity in bytes' + -u':alias of --cap-upper' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme capacity-mgmt options" _fwd + ;; + (write-zeroes) + local _write_zeroes + _write_zeroes=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':value for nsid' + -n':alias of --namespace-id' + --start-block=':64-bit address of the first logical block to be written' + -s':alias of --start-block' + --block-count=':number of logical blocks on device to write' + -c':alias of --block-count' + --dir-type=':directive type' + -T':alias of --dir-type' + --deac':Set DEAC bit, requesting controller to deallocate specified logical blocks' + -d':alias of --deac' + --limited-retry':if included, controller should try less hard to send data to media (if not included, all available data-recovery means used)' + -l':alias of --limited-retry' + --force-unit-access':data shall be written to nonvolatile media before command completion is indicated' + -f':alias of --force-unit-access' + --prinfo=':protection information and check field' + -p':alias of --prinfo' + --ref-tag=':reference tag (for end to end PI)' + -r':alias of --ref-tag' + --app-tag-mask=':application tag mask (for end to end PI)' + -m':alias of --app-tag-mask' + --app-tag=':application tag (for end to end PI)' + -a':alias of --app-tag' + --storage-tag=':storage tag for end-to-end PI' + -S':alias of --storage-tag' + --storage-tag-check':Storage Tag field shall be checked as part of end-to-end data protection processing' + -C':alias of --storage-tag-check' + --dir-spec=':directive specific' + -D':alias of --dir-spec' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme write-zeroes options" _write_zeroes + ;; + (write-uncor) + local _write_uncor + _write_uncor=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':value for nsid' + -n':alias of --namespace-id' + --start-block=':64-bit address of the first logical block to be written' + -s':alias of --start-block' + --block-count=':number of logical blocks on device to write' + -c':alias of --block-count' + --dir-type=':directive type' + -T':alias of --dir-type' + --dir-spec':directive specific' + -S':alias of --dir-spec' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme write-uncor options" _write_uncor + ;; + (verify) + local _verify + _verify=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':value for nsid' + -n':alias of --namespace-id' + --start-block=':64-bit address of the first logical block to be verified' + -s':alias of --start-block' + --block-count=':number of logical blocks on device to verify' + -c':alias of --block-count' + --limited-retry':if included, controller should try less hard to send data to media (if not included, all available data-recovery means used)' + -l':alias of --limited-retry' + --force-unit-access':data shall be verified from nonvolatile media before command completion is indicated' + -f':alias of --force-unit-access' + --prinfo=':protection information and check field' + -p':alias of --prinfo' + --ref-tag=':reference tag (for end to end PI)' + -r':alias of --ref-tag' + --app-tag=':application tag (for end to end PI)' + -a':alias of --app-tag' + --app-tag-mask=':application tag mask (for end to end PI)' + -m':alias of --app-tag-mask' + --storage-tag=':storage tag for end-to-end PI' + -S':alias of --storage-tag' + --storage-tag-check':Storage Tag field shall be checked as part of end-to-end data protection processing' + -C':alias of --storage-tag-check' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme verify options" _verify + ;; + (sanitize) + local _sanitize + _sanitize=( + /dev/nvme':supply a device to use (required)' + --no-dealloc':No deallocate after sanitize' + -d':alias of --no-dealloc' + --oipbp':Overwrite invert pattern between passes' + -i':alias of --oipbp' + --owpass=':Overwrite pass count' + -n':alias of --owpass' + --ause':Allow unrestricted sanitize exit' + -u':alias of --ause' + --sanact=':Sanitize action: 1 = Exit failure mode, 2 = Start block erase, 3 = Start overwrite, 4 = Start crypto erase' + -a':alias of --sanact' + --ovrpat=':Overwrite pattern' + -p':alias of --ovrpat' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme sanitize options" _sanitize + ;; + (sanitize-log) + local _sanitize_log + _sanitize_log=( + /dev/nvme':supply a device to use (required)' + --rae':Retain an Asynchronous Event' + -r':alias of --rae' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + --human-readable':show infos in readable format' + -H':alias of --human-readable' + --raw-binary':dump infos in binary format' + -b':alias of --raw-binary' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme sanitize-log options" _sanitize_log + ;; + (reset) + local _reset + _reset=( + /dev/nvme':supply a device to use (required)' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme reset options" _reset + ;; + (subsystem-reset) + local _subsystem_reset + _subsystem_reset=( + /dev/nvme':supply a device to use (required)' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme subsystem-reset options" _subsystem_reset + ;; + (ns-rescan) + local _ns_rescan + _ns_rescan=( + /dev/nvme':supply a device to use (required)' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme ns-rescan options" _ns_rescan + ;; + (supported-log-pages) + local _support + _support=( + /dev/nvme':supply a device to use (required)' + --human-readable':show infos in readable format' + -H':alias of --human-readable' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme supported-log-pages options" _support + ;; + (media-unit-stat-log) + local _medialog + _medialog=( + /dev/nvme':supply a device to use (required)' + --dom-id=':show infos for domain id' + -d':alias of --dom-id' + --raw-binary':dump infos in binary format' + -b':alias of --raw-binary' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme media-unit-stat-log" _medialog + ;; + (supported-cap-config-log) + local _caplog + _caplog=( + /dev/nvme':supply a device to use (required)' + --dom-id=':show infos for domain id' + -d':alias of --dom-id' + --raw-binary':dump infos in binary format' + -b':alias of --raw-binary' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme supported-cap-config-log" _caplog + ;; + (admin-passthru) + local _admin + _admin=( + /dev/nvme':supply a device to use (required)' + --opcode=':hexadecimal opcode to send (required)' + -O':alias of --opcode' + --flags=':command flags' + -f':alias of --flags' + --rsvd=':value for reserved field' + -R':alias of --rsvd' + --namespace-id=':value for nsid' + -n':alias of --namespace-id' + --data-len=':length for data buffer' + -l':alias of --data-len' + --metadata-len=':length for metadata buffer' + -m':alias of --metadata-len' + --timeout=':value for timeout' + -t':alias of --timeout' + --cdw2=':value for command dword 2' + -2':alias for --cdw2' + --cdw3=':value for command dword 3' + -3':alias for --cdw3' + --cdw10=':value for command dword 10' + -4':alias for --cdw10' + --cdw11=':value for command dword 11' + -5':alias for --cdw11' + --cdw12=':value for command dword 12' + -6':alias for --cdw12' + --cdw13=':value for command dword 13' + -7':alias for --cdw13' + --cdw14=':value for command dword 14' + -8':alias for command dword 14' + --cdw15=':value for command dword 15' + -9':alias for command dword 15' + --input-file=':defaults to stdin; input for write (send direction)' + -i':alias for --input-file' + --raw-binary':dump output in binary format' + -b':alias for --raw-binary' + --show-command':simply print command instead of sending it to <device>' + -s':alias for --show-command' + --dry-run':alias for --show-command' + -d':alias for --show-command' + --read':set dataflow direction to receive' + -r':alias for --read' + --write':set dataflow direction to send' + -w':alias for --write' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme admin-passthru options" _admin + ;; + (io-passthru) + local _io + _io=( + /dev/nvme':supply a device to use (required)' + --opcode=':hexadecimal opcode to send (required)' + -O':alias of --opcode' + --flags=':command flags' + -f':alias of --flags' + --rsvd=':value for reserved field' + -R':alias of --rsvd' + --namespace-id=':value for nsid' + -n':alias of --namespace-id' + --data-len=':length for data buffer' + -l':alias of --data-len' + --metadata-len=':length for metadata buffer' + -m':alias of --metadata-len' + --timeout=':value for timeout' + -t':alias of --timeout' + --cdw2=':value for command dword 2' + -2':alias for --cdw2' + --cdw3=':value for command dword 3' + -3':alias for --cdw3' + --cdw10=':value for command dword 10' + -4':alias for --cdw10' + --cdw11=':value for command dword 11' + -5':alias for --cdw11' + --cdw12=':value for command dword 12' + -6':alias for --cdw12' + --cdw13=':value for command dword 13' + -7':alias for --cdw13' + --cdw14=':value for command dword 14' + -8':alias for command dword 14' + --cdw15=':value for command dword 15' + -9':alias for command dword 15' + --input-file=':defaults to stdin; input for write (send direction)' + -i':alias for --input-file' + --raw-binary':dump output in binary format' + -b':alias for --raw-binary' + --show-command':simply print command instead of sending it to <device>' + -s':alias for --show-command' + --dry-run':alias for --show-command' + -d':alias for --show-command' + --read':set dataflow direction to receive' + -r':alias for --read' + --write':set dataflow direction to send' + -w':alias for --write' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme io-passthru options" _io + ;; + (security-send) + local _ssend + _ssend=( + /dev/nvme':supply a device to use (required)' + --file=':payload' + -f':alias for --file' + --secp=':security protocol as defined in SPC-4' + -p':alias for --secp' + --spsp=':send security-protocol-specific data as defined in SPC-4' + -s':alias for --spsp' + --tl=':transfer length as defined in SPC-4' + -t':alias for --tl' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme security-send options" _ssend + ;; + (security-recv) + local _srecv + _srecv=( + /dev/nvme':supply a device to use (required)' + --secp=':security protocol as defined in SPC-4' + -p':alias for --secp' + --spsp=':send security-protocol-specific data as defined in SPC-4' + -s':alias for --spsp' + --size=':size of buffer (prints to stdout on successful recv)' + -x':alias for --size' + --al=':allocation length as defined in SPC-4' + -a':alias for --al' + --raw-binary':dump output in binary format' + -b':alias for --raw-binary' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme security-recv options" _srecv + ;; + (get-lba-status) + local _get_lba_status + _get_lba_status=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':show infos for namespace <nsid>' + -n':alias of --namespace-id' + --start-lba=':Starting LBA(SLBA) in 64-bit address of the first logical block' + -s':alias for --start-lba' + --max-dw=':Maximum Number of Dwords(MNDW) specifies maximum number of dwords to return' + -m':alias for --max-dw' + --action=':Action Type(ATYPE) specifies the mechanism' + -a':alias for --action' + --range-len=':Range Length(RL) specifies the length of the range of contiguous LBAs beginning at SLBA' + -l':alias for --range-len' + --timeout':value for timeout' + -t':alias for --timeout' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme get-lba-status options" _get_lba_status + ;; + (resv-acquire) + local _acq + _acq=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':<nsid> of namespace to try to reserve (required)' + -n':alias for --namespace-id' + --prkey=':pre-empt reservation key' + -p':alias for --prkey' + --rtype=':hexadecimal reservation type' + -t':alias for --rtype' + --racqa=':reservation acquire action' + -a':alias for --racqa' + --iekey=':ignore existing reservation key' + -i':alias for --iekey' + --crkey':current reservation key' + -c':alias for --crkey' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme resv-acquire options" _acq + ;; + (resv-release) + local _rel + _rel=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':nsid' + -n':alias of --namespace-id' + --rtype=':hexadecimal reservation type' + -t':alias of --rtype' + --rrela=':reservation release action' + -a':alias of --rrela' + --iekey':ignore existing reservation key' + -i':alias of --iekey' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme resv-release options" _rel + ;; + (resv-report) + local _rep + _rep=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':nsid' + -n':alias of --namespace-id' + --numd=':number of dwords of reservation status to xfer' + -d':alias of --numd' + --eds':request extended data structure' + -e':alias of --eds' + --raw-binary':dump output in binary format' + -b':alias of --raw-binary' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme resv-report options" _rep + ;; + (resv-register) + local _reg + _reg=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':nsid' + -n':alias of --namespace-id' + --crkey=':current reservation key' + -c'alias of --crkey' + --nrkey=':new reservation key' + -k':alias of --nrkey' + --cptpl=':change persistence through power loss setting' + -p':alias for --cptpl' + --rrega=':reservation registration action to perform' + -r':alias for --rrega' + --iekey':ignore existing reservation key' + -i':alias for --iekey' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme resv-register options" _reg + ;; + (dsm) + local _dsm + _dsm=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':value for nsid' + -n':alias of --namespace-id' + --ctx-attrs=':Comma separated list of the context attributes in each range' + -a':alias of --ctx-attrs' + --blocks':Comma separated list of the number of blocks in each range' + -b':alias of --blocks' + --slbs':Comma separated list of the starting block in each range' + -s':alias of --slbs' + --ad':Attribute Deallocate' + -d':alias of --ad' + --idw':Attribute Integral Dataset for Write' + -w':alias of --idw' + --idr':Attribute Integral Dataset for Read' + -r':alias of --idr' + --cdw11=':value for command dword 11' + -c':alias for --cdw11' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme dsm options" _dsm + ;; + (copy) + local _copy + _copy=( + /dev/nvme':supply a device to use (required)' + --sdlba=':64-bit addr of first destination logical block' + -d':alias of --sdlba' + --slbs=':64-bit addr of first block per range (comma-separated list)' + -s':alias of --slbs' + --blocks=':number of blocks per range (comma-separated list, zeroes-based values)' + -b':alias of --blocks' + --limited-retry':if included, controller should try less hard to retrieve data from media (if not included, all available data recovery means used)' + -l':alias of --limited-retry' + --force-unit-access':if included, the data shall be read from non-volatile media' + -f':alias of --force-unit access' + --prinfow=':protection information and check field (write part)' + -p':alias of --prinfow' + --prinfor=':protection information and check field (read part)' + -P':alias of --prinfor' + --ref-tag=':initial lba reference tag (write part)' + -r':alias of --ref-tag' + --expected-ref-tags=':expected lba reference tags (read part, comma-separated list)' + -R':alias of --expected-ref-tags' + --app-tag=':lba application tag (write part)' + -a':alias of --app-tag' + --expected-app-tags=':expected lba application tags (read part, comma-separated list)' + -A':alias of --expected-app-tags' + --app-tag-mask=':lba application tag mask (write part)' + -m':alias of --app-tag-mask' + --expected-app-tag-masks=':expected lba application tag masks (read part, comma-separated list)' + -M':alias of --expected-app-tag-masks' + --dir-type=':directive type (write part)' + -T':alias of --dir-type' + --dir-spec=':directive specific (write part)' + -S':alias of --dir-spec' + --format=':source range entry format' + -F':alias of --format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme copy options" _copy + ;; + (flush) + local _flush + _flush=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':nsid' + -n':alias of --namespace-id' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme flush options" _flush + ;; + (compare) + local _comp + _comp=( + /dev/nvme':supply a device to use (required)' + --start-block=':begin compare at this 64-bit LBA on device' + -s':alias of --start-block' + --block-count=':number of logical blocks on device to compare to local data' + -c':alias of --block-count' + --metadata-size=':number of bytes of metadata to compare' + -y':alias of --metadata-size' + --data-size=':size of local data buffer in bytes' + -z':alias of --data-size' + --data=':local data file to compare to blocks on device' + -d':alias of --data' + --prinfo=':protection information action and check field' + -p':alias of --prinfo' + --app-tag-mask=':application tag mask (for end to end PI)' + -m':alias of --app-tag-mask' + --app-tag=':application tag (for end to end PI)' + -a':alias of --app-tag' + --limited-retry':if included, controller should try less hard to retrieve data from media (if not included, all available data recovery means used)' + -l':alias of --limited-retry' + --force-unit-access':if included, the data shall be read from non-volatile media' + -f':alias of --force-unit access' + --show-command':show command instead of sending to device' + -V':alias of --show-command' + --dry-run':show command instead of sending to device' + -w':alias of --show-command' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme compare options" _comp + ;; + (read) + local _read + _read=( + /dev/nvme':supply a device to use (required)' + --start-block=':64-bit address of the first logical block to be read' + -s':alias of --start-block' + --block-count=':number of logical blocks on device to read' + -c':alias of --block-count' + --data-size=':size of data to be read' + -z':alias of --data-size' + --metadata-size=':size of metadata to be read' + -y':alias of --metadata-size' + --ref-tag=':reference tag (for end to end PI)' + -r':alias of --ref-tag' + --data=':file into which data should be read (defaults to stdout)' + -d':alias of --data' + --prinfo=':protection information and check field' + -p':alias of --prinfo' + --app-tag-mask=':application tag mask (for end to end PI)' + -m':alias of --app-tag-mask' + --app-tag=':application tag (for end to end PI)' + -a':alias of --app-tag' + --limited-retry':if included, controller should try less hard to retrieve data from media (if not included, all available data-recovery means used)' + -l':alias of --limited-retry' + --latency':latency statistics will be output following read' + -t':alias of --latency' + --force-unit-access':data read shall be returned from nonvolatile media before command completion is indicated' + -f':alias of --force-unit-access' + --show-command':show command instead of sending to device' + -V':alias of --show-command' + --dry-run':show command instead of sending to device' + -w':alias of --show-command' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme read options" _read + ;; + (write) + local _wr + _wr=( + /dev/nvme':supply a device to use (required)' + --start-block=':64-bit address of the first logical block to be written' + -s':alias of --start-block' + --block-count=':number of logical blocks on device to write' + -c':alias of --block-count' + --data-size=':size of data to be written' + -z':alias of --data-size' + --metadata-size=':size of metadata to be written' + -y':alias of --metadata-size' + --ref-tag=':reference tag (for end to end PI)' + -r':alias of --ref-tag' + --data=':file from which data should be written to device (defaults to stdin)' + -d':alias of --data' + --prinfo=':protection information and check field' + -p':alias of --prinfo' + --app-tag-mask=':application tag mask (for end to end PI)' + -m':alias of --app-tag-mask' + --app-tag=':application tag (for end to end PI)' + -a':alias of --app-tag' + --limited-retry':if included, controller should try less hard to send data to media (if not included, all available data-recovery means used)' + -l':alias of --limited-retry' + --latency':latency statistics will be output following write' + -t':alias of --latency' + --force-unit-access':data shall be written to nonvolatile media before command completion is indicated' + -f':alias of --force-unit-access' + --show-command':show command instead of sending to device' + -V':alias of --show-command' + --dry-run':show command instead of sending to device' + -w':alias of --show-command' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme write options" _wr + ;; + (show-regs) + local _shor + _shor=( + /dev/nvme':supply a device to use (required)' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme show-regs options" _shor + ;; + (fid-support-effects-log) + local _fidsupporteffectslog + _fidsupporteffectslog=( + /dev/nvme':supply a device to use (required)' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme fid-support-effects-log options" _fidsupporteffectslog + ;; + (discover) + local _discover + _discover=( + --device=':use existing discovery controller device' + -d':alias for --device' + --transport=':transport type' + -t':alias for --transport' + --nqn=':subsystem nqn' + -n':alias for --nqn' + --traddr=':transport address' + -a':alias for --traddr' + --trsvcid=':transport service id (e.g. IP port)' + -s':alias for --trsvcid' + --host-traddr=':host traddr (e.g. FC WWN's)' + -w':alias for --host-traddr' + --host-iface=':host interface (for tcp transport)' + -f':alias for --host-iface' + --hostnqn=':user-defined hostnqn' + -q':alias for --hostnqn' + --hostid=':user-defined hostid (if default not used)' + -I':alias for --hostid' + --dhchap-secret=':user-defined dhchap key (if default not used)' + -S':alias for --dhchap-secret' + --nr-io-queues=':number of io queues to use (default is core count)' + -i':alias for --nr-io-queues' + --nr-write-queues=':number of write queues to use (default 0)' + -W':alias for --nr-write-queues' + --nr-poll-queues=':number of poll queues to use (default 0)' + -P':alias for --nr-poll-queues' + --queue-size=':number of io queue elements to use (default 128)' + -Q':alias for --queue-size' + --keep-alive-tmo=':keep alive timeout period in seconds' + -k':alias for --keep-alive-tmo' + --reconnect-delay=':reconnect timeout period in seconds' + -c':alias for --reconnect-delay' + --ctrl-loss-tmo=':controller loss timeout period in seconds' + -l':alias for --ctrl-loss-tmo' + --tos=':type of service' + -T':alias for --tos' + --keyring=':Keyring for TLS key lookup' + --tls_key=':TLS key to use' + --duplicate-connect':allow duplicate connections between same transport host and subsystem port' + -D':alias for --duplicate-connect' + --disable-sqflow':disable controller sq flow control (default false)' + -d':alias for --disable-sqflow' + --hdr-digest':enable transport protocol header digest (TCP transport)' + -g':alias for --hdr-digest' + --data-digest':enable transport protocol data digest (TCP transport)' + -G':alias for --data-digest' + --tls':enable TLS' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + --raw':save raw output to file' + -r':alias of --raw' + --persistent':' + -p':alias for --' + --quiet':' + -S':alias for --' + --config=':Use specified JSON configuration file or none to disable' + -J':alias for --config' + --verbose':Increase logging verbosity' + -v':alias for --verbose' + --dump-config':Dump configuration file to stdout' + -O':alias for --dump-config' + --force':Force persistent discovery controller creation' + --nbft':Only look at NBFT tables' + --no-nbft':Do not look at NBFT tables' + --nbft-patch=':user-defined path for NBFT tables' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme discover options" _discover + ;; + (connect-all) + local _connect_all + _connect_all=( + --device=':use existing discovery controller device' + -d':alias for --device' + --transport=':transport type' + -t':alias for --transport' + --nqn=':subsystem nqn' + -n':alias for --nqn' + --traddr=':transport address' + -a':alias for --traddr' + --trsvcid=':transport service id (e.g. IP port)' + -s':alias for --trsvcid' + --host-traddr=':host traddr (e.g. FC WWN's)' + -w':alias for --host-traddr' + --host-iface=':host interface (for tcp transport)' + -f':alias for --host-iface' + --hostnqn=':user-defined hostnqn' + -q':alias for --hostnqn' + --hostid=':user-defined hostid (if default not used)' + -I':alias for --hostid' + --dhchap-secret=':user-defined dhchap key (if default not used)' + -S':alias for --dhchap-secret' + --nr-io-queues=':number of io queues to use (default is core count)' + -i':alias for --nr-io-queues' + --nr-write-queues=':number of write queues to use (default 0)' + -W':alias for --nr-write-queues' + --nr-poll-queues=':number of poll queues to use (default 0)' + -P':alias for --nr-poll-queues' + --queue-size=':number of io queue elements to use (default 128)' + -Q':alias for --queue-size' + --keep-alive-tmo=':keep alive timeout period in seconds' + -k':alias for --keep-alive-tmo' + --reconnect-delay=':reconnect timeout period in seconds' + -c':alias for --reconnect-delay' + --ctrl-loss-tmo=':controller loss timeout period in seconds' + -l':alias for --ctrl-loss-tmo' + --tos=':type of service' + -T':alias for --tos' + --keyring=':Keyring for TLS key lookup' + --tls_key=':TLS key to use' + --duplicate-connect':allow duplicate connections between same transport host and subsystem port' + -D':alias for --duplicate-connect' + --disable-sqflow':disable controller sq flow control (default false)' + -d':alias for --disable-sqflow' + --hdr-digest':enable transport protocol header digest (TCP transport)' + -g':alias for --hdr-digest' + --data-digest':enable transport protocol data digest (TCP transport)' + -G':alias for --data-digest' + --tls':enable TLS' + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + --raw':save raw output to file' + -r':alias of --raw' + --persistent':' + -p':alias for --' + --quiet':' + -S':alias for --' + --config=':Use specified JSON configuration file or none to disable' + -J':alias for --config' + --verbose':Increase logging verbosity' + -v':alias for --verbose' + --dump-config':Dump configuration file to stdout' + -O':alias for --dump-config' + --force':Force persistent discovery controller creation' + --nbft':Only look at NBFT tables' + --no-nbft':Do not look at NBFT tables' + --nbft-patch=':user-defined path for NBFT tables' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme connect-all options" _connect_all + ;; + (connect) + local _connect + _connect=( + --transport=':transport type' + -t':alias for --transport' + --nqn=':subsystem nqn' + -n':alias for --nqn' + --traddr=':transport address' + -a':alias for --traddr' + --trsvcid=':transport service id (e.g. IP port)' + -s':alias for --trsvcid' + --host-traddr=':host transport address' + -w':alias for --host-traddr' + --host-iface=':host interface (for tcp transport)' + -f':alias for --host-iface' + --hostnqn=':user-defined hostnqn' + -q':alias for --hostnqn' + --hostid=':user-defined hostid (if default not used)' + -I':alias for --hostid' + --dhchap-secret=':user-defined dhchap key (if default not used)' + -S':alias for --dhchap-secret' + --nr-io-queues=':number of io queues to use (default is core count)' + -i':alias for --nr-io-queues' + --nr-write-queues=':number of write queues to use (default 0)' + -W':alias for --nr-write-queues' + --nr-poll-queues=':number of poll queues to use (default 0)' + -P':alias for --nr-poll-queues' + --queue-size=':number of io queue elements to use (default 128)' + -Q':alias for --queue-size' + --keep-alive-tmo=':keep alive timeout period in seconds' + -k':alias for --keep-alive-tmo' + --reconnect-delay=':reconnect timeout period in seconds' + -c':alias for --reconnect-delay' + --ctrl-loss-tmo=':controller loss timeout period in seconds' + -l':alias for --ctrl-loss-tmo' + --tos=':type of service' + -T':alias for --tos' + --keyring=':Keyring for TLS key lookup' + --tls_key=':TLS key to use' + --duplicate-connect':allow duplicate connections between same transport host and subsystem port' + -D':alias for --duplicate-connect' + --disable-sqflow':disable controller sq flow control (default false)' + -d':alias for --disable-sqflow' + --hdr-digest':enable transport protocol header digest (TCP transport)' + -g':alias for --hdr-digest' + --data-digest':enable transport protocol data digest (TCP transport)' + -G':alias for --data-digest' + --tls':enable TLS' + --dhchap-ctrl-secret=':user-defined dhchap controller key (for bi-directional authentication)' + -C':alias for --dhchap-ctrl-secret' + --config=':Use specified JSON configuration file or none to disable' + -J':alias for --config' + --verbose':Increase logging verbosity' + -v':alias for --verbose' + --dump-config':Dump configuration file to stdout' + -O':alias for --dump-config' + --output-format=':Output format: normal|json' + -o':alias for --output-format' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme connect options" _connect + ;; + (dim) + local _dim + _dim=( + --nqn=':Comma-separated list of DC nqn' + -n':alias for --nqn' + --device=':Comma-separated list of DC nvme device handle' + -d':alias for --device' + --task=':The task to perform: register|deregister' + -t':alias for --task' + --verbose':Increase logging verbosity' + -v':alias for --verbose' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme dim options" _dim + ;; + (disconnect) + local _disconnect + _disconnect=( + --nqn=':subsystem nqn' + -n':alias for --nqn' + --device=':nvme device handle' + -d':alias for --device' + --verbose':Increase logging verbosity' + -v':alias for --verbose' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme disconnect options" _disconnect + ;; + (disconnect-all) + local _disconnect_all + _disconnect_all=( + --transport=':transport type' + -r':alias for --transport' + --verbose':Increase logging verbosity' + -v':alias for --verbose' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme disconnect-all options" _disconnect_all + ;; + (gen-hostnqn) + local _gen_hostnqn + _gen_hostnqn=( + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme gen-hostnqn options" _gen_hostnqn + ;; + (show-hostnqn) + local _show_hostnqn + _show_hostnqn=( + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme show-hostnqn options" _show_hostnqn + ;; + (dir-receive) + local _dir_receive + _dir_receive=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':value for nsid' + -n':alias of --namespace-id' + --data-len=':length for data buffer' + -l':alias of --data-len' + --raw-binary':dump output in binary format' + -b':alias for --raw-binary' + --dir-type=':directive type' + -D':alias of --dir-type' + --dir-spec=':directive specific' + -S':alias of --dir-spec' + --dir-oper=':directive operation' + -O':alias of --dir-oper' + --req-resource=':namespace stream requested' + -r':alias of --req-resource' + --human-readable':show infos in readable format' + -H':alias of --human-readable' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme dir-receive options" _dir_receive + ;; + (dir-send) + local _dir_send + _dir_send=( + /dev/nvme':supply a device to use (required)' + --namespace-id=':value for nsid' + -n':alias of --namespace-id' + --data-len=':length for data buffer' + -l':alias of --data-len' + --dir-type=':directive type' + -D':alias of --dir-type' + --target-dir=':target directive type to be enabled/disabled' + -T':alias of --target-dir' + --dir-spec=':directive specific' + -S':alias of --dir-spec' + --dir-oper=':directive operation' + -O':alias of --dir-oper' + --endir=':directive enable' + -e':alias of --endir' + --human-readable':show infos in readable format' + -H':alias of --human-readable' + --raw-binary':dump output in binary format' + -b':alias for --raw-binary' + --input-file=':write/send file (default stdin)' + -i':alias of --input-file' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme dir-send options" _dir_send + ;; + (virt-mgmt) + local _virt_mgmt + _virt_mgmt=( + /dev/nvme':supply a device to use (required)' + --cntlid=':Controller Identifier(CNTLID)' + -c':alias of --cntlid' + --rt=':Resource Type(RT): 0|1' + -r':alias of --rt' + --act=':Action(ACT): 1|7|8|9' + -a':alias of --act' + --nr=':Number of Controller Resources(NR)' + -n':alias of --nr' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme virt-mgmt options" _virt_mgmt + ;; + (rpmb) + local _rpmb + _rpmb=( + /dev/nvme':supply a device to use (required)' + --cmd=':RPMB action: info|program-key|read-counter|write-data|read-data|write-config|read-config' + -c':alias of --cmd' + --msgfile=':data file for read/write-data, read/write-config options' + -f':alias of --msgfile' + --keyfile=':key file that has authentication key to be used' + -g':alias of --keyfile' + --key=':key to be used for authentication' + -k':alias of --key' + --msg=':data to be written on write-data or write-config commands' + -d':alias of --msg' + --address=':Sector offset to read from or write to for an RPMB target, default 0' + -o':alias of --address' + --blocks=':Number of 512 blocks to read or write' + -b':alias of --blocks' + --target=':RPMB target - numerical value of 0 to 6, default 0' + -t':alias of --target' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme rpmb options" _rpmb + ;; + (show-topology) + local _showtopology + _showtopology=( + --output-format=':Output format: normal|json|binary' + -o':alias for --output-format' + --verbose':show infos verbosely' + -v':alias of --verbose' + --ranking=':Ranking order: namespace|ctrl' + -r':alias for --ranking' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme show-topology options" _showtopology + ;; + (nvme-mi-recv) + local _nvme_mi_recv + _nvme_mi_recv=( + --opcode=':NVMe-MI opcode to send' + -O':alias of --opcode' + --namespace-id=':value for nsid' + -n':alias of --namespace-id' + --data-len=':length for data buffer' + -l':alias of --data-len' + --nmimt':value for NVMe-MI message type' + -m':alias of --nmimt' + --nmd0':value for NVMe management request dword 0' + -0':alias of --nmd0' + --nmd1':value for NVMe management request dword 1' + -1':alias of --nmd1' + --input-file=':defaults to stdin; input for write (send direction)' + -i':alias for --input-file' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme nvme-mi-recv options" _nvme_mi_recv + ;; + (nvme-mi-send) + local _nvme_mi_send + _nvme_mi_send=( + --opcode=':NVMe-MI opcode to send' + -O':alias of --opcode' + --namespace-id=':value for nsid' + -n':alias of --namespace-id' + --data-len=':length for data buffer' + -l':alias of --data-len' + --nmimt':value for NVMe-MI message type' + -m':alias of --nmimt' + --nmd0':value for NVMe management request dword 0' + -0':alias of --nmd0' + --nmd1':value for NVMe management request dword 1' + -1':alias of --nmd1' + --input-file=':defaults to stdin; input for write (send direction)' + -i':alias for --input-file' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme nvme-mi-send options" _nvme_mi_send + ;; + (version) + local _version + _version=( + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme version options" _version + ;; + (ocp) + local _ocp + _ocp=( + smart-add-log':Retrieve extended SMART Information' + latency-monitor-log':Get Latency Monitor Log Page' + set-latency-monitor-feature':Set Latency Monitor feature' + internal-log':Retrieve and save internal device telemetry log' + clear-fw-activate-history':Clear firmware update history log"' + eol-plp-failure-mode':Define EOL or PLP circuitry failure mode' + clear-pcie-correctable-error-counters':Clear PCIe correctable error counters' + vs-fw-activate-history':Get firmware activation history log' + device-capability-log':Get Device capability log' + set-dssd-power-state-feature':Set DSSD Power State' + telemetry-string-log':Retrieve Telemetry string Log Page' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme ocp options" _ocp + ;; + (solidigm) + local _solidigm + _solidigm=( + id-ctrl':Send NVMe Identify Controller' + smart-log-add':Retrieve Solidigm SMART Log' + vs-smart-add-log':Get SMART / health extended log (redirects to ocp plug-in)' + vs-internal-log':Retrieve Debug log binaries' + garbage-collect-log':Retrieve Garbage Collection Log' + market-log':Retrieve Market Log' + latency-tracking-log':Enable/Retrieve Latency tracking Log' + parse-telemetry-log':Parse Telemetry Log binary' + clear-pcie-correctable-errors':Clear PCIe Correctable Error Counters (redirects to ocp plug-in)' + clear-fw-activate-history':Clear firmware update history log (redirects to ocp plug-in)' + vs-fw-activate-history':Get firmware activation history log (redirects to ocp plug-in)' + log-page-directory':Retrieve log page directory' + temp-stats':Retrieve Temperature Statistics log' + vs-drive-info':Retrieve drive information' + cloud-SSDplugin-version':Prints plug-in OCP version' + version':Shows the program version' + help':Display this help' + ) + _arguments '*:: :->subcmds' + _describe -t commands "nvme solidigm options" _solidigm + ;; + (help) + local _h + _h=( id-ctrl id-ns list-ns id-iocs create-ns delete-ns attach-ns detach-ns + list-ctrl get-ns-id get-log fw-log smart-log error-log get-feature + set-feature format fw-activate fw-download admin-passthru io-passthru + security-send security-recv resv-acquire resv-register resv-release + resv-report flush compare read write copy show-regs persistent-event-log + pred-lat-event-agg-log nvm-id-ctrl endurance-event-agg-log lba-status-log + resv-notif-log capacity-mgmt id-domain boot-part-log fid-support-effects-log + supported-log-pages lockdown media-unit-stat-log id-ns-lba-format nvm-id-ns + nvm-id-ns-lba-format supported-cap-config-log show-topology + list list-subsys id-ns-granularity primary-ctrl-caps list-secondary ns-descs + id-nvmset id-uuid list-endgrp telemetry-log changed-ns-list-log ana-log + effects-log endurance-log device-self-test self-test-log set-property + get-property write-zeroes write-uncor verify sanitize sanitize-log reset + subsystem-reset ns-rescan get-lba-status dsm discover connect-all connect + dim disconnect disconnect-all gen-hostnqn show-hostnqn dir-receive dir-send + virt-mgmt rpmb version ocp solidigm + ) + _arguments '*:: :->subcmds' + _describe -t commands "help: infos on a specific nvme command, or provide no option to see a synopsis of all nvme commands" _h + ;; + (*) + _files + ;; + esac + return + fi + + _files +} diff --git a/completions/bash-nvme-completion.sh b/completions/bash-nvme-completion.sh new file mode 100644 index 0000000..d862aab --- /dev/null +++ b/completions/bash-nvme-completion.sh @@ -0,0 +1,1604 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# +# bash tab completion for the nvme command line utility +# (unfortunately, bash won't let me add descriptions to cmds) +# Kelly Kaoudis kelly.n.kaoudis at intel.com, Aug. 2015 + +nvme_list_opts () { + local opts="" + local compargs="" + local vals="" + local opt="" + local val="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 2 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + vals+=" " + + if [[ $cur != -* ]] && [[ $cur != "" ]] && [[ $prev == "=" ]] && [[ ${words[$cword-2]} == --* ]]; then + opt+="${words[$cword-2]}" + val+="$cur" + elif [[ $cur == "" ]] && [[ $prev != "=" ]] || [[ $cur == "=" ]] && [[ $prev == --* ]]; then + opt+="$prev" + elif [[ $cur != "=" ]] && [[ $prev != --* ]] && [[ $prev != "=" ]]; then + opt+="$prev" + val+="$cur" + else + opt+="$cur" + fi + + # Listed here in the same order as in nvme-builtin.h + case "$1" in + "list") + opts+=$NO_OPTS + ;; + "list-subsys") + opts=+=" --output-format= -o --verbose -v" + ;; + "id-ctrl") + opts+=" --raw-binary -b --human-readable -H \ + --vendor-specific -V --output-format= -o" + ;; + "id-ns") + opts+=" --namespace-id= -n --raw-binary -b \ + --human-readable -H --vendor-specific -V \ + --force -f --output-format= -o" + ;; + "id-ns-granularity") + opts+=" --output-format= -o" + ;; + "id-ns-lba-format") + opts+=" --lba-format-index= -i --uuid-index= -U \ + --verbose -v --output-format= -o" + ;; + "list-ns") + opts+=" --namespace-id= -n --al -a --csi= -y \ + --outputformat= -o" + ;; + "list-ctrl") + opts+=" --namespace-id= -n --cntid= -c \ + --output-format= -o" + ;; + "cmdset-ind-id-ns") + opts+=" --namespace-id= -n --raw-binary -b \ + --human-readable -H --output-format= -o" + ;; + "nvm-id-ctrl") + opts+=" --output-format= -o" + ;; + "nvm-id-ns") + opts+=" --namespace-id= -n --uuid-index= -U\ + --verbose -v --output-format= -o" + ;; + "nvm-id-ns-lba-format") + opts+=" --lba-format-index= -i --uuid-index= -U \ + --verbose -v --output-format= -o" + ;; + "primary-ctrl-caps") + opts+=" --output-format= -o --human-readable -H" + ;; + "list-secondary") + opts+=" --cntid= -c --namespace-id= n --num-entries -e \ + --output-format= -o" + ;; + "ns-descs") + opts+=" --namespace-id= -n --output-format -o --raw-binary -b" + ;; + "id-nvmset") + opts+=" --nvmeset-id= -i --output-format= -o" + ;; + "id-uuid") + opts+=" --output-format= -o --raw-binary -b --human-readable -H" + ;; + "list-endgrp") + opts+=" --endgrp-id= -i --output-format= -o" + ;; + "id-iocs") + opts+=" --controller-id= -c" + ;; + "id-domain") + opts+=" --domain-id= -c --output-format= -o" + ;; + "create-ns") + opts+=" --nsze= -s --ncap= -c --flbas= -f \ + --dps= -d --nmic= -m --anagrp-id= -a --nvmset-id= -i \ + --block-size= -b --timeout= -t --csi= -y --lbstm= -l \ + --nphndls= -n --nsze-si= -S --ncap-si= -C --azr -z --rar= -r \ + --ror= -O --rnumzrwa= -u --phndls= -p --endg-id= -e" + ;; + "delete-ns") + opts+=" -namespace-id= -n --timeout= -t" + ;; + "attach-ns") + opts+=" --namespace-id= -n --controllers= -c" + ;; + "detach-ns") + opts+=" --namespace-id= -n --controllers= -c" + ;; + "get-ns-id") + opts+=$NO_OPTS + ;; + "get-log") + opts+=" --log-id= -i --log-len= -l --namespace-id= -n \ + --aen= -a --lpo= -O --lsp= -s --lsi= -S \ + --rae -r --uuid-index= -U --csi= -y --ot -O \ + --raw-binary -b" + ;; + "supported-log-pages") + opts+=" --output-format= -o --human-readable -H" + ;; + "telemetry-log") + opts+=" --output-file= -O --host-generate= -g \ + --controller-init -c --data-area= -d" + ;; + "fw-log") + opts+=" --raw-binary -b --output-format= -o" + ;; + "changed-ns-list-log") + opts+=" --output-format= -o --raw-binary -b" + ;; + "smart-log") + opts+=" --namespace-id= -n --raw-binary -b \ + --output-format= -o" + ;; + "ana-log") + opts+=" --output-format -o" + ;; + "fid-support-effects-log") + opts+=" --output-format -o" + ;; + "error-log") + opts+=" --raw-binary -b --log-entries= -e \ + --output-format= -o" + ;; + "effects-log") + opts+=" --output-format= -o --human-readable -H \ + --raw-binary -b" + ;; + "endurance-log") + opts+=" --output-format= -o --group-id -g" + ;; + "predictable-lat-log") + opts+=" --nvmset-id= -i --raw-binary -b \ + --output-format= -o" + ;; + "pred-lat-event-agg-log") + opts+=" --log-entries= -e --rae -r \ + --raw-binary -b --output-format= -o" + ;; + "persistent-event-log") + opts+=" --action= -a --log-len= -l \ + --raw-binary -b --output-format= -o" + ;; + "endurance-event-agg-log") + opts+=" --log-entries= -e --rae -r \ + --raw-binary -b --output-format= -o" + ;; + "lba-status-log") + opts+=" --rae -r --output-format= -o" + ;; + "resv-notif-log") + opts+=" --output-format= -o" + ;; + "boot-part-log") + opts+=" --lsp -s --output-file= -f \ + --output-format= -o" + ;; + "media-unit-stat-log") + opts+=" --dom-id= -d --output-format= -o \ + --raw-binary -b" + ;; + "supported-cap-config-log") + opts+=" --dom-id= -d --output-format= -o \ + --raw-binary -b" + ;; + "get-feature") + opts+=" --namespace-id= -n --feature-id= -f --sel= -s \ + --data-len= -l --cdw11= --c -uuid-index= -U --raw-binary -b \ + --human-readable -H" + ;; + "device-self-test") + opts+=" --namespace-id= -n --self-test-code= -s" + ;; + "self-test-log") + opts+=" --dst-entries= -e --output-format= -o \ + --verbose -v" + ;; + "set-feature") + opts+=" --namespace-id= -n --feature-id= -f --value= -v \ + --data-len= -l -data= -d --value= -v --save -s --uuid-index= -U \ + --cdw12= -c" + ;; + "set-property") + opts+=" --offset= -O --value= -V" + ;; + "get-property") + opts=+" --offset= -O --human-readable -H" + ;; + "format") + opts+=" --namespace-id= -n --timeout= -t --lbaf= -l \ + --ses= -s --pil= -p -pi= -i --ms= -m --reset -r" + ;; + "fw-commit") + opts+=" --slot= -s --action= -a --bpid= -b" + ;; + "fw-download") + opts+=" --fw= -f --xfer= -x --offset= -O" + ;; + "capacity-mgmt") + opts+=" --operation= -O --element-id= -i --cap-lower= -l \ + --cap-upper= -u" + ;; + "lockdown") + opts+=" --ofi= -O --ifc= -f --prhbt= -p --scp= -s --uuid -U" + ;; + "admin-passthru") + opts+=" --opcode= -O --flags= -f --prefil= -p --rsvd= -R \ + --namespace-id= -n --data-len= -l --metadata-len= -m \ + --timeout= -t --cdw2= -2 --cdw3= -3 --cdw10= -4 \ + --cdw11= -5 --cdw12= -6 --cdw13= -7 --cdw14= -8 \ + --cdw15= -9 --input-file= -i --raw-binary -b \ + --show-command -s --dry-run -d --read -r --write -w \ + --latency -T" + ;; + "io-passthru") + opts+=" --opcode= -O --flags= -f --prefill= -p --rsvd= -R \ + --namespace-id= -n --data-len= -l --metadata-len= -m \ + --timeout= -t --cdw2= -2 --cdw3= -3 --cdw10= -4 \ + --cdw11= -5 --cdw12= -6 --cdw13= -7 --cdw14= -8 \ + --cdw15= -9 --input-file= -i --raw-binary -b \ + --show-command -s --dry-run -d --read -r --write -w \ + --latency -T" + ;; + "security-send") + opts+=" --namespace-id= -n --file= -f --nssf= -N --secp= -p \ + --spsp= -s --tl= -t" + ;; + "security-recv") + opts+=" --namespace-id= -n --size= -x --secp= -p --spsp= -s \ + --al= -t --raw-binary -b" + ;; + "get-lba-status") + opts+=" --namespace-id= -n --start-lba= -s --max-dw= -m \ + --action= -a --range-len= -l --timeout= -t \ + --output-format= -o" + ;; + "resv-acquire") + opts+=" --namespace-id= -n --crkey= -c --prkey= -p \ + --rtype= -t --racqa= -a --iekey= -i" + ;; + "resv-register") + opts+=" --namespace-id= -n --crkey= -c --nrkey= -k \ + --rrega= -r --cptpl= -p --iekey -i" + ;; + "resv-release") + opts+=" --namespace-id= -n --crkey -c --rtype= -t \ + --rrela= -a --iekey -i" + ;; + "resv-report") + opts+=" --namespace-id= -n --numd= -d --eds -e \ + --raw-binary= -b --output-format= -o" + ;; + "dsm") + opts+=" --namespace-id= -n --ctx-attrs= -a --blocks= -b\ + --slbs= -s --ad -d --idw -w --idr -r --cdw11= -c" + ;; + "copy") + opts+=" --namespace-id= -n --sdlba= -d --blocks= -b --slbs= -s \ + --limited-retry -l --force-unit-access -f \ + --prinfow= -p --prinfor= -P \ + --ref-tag= -r --expected-ref-tag= -R \ + --app-tag= -a --expected-app-tag= -A \ + --app-tag-mask= -m --expected-app-tag-mask= -M \ + --dir-type= -T --dir-spec= -S --format= -F" + ;; + "flush") + opts+=" --namespace-id= -n" + ;; + "compare") + opts+=" --start-block= -s --block-count= -c --data-size= -z \ + --metadata-size= -y --ref-tag= -r --data= -d \ + --metadata= -M --prinfo= -p --app-tag-mask= -m \ + --app-tag= -a --limited-retry -l \ + --force-unit-access -f --storage-tag-check -C \ + --dir-type= -T --dir-spec= -S --dsm= -D --show-command -V \ + --dry-run -w --latency -t" + ;; + "read") + opts+=" --start-block= -s --block-count= -c --data-size= -z \ + --metadata-size= -y --ref-tag= -r --data= -d \ + --metadata= -M --prinfo= -p --app-tag-mask= -m \ + --app-tag= -a --limited-retry -l \ + --force-unit-access -f --storage-tag-check -C \ + --dir-type= -T --dir-spec= -S --dsm= -D --show-command -V \ + --dry-run -w --latency -t" + ;; + "write") + opts+=" --start-block= -s --block-count= -c --data-size= -z \ + --metadata-size= -y --ref-tag= -r --data= -d \ + --metadata= -M --prinfo= -p --app-tag-mask= -m \ + --app-tag= -a --limited-retry -l \ + --force-unit-access -f --storage-tag-check -C \ + --dir-type= -T --dir-spec= -S --dsm= -D --show-command -V \ + --dry-run -w --latency -t" + ;; + "write-zeroes") + opts+=" --namespace-id= -n --start-block= -s \ + --block-count= -c --deac -d --limited-retry -l \ + --force-unit-access -f --prinfo= -p --ref-tag= -r \ + --app-tag-mask= -m --app-tag= -a \ + --storage-tag= -S --storage-tag-check -C \ + --dir-type= -T --dir-spec= -S" + ;; + "write-uncor") + opts+=" --namespace-id= -n --start-block= -s \ + --block-count= -c --dir-type= -T --dir-spec= -S" + ;; + "verify") + opts+=" --namespace-id= -n --start-block= -s \ + --block-count= -c --limited-retry -l \ + --force-unit-access -f --prinfo= -p --ref-tag= -r \ + --app-tag= -a --app-tag-mask= -m \ + --storage-tag= -S --storage-tag-check -C" + ;; + "sanitize") + opts+=" --no-dealloc -d --oipbp -i --owpass= -n \ + --ause -u --sanact= -a --ovrpat= -p" + case $opt in + --sanact|-a) + vals+=" exit-failure start-block-erase start-overwrite start-crypto-erase" + ;; + esac + ;; + "sanitize-log") + opts+=" --rae -r --output-format= -o --human-readable -H \ + --raw-binary -b" + ;; + "reset") + opts+=$NO_OPTS + ;; + "subsystem-reset") + opts+=$NO_OPTS + ;; + "ns-rescan") + opts+=$NO_OPTS + ;; + "show-regs") + opts+=" --output-format= -o --human-readable -H" + ;; + "discover") + opts+=" --transport= -t -traddr= -a -trsvcid= -s \ + --host-traddr= -w --host-iface= -f \ + --hostnqn= -q --hostid -I --raw= -r \ + --raw= -r --device= -d --keep-alive-tmo= -k \ + --ctrl-loss-tmo= -l --fast-io-fail-tmo= -f \ + --tos= -T --hdr-digest= -g --data-digest -G \ + --nr-io-queues= -i --nr-write-queues= -W \ + --nr-poll-queues= -P --queue-size= -Q \ + --persistent -p --quiet -S \ + --output-format= -o" + ;; + "connect-all") + opts+=" --transport= -t -traddr= -a -trsvcid= -s \ + --host-traddr= -w --host-iface= -f \ + --hostnqn= -q --hostid -I --raw= -r \ + --raw= -r --device= -d --keep-alive-tmo= -k \ + --ctrl-loss-tmo= -l --fast-io-fail-tmo= -f \ + --tos= -T --hdr-digest= -g --data-digest -G \ + --nr-io-queues= -i --nr-write-queues= -W \ + --nr-poll-queues= -P --queue-size= -Q \ + --persistent -p --quiet -S \ + --output-format= -o" + ;; + "connect") + opts+=" --transport= -t --nqn= -n --traddr= -a --trsvcid -s \ + --hostnqn= -q --host-id= -I --nr-io-queues= -i \ + --nr-poll-queues= -P --queue-size= -Q \ + --keep-alive-tmo= -k --reconnect-delay= -r \ + --ctrl-loss-tmo= -l --fast-io-fail-tmo= -f \ + --tos= -T --duplicate-connect -D --disable-sqflow -d\ + --hdr-digest -g --data-digest -G --output-format= -o" + ;; + "dim") + opts+=" --task -t --nqn -n --device -d" + ;; + "disconnect") + opts+=" --nqn -n --device -d" + ;; + "disconnect-all") + opts+=$NO_OPTS + ;; + "gen-hostnqn") + opts+=$NO_OPTS + ;; + "show-hostnqn") + opts+=$NO_OPTS + ;; + "dir-receive") + opts+=" --namespace-id= -n --data-len= -l --raw-binary -b \ + --dir-type= -D --dir-spec= -S --dir-oper= -O \ + --req-resource= -r --human-readable -H" + ;; + "dir-send") + opts+=" --namespace-id= -n --data-len= -l --dir-type= -D \ + --target-dir= -T --dir-spec= -S --dir-oper= -O \ + --endir= -e --human-readable -H --raw-binary -b" + ;; + "virt-mgmt") + opts+=" --cntlid= -c --rt= -r --act= -a --nr= -n" + ;; + "rpmb") + opts+=" --cmd= -c --msgfile= -f --keyfile= -g \ + --key= -k --msg= -d --address= -o --blocks= -b \ + --target= -t" + ;; + "show-topology") + opts+=" --output-format= -o --verbose -v --ranking= -r" + ;; + "nvme-mi-recv") + opts+=" --opcode= -O --namespace-id= -n --data-len= -l \ + --nmimt= -m --nmd0= -0 --nmd1= -1 --input-file= -i" + ;; + "nvme-mi-send") + opts+=" --opcode= -O --namespace-id= -n --data-len= -l \ + --nmimt= -m --nmd0= -0 --nmd1= -1 --input-file= -i" + ;; + "version") + opts+=$NO_OPTS + ;; + "help") + opts=$_cmds + ;; + esac + + opts+=" -h --help -j --json" + + if [[ $vals == " " ]]; then + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + else + COMPREPLY+=( $( compgen $compargs -W "$vals" -- $val ) ) + fi + + return 0 +} + +plugin_intel_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "id-ctrl") + opts+=" --raw-binary -b --human-readable -H \ + --vendor-specific -v --output-format= -o" + ;; + "internal-log") + opts+=" --log= -l --region= -r --nlognum= -m \ + --namespace-id= -n --output-file= -o \ + --verbose-nlog -v" + ;; + "lat-stats") + opts+=" --write -w --raw-binary -b --json -j" + ;; + "set-bucket-thresholds") + opts+=" --write -w --bucket-thresholds= -t" + ;; + "lat-stats-tracking") + opts+=" --enable -e --disable -d" + ;; + "market-name") + opts+=" --raw-binary -b" + ;; + "smart-log-add") + opts+=" --namespace-id= -n --raw-binary -b \ + --json -j" + ;; + "temp-stats") + opts+=" --raw-binary -b" + ;; + "help") + opts+=$NO_OPTS + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +plugin_amzn_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "id-ctrl") + opts+=" --raw-binary -b --human-readable -H \ + --vendor-specific -v --output-format= -o" + ;; + "help") + opts+=$NO_OPTS + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +plugin_memblaze_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "smart-log-add") + opts+=" --namespace-id= -n --raw-binary -b" + ;; + "get-pm-status") + opts+=$NO_OPTS + ;; + "set-pm-status") + opts+=" --value= -v --save -s" + ;; + "select-download") + opts+=" --fw= -f --select= -s" + ;; + "lat-stats") + opts+=" --enable -e --disable -d" + ;; + "lat-stats-print") + opts+=" --write -w" + ;; + "lat-log") + opts+=" --param= -p" + ;; + "lat-log-print") + opts+=$NO_OPTS + ;; + "clear-error-log") + opts+=$NO_OPTS + ;; + "help") + opts+=$NO_OPTS + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +plugin_wdc_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "cap-diag") + opts+=" --output-file= -o --transfer-size= -s" + ;; + "drive-log") + opts+=" --output-file= -o" + ;; + "get-crash-dump") + opts+=" --output-file= -o" + ;; + "get-pfail-dump") + opts+=" --output-file= -o" + ;; + "id-ctrl") + opts+=" --raw-binary -b --human-readable -H \ + --vendor-specific -v --output-format= -o" + ;; + "purge") + opts+=$NO_OPTS + ;; + "purge-monitor") + opts+=$NO_OPTS + ;; + "vs-internal-log") + opts+=" --output-file= -o --transfer-size= -s --data-area= -d \ + --file-size= -f --offset= -e --type= -t --verbose -v" + ;; + "vs-nand-stats") + opts+=" --output-format= -o" + ;; + "vs-smart-add-log") + opts+=" --interval= -i --output-format= -o --log-page-version= -l \ + --log-page-mask= -p" + ;; + "clear-pcie-correctable-errors") + opts+=$NO_OPTS + ;; + "drive-essentials") + opts+=" --dir-name= -d" + ;; + "get-drive-status") + opts+=$NO_OPTS + ;; + "clear-assert-dump") + opts+=$NO_OPTS + ;; + "drive-resize") + opts+=" --size= -s" + ;; + "vs-fw-activate-history") + opts+=" --output-format= -o" + ;; + "clear-fw-activate-history") + opts+=$NO_OPTS + ;; + "enc-get-log") + opts+=" --output-file= -o --transfer-size= -s --log-id= -l" + ;; + "vs-telemetry-controller-option") + opts+=" --disable -d --enable -e --status -s" + ;; + "vs-error-reason-identifier") + opts+=" --log-id= -i --file= -o" + ;; + "log-page-directory") + opts+=" --output-format= -o" + ;; + "namespace-resize") + opts+=" --namespace-id= -n --op-option= -o" + ;; + "vs-drive-info") + opts+=" --output-format= -o" + ;; + "vs-temperature-stats") + opts+=" --output-format= -o" + ;; + "capabilities") + opts+=$NO_OPTS + ;; + "cloud-SSD-plugin-version") + opts+=$NO_OPTS + ;; + "vs-pcie-stats") + opts+=" --output-format= -o" + ;; + "help") + opts+=$NO_OPTS + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +plugin_huawei_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "list") + opts+=" --output-format= -o" + ;; + "id-ctrl") + opts+=" --raw-binary -b --human-readable -H \ + --vendor-specific -v --output-format= -o" + ;; + "help") + opts+=$NO_OPTS + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +plugin_toshiba_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "vs-smart-add-log") + opts+=" --namespace-id= -n --output-file= -o --log= -l" + ;; + "vs-internal-log") + opts+=" --output-file= -o --prev-log -p" + ;; + "clear-pcie-correctable-errors") + opts+=$NO_OPTS + ;; + "help") + opts+=$NO_OPTS + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +plugin_micron_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "select-download") + opts+=" --fw= -f --select= -s" + ;; + "vs-temperature-stats") + opts+=" --format= -f" + ;; + "vs-pcie-stats") + opts+=" --format= -f" + ;; + "clear-pcie-correctable-errors") + opts+=$NO_OPTS + ;; + "vs-internal-log") + opts+=" --type= -t --package= -p --data_area= -d" + ;; + "vs-telemetry-controller-option") + opts+=" --option= -o --select= -s" + ;; + "vs-nand-stats") + opts+=" --format= -f" + ;; + "vs-drive-info") + opts+=" --format= -f" + ;; + "plugin-version") + opts+=$NO_OPTS + ;; + "cloud-SSD-plugin-version") + opts+=$NO_OPTS + ;; + "log-page-directory") + opts+=$NO_OPTS + ;; + "vs-fw-activate-history") + opts+=" --format= -f" + ;; + "vs-error-reason-identifier") + opts+=" --format= -f" + ;; + "vs-smart-add-log") + opts+=" --format= -f" + ;; + "clear-fw-activate-history") + opts+=$NO_OPTS + ;; + "vs-smbus-option") + opts+=" --option= -o --value= -v --save= -s" + ;; + "help") + opts+=$NO_OPTS + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +plugin_seagate_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "vs-temperature-stats") + opts+=" --output-format= -o" + ;; + "vs-log-page-sup") + opts+=" --output-format= -o" + ;; + "vs-smart-add-log") + opts+=" --output-format= -o" + ;; + "vs-pcie-stats") + opts+=" --output-format= -o" + ;; + "clear-pcie-correctable-errors") + opts+=" --save -s" + ;; + "get-host-tele") + opts+=" --namespace-id= -n --log-specific= -i --raw-binary -b" + ;; + "get-ctrl-tele") + opts+=" --namespace-id= -n --raw-binary -b" + ;; + "vs-internal-log") + opts+=" --namespace-id= -n --dump-file= -f" + ;; + "plugin-version") + opts+=$NO_OPTS + ;; + "help") + opts+="" + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +plugin_virtium_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "save-smart-to-vtview-log") + opts+=" --run-time= -r --freq= -f --output-file= -o --test-name= -n" + ;; + "show-identify") + opts+=$NO_OPTS + ;; + "help") + opts+=$NO_OPTS + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +plugin_shannon_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "smart-log-add") + opts+=" --namespace-id= -n --raw-binary -b" + ;; + "get-feature-add") + opts+=" --namespace-id= -n --feature-id -f --sel= -s \ + --data-len= -l --raw-binary -b --cdw11= -c --human-readable -H" + ;; + "set-feature-add") + opts+=" --namespace-id= -n --feature-id= -f --value= -V \ + --data-len= -l --data= -d --save -s" + ;; + "id-ctrl") + opts+=" --raw-binary -b --human-readable -H \ + --vendor-specific -v --output-format= -o" + ;; + "help") + opts+=$NO_OPTS + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +plugin_dera_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "smart-log-add") + opts+=$NO_OPTS + ;; + "help") + opts+=$NO_OPTS + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +plugin_sfx_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "smart-log-add") + opts+=" --namespace-id= -n --raw-binary -b --json -j" + ;; + "lat-stats") + opts+=" --write -w --raw-binary -b" + ;; + "get-bad-block") + opts+=$NO_OPTS + ;; + "query-cap") + opts+=" --raw-binary --json" + ;; + "change-cap") + opts+=" --cap= -c --cap-byte= -z --force -f --raw-binary -b --json -j" + ;; + "set-feature") + opts+=" --namespace-id= -n --feature-id= -f --value= -v --force -s" + ;; + "get-feature") + opts+=" --namespace-id= -n --feature-id -f" + ;; + "help") + opts+=$NO_OPTS + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +plugin_solidigm_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "id-ctrl") + opts+=" --raw-binary -b --human-readable -H \ + --vendor-specific -v --output-format= -o \ + --verbose -v " + ;; + "vs-smart-add-log") + opts+="--output-format= -o" + ;; + "garbage-collect-log") + opts+="--output-format= -o" + ;; + "vs-internal-log") + opts+=" --type= -t --namespace-id= -n \ + --file-prefix= -p --verbose -v" + ;; + "latency-tracking-log") + opts+=" --enable -e --disable -d \ + --read -r --write -w \ + --type -t --output-format -o" + ;; + "clear-pcie-correctable-errors") + opts+=" --no-uuid -n" + ;; + "parse-telemetry-log") + opts+=" --host-generate -g --controller-init -c \ + --data-area -d --config-file -j \ + --source-file -s" + ;; + "clear-fw-activate-history") + opts+=" --no-uuid -n" + ;; + "vs-fw-activate-history") + opts+=" --output-format -o" + ;; + "log-page-directory") + opts+=" --output-format -o" + ;; + "vs-drive-info") + opts+=" " + ;; + "cloud-SSDplugin-version") + opts+=$NO_OPTS + ;; + "market-log") + opts+=" --raw-binary -b" + ;; + "smart-log-add") + opts+=" --namespace-id= -n --output-format -o" + ;; + "temp-stats") + opts+=" --raw-binary -b" + ;; + "version") + opts+=$NO_OPTS + ;; + "help") + opts+=$NO_OPTS + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +plugin_transcend_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "healthvalue") + opts+=$NO_OPTS + ;; + "badblock") + opts+=$NO_OPTS + ;; + "help") + opts+=$NO_OPTS + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +plugin_zns_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "id-ctrl") + opts+=" --raw-binary -b --human-readable -H \ + --vendor-specific -v --output-format= -o" + ;; + "id-ns") + opts+=" --namespace-id= -n --vendor-specific -v \ + --output-format= -o --human-readable -H" + ;; + "zone-mgmt-recv") + opts+=" --output-format= -o --namespace-id= -n \ + --start-lba= -s --zra= -z --zrasf= -S --partial -p \ + --data-len= -l" + ;; + "zone-mgmt-send") + opts+=" --namespace-id= -n --start-lba= -s --zsaso -o \ + --select-all -a --zsa= -z --data-len= -l \ + --data= -d --timeout= -t" + ;; + "report-zones") + opts+=" --namespace-id= -n --start-lba= -s \ + --descs= -d --state= -S --output-format= -o \ + --human-readable -H --extended -e --partial -p" + ;; + "close-zone") + opts+=" --namespace-id= -n --start-lba= -s \ + --select-all -a --timeout= -t" + ;; + "finish-zone") + opts+=" --namespace-id= -n --start-lba= -s \ + --select-all -a --timeout= -t" + ;; + "open-zone") + opts+=" --namespace-id= -n --start-lba= -s \ + --select-all -a --timeout= -t --zrwa -r" + ;; + "reset-zone") + opts+=" --namespace-id= -n --start-lba= -s \ + --select-all -a --timeout= -t" + ;; + "offline-zone") + opts+=" --namespace-id= -n --start-lba= -s \ + --select-all -a --timeout= -t" + ;; + "set-zone-desc") + opts+=" --namespace-id= -n --start-lba= -s \ + --data= -d --timeout= -t --zrwa -r" + ;; + "flush-zone") + opts+=" --namespace-id= -n --last-lba= -l --timeout= -t" + ;; + "zone-append") + opts+=" --namespace-id= -n --zslba= -s --data-size= -z \ + --metadata-size= -y --data= -d --metadata= -M \ + --limited-retry -l --force-unit-access -f --ref-tag= -r + --app-tag-mask= -m --app-tag= -a --prinfo= -p \ + --piremap -P --latency -t" + ;; + "changed-zone-list") + opts+=" --namespace-id= -n --output-format= -o --rae -r" + ;; + "help") + opts+=$NO_OPTS + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +plugin_nvidia_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "id-ctrl") + opts+=" --raw-binary -b --human-readable -H \ + --vendor-specific -v --output-format= -o" + ;; + "help") + opts+=$NO_OPTS + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +plugin_ymtc_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "smart-log-add") + opts+=" --namespace-id= -n --raw-binary -b" + ;; + "help") + opts+=$NO_OPTS + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +plugin_inspur_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "nvme-vendor-log") + opts+=$NO_OPTS + ;; + "help") + opts+=$NO_OPTS + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +plugin_ocp_opts () { + local opts="" + local compargs="" + + local nonopt_args=0 + for (( i=0; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + let nonopt_args+=1 + fi + done + + if [ $nonopt_args -eq 3 ]; then + opts="/dev/nvme* " + fi + + opts+=" " + + case "$1" in + "smart-add-log") + opts+=" --output-format= -o" + ;; + "latency-monitor-log") + opts+=" --output-format= -o" + ;; + "set-latency-monitor-feature") + opts+=" --active_bucket_timer_threshold= -t \ + --active_threshold_a= -a --active_threshold_b= -b \ + --active_threshold_c= -c --active_threshold_d= -d \ + --active_latency_config= -f \ + --active_latency_minimum_window= -w \ + --debug_log_trigger_enable -r --discard_debug_log= -l \ + --latency_monitor_feature_enable= -e" + ;; + "internal-log") + opts+=" --telemetry_type= -t --telemetry_data_area= -a \ + --output-file= -o" + ;; + "clear-fw-activate-history") + opts+=" --no-uuid -n" + ;; + "eol-plp-failure-mode") + opts+=" --mode= -m --save -s --sel= -S --no-uuid -n" + ;; + "clear-pcie-correctable-error-counters") + opts+=" --no-uuid -n" + ;; + "fw-activate-history") + opts+=" --output-format= -o" + ;; + "device-capability-log") + opts+=" --output-format= -o" + ;; + "set-dssd-power-state-feature") + opts+=" --power-state= -p --no-uuid -n --save -s" + ;; + "telemetry-string-log") + opts+=" --output-file= -o" + ;; + "help") + opts+=$NO_OPTS + ;; + esac + + COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) ) + + return 0 +} + +_nvme_subcmds () { + local cur prev words cword + _init_completion || return + + # Constant to indicate command has no options + NO_OPTS="" + + # Associative array of plugins and associated subcommands + # Order here is same as PLUGIN_OBJS in Makefile + typeset -Ar _plugin_subcmds=( + [intel]="id-ctrl internal-log lat-stats \ + set-bucket-thresholds lat-stats-tracking \ + market-name smart-log-add temp-stats" + [amzn]="id-ctrl" + [memblaze]="smart-log-add get-pm-status set-pm-status \ + select-download lat-stats lat-stats-print lat-log \ + lat-log-print clear-error-log" + [wdc]="cap-diag drive-log get-crash-dump get-pfail-dump \ + id-ctrl purge purge-monitor vs-internal-log \ + vs-nand-stats vs-smart-add-log clear-pcie-correctable-errors \ + drive-essentials get-drive-status clear-assert-dump \ + drive-resize vs-fw-activate-history clear-fw-activate-history \ + enc-get-log vs-telemetry-controller-option \ + vs-error-reason-identifier log-page-directory \ + namespace-resize vs-drive-info vs-temperature-stats \ + capabilities cloud-SSD-plugin-version vs-pcie-stats" + [huawei]="list id-ctrl" + [netapp]="smdevices ontapdevices" + [toshiba]="vs-smart-add-log vs-internal-log \ + clear-pcie-correctable-errors" + [micron]="select-download vs-temperature-stats vs-pcie-stats \ + clear-pcie-correctable-errors vs-internal-log \ + vs-telemetry-controller-option vs-nand-stats \ + vs-drive-info plugin-version cloud-SSD-plugin-version \ + log-page-directory vs-fw-activate-history \ + vs-error-reason-identifier vs-smart-add-log \ + clear-fw-activate-history vs-smbus-option" + [seagate]="vs-temperature-stats vs-log-page-sup \ + vs-smart-add-log vs-pcie-stats clear-pcie-correctable-errors \ + get-host-tele get-ctrl-tele vs-internal-log \ + plugin-version" + [virtium]="save-smart-to-vtview-log show-identify" + [shannon]="smart-log-add get-feature-add set-feature-add id-ctrl" + [dera]="smart-log-add" + [sfx]="smart-log-add lat-stats get-bad-block query-cap \ + change-cap set-feature get-feature" + [solidigm]="id-ctrl vs-smart-add-log garbage-collect-log \ + vs-internal-log latency-tracking-log \ + clear-pcie-correctable-errors parse-telemetry-log \ + clear-fw-activate-history vs-fw-activate-history log-page-directory \ + vs-drive-info cloud-SSDplugin-version market-log \ + smart-log-add temp-stats version help" + [transcend]="healthvalue badblock" + [zns]="id-ctrl id-ns zone-mgmt-recv \ + zone-mgmt-send report-zones close-zone \ + finish-zone open-zone reset-zone offline-zone \ + set-zone-desc zone-append changed-zone-list" + [nvidia]="id-ctrl" + [ymtc]="smart-log-add" + [inspur]="nvme-vendor-log" + [ocp]="smart-add-log latency-monitor-log \ + set-latency-monitor-feature internal-log \ + clear-fw-activate-history eol-plp-failure-mode \ + clear-pcie-correctable-error-counters \ + vs-fw-activate-history device-capability-log \ + set-dssd-power-state-feature telemetry-string-log" + ) + + # Associative array mapping plugins to corresponding option completions + typeset -Ar _plugin_funcs=( + [intel]="plugin_intel_opts" + [amzn]="plugin_amzn_opts" + [memblaze]="plugin_memblaze_opts" + [wdc]="plugin_wdc_opts" + [huawei]="plugin_huawei_opts" + [toshiba]="plugin_toshiba_opts" + [micron]="plugin_micron_opts" + [seagate]="plugin_seagate_opts" + [virtium]="plugin_virtium_opts" + [shannon]="plugin_shannon_opts" + [dera]="plugin_dera_opts" + [sfx]="plugin_sfx_opts" + [solidigm]="plugin_solidigm_opts" + [transcend]="plugin_transcend_opts" + [zns]="plugin_zns_opts" + [nvidia]="plugin_nvidia_opts" + [ymtc]="plugin_ymtc_opts" + [inspur]="plugin_inspur_opts" + [ocp]="plugin_ocp_opts" + ) + + # Top level commands + _cmds="list list-subsys id-ctrl id-ns \ + id-ns-granularity list-ns list-ctrl \ + id-ns-lba-format nvm-id-ns nvm-id-ns-lba-format \ + nvm-id-ctrl primary-ctrl-caps list-secondary \ + ns-descs id-nvmset id-uuid id-iocs id-domain create-ns \ + delete-ns get-ns-id get-log telemetry-log \ + fw-log changed-ns-list-log smart-log ana-log \ + error-log effects-log endurance-log \ + predictable-lat-log pred-lat-event-agg-log \ + persistent-event-log endurance-agg-log \ + lba-status-log resv-notif-log get-feature \ + device-self-test self-test-log set-feature \ + set-property get-property format fw-commit \ + fw-download admin-passthru io-passthru \ + security-send security-recv get-lba-status \ + resv-acquire resv-register resv-release \ + resv-report dsm copy flush compare read \ + write write-zeros write-uncor verify \ + sanitize sanitize-log reset subsystem-reset \ + ns-rescan show-regs discover connect-all \ + connect disconnect disconnect-all gen-hostnqn \ + show-hostnqn dir-receive dir-send virt-mgmt \ + rpmb boot-part-log fid-support-effects-log \ + supported-log-pages lockdown media-unit-stat-log \ + supported-cap-config-log dim show-topology list-endgrp \ + nvme-mi-recv nvme-mi-send" + + # Add plugins: + for plugin in "${!_plugin_subcmds[@]}"; do + _cmds+=" $plugin" + done + + _cmds+=" version help" + + 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 |