diff options
-rw-r--r-- | sys/dev/nvme/nvme.h | 12 | ||||
-rw-r--r-- | sys/dev/nvme/nvme_ctrlr_cmd.c | 10 | ||||
-rw-r--r-- | sys/dev/nvme/nvme_private.h | 4 |
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); |