svn commit: r350947 - in stable/12: sbin/nvmecontrol sys/dev/nvme
Alexander Motin
mav at FreeBSD.org
Mon Aug 12 19:40:41 UTC 2019
Author: mav
Date: Mon Aug 12 19:40:40 2019
New Revision: 350947
URL: https://svnweb.freebsd.org/changeset/base/350947
Log:
MFC r350529, r350530: Add more new fields and values from NVMe 1.4.
Modified:
stable/12/sbin/nvmecontrol/logpage.c
stable/12/sys/dev/nvme/nvme.h
stable/12/sys/dev/nvme/nvme_qpair.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sbin/nvmecontrol/logpage.c
==============================================================================
--- stable/12/sbin/nvmecontrol/logpage.c Mon Aug 12 19:39:31 2019 (r350946)
+++ stable/12/sbin/nvmecontrol/logpage.c Mon Aug 12 19:40:40 2019 (r350947)
@@ -243,6 +243,9 @@ print_log_error(const struct nvme_controller_data *cda
printf(" LBA: %ju\n", entry->lba);
printf(" Namespace ID: %u\n", entry->nsid);
printf(" Vendor specific info: %u\n", entry->vendor_specific);
+ printf(" Transport type: %u\n", entry->trtype);
+ printf(" Command specific info:%ju\n", entry->csi);
+ printf(" Transport specific: %u\n", entry->ttsi);
}
}
@@ -315,6 +318,10 @@ print_log_health(const struct nvme_controller_data *cd
printf("Temperature Sensor %d: ", i + 1);
print_temp(health->temp_sensor[i]);
}
+ printf("Temperature 1 Transition Count: %d\n", health->tmt1tc);
+ printf("Temperature 2 Transition Count: %d\n", health->tmt2tc);
+ printf("Total Time For Temperature 1: %d\n", health->ttftmt1);
+ printf("Total Time For Temperature 2: %d\n", health->ttftmt2);
}
static void
Modified: stable/12/sys/dev/nvme/nvme.h
==============================================================================
--- stable/12/sys/dev/nvme/nvme.h Mon Aug 12 19:39:31 2019 (r350946)
+++ stable/12/sys/dev/nvme/nvme.h Mon Aug 12 19:40:40 2019 (r350947)
@@ -600,6 +600,9 @@ enum nvme_generic_command_status_code {
NVME_SC_SANITIZE_IN_PROGRESS = 0x1d,
NVME_SC_SGL_DATA_BLOCK_GRAN_INVALID = 0x1e,
NVME_SC_NOT_SUPPORTED_IN_CMB = 0x1f,
+ NVME_SC_NAMESPACE_IS_WRITE_PROTECTED = 0x20,
+ NVME_SC_COMMAND_INTERRUPTED = 0x21,
+ NVME_SC_TRANSIENT_TRANSPORT_ERROR = 0x22,
NVME_SC_LBA_OUT_OF_RANGE = 0x80,
NVME_SC_CAPACITY_EXCEEDED = 0x81,
@@ -645,6 +648,9 @@ enum nvme_command_specific_status_code {
NVME_SC_INVALID_SEC_CTRLR_STATE = 0x20,
NVME_SC_INVALID_NUM_OF_CTRLR_RESRC = 0x21,
NVME_SC_INVALID_RESOURCE_ID = 0x22,
+ NVME_SC_SANITIZE_PROHIBITED_WPMRE = 0x23,
+ NVME_SC_ANA_GROUP_ID_INVALID = 0x24,
+ NVME_SC_ANA_ATTACH_FAILED = 0x25,
NVME_SC_CONFLICTING_ATTRIBUTES = 0x80,
NVME_SC_INVALID_PROTECTION_INFO = 0x81,
@@ -682,20 +688,27 @@ enum nvme_admin_opcode {
/* 0x0e-0x0f - reserved */
NVME_OPC_FIRMWARE_ACTIVATE = 0x10,
NVME_OPC_FIRMWARE_IMAGE_DOWNLOAD = 0x11,
+ /* 0x12-0x13 - reserved */
NVME_OPC_DEVICE_SELF_TEST = 0x14,
NVME_OPC_NAMESPACE_ATTACHMENT = 0x15,
+ /* 0x16-0x17 - reserved */
NVME_OPC_KEEP_ALIVE = 0x18,
NVME_OPC_DIRECTIVE_SEND = 0x19,
NVME_OPC_DIRECTIVE_RECEIVE = 0x1a,
+ /* 0x1b - reserved */
NVME_OPC_VIRTUALIZATION_MANAGEMENT = 0x1c,
NVME_OPC_NVME_MI_SEND = 0x1d,
NVME_OPC_NVME_MI_RECEIVE = 0x1e,
+ /* 0x1f-0x7b - reserved */
NVME_OPC_DOORBELL_BUFFER_CONFIG = 0x7c,
NVME_OPC_FORMAT_NVM = 0x80,
NVME_OPC_SECURITY_SEND = 0x81,
NVME_OPC_SECURITY_RECEIVE = 0x82,
+ /* 0x83 - reserved */
NVME_OPC_SANITIZE = 0x84,
+ /* 0x85 - reserved */
+ NVME_OPC_GET_LBA_STATUS = 0x86,
};
/* nvme nvm opcodes */
@@ -706,11 +719,11 @@ enum nvme_nvm_opcode {
/* 0x03 - reserved */
NVME_OPC_WRITE_UNCORRECTABLE = 0x04,
NVME_OPC_COMPARE = 0x05,
- /* 0x06 - reserved */
+ /* 0x06-0x07 - reserved */
NVME_OPC_WRITE_ZEROES = 0x08,
- /* 0x07 - reserved */
NVME_OPC_DATASET_MANAGEMENT = 0x09,
- /* 0x0a-0x0c - reserved */
+ /* 0x0a-0x0b - reserved */
+ NVME_OPC_VERIFY = 0x0c,
NVME_OPC_RESERVATION_REGISTER = 0x0d,
NVME_OPC_RESERVATION_REPORT = 0x0e,
/* 0x0f-0x10 - reserved */
@@ -738,10 +751,21 @@ enum nvme_feature {
NVME_FEAT_KEEP_ALIVE_TIMER = 0x0F,
NVME_FEAT_HOST_CONTROLLED_THERMAL_MGMT = 0x10,
NVME_FEAT_NON_OP_POWER_STATE_CONFIG = 0x11,
- /* 0x12-0x77 - reserved */
+ NVME_FEAT_READ_RECOVERY_LEVEL_CONFIG = 0x12,
+ NVME_FEAT_PREDICTABLE_LATENCY_MODE_CONFIG = 0x13,
+ NVME_FEAT_PREDICTABLE_LATENCY_MODE_WINDOW = 0x14,
+ NVME_FEAT_LBA_STATUS_INFORMATION_ATTRIBUTES = 0x15,
+ NVME_FEAT_HOST_BEHAVIOR_SUPPORT = 0x16,
+ NVME_FEAT_SANITIZE_CONFIG = 0x17,
+ NVME_FEAT_ENDURANCE_GROUP_EVENT_CONFIGURATION = 0x18,
+ /* 0x19-0x77 - reserved */
/* 0x78-0x7f - NVMe Management Interface */
NVME_FEAT_SOFTWARE_PROGRESS_MARKER = 0x80,
- /* 0x81-0xBF - command set specific (reserved) */
+ NVME_FEAT_HOST_IDENTIFIER = 0x81,
+ NVME_FEAT_RESERVATION_NOTIFICATION_MASK = 0x82,
+ NVME_FEAT_RESERVATION_PERSISTENCE = 0x83,
+ NVME_FEAT_NAMESPACE_WRITE_PROTECTION_CONFIG = 0x84,
+ /* 0x85-0xBF - command set specific (reserved) */
/* 0xC0-0xFF - vendor specific */
};
@@ -1154,9 +1178,21 @@ enum nvme_log_page {
NVME_LOG_FIRMWARE_SLOT = 0x03,
NVME_LOG_CHANGED_NAMESPACE = 0x04,
NVME_LOG_COMMAND_EFFECT = 0x05,
+ NVME_LOG_DEVICE_SELF_TEST = 0x06,
+ NVME_LOG_TELEMETRY_HOST_INITIATED = 0x07,
+ NVME_LOG_TELEMETRY_CONTROLLER_INITIATED = 0x08,
+ NVME_LOG_ENDURANCE_GROUP_INFORMATION = 0x09,
+ NVME_LOG_PREDICTABLE_LATENCY_PER_NVM_SET = 0x0a,
+ NVME_LOG_PREDICTABLE_LATENCY_EVENT_AGGREGATE = 0x0b,
+ NVME_LOG_ASYMMETRIC_NAMESPAVE_ACCESS = 0x0c,
+ NVME_LOG_PERSISTENT_EVENT_LOG = 0x0d,
+ NVME_LOG_LBA_STATUS_INFORMATION = 0x0e,
+ NVME_LOG_ENDURANCE_GROUP_EVENT_AGGREGATE = 0x0f,
/* 0x06-0x7F - reserved */
/* 0x80-0xBF - I/O command set specific */
NVME_LOG_RES_NOTIFICATION = 0x80,
+ NVME_LOG_SANITIZE_STATUS = 0x81,
+ /* 0x82-0xBF - reserved */
/* 0xC0-0xFF - vendor specific */
/*
@@ -1185,7 +1221,11 @@ struct nvme_error_information_entry {
uint64_t lba;
uint32_t nsid;
uint8_t vendor_specific;
- uint8_t reserved[35];
+ uint8_t trtype;
+ uint16_t reserved30;
+ uint64_t csi;
+ uint16_t ttsi;
+ uint8_t reserved[22];
} __packed __aligned(4);
_Static_assert(sizeof(struct nvme_error_information_entry) == 64, "bad size for nvme_error_information_entry");
@@ -1221,8 +1261,16 @@ struct nvme_health_information_page {
uint32_t warning_temp_time;
uint32_t error_temp_time;
uint16_t temp_sensor[8];
+ /* Thermal Management Temperature 1 Transition Count */
+ uint32_t tmt1tc;
+ /* Thermal Management Temperature 2 Transition Count */
+ uint32_t tmt2tc;
+ /* Total Time For Thermal Management Temperature 1 */
+ uint32_t ttftmt1;
+ /* Total Time For Thermal Management Temperature 2 */
+ uint32_t ttftmt2;
- uint8_t reserved2[296];
+ uint8_t reserved2[280];
} __packed __aligned(4);
_Static_assert(sizeof(struct nvme_health_information_page) == 512, "bad size for nvme_health_information_page");
@@ -1604,6 +1652,8 @@ void nvme_error_information_entry_swapbytes(struct nvm
s->error_location = le16toh(s->error_location);
s->lba = le64toh(s->lba);
s->nsid = le32toh(s->nsid);
+ s->csi = le64toh(s->csi);
+ s->ttsi = le16toh(s->ttsi);
}
static inline
@@ -1644,6 +1694,10 @@ void nvme_health_information_page_swapbytes(struct nvm
s->error_temp_time = le32toh(s->error_temp_time);
for (i = 0; i < 8; i++)
s->temp_sensor[i] = le16toh(s->temp_sensor[i]);
+ s->tmt1tc = le32toh(s->tmt1tc);
+ s->tmt2tc = le32toh(s->tmt2tc);
+ s->ttftmt1 = le32toh(s->ttftmt1);
+ s->ttftmt2 = le32toh(s->ttftmt2);
}
Modified: stable/12/sys/dev/nvme/nvme_qpair.c
==============================================================================
--- stable/12/sys/dev/nvme/nvme_qpair.c Mon Aug 12 19:39:31 2019 (r350946)
+++ stable/12/sys/dev/nvme/nvme_qpair.c Mon Aug 12 19:40:40 2019 (r350947)
@@ -77,6 +77,7 @@ static struct nvme_opcode_string admin_opcode[] = {
{ NVME_OPC_SECURITY_SEND, "SECURITY SEND" },
{ NVME_OPC_SECURITY_RECEIVE, "SECURITY RECEIVE" },
{ NVME_OPC_SANITIZE, "SANITIZE" },
+ { NVME_OPC_GET_LBA_STATUS, "GET LBA STATUS" },
{ 0xFFFF, "ADMIN COMMAND" }
};
@@ -88,6 +89,7 @@ static struct nvme_opcode_string io_opcode[] = {
{ NVME_OPC_COMPARE, "COMPARE" },
{ NVME_OPC_WRITE_ZEROES, "WRITE ZEROES" },
{ NVME_OPC_DATASET_MANAGEMENT, "DATASET MANAGEMENT" },
+ { NVME_OPC_VERIFY, "VERIFY" },
{ NVME_OPC_RESERVATION_REGISTER, "RESERVATION REGISTER" },
{ NVME_OPC_RESERVATION_REPORT, "RESERVATION REPORT" },
{ NVME_OPC_RESERVATION_ACQUIRE, "RESERVATION ACQUIRE" },
@@ -148,6 +150,7 @@ nvme_io_qpair_print_command(struct nvme_qpair *qpair,
case NVME_OPC_WRITE_UNCORRECTABLE:
case NVME_OPC_COMPARE:
case NVME_OPC_WRITE_ZEROES:
+ case NVME_OPC_VERIFY:
nvme_printf(qpair->ctrlr, "%s sqid:%d cid:%d nsid:%d "
"lba:%llu len:%d\n",
get_io_opcode_string(cmd->opc), qpair->id, cmd->cid, le32toh(cmd->nsid),
@@ -228,6 +231,9 @@ static struct nvme_status_string generic_status[] = {
{ NVME_SC_SANITIZE_IN_PROGRESS, "SANITIZE IN PROGRESS" },
{ NVME_SC_SGL_DATA_BLOCK_GRAN_INVALID, "SGL_DATA_BLOCK_GRANULARITY_INVALID" },
{ NVME_SC_NOT_SUPPORTED_IN_CMB, "COMMAND NOT SUPPORTED FOR QUEUE IN CMB" },
+ { NVME_SC_NAMESPACE_IS_WRITE_PROTECTED, "NAMESPACE IS WRITE PROTECTED" },
+ { NVME_SC_COMMAND_INTERRUPTED, "COMMAND INTERRUPTED" },
+ { NVME_SC_TRANSIENT_TRANSPORT_ERROR, "TRANSIENT TRANSPORT ERROR" },
{ NVME_SC_LBA_OUT_OF_RANGE, "LBA OUT OF RANGE" },
{ NVME_SC_CAPACITY_EXCEEDED, "CAPACITY EXCEEDED" },
@@ -271,6 +277,9 @@ static struct nvme_status_string command_specific_stat
{ NVME_SC_INVALID_SEC_CTRLR_STATE, "INVALID SECONDARY CONTROLLER STATE" },
{ NVME_SC_INVALID_NUM_OF_CTRLR_RESRC, "INVALID NUMBER OF CONTROLLER RESOURCES" },
{ NVME_SC_INVALID_RESOURCE_ID, "INVALID RESOURCE IDENTIFIER" },
+ { NVME_SC_SANITIZE_PROHIBITED_WPMRE, "SANITIZE PROHIBITED WRITE PERSISTENT MEMORY REGION ENABLED" },
+ { NVME_SC_ANA_GROUP_ID_INVALID, "ANA GROUP IDENTIFIED INVALID" },
+ { NVME_SC_ANA_ATTACH_FAILED, "ANA ATTACH FAILED" },
{ NVME_SC_CONFLICTING_ATTRIBUTES, "CONFLICTING ATTRIBUTES" },
{ NVME_SC_INVALID_PROTECTION_INFO, "INVALID PROTECTION INFO" },
More information about the svn-src-stable-12
mailing list