diff --git a/nvme-print-json.c b/nvme-print-json.c index 1b757e0ced..ae82a80125 100644 --- a/nvme-print-json.c +++ b/nvme-print-json.c @@ -197,9 +197,9 @@ static void json_id_iocs_iocsc(struct json_object *obj_iocsc, __u64 iocsc) obj_add_str(obj_iocsc, "NVM Command Set", nvmcs ? "Selected" : "Not selected"); } -static bool human(void) +static bool verbose_mode(void) { - return json_print_ops.flags & VERBOSE; + return json_print_ops.flags & VERBOSE || nvme_cfg.output_format_ver == 2; } static void json_id_iocs(struct nvme_id_iocs *iocs) @@ -699,7 +699,7 @@ static void json_smart_log(struct nvme_smart_log *smart, unsigned int nsid, nvme_uint128_t media_errors = le128_to_cpu(smart->media_errors); nvme_uint128_t num_err_log_entries = le128_to_cpu(smart->num_err_log_entries); - if (human()) { + if (verbose_mode()) { struct json_object *crt = json_create_object(); obj_add_int(crt, "value", smart->critical_warning); @@ -1357,7 +1357,7 @@ static void json_single_property(int offset, uint64_t value64) char json_str[STR_LEN]; uint32_t value32 = (uint32_t)value64; - if (human()) { + if (verbose_mode()) { json_single_property_human(offset, value64, r); } else { sprintf(json_str, "0x%02x", offset); @@ -2540,7 +2540,7 @@ static void json_print_nvme_subsystem_list(nvme_root_t r, bool show_ana) obj_add_str(subsystem_attrs, "Name", nvme_subsystem_get_name(s)); obj_add_str(subsystem_attrs, "NQN", nvme_subsystem_get_nqn(s)); - if (json_print_ops.flags & VERBOSE) { + if (verbose_mode()) { obj_add_str(subsystem_attrs, "Model", nvme_subsystem_get_model(s)); obj_add_str(subsystem_attrs, "Serial", @@ -2572,7 +2572,7 @@ static void json_ctrl_registers_cap(void *bar, struct json_object *r) { uint64_t cap = mmio_read64(bar + NVME_REG_CAP); - if (human()) + if (verbose_mode()) json_registers_cap((struct nvme_bar_cap *)&cap, obj_create_array_obj(r, "cap")); else obj_add_uint64(r, "cap", cap); @@ -2582,7 +2582,7 @@ static void json_ctrl_registers_vs(void *bar, struct json_object *r) { uint32_t vs = mmio_read32(bar + NVME_REG_VS); - if (human()) + if (verbose_mode()) json_registers_version(vs, obj_create_array_obj(r, "vs")); else obj_add_int(r, "vs", vs); @@ -2592,7 +2592,7 @@ static void json_ctrl_registers_intms(void *bar, struct json_object *r) { uint32_t intms = mmio_read32(bar + NVME_REG_INTMS); - if (human()) + if (verbose_mode()) json_registers_intms(intms, obj_create_array_obj(r, "intms")); else obj_add_int(r, "intms", intms); @@ -2602,7 +2602,7 @@ static void json_ctrl_registers_intmc(void *bar, struct json_object *r) { uint32_t intmc = mmio_read32(bar + NVME_REG_INTMC); - if (human()) + if (verbose_mode()) json_registers_intmc(intmc, obj_create_array_obj(r, "intmc")); else obj_add_int(r, "intmc", intmc); @@ -2612,7 +2612,7 @@ static void json_ctrl_registers_cc(void *bar, struct json_object *r) { uint32_t cc = mmio_read32(bar + NVME_REG_CC); - if (human()) + if (verbose_mode()) json_registers_cc(cc, obj_create_array_obj(r, "cc")); else obj_add_int(r, "cc", cc); @@ -2622,7 +2622,7 @@ static void json_ctrl_registers_csts(void *bar, struct json_object *r) { uint32_t csts = mmio_read32(bar + NVME_REG_CSTS); - if (human()) + if (verbose_mode()) json_registers_csts(csts, obj_create_array_obj(r, "csts")); else obj_add_int(r, "csts", csts); @@ -2632,7 +2632,7 @@ static void json_ctrl_registers_nssr(void *bar, struct json_object *r) { uint32_t nssr = mmio_read32(bar + NVME_REG_NSSR); - if (human()) + if (verbose_mode()) json_registers_nssr(nssr, obj_create_array_obj(r, "nssr")); else obj_add_int(r, "nssr", nssr); @@ -2642,7 +2642,7 @@ static void json_ctrl_registers_nssd(void *bar, struct json_object *r) { uint32_t nssd = mmio_read32(bar + NVME_REG_NSSD); - if (human()) + if (verbose_mode()) json_registers_nssd(nssd, obj_create_array_obj(r, "nssd")); else obj_add_int(r, "nssd", nssd); @@ -2652,7 +2652,7 @@ static void json_ctrl_registers_crto(void *bar, struct json_object *r) { uint32_t crto = mmio_read32(bar + NVME_REG_CRTO); - if (human()) + if (verbose_mode()) json_registers_crto(crto, obj_create_array_obj(r, "crto")); else obj_add_int(r, "crto", crto); @@ -2662,7 +2662,7 @@ static void json_ctrl_registers_aqa(void *bar, struct json_object *r) { uint32_t aqa = mmio_read32(bar + NVME_REG_AQA); - if (human()) + if (verbose_mode()) json_registers_aqa(aqa, obj_create_array_obj(r, "aqa")); else obj_add_int(r, "aqa", aqa); @@ -2672,7 +2672,7 @@ static void json_ctrl_registers_asq(void *bar, struct json_object *r) { uint64_t asq = mmio_read64(bar + NVME_REG_ASQ); - if (human()) + if (verbose_mode()) json_registers_asq(asq, obj_create_array_obj(r, "asq")); else obj_add_uint64(r, "asq", asq); @@ -2682,7 +2682,7 @@ static void json_ctrl_registers_acq(void *bar, struct json_object *r) { uint64_t acq = mmio_read64(bar + NVME_REG_ACQ); - if (human()) + if (verbose_mode()) json_registers_acq(acq, obj_create_array_obj(r, "acq")); else obj_add_uint64(r, "acq", acq); @@ -2694,7 +2694,7 @@ static void json_ctrl_registers_cmbloc(void *bar, struct json_object *r) uint32_t cmbsz; bool support; - if (human()) { + if (verbose_mode()) { cmbsz = mmio_read32(bar + NVME_REG_CMBSZ); support = nvme_registers_cmbloc_support(cmbsz); json_registers_cmbloc(cmbloc, support, obj_create_array_obj(r, "cmbloc")); @@ -2707,7 +2707,7 @@ static void json_ctrl_registers_cmbsz(void *bar, struct json_object *r) { uint32_t cmbsz = mmio_read32(bar + NVME_REG_CMBSZ); - if (human()) + if (verbose_mode()) json_registers_cmbsz(cmbsz, obj_create_array_obj(r, "cmbsz")); else obj_add_int(r, "cmbsz", cmbsz); @@ -2717,7 +2717,7 @@ static void json_ctrl_registers_bpinfo(void *bar, struct json_object *r) { uint32_t bpinfo = mmio_read32(bar + NVME_REG_BPINFO); - if (human()) + if (verbose_mode()) json_registers_bpinfo(bpinfo, obj_create_array_obj(r, "bpinfo")); else obj_add_int(r, "bpinfo", bpinfo); @@ -2727,7 +2727,7 @@ static void json_ctrl_registers_bprsel(void *bar, struct json_object *r) { uint32_t bprsel = mmio_read32(bar + NVME_REG_BPRSEL); - if (human()) + if (verbose_mode()) json_registers_bprsel(bprsel, obj_create_array_obj(r, "bprsel")); else obj_add_int(r, "bprsel", bprsel); @@ -2737,7 +2737,7 @@ static void json_ctrl_registers_bpmbl(void *bar, struct json_object *r) { uint64_t bpmbl = mmio_read64(bar + NVME_REG_BPMBL); - if (human()) + if (verbose_mode()) json_registers_bpmbl(bpmbl, obj_create_array_obj(r, "bpmbl")); else obj_add_uint64(r, "bpmbl", bpmbl); @@ -2747,7 +2747,7 @@ static void json_ctrl_registers_cmbmsc(void *bar, struct json_object *r) { uint64_t cmbmsc = mmio_read64(bar + NVME_REG_CMBMSC); - if (human()) + if (verbose_mode()) json_registers_cmbmsc(cmbmsc, obj_create_array_obj(r, "cmbmsc")); else obj_add_uint64(r, "cmbmsc", cmbmsc); @@ -2757,7 +2757,7 @@ static void json_ctrl_registers_cmbsts(void *bar, struct json_object *r) { uint32_t cmbsts = mmio_read32(bar + NVME_REG_CMBSTS); - if (human()) + if (verbose_mode()) json_registers_cmbsts(cmbsts, obj_create_array_obj(r, "cmbsts")); else obj_add_int(r, "cmbsts", cmbsts); @@ -2767,7 +2767,7 @@ static void json_ctrl_registers_cmbebs(void *bar, struct json_object *r) { uint32_t cmbebs = mmio_read32(bar + NVME_REG_CMBEBS); - if (human()) + if (verbose_mode()) json_registers_cmbebs(cmbebs, obj_create_array_obj(r, "cmbebs")); else obj_add_int(r, "cmbebs", cmbebs); @@ -2777,7 +2777,7 @@ static void json_ctrl_registers_cmbswtp(void *bar, struct json_object *r) { uint32_t cmbswtp = mmio_read32(bar + NVME_REG_CMBSWTP); - if (human()) + if (verbose_mode()) json_registers_cmbswtp(cmbswtp, obj_create_array_obj(r, "cmbswtp")); else obj_add_int(r, "cmbswtp", cmbswtp); @@ -2787,7 +2787,7 @@ static void json_ctrl_registers_pmrcap(void *bar, struct json_object *r) { uint32_t pmrcap = mmio_read32(bar + NVME_REG_PMRCAP); - if (human()) + if (verbose_mode()) json_registers_pmrcap(pmrcap, obj_create_array_obj(r, "pmrcap")); else obj_add_int(r, "pmrcap", pmrcap); @@ -2797,7 +2797,7 @@ static void json_ctrl_registers_pmrctl(void *bar, struct json_object *r) { uint32_t pmrctl = mmio_read32(bar + NVME_REG_PMRCTL); - if (human()) + if (verbose_mode()) json_registers_pmrctl(pmrctl, obj_create_array_obj(r, "pmrctl")); else obj_add_int(r, "pmrctl", pmrctl); @@ -2809,7 +2809,7 @@ static void json_ctrl_registers_pmrsts(void *bar, struct json_object *r) uint32_t pmrctl; bool ready; - if (human()) { + if (verbose_mode()) { pmrctl = mmio_read32(bar + NVME_REG_PMRCTL); ready = nvme_registers_pmrctl_ready(pmrctl); json_registers_pmrsts(pmrsts, ready, obj_create_array_obj(r, "pmrsts")); @@ -2822,7 +2822,7 @@ static void json_ctrl_registers_pmrebs(void *bar, struct json_object *r) { uint32_t pmrebs = mmio_read32(bar + NVME_REG_PMREBS); - if (human()) + if (verbose_mode()) json_registers_pmrebs(pmrebs, obj_create_array_obj(r, "pmrebs")); else obj_add_int(r, "pmrebs", pmrebs); @@ -2832,7 +2832,7 @@ static void json_ctrl_registers_pmrswtp(void *bar, struct json_object *r) { uint32_t pmrswtp = mmio_read32(bar + NVME_REG_PMRSWTP); - if (human()) + if (verbose_mode()) json_registers_pmrswtp(pmrswtp, obj_create_array_obj(r, "pmrswtp")); else obj_add_int(r, "pmrswtp", pmrswtp); @@ -2842,7 +2842,7 @@ static void json_ctrl_registers_pmrmscl(void *bar, struct json_object *r) { uint32_t pmrmscl = mmio_read32(bar + NVME_REG_PMRMSCL); - if (human()) + if (verbose_mode()) json_registers_pmrmscl(pmrmscl, obj_create_array_obj(r, "pmrmscl")); else obj_add_uint(r, "pmrmscl", pmrmscl); @@ -2852,7 +2852,7 @@ static void json_ctrl_registers_pmrmscu(void *bar, struct json_object *r) { uint32_t pmrmscu = mmio_read32(bar + NVME_REG_PMRMSCU); - if (human()) + if (verbose_mode()) json_registers_pmrmscu(pmrmscu, obj_create_array_obj(r, "pmrmscu")); else obj_add_uint(r, "pmrmscu", pmrmscu); @@ -2997,14 +2997,13 @@ static void json_ctrl_register_human(int offset, uint64_t value, struct json_obj static void json_ctrl_register(int offset, uint64_t value) { - bool human = json_print_ops.flags & VERBOSE; struct json_object *r; char json_str[STR_LEN]; sprintf(json_str, "register: %#04x", offset); r = obj_create(json_str); - if (human) { + if (verbose_mode()) { obj_add_uint64(r, nvme_register_to_string(offset), value); json_ctrl_register_human(offset, value, r); } else { @@ -3132,7 +3131,7 @@ static void json_nvme_id_ctrl_nvm(struct nvme_id_ctrl_nvm *ctrl_nvm) obj_add_uint(r, "wzdsl", ctrl_nvm->wzdsl); obj_add_uint(r, "aocs", le16_to_cpu(ctrl_nvm->aocs)); - if (json_print_ops.flags & VERBOSE) { + if (verbose_mode()) { __u16 rsvd = (ctrl_nvm->aocs & 0xfffe) >> 1; __u8 ralbas = ctrl_nvm->aocs & 0x1; @@ -4490,7 +4489,7 @@ static void json_list_item(nvme_ns_t n) static void json_print_list_items(nvme_root_t t) { - if (json_print_ops.flags & VERBOSE) + if (verbose_mode()) json_detail_list(t); else json_simple_list(t); @@ -4587,7 +4586,7 @@ static void json_simple_topology(nvme_root_t r) obj_add_str(subsystem_attrs, "Name", nvme_subsystem_get_name(s)); obj_add_str(subsystem_attrs, "NQN", nvme_subsystem_get_nqn(s)); - if (json_print_ops.flags & VERBOSE) { + if (verbose_mode()) { obj_add_str(subsystem_attrs, "Model", nvme_subsystem_get_model(s)); obj_add_str(subsystem_attrs, "Serial", @@ -4727,7 +4726,7 @@ static void json_directive_show(__u8 type, __u8 oper, __u16 spec, __u32 nsid, __ sprintf(json_str, "%#x", result); obj_add_result(r, json_str); - if (json_print_ops.flags & VERBOSE) { + if (verbose_mode()) { json_directive_show_fields(type, oper, result, buf, r); } else if (buf) { data = json_create_array(); diff --git a/nvme.c b/nvme.c index 4f86b94d10..f6b981ab1f 100644 --- a/nvme.c +++ b/nvme.c @@ -200,6 +200,7 @@ static const char *block_count = "number of blocks (zeroes based) on device to a static const char *crkey = "current reservation key"; static const char *csi = "command set identifier"; static const char *buf_len = "buffer len (if) data is sent or received"; +static const char *deprecated = "deprecated; does nothing"; static const char *domainid = "Domain Identifier"; static const char *doper = "directive operation"; static const char *dspec_w_dtype = "directive specification associated with directive type"; @@ -259,6 +260,7 @@ static const char *pmrmscu = "PMRMSCU=0xe18 register offset"; struct nvme_config nvme_cfg = { .output_format = "normal", + .output_format_ver = 1, }; static void *mmap_registers(struct nvme_dev *dev, bool writable); @@ -6911,7 +6913,7 @@ static int dir_send(int argc, char **argv, struct command *cmd, struct plugin *p OPT_SHRT("dir-spec", 'S', &cfg.dspec, dspec_w_dtype), OPT_BYTE("dir-oper", 'O', &cfg.doper, doper), OPT_SHRT("endir", 'e', &cfg.endir, endir), - OPT_FLAG("human-readable", 'H', &cfg.human_readable, human_readable_directive), + OPT_FLAG("human-readable", 'H', &cfg.human_readable, deprecated), OPT_FLAG("raw-binary", 'b', &cfg.raw_binary, raw_directive), OPT_FILE("input-file", 'i', &cfg.file, input)); diff --git a/nvme.h b/nvme.h index 6d14a2f3b7..3005803368 100644 --- a/nvme.h +++ b/nvme.h @@ -79,6 +79,7 @@ struct nvme_config { int verbose; __u32 timeout; bool dry_run; + unsigned int output_format_ver; }; /* @@ -92,6 +93,8 @@ struct nvme_config { ##__VA_ARGS__, \ OPT_UINT("timeout", 't', &nvme_cfg.timeout, timeout), \ OPT_FLAG("dry-run", 0, &nvme_cfg.dry_run, dry_run), \ + OPT_UINT("output-format-version", 0, &nvme_cfg.output_format_ver, \ + "output format version: 1|2"), \ OPT_END() \ }