}
}
+static void json_nvme_primary_ctrl_caps(const struct nvme_primary_ctrl_caps *caps)
+{
+ struct json_object *root;
+
+ root = json_create_object();
+
+ json_object_add_value_uint(root, "cntlid", le16_to_cpu(caps->cntlid));
+ json_object_add_value_uint(root, "portid", le16_to_cpu(caps->portid));
+ json_object_add_value_uint(root, "crt", caps->crt);
+
+ json_object_add_value_int(root, "vqfrt", le32_to_cpu(caps->vqfrt));
+ json_object_add_value_int(root, "vqrfa", le32_to_cpu(caps->vqrfa));
+ json_object_add_value_int(root, "vqrfap", le16_to_cpu(caps->vqrfap));
+ json_object_add_value_int(root, "vqprt", le16_to_cpu(caps->vqprt));
+ json_object_add_value_int(root, "vqfrsm", le16_to_cpu(caps->vqfrsm));
+ json_object_add_value_int(root, "vqgran", le16_to_cpu(caps->vqgran));
+
+ json_object_add_value_int(root, "vifrt", le32_to_cpu(caps->vifrt));
+ json_object_add_value_int(root, "virfa", le32_to_cpu(caps->virfa));
+ json_object_add_value_int(root, "virfap", le16_to_cpu(caps->virfap));
+ json_object_add_value_int(root, "viprt", le16_to_cpu(caps->viprt));
+ json_object_add_value_int(root, "vifrsm", le16_to_cpu(caps->vifrsm));
+ json_object_add_value_int(root, "vigran", le16_to_cpu(caps->vigran));
+
+ json_print_object(root, NULL);
+ printf("\n");
+ json_free_object(root);
+}
+
static void nvme_show_primary_ctrl_caps_crt(__u8 crt)
{
__u8 rsvd = (crt & 0xFC) >> 2;
if (flags & BINARY)
return d_raw((unsigned char *)caps, sizeof(*caps));
+ else if (flags & JSON)
+ return json_nvme_primary_ctrl_caps(caps);
printf("NVME Identify Primary Controller Capabilities:\n");
printf("cntlid : %#x\n", le16_to_cpu(caps->cntlid));
{
const char *desc = "Send an Identify Primary Controller Capabilities "\
"command to the given device and report the information in a "\
- "human-redable or binary format.";
- const char *raw = "show capabilities in binary format";
- const char *human_readable = "show capabilities in readable format";
-
- enum nvme_print_flags flags = NORMAL;
+ "decoded format (default), json or binary.";
struct nvme_primary_ctrl_caps caps;
+
int err, fd;
+ enum nvme_print_flags flags;
struct config {
- int raw_binary;
- int human_readable;
char *output_format;
};
};
OPT_ARGS(opts) = {
- OPT_FMT("output-format", 'o', &cfg.output_format, output_format),
- OPT_FLAG("raw-binary", 'b', &cfg.raw_binary, raw),
- OPT_FLAG("human-readable", 'H', &cfg.human_readable, human_readable),
+ OPT_FMT("output-format", 'o', &cfg.output_format, output_format),
OPT_END()
};
err = flags = validate_output_format(cfg.output_format);
if (flags < 0)
goto close_fd;
- if (cfg.raw_binary)
- flags = BINARY;
- if (cfg.human_readable)
- flags |= VERBOSE;
err = nvme_identify_primary_ctrl_caps(fd, &caps);
if (!err)