From a464f1394ec16790af92adc9fc6d19806d7c988b Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Wed, 6 Jul 2016 14:55:28 -0700 Subject: [PATCH] nvme: add API to get CAP and VS registers This is intended to be used for examples/nvme/identify and similar diagnostic utilities. Change-Id: Ib2f941e9af7a3fb7555865ef253742e30ccad2b5 Signed-off-by: Daniel Verkamp --- include/spdk/nvme.h | 10 ++++++++++ lib/nvme/nvme_ctrlr.c | 16 ++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/include/spdk/nvme.h b/include/spdk/nvme.h index 57b2fb0ad..3f0574061 100644 --- a/include/spdk/nvme.h +++ b/include/spdk/nvme.h @@ -163,6 +163,16 @@ int spdk_nvme_ctrlr_reset(struct spdk_nvme_ctrlr *ctrlr); */ const struct spdk_nvme_ctrlr_data *spdk_nvme_ctrlr_get_data(struct spdk_nvme_ctrlr *ctrlr); +/** + * \brief Get the NVMe controller CAP (Capabilities) register. + */ +union spdk_nvme_cap_register spdk_nvme_ctrlr_get_regs_cap(struct spdk_nvme_ctrlr *ctrlr); + +/** + * \brief Get the NVMe controller VS (Version) register. + */ +union spdk_nvme_vs_register spdk_nvme_ctrlr_get_regs_vs(struct spdk_nvme_ctrlr *ctrlr); + /** * \brief Get the number of namespaces for the given NVMe controller. * diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index 381c46597..7b458fcf0 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -1175,6 +1175,22 @@ spdk_nvme_ctrlr_get_data(struct spdk_nvme_ctrlr *ctrlr) return &ctrlr->cdata; } +union spdk_nvme_cap_register spdk_nvme_ctrlr_get_regs_cap(struct spdk_nvme_ctrlr *ctrlr) +{ + union spdk_nvme_cap_register cap; + + cap.raw = nvme_mmio_read_8(ctrlr, cap.raw); + return cap; +} + +union spdk_nvme_vs_register spdk_nvme_ctrlr_get_regs_vs(struct spdk_nvme_ctrlr *ctrlr) +{ + union spdk_nvme_vs_register vs; + + vs.raw = nvme_mmio_read_4(ctrlr, vs.raw); + return vs; +} + uint32_t spdk_nvme_ctrlr_get_num_ns(struct spdk_nvme_ctrlr *ctrlr) {