summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/dev/nvme/nvme.h12
-rw-r--r--sys/dev/nvme/nvme_ctrlr_cmd.c10
-rw-r--r--sys/dev/nvme/nvme_private.h4
3 files changed, 26 insertions, 0 deletions
diff --git a/sys/dev/nvme/nvme.h b/sys/dev/nvme/nvme.h
index 6983e12..d78ca40 100644
--- a/sys/dev/nvme/nvme.h
+++ b/sys/dev/nvme/nvme.h
@@ -682,6 +682,18 @@ struct nvme_health_information_page {
uint8_t reserved2[320];
} __packed __aligned(4);
+struct nvme_firmware_page {
+
+ struct {
+ uint8_t slot : 3; /* slot for current FW */
+ uint8_t reserved : 5;
+ } __packed afi;
+
+ uint8_t reserved[7];
+ uint64_t revision[7]; /* revisions for 7 slots */
+ uint8_t reserved2[448];
+} __packed __aligned(4);
+
#define NVME_TEST_MAX_THREADS 128
struct nvme_io_test {
diff --git a/sys/dev/nvme/nvme_ctrlr_cmd.c b/sys/dev/nvme/nvme_ctrlr_cmd.c
index 240b15f..6af903a 100644
--- a/sys/dev/nvme/nvme_ctrlr_cmd.c
+++ b/sys/dev/nvme/nvme_ctrlr_cmd.c
@@ -298,6 +298,16 @@ nvme_ctrlr_cmd_get_health_information_page(struct nvme_controller *ctrlr,
}
void
+nvme_ctrlr_cmd_get_firmware_page(struct nvme_controller *ctrlr,
+ struct nvme_firmware_page *payload, nvme_cb_fn_t cb_fn, void *cb_arg)
+{
+
+ nvme_ctrlr_cmd_get_log_page(ctrlr, NVME_LOG_FIRMWARE_SLOT,
+ NVME_GLOBAL_NAMESPACE_TAG, payload, sizeof(*payload), cb_fn,
+ cb_arg);
+}
+
+void
nvme_ctrlr_cmd_abort(struct nvme_controller *ctrlr, uint16_t cid,
uint16_t sqid, nvme_cb_fn_t cb_fn, void *cb_arg)
{
diff --git a/sys/dev/nvme/nvme_private.h b/sys/dev/nvme/nvme_private.h
index d988be5..624ae11 100644
--- a/sys/dev/nvme/nvme_private.h
+++ b/sys/dev/nvme/nvme_private.h
@@ -352,6 +352,10 @@ void nvme_ctrlr_cmd_get_health_information_page(struct nvme_controller *ctrlr,
struct nvme_health_information_page *payload,
nvme_cb_fn_t cb_fn,
void *cb_arg);
+void nvme_ctrlr_cmd_get_firmware_page(struct nvme_controller *ctrlr,
+ struct nvme_firmware_page *payload,
+ nvme_cb_fn_t cb_fn,
+ void *cb_arg);
void nvme_ctrlr_cmd_create_io_cq(struct nvme_controller *ctrlr,
struct nvme_qpair *io_que, uint16_t vector,
nvme_cb_fn_t cb_fn, void *cb_arg);
OpenPOWER on IntegriCloud