]> www.infradead.org Git - users/sagi/libnvme.git/commitdiff
mi: Add nvme_mi_admin_get_log_page
authorDaniel Wagner <dwagner@suse.de>
Wed, 15 Feb 2023 11:18:07 +0000 (12:18 +0100)
committerDaniel Wagner <wagi@monom.org>
Thu, 16 Feb 2023 07:32:00 +0000 (08:32 +0100)
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 <dwagner@suse.de>
src/libnvme-mi.map
src/nvme/mi.c
src/nvme/mi.h

index 16b7ad439cee2dd4a60a7281400217d01a431c8d..0b8b5b7f692770d753a9427de0e4f7de8a25a7d9 100644 (file)
@@ -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;
index adf1753fb8af0a3bc5c9079fc9ee670a451b5fda..391ba1a3f3d62c05492892dc729342ba924a543b 100644 (file)
@@ -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)
 {
index 565915956b9408c55bf98d586ec97856b6e8e26c..12dbf6fb8f48db07e822d79f91052a9dea6e89d0 100644 (file)
@@ -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