From 33b8fe1a294d670d67a2e9802ca0c753826b1562 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 15 Aug 2022 14:26:29 +0200 Subject: Merging upstream version 1.1. Signed-off-by: Daniel Baumann --- src/nvme/mi.c | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) (limited to 'src/nvme/mi.c') diff --git a/src/nvme/mi.c b/src/nvme/mi.c index 8e868d1..181a16c 100644 --- a/src/nvme/mi.c +++ b/src/nvme/mi.c @@ -17,6 +17,9 @@ #include "mi.h" #include "private.h" +static const int default_timeout = 1000; /* milliseconds; endpoints may + override */ + /* MI-equivalent of nvme_create_root, but avoids clashing symbol names * when linking against both libnvme and libnvme-mi. */ @@ -57,6 +60,8 @@ struct nvme_mi_ep *nvme_mi_init_ep(nvme_root_t root) list_node_init(&ep->root_entry); ep->root = root; ep->controllers_scanned = false; + ep->timeout = default_timeout; + ep->mprt_max = 0; list_head_init(&ep->controllers); list_add(&root->endpoints, &ep->root_entry); @@ -64,6 +69,29 @@ struct nvme_mi_ep *nvme_mi_init_ep(nvme_root_t root) return ep; } +int nvme_mi_ep_set_timeout(nvme_mi_ep_t ep, unsigned int timeout_ms) +{ + if (ep->transport->check_timeout) { + int rc; + rc = ep->transport->check_timeout(ep, timeout_ms); + if (rc) + return rc; + } + + ep->timeout = timeout_ms; + return 0; +} + +void nvme_mi_ep_set_mprt_max(nvme_mi_ep_t ep, unsigned int mprt_max_ms) +{ + ep->mprt_max = mprt_max_ms; +} + +unsigned int nvme_mi_ep_get_timeout(nvme_mi_ep_t ep) +{ + return ep->timeout; +} + struct nvme_mi_ctrl *nvme_mi_init_ctrl(nvme_mi_ep_t ep, __u16 ctrl_id) { struct nvme_mi_ctrl *ctrl; @@ -404,9 +432,9 @@ int nvme_mi_admin_identify_partial(nvme_mi_ctrl_t ctrl, /* retrieves a MCTP-messsage-sized chunk of log page data. offset and len are * specified within the args->data area */ -static int __nvme_mi_admin_get_log_page(nvme_mi_ctrl_t ctrl, - const struct nvme_get_log_args *args, - off_t offset, size_t *lenp, bool final) +static int __nvme_mi_admin_get_log(nvme_mi_ctrl_t ctrl, + const struct nvme_get_log_args *args, + off_t offset, size_t *lenp, bool final) { struct nvme_mi_admin_resp_hdr resp_hdr; struct nvme_mi_admin_req_hdr req_hdr; @@ -469,8 +497,7 @@ static int __nvme_mi_admin_get_log_page(nvme_mi_ctrl_t ctrl, return 0; } -int nvme_mi_admin_get_log_page(nvme_mi_ctrl_t ctrl, - struct nvme_get_log_args *args) +int nvme_mi_admin_get_log(nvme_mi_ctrl_t ctrl, struct nvme_get_log_args *args) { const size_t xfer_size = 4096; off_t xfer_offset; @@ -492,8 +519,8 @@ int nvme_mi_admin_get_log_page(nvme_mi_ctrl_t ctrl, final = xfer_offset + cur_xfer_size >= args->len; - rc = __nvme_mi_admin_get_log_page(ctrl, args, xfer_offset, - &tmp, final); + rc = __nvme_mi_admin_get_log(ctrl, args, xfer_offset, + &tmp, final); if (rc) break; -- cgit v1.2.3