From: Keith Busch Date: Tue, 10 May 2016 23:46:56 +0000 (-0600) Subject: Add all error codes from 1.2 spec X-Git-Tag: v0.7~7 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=bf40862dc7116e1e74b2a706bb698f548877295d;p=users%2Fsagi%2Fnvme-cli.git Add all error codes from 1.2 spec This adds enums and prints for all error codes. Since the names are getting longer, all the prints have white space code shift to align the same. Signed-off-by: Keith Busch --- diff --git a/linux/nvme.h b/linux/nvme.h index 865e3e3b..e2546d49 100644 --- a/linux/nvme.h +++ b/linux/nvme.h @@ -434,12 +434,23 @@ enum { NVME_SC_INVALID_VECTOR = 0x108, NVME_SC_INVALID_LOG_PAGE = 0x109, NVME_SC_INVALID_FORMAT = 0x10a, - NVME_SC_FIRMWARE_NEEDS_RESET = 0x10b, + NVME_SC_FW_NEEDS_CONV_RESET = 0x10b, NVME_SC_INVALID_QUEUE = 0x10c, NVME_SC_FEATURE_NOT_SAVEABLE = 0x10d, NVME_SC_FEATURE_NOT_CHANGEABLE = 0x10e, NVME_SC_FEATURE_NOT_PER_NS = 0x10f, - NVME_SC_FW_NEEDS_RESET_SUBSYS = 0x110, + NVME_SC_FW_NEEDS_SUBSYS_RESET = 0x110, + NVME_SC_FW_NEEDS_RESET = 0x111, + NVME_SC_FW_NEEDS_MAX_TIME = 0x112, + NVME_SC_FW_ACIVATE_PROHIBITED = 0x113, + NVME_SC_OVERLAPPING_RANGE = 0x114, + NVME_SC_NS_INSUFFICENT_CAP = 0x115, + NVME_SC_NS_ID_UNAVAILABLE = 0x116, + NVME_SC_NS_ALREADY_ATTACHED = 0x118, + NVME_SC_NS_IS_PRIVATE = 0x119, + NVME_SC_NS_NOT_ATTACHED = 0x11a, + NVME_SC_THIN_PROV_NOT_SUPP = 0x11b, + NVME_SC_CTRL_LIST_INVALID = 0x11c, NVME_SC_BAD_ATTRIBUTES = 0x180, NVME_SC_INVALID_PI = 0x181, NVME_SC_READ_ONLY = 0x182, @@ -450,6 +461,7 @@ enum { NVME_SC_REFTAG_CHECK = 0x284, NVME_SC_COMPARE_FAILED = 0x285, NVME_SC_ACCESS_DENIED = 0x286, + NVME_SC_UNWRITTEN_BLOCK = 0x287, NVME_SC_DNR = 0x4000, }; diff --git a/nvme-print.c b/nvme-print.c index e2421802..646f1daa 100644 --- a/nvme-print.c +++ b/nvme-print.c @@ -870,42 +870,60 @@ char* nvme_select_to_string(int sel) char *nvme_status_to_string(__u32 status) { switch (status & 0x3ff) { - case NVME_SC_SUCCESS: return "SUCCESS"; - case NVME_SC_INVALID_OPCODE: return "INVALID_OPCODE"; - case NVME_SC_INVALID_FIELD: return "INVALID_FIELD"; - case NVME_SC_CMDID_CONFLICT: return "CMDID_CONFLICT"; - case NVME_SC_DATA_XFER_ERROR: return "DATA_XFER_ERROR"; - case NVME_SC_POWER_LOSS: return "POWER_LOSS"; - case NVME_SC_INTERNAL: return "INTERNAL"; - case NVME_SC_ABORT_REQ: return "ABORT_REQ"; - case NVME_SC_ABORT_QUEUE: return "ABORT_QUEUE"; - case NVME_SC_FUSED_FAIL: return "FUSED_FAIL"; - case NVME_SC_FUSED_MISSING: return "FUSED_MISSING"; - case NVME_SC_INVALID_NS: return "INVALID_NS"; - case NVME_SC_CMD_SEQ_ERROR: return "CMD_SEQ_ERROR"; - case NVME_SC_LBA_RANGE: return "LBA_RANGE"; - case NVME_SC_CAP_EXCEEDED: return "CAP_EXCEEDED"; - case NVME_SC_NS_NOT_READY: return "NS_NOT_READY"; - case NVME_SC_CQ_INVALID: return "CQ_INVALID"; - case NVME_SC_QID_INVALID: return "QID_INVALID"; - case NVME_SC_QUEUE_SIZE: return "QUEUE_SIZE"; - case NVME_SC_ABORT_LIMIT: return "ABORT_LIMIT"; - case NVME_SC_ABORT_MISSING: return "ABORT_MISSING"; - case NVME_SC_ASYNC_LIMIT: return "ASYNC_LIMIT"; - case NVME_SC_FIRMWARE_SLOT: return "FIRMWARE_SLOT"; - case NVME_SC_FIRMWARE_IMAGE: return "FIRMWARE_IMAGE"; - case NVME_SC_INVALID_VECTOR: return "INVALID_VECTOR"; - case NVME_SC_INVALID_LOG_PAGE: return "INVALID_LOG_PAGE"; - case NVME_SC_INVALID_FORMAT: return "INVALID_FORMAT"; - case NVME_SC_BAD_ATTRIBUTES: return "BAD_ATTRIBUTES"; - case NVME_SC_WRITE_FAULT: return "WRITE_FAULT"; - case NVME_SC_READ_ERROR: return "READ_ERROR"; - case NVME_SC_GUARD_CHECK: return "GUARD_CHECK"; - case NVME_SC_APPTAG_CHECK: return "APPTAG_CHECK"; - case NVME_SC_REFTAG_CHECK: return "REFTAG_CHECK"; - case NVME_SC_COMPARE_FAILED: return "COMPARE_FAILED"; - case NVME_SC_ACCESS_DENIED: return "ACCESS_DENIED"; - default: return "Unknown"; + case NVME_SC_SUCCESS: return "SUCCESS"; + case NVME_SC_INVALID_OPCODE: return "INVALID_OPCODE"; + case NVME_SC_INVALID_FIELD: return "INVALID_FIELD"; + case NVME_SC_CMDID_CONFLICT: return "CMDID_CONFLICT"; + case NVME_SC_DATA_XFER_ERROR: return "DATA_XFER_ERROR"; + case NVME_SC_POWER_LOSS: return "POWER_LOSS"; + case NVME_SC_INTERNAL: return "INTERNAL"; + case NVME_SC_ABORT_REQ: return "ABORT_REQ"; + case NVME_SC_ABORT_QUEUE: return "ABORT_QUEUE"; + case NVME_SC_FUSED_FAIL: return "FUSED_FAIL"; + case NVME_SC_FUSED_MISSING: return "FUSED_MISSING"; + case NVME_SC_INVALID_NS: return "INVALID_NS"; + case NVME_SC_CMD_SEQ_ERROR: return "CMD_SEQ_ERROR"; + case NVME_SC_LBA_RANGE: return "LBA_RANGE"; + case NVME_SC_CAP_EXCEEDED: return "CAP_EXCEEDED"; + case NVME_SC_NS_NOT_READY: return "NS_NOT_READY"; + case NVME_SC_CQ_INVALID: return "CQ_INVALID"; + case NVME_SC_QID_INVALID: return "QID_INVALID"; + case NVME_SC_QUEUE_SIZE: return "QUEUE_SIZE"; + case NVME_SC_ABORT_LIMIT: return "ABORT_LIMIT"; + case NVME_SC_ABORT_MISSING: return "ABORT_MISSING"; + case NVME_SC_ASYNC_LIMIT: return "ASYNC_LIMIT"; + case NVME_SC_FIRMWARE_SLOT: return "FIRMWARE_SLOT"; + case NVME_SC_FIRMWARE_IMAGE: return "FIRMWARE_IMAGE"; + case NVME_SC_INVALID_VECTOR: return "INVALID_VECTOR"; + case NVME_SC_INVALID_LOG_PAGE: return "INVALID_LOG_PAGE"; + case NVME_SC_INVALID_FORMAT: return "INVALID_FORMAT"; + case NVME_SC_FW_NEEDS_CONV_RESET: return "FW_NEEDS_CONVENTIONAL_RESET"; + case NVME_SC_INVALID_QUEUE: return "INVALID_QUEUE"; + case NVME_SC_FEATURE_NOT_SAVEABLE: return "FEATURE_NOT_SAVEABLE"; + case NVME_SC_FEATURE_NOT_CHANGEABLE: return "FEATURE_NOT_CHANGEABLE"; + case NVME_SC_FEATURE_NOT_PER_NS: return "FEATURE_NOT_PER_NS"; + case NVME_SC_FW_NEEDS_SUBSYS_RESET: return "FW_NEEDS_SUBSYSTEM_RESET"; + case NVME_SC_FW_NEEDS_RESET: return "FW_NEEDS_RESET"; + case NVME_SC_FW_NEEDS_MAX_TIME: return "FW_NEEDS_MAX_TIME_VIOLATION"; + case NVME_SC_FW_ACIVATE_PROHIBITED: return "FW_ACTIVATION_PROHIBITED"; + case NVME_SC_OVERLAPPING_RANGE: return "OVERLAPPING_RANGE"; + case NVME_SC_NS_INSUFFICENT_CAP: return "NS_INSUFFICIENT_CAPACITY"; + case NVME_SC_NS_ID_UNAVAILABLE: return "NS_ID_UNAVAILABLE"; + case NVME_SC_NS_ALREADY_ATTACHED: return "NS_ALREADY_ATTACHED"; + case NVME_SC_NS_IS_PRIVATE: return "NS_IS_PRIVATE"; + case NVME_SC_NS_NOT_ATTACHED: return "NS_NOT_ATTACHED"; + case NVME_SC_THIN_PROV_NOT_SUPP: return "THIN_PROVISIONING_NOT_SUPPORTED"; + case NVME_SC_CTRL_LIST_INVALID: return "CONTROLLER_LIST_INVALID"; + case NVME_SC_BAD_ATTRIBUTES: return "BAD_ATTRIBUTES"; + case NVME_SC_WRITE_FAULT: return "WRITE_FAULT"; + case NVME_SC_READ_ERROR: return "READ_ERROR"; + case NVME_SC_GUARD_CHECK: return "GUARD_CHECK"; + case NVME_SC_APPTAG_CHECK: return "APPTAG_CHECK"; + case NVME_SC_REFTAG_CHECK: return "REFTAG_CHECK"; + case NVME_SC_COMPARE_FAILED: return "COMPARE_FAILED"; + case NVME_SC_ACCESS_DENIED: return "ACCESS_DENIED"; + case NVME_SC_UNWRITTEN_BLOCK: return "UNWRITTEN_BLOCK"; + default: return "Unknown"; } } diff --git a/nvme.c b/nvme.c index 5f5f1b5d..665299b2 100644 --- a/nvme.c +++ b/nvme.c @@ -1200,7 +1200,7 @@ static int fw_activate(int argc, char **argv) if (err < 0) perror("fw-activate"); else if (err != 0) - if (err == NVME_SC_FIRMWARE_NEEDS_RESET) + if (err == NVME_SC_FW_NEEDS_CONV_RESET) printf("Success activating firmware action:%d slot:%d, but a conventional reset is required\n", cfg.action, cfg.slot); else