diff --git a/examples/nvme/identify/identify.c b/examples/nvme/identify/identify.c index 5682a7e64..6f2e4bf36 100644 --- a/examples/nvme/identify/identify.c +++ b/examples/nvme/identify/identify.c @@ -888,15 +888,51 @@ print_zns_ns_data(const struct spdk_nvme_zns_ns_data *nsdata_zns) if (nsdata_zns->rrl == 0) { printf("Reset Recommended Limit: Not Reported\n"); } else { - printf("Reset Recommended Limit: %"PRIu32"\n", + printf("Reset Recommended Limit: %"PRIu32" seconds\n", nsdata_zns->rrl); } + if (nsdata_zns->rrl1 == 0) { + printf("Reset Recommended Limit 1: Not Reported\n"); + } else { + printf("Reset Recommended Limit 1: %"PRIu32" seconds\n", + nsdata_zns->rrl1); + } + if (nsdata_zns->rrl2 == 0) { + printf("Reset Recommended Limit 2: Not Reported\n"); + } else { + printf("Reset Recommended Limit 2: %"PRIu32" seconds\n", + nsdata_zns->rrl2); + } + if (nsdata_zns->rrl3 == 0) { + printf("Reset Recommended Limit 3: Not Reported\n"); + } else { + printf("Reset Recommended Limit 3: %"PRIu32" seconds\n", + nsdata_zns->rrl3); + } if (nsdata_zns->frl == 0) { printf("Finish Recommended Limit: Not Reported\n"); } else { - printf("Finish Recommended Limit: %"PRIu32"\n", + printf("Finish Recommended Limit: %"PRIu32" seconds\n", nsdata_zns->frl); } + if (nsdata_zns->frl1 == 0) { + printf("Finish Recommended Limit 1: Not Reported\n"); + } else { + printf("Finish Recommended Limit 1: %"PRIu32" seconds\n", + nsdata_zns->frl1); + } + if (nsdata_zns->frl2 == 0) { + printf("Finish Recommended Limit 2: Not Reported\n"); + } else { + printf("Finish Recommended Limit 2: %"PRIu32" seconds\n", + nsdata_zns->frl2); + } + if (nsdata_zns->frl3 == 0) { + printf("Finish Recommended Limit 3: Not Reported\n"); + } else { + printf("Finish Recommended Limit 3: %"PRIu32" seconds\n", + nsdata_zns->frl3); + } printf("\n"); } @@ -1054,6 +1090,17 @@ print_namespace(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_ns *ns) printf("ANA group ID: %u\n", nsdata->anagrpid); } + printf("Namespace Write Protected: %s\n", + nsdata->nsattr.write_protected ? "Yes" : "No"); + + if (cdata->ctratt.nvm_sets) { + printf("NVM set ID: %u\n", nsdata->nvmsetid); + } + + if (cdata->ctratt.endurance_groups) { + printf("Endurance group ID: %u\n", nsdata->endgid); + } + printf("Number of LBA Formats: %d\n", nsdata->nlbaf + 1); printf("Current LBA Format: LBA Format #%02d\n", nsdata->flbas.format); diff --git a/include/spdk/nvme_spec.h b/include/spdk/nvme_spec.h index 0d53749ca..62694946a 100644 --- a/include/spdk/nvme_spec.h +++ b/include/spdk/nvme_spec.h @@ -2734,12 +2734,25 @@ struct spdk_nvme_ns_data { /** Maximum Source Range Count */ uint8_t msrc; - uint8_t reserved64[11]; + uint8_t reserved81[11]; /** ANA group identifier */ uint32_t anagrpid; - uint8_t reserved96[8]; + uint8_t reserved96[3]; + + /** namespace attributes */ + struct { + /** Namespace write protected */ + uint8_t write_protected : 1; + uint8_t reserved : 7; + } nsattr; + + /** NVM Set Identifier */ + uint16_t nvmsetid; + + /** Endurance group identifier */ + uint16_t endgid; /** namespace globally unique identifier */ uint8_t nguid[16]; @@ -2793,7 +2806,25 @@ struct spdk_nvme_zns_ns_data { /** finish recommended limit */ uint32_t frl; - uint8_t reserved20[2796]; + /** reset recommended limit 1 */ + uint32_t rrl1; + + /** reset recommended limit 2 */ + uint32_t rrl2; + + /** reset recommended limit 3 */ + uint32_t rrl3; + + /** finish recommended limit 1 */ + uint32_t frl1; + + /** finish recommended limit 2 */ + uint32_t frl2; + + /** finish recommended limit 3 */ + uint32_t frl3; + + uint8_t reserved44[2772]; /** zns lba format extension support */ struct {