]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
nvme: Add wrapper for admin_passthru command
authorJinliang Wang <jinliangw@google.com>
Tue, 1 Nov 2022 17:55:46 +0000 (10:55 -0700)
committerJinliang Wang <jinliangw@google.com>
Tue, 8 Nov 2022 08:17:48 +0000 (00:17 -0800)
This change adds nvme_dev wrappers for the admin_passthru command,
allowing access over a MI channel.

Need a bump to libnvme for the underlying nvme_mi_admin_admin_passthru call

Signed-off-by: Jinliang Wang <jinliangw@google.com>
nvme-wrap.c
nvme-wrap.h
nvme.c

index 68e5b0a42fb55b2e9994ea4408eefa0a933eef27..da34a0a12c32b8131d6688a3020ee62a40259cb0 100644 (file)
@@ -355,6 +355,19 @@ int nvme_cli_fw_commit(struct nvme_dev *dev,
        return do_admin_args_op(fw_commit, dev, args);
 }
 
+int nvme_cli_admin_passthru(struct nvme_dev *dev, __u8 opcode, __u8 flags,
+                           __u16 rsvd, __u32 nsid, __u32 cdw2, __u32 cdw3,
+                           __u32 cdw10, __u32 cdw11, __u32 cdw12, __u32 cdw13,
+                           __u32 cdw14, __u32 cdw15, __u32 data_len,
+                           void *data, __u32 metadata_len, void *metadata,
+                           __u32 timeout_ms, __u32 *result)
+{
+       return do_admin_op(admin_passthru, dev, opcode, flags, rsvd, nsid,
+                          cdw2, cdw3, cdw10, cdw11, cdw12, cdw13, cdw14, cdw15,
+                          data_len, data, metadata_len, metadata, timeout_ms,
+                          result);
+}
+
 /* The MI & direct interfaces don't have an exactly-matching API for
  * ns_mgmt_create, as we don't support a timeout for MI.
  */
index 948110843db232aa5da97940ac78db0504261287..19cad3996df89a91f17e52c5b7429987fc126644 100644 (file)
@@ -125,6 +125,13 @@ int nvme_cli_fw_download(struct nvme_dev *dev,
 int nvme_cli_fw_commit(struct nvme_dev *dev,
                         struct nvme_fw_commit_args *args);
 
+int nvme_cli_admin_passthru(struct nvme_dev *dev, __u8 opcode, __u8 flags,
+                           __u16 rsvd, __u32 nsid, __u32 cdw2, __u32 cdw3,
+                           __u32 cdw10, __u32 cdw11, __u32 cdw12, __u32 cdw13,
+                           __u32 cdw14, __u32 cdw15, __u32 data_len,
+                           void *data, __u32 metadata_len, void *metadata,
+                           __u32 timeout_ms, __u32 *result);
+
 int nvme_cli_get_feature_length2(int fid, __u32 cdw11, enum nvme_data_tfr dir,
                                __u32 *len);
 
diff --git a/nvme.c b/nvme.c
index 1e44be8b5f424318149d371bda9972f2a3856240..d1e517c4fd3fee92f3fc15a56a5647118c27f94d 100644 (file)
--- a/nvme.c
+++ b/nvme.c
@@ -7750,7 +7750,7 @@ static int passthru(int argc, char **argv, bool admin,
        gettimeofday(&start_time, NULL);
 
        if (admin)
-               err = nvme_admin_passthru(dev_fd(dev), cfg.opcode, cfg.flags,
+               err = nvme_cli_admin_passthru(dev, cfg.opcode, cfg.flags,
                                          cfg.rsvd,
                                          cfg.namespace_id, cfg.cdw2,
                                          cfg.cdw3, cfg.cdw10,