From 5f1e251de67ff867df31664c54ef2c2c4ffd3cb4 Mon Sep 17 00:00:00 2001 From: Jim Harris Date: Tue, 26 Mar 2013 18:43:53 +0000 Subject: [PATCH] Create a generic nvme_ctrlr_cmd_get_log_page function, and change the health information log page function to use it. Sponsored by: Intel --- sys/dev/nvme/nvme.h | 4 ++++ sys/dev/nvme/nvme_ctrlr_cmd.c | 23 +++++++++++++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/sys/dev/nvme/nvme.h b/sys/dev/nvme/nvme.h index 9b7bc9ed446..a9d214e68f0 100644 --- a/sys/dev/nvme/nvme.h +++ b/sys/dev/nvme/nvme.h @@ -713,6 +713,10 @@ void nvme_ctrlr_cmd_get_feature(struct nvme_controller *ctrlr, uint8_t feature, uint32_t cdw11, void *payload, uint32_t payload_size, nvme_cb_fn_t cb_fn, void *cb_arg); +void nvme_ctrlr_cmd_get_log_page(struct nvme_controller *ctrlr, + uint8_t log_page, uint32_t nsid, + void *payload, uint32_t payload_size, + nvme_cb_fn_t cb_fn, void *cb_arg); /* NVM I/O functions */ int nvme_ns_cmd_write(struct nvme_namespace *ns, void *payload, diff --git a/sys/dev/nvme/nvme_ctrlr_cmd.c b/sys/dev/nvme/nvme_ctrlr_cmd.c index 03124b6c50a..f56f9e084bf 100644 --- a/sys/dev/nvme/nvme_ctrlr_cmd.c +++ b/sys/dev/nvme/nvme_ctrlr_cmd.c @@ -249,24 +249,35 @@ nvme_ctrlr_cmd_set_interrupt_coalescing(struct nvme_controller *ctrlr, } void -nvme_ctrlr_cmd_get_health_information_page(struct nvme_controller *ctrlr, - uint32_t nsid, struct nvme_health_information_page *payload, - nvme_cb_fn_t cb_fn, void *cb_arg) +nvme_ctrlr_cmd_get_log_page(struct nvme_controller *ctrlr, uint8_t log_page, + uint32_t nsid, void *payload, uint32_t payload_size, nvme_cb_fn_t cb_fn, + void *cb_arg) { struct nvme_request *req; struct nvme_command *cmd; - req = nvme_allocate_request(payload, sizeof(*payload), cb_fn, cb_arg); + req = nvme_allocate_request(payload, payload_size, cb_fn, cb_arg); cmd = &req->cmd; cmd->opc = NVME_OPC_GET_LOG_PAGE; cmd->nsid = nsid; - cmd->cdw10 = ((sizeof(*payload)/sizeof(uint32_t)) - 1) << 16; - cmd->cdw10 |= NVME_LOG_HEALTH_INFORMATION; + cmd->cdw10 = ((payload_size/sizeof(uint32_t)) - 1) << 16; + cmd->cdw10 |= log_page; nvme_ctrlr_submit_admin_request(ctrlr, req); } + +void +nvme_ctrlr_cmd_get_health_information_page(struct nvme_controller *ctrlr, + uint32_t nsid, struct nvme_health_information_page *payload, + nvme_cb_fn_t cb_fn, void *cb_arg) +{ + + nvme_ctrlr_cmd_get_log_page(ctrlr, NVME_LOG_HEALTH_INFORMATION, + nsid, 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)