]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
plugins: Add Dell plugin with basic id-ctrl
authorBoris Glimcher <Boris.Glimcher@emc.com>
Thu, 23 Jun 2022 22:38:46 +0000 (01:38 +0300)
committerBoris Glimcher <Boris.Glimcher@emc.com>
Fri, 24 Jun 2022 00:07:27 +0000 (03:07 +0300)
Signed-off-by: Boris Glimcher <Boris.Glimcher@emc.com>
plugins/dell/dell-nvme.c [new file with mode: 0644]
plugins/dell/dell-nvme.h [new file with mode: 0644]
plugins/meson.build

diff --git a/plugins/dell/dell-nvme.c b/plugins/dell/dell-nvme.c
new file mode 100644 (file)
index 0000000..8ed10e7
--- /dev/null
@@ -0,0 +1,54 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+// Copyright © 2022 Dell Inc. or its subsidiaries. All Rights Reserved.
+#include <fcntl.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <inttypes.h>
+
+#include "common.h"
+#include "nvme.h"
+#include "libnvme.h"
+#include "plugin.h"
+
+#define CREATE_CMD
+#include "dell-nvme.h"
+
+#define ARRAY_NAME_LEN 80
+
+struct nvme_vu_id_ctrl_field {
+       __u16           dell_mjr;
+       __u16           dell_mnr;
+       __u16           dell_ter;
+       __u8            reserved0[1018];
+};
+
+static void dell_id_ctrl(__u8 *vs, struct json_object *root)
+{
+       struct nvme_vu_id_ctrl_field *id = (struct nvme_vu_id_ctrl_field *)vs;
+       char array_ver[16] = { 0 };
+       char array_name[ARRAY_NAME_LEN + 1] = {0};
+
+       snprintf(array_ver, sizeof(array_ver), "0x%04x%04x%04x",
+                le16_to_cpu(id->dell_mjr),
+                le16_to_cpu(id->dell_mnr),
+                le16_to_cpu(id->dell_ter));
+
+       memcpy(array_name, vs + sizeof(array_ver), ARRAY_NAME_LEN);
+
+       if (root) {
+               json_object_add_value_string(root, "array_name", strlen(array_name) > 1 ? array_name : "NULL");
+               json_object_add_value_string(root, "array_ver", array_ver);
+               return;
+       }
+
+       printf("array_name : %s\n", strlen(array_name) > 1 ? array_name : "NULL");
+       printf("array_ver  : %s\n", array_ver);
+}
+
+static int id_ctrl(int argc, char **argv, struct command *cmd,
+               struct plugin *plugin)
+{
+       return __id_ctrl(argc, argv, cmd, plugin, dell_id_ctrl);
+}
diff --git a/plugins/dell/dell-nvme.h b/plugins/dell/dell-nvme.h
new file mode 100644 (file)
index 0000000..aaf0de1
--- /dev/null
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+#undef CMD_INC_FILE
+#define CMD_INC_FILE plugins/dell/dell-nvme
+
+#if !defined(DELL_NVME) || defined(CMD_HEADER_MULTI_READ)
+#define DELL_NVME
+
+#include "cmd.h"
+
+PLUGIN(NAME("dell", "DELL vendor specific extensions", NVME_VERSION),
+       COMMAND_LIST(
+               ENTRY("id-ctrl", "Send NVMe Identify Controller", id_ctrl)
+       )
+);
+
+#endif
+
+#include "define_cmd.h"
index 9946670c13e01a006897c868936721d3ed0258cc..b3af39bb9c2a605013ab36a959950f040aa875ca 100644 (file)
@@ -2,6 +2,7 @@
 
 sources += [
   'plugins/amzn/amzn-nvme.c',
+  'plugins/dell/dell-nvme.c',
   'plugins/dera/dera-nvme.c',
   'plugins/huawei/huawei-nvme.c',
   'plugins/intel/intel-nvme.c',