]> www.infradead.org Git - users/hch/nvme-cli.git/commitdiff
nvme-cli: add support alias command with Firmware Activate
authorMinwoo Im <minwoo.im.dev@gmail.com>
Sun, 17 Dec 2017 09:58:28 +0000 (18:58 +0900)
committerKeith Busch <keith.busch@intel.com>
Tue, 19 Dec 2017 20:18:32 +0000 (13:18 -0700)
Firmware Activate command were known as "Firmware Activate" in NVMe 1.0
and 1.1. It has been changed to "Firmware Commit" since 1.2.

This patch will make it support a single alias for every subcommands.
Also make "fw-activate" command to be registered in "fw-commit" as an
alias for backward compatibility.

Signed-off-by: Minwoo Im <minwoo.im.dev@gmail.com>
cmd_handler.h
nvme-builtin.h
nvme.c
plugin.c
plugin.h

index b2e3e9d18d2efbfbd7e509b410c60aabcdc3be58..d40740d7bb16cc327266ae8669147345e95a96c0 100644 (file)
@@ -8,7 +8,7 @@
 #define NAME(n, d)
 
 #undef ENTRY
-#define ENTRY(n, h, f) \
+#define ENTRY(n, h, f, ...) \
 static int f(int argc, char **argv, struct command *command, struct plugin *plugin);
 
 #undef COMMAND_LIST
@@ -28,14 +28,26 @@ static int f(int argc, char **argv, struct command *command, struct plugin *plug
 #undef NAME
 #define NAME(n, d)
 
-#undef ENTRY
-#define ENTRY(n, h, f)                 \
+#undef ENTRY_W_ALIAS
+#define ENTRY_W_ALIAS(n, h, f, a)      \
 static struct command f ## _cmd = {    \
        .name = n,                      \
        .help = h,                      \
        .fn = f,                        \
+       .alias = a,                     \
 };
 
+#undef ENTRY_WO_ALIAS
+#define ENTRY_WO_ALIAS(n, h, f)                \
+       ENTRY_W_ALIAS(n, h, f, NULL)
+
+#undef ENTRY_SEL
+#define ENTRY_SEL(n, h, f, a, CMD, ...) CMD
+
+#undef ENTRY
+#define ENTRY(...)             \
+       ENTRY_SEL(__VA_ARGS__, ENTRY_W_ALIAS, ENTRY_WO_ALIAS)(__VA_ARGS__)
+
 #undef COMMAND_LIST
 #define COMMAND_LIST(args...) args
 
@@ -54,7 +66,7 @@ static struct command f ## _cmd = {   \
 #define NAME(n, d)
 
 #undef ENTRY
-#define ENTRY(n, h, f) &f ## _cmd,
+#define ENTRY(n, h, f, ...) &f ## _cmd,
 
 #undef COMMAND_LIST
 #define COMMAND_LIST(args...)  \
index b06eb34b4a20c887b0c136e0d5202a85b5470962..85f9f0fd364eea493c939c1cd56f24801d5785ef 100644 (file)
@@ -28,7 +28,7 @@ COMMAND_LIST(
        ENTRY("set-feature", "Set a feature and show the resulting value", set_feature)
        ENTRY("set-property", "Set a property and show the resulting value", set_property)
        ENTRY("format", "Format namespace with new block format", format)
-       ENTRY("fw-activate", "Activate new firmware slot", fw_activate)
+       ENTRY("fw-commit", "Verify and commit firmware to a specific slot (fw-activate in old version < 1.2)", fw_commit, "fw-activate")
        ENTRY("fw-download", "Download new firmware", fw_download)
        ENTRY("admin-passthru", "Submit an arbitrary admin command, return results", admin_passthru)
        ENTRY("io-passthru", "Submit an arbitrary IO command, return results", io_passthru)
diff --git a/nvme.c b/nvme.c
index 4b0b861667bcb681c46bc6ce0ab0afb5b1531f7b..bb9feaac3ada93d179037e69ffb9cf0a792680c4 100644 (file)
--- a/nvme.c
+++ b/nvme.c
@@ -1780,7 +1780,7 @@ static char *nvme_fw_status_reset_type(__u32 status)
        }
 }
 
-static int fw_activate(int argc, char **argv, struct command *cmd, struct plugin *plugin)
+static int fw_commit(int argc, char **argv, struct command *cmd, struct plugin *plugin)
 {
        const char *desc = "Verify downloaded firmware image and "\
                "commit to specific firmware slot. Device is not automatically "\
index 6ca7882adcb48b44b567e300d670d295a18fcad8..5eb12bfc1db481c65c1003e5363e354d8f1b7c6f 100644 (file)
--- a/plugin.c
+++ b/plugin.c
@@ -133,7 +133,8 @@ int handle_plugin(int argc, char **argv, struct plugin *plugin)
                if (!strcmp(str, "version"))
                        return version(plugin);
                if (strcmp(str, cmd->name))
-                       continue;
+                       if (!cmd->alias || (cmd->alias && strcmp(str, cmd->alias)))
+                               continue;
 
                return (cmd->fn(argc, argv, cmd, plugin));
        }
index 68d93d1408a6e17eb6f7f4a0c7203592b3bc6c1e..91079fbecc8a68be05f3bf6db78e23568a5717a9 100644 (file)
--- a/plugin.h
+++ b/plugin.h
@@ -26,6 +26,7 @@ struct command {
        char *name;
        char *help;
        int (*fn)(int argc, char **argv, struct command *command, struct plugin *plugin);
+       char *alias;
 };
 
 void usage(struct plugin *plugin);