From: Jinliang Wang Date: Tue, 1 Nov 2022 17:55:46 +0000 (-0700) Subject: nvme: Add wrapper for admin_passthru command X-Git-Tag: v2.3~46^2 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=244f8ba2268e65991ebd702512872c5047636b0b;p=users%2Fsagi%2Fnvme-cli.git nvme: Add wrapper for admin_passthru command 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 --- diff --git a/nvme-wrap.c b/nvme-wrap.c index 68e5b0a4..da34a0a1 100644 --- a/nvme-wrap.c +++ b/nvme-wrap.c @@ -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. */ diff --git a/nvme-wrap.h b/nvme-wrap.h index 94811084..19cad399 100644 --- a/nvme-wrap.h +++ b/nvme-wrap.h @@ -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 1e44be8b..d1e517c4 100644 --- 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,