From: Daniel Wagner Date: Wed, 15 Feb 2023 11:18:07 +0000 (+0100) Subject: mi: Add nvme_mi_admin_get_log_page X-Git-Tag: v1.4~34 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=7ea5ab7fb502c7e8ac68ce595bcb14f99d2187d5;p=users%2Fsagi%2Flibnvme.git mi: Add nvme_mi_admin_get_log_page The non MI API has an nvme_get_log_page() function which accepts the transfer length. In order to be able to use the nvme_get_log_page() function ins nvme-cli, the MI API needs to provide the same API so that the transport abstraction wrappers work. Signed-off-by: Daniel Wagner --- diff --git a/src/libnvme-mi.map b/src/libnvme-mi.map index 16b7ad43..0b8b5b7f 100644 --- a/src/libnvme-mi.map +++ b/src/libnvme-mi.map @@ -1,3 +1,8 @@ +LIBNVME_MI_1_4 { + global: + nvme_mi_admin_get_log_page; +}; + LIBNVME_MI_1_3 { global: nvme_mi_admin_admin_passthru; diff --git a/src/nvme/mi.c b/src/nvme/mi.c index adf1753f..391ba1a3 100644 --- a/src/nvme/mi.c +++ b/src/nvme/mi.c @@ -841,9 +841,10 @@ static int __nvme_mi_admin_get_log(nvme_mi_ctrl_t ctrl, return rc; } -int nvme_mi_admin_get_log(nvme_mi_ctrl_t ctrl, struct nvme_get_log_args *args) +int nvme_mi_admin_get_log_page(nvme_mi_ctrl_t ctrl, __u32 xfer_size, + struct nvme_get_log_args *args) { - const size_t max_xfer_size = 4096; + const size_t max_xfer_size = xfer_size; off_t xfer_offset; int rc = 0; @@ -887,6 +888,11 @@ int nvme_mi_admin_get_log(nvme_mi_ctrl_t ctrl, struct nvme_get_log_args *args) return rc; } +int nvme_mi_admin_get_log(nvme_mi_ctrl_t ctrl, struct nvme_get_log_args *args) +{ + return nvme_mi_admin_get_log_page(ctrl, 4096, args); +} + int nvme_mi_admin_security_send(nvme_mi_ctrl_t ctrl, struct nvme_security_send_args *args) { diff --git a/src/nvme/mi.h b/src/nvme/mi.h index 56591595..12dbf6fb 100644 --- a/src/nvme/mi.h +++ b/src/nvme/mi.h @@ -1417,6 +1417,28 @@ static inline int nvme_mi_admin_identify_secondary_ctrl_list(nvme_mi_ctrl_t ctrl return nvme_mi_admin_identify(ctrl, &args); } +/** + * nvme_mi_admin_get_log_page() - Retrieve log page data from controller + * @ctrl: Controller to query + * @xfer_len: The chunk size of the read + * @args: Get Log Page command arguments + * + * Performs a Get Log Page Admin command as specified by @args. Response data + * is stored in @args->data, which should be a buffer of @args->data_len bytes. + * Resulting data length is stored in @args->data_len on successful + * command completion. + * + * This request may be implemented as multiple log page commands, in order + * to fit within MI message-size limits. + * + * Return: The nvme command status if a response was received (see + * &enum nvme_status_field) or -1 with errno set otherwise. + * + * See: &struct nvme_get_log_args + */ +int nvme_mi_admin_get_log_page(nvme_mi_ctrl_t ctrl, __u32 xfer_len, + struct nvme_get_log_args *args); + /** * nvme_mi_admin_get_log() - Retrieve log page data from controller * @ctrl: Controller to query