summaryrefslogtreecommitdiff
path: root/usr/src/cmd/nvmeadm/nvmeadm_print.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/nvmeadm/nvmeadm_print.c')
-rw-r--r--usr/src/cmd/nvmeadm/nvmeadm_print.c47
1 files changed, 15 insertions, 32 deletions
diff --git a/usr/src/cmd/nvmeadm/nvmeadm_print.c b/usr/src/cmd/nvmeadm/nvmeadm_print.c
index 6a5da3d4e2..43c15925b2 100644
--- a/usr/src/cmd/nvmeadm/nvmeadm_print.c
+++ b/usr/src/cmd/nvmeadm/nvmeadm_print.c
@@ -10,10 +10,9 @@
*/
/*
- * Copyright 2016 Nexenta Systems, Inc.
- * Copyright 2019 Western Digital Corporation
* Copyright 2021 Oxide Computer Company
* Copyright 2022 OmniOS Community Edition (OmniOSce) Association.
+ * Copyright 2022 Tintri by DDN, Inc. All rights reserved.
*/
/*
@@ -1910,17 +1909,25 @@ nvme_print_health_log(nvme_health_log_t *hlog, nvme_identify_ctrl_t *idctl,
* This function pretty-prints the firmware slot information.
*/
void
-nvme_print_fwslot_log(nvme_fwslot_log_t *fwlog)
+nvme_print_fwslot_log(nvme_fwslot_log_t *fwlog, nvme_identify_ctrl_t *idctl)
{
int i;
+ char str[NVME_FWVER_SZ + sizeof (" (read-only)")];
+
nvme_print(0, "Firmware Slot Information", -1, NULL);
nvme_print_uint64(2, "Active Firmware Slot", fwlog->fw_afi, NULL, NULL);
if (fwlog->fw_next != 0)
nvme_print_uint64(2, "Next Firmware Slot", fwlog->fw_next,
NULL, NULL);
- for (i = 0; i != ARRAYSIZE(fwlog->fw_frs); i++) {
+
+ (void) snprintf(str, sizeof (str), "%.*s%s",
+ nvme_strlen(fwlog->fw_frs[0], sizeof (fwlog->fw_frs[0])),
+ fwlog->fw_frs[0], idctl->id_frmw.fw_readonly ? " (read-only)" : "");
+ nvme_print_str(2, "Firmware Revision for Slot", 1, str, sizeof (str));
+
+ for (i = 1; i < idctl->id_frmw.fw_nslot; i++) {
nvme_print_str(2, "Firmware Revision for Slot", i + 1,
fwlog->fw_frs[i][0] == '\0' ? "<Unused>" :
fwlog->fw_frs[i], sizeof (fwlog->fw_frs[i]));
@@ -2243,21 +2250,12 @@ nvme_print_feat_progress(uint64_t res, void *b, size_t s,
spm.b.spm_pbslc, NULL, NULL);
}
-static const char *
-nvme_str_generic_error(int sc)
+const char *
+nvme_fw_error(int err, int sc)
{
- switch (sc) {
- case NVME_CQE_SC_GEN_SUCCESS:
- return ("Success");
- default:
- return ("See message log (usually /var/adm/messages) "
- "for details");
- }
-}
+ if (sc == 0)
+ return (strerror(err));
-static const char *
-nvme_str_specific_error(int sc)
-{
switch (sc) {
case NVME_CQE_SC_SPC_INV_FW_SLOT:
return ("Invalid firmware slot");
@@ -2279,20 +2277,5 @@ nvme_str_specific_error(int sc)
return ("See message log (usually /var/adm/messages) "
"for details");
}
-}
-
-const char *
-nvme_str_error(int sct, int sc)
-{
- switch (sct) {
- case NVME_CQE_SCT_GENERIC:
- return (nvme_str_generic_error(sc));
- case NVME_CQE_SCT_SPECIFIC:
- return (nvme_str_specific_error(sc));
-
- default:
- return ("See message log (usually /var/adm/messages) "
- "for details");
- }
}