]> www.infradead.org Git - users/hch/nvme-cli.git/commitdiff
Use simpler nvme ioctl api for admin
authorKeith Busch <kbusch@kernel.org>
Fri, 8 Nov 2019 00:59:06 +0000 (09:59 +0900)
committerKeith Busch <kbusch@kernel.org>
Fri, 8 Nov 2019 00:59:06 +0000 (09:59 +0900)
Signed-off-by: Keith Busch <kbusch@kernel.org>
linux/nvme.h
nvme-ioctl.c
nvme-ioctl.h
plugins/intel/intel-nvme.c
plugins/micron/micron-nvme.c
plugins/netapp/netapp-nvme.c
plugins/wdc/wdc-nvme.c

index 2b9dc77b776ece23aed25745b49bc23d613dc628..dda963348148b80b05f1c0fcfb0ebdb56b582288 100644 (file)
@@ -246,6 +246,9 @@ struct nvme_id_power_state {
        __u8                    rsvd23[9];
 };
 
+/* idle and active power scales occupy the last 2 bits of the field */
+#define POWER_SCALE(s) ((s) >> 6)
+
 enum {
        NVME_PS_FLAGS_MAX_POWER_SCALE   = 1 << 0,
        NVME_PS_FLAGS_NON_OP_STATE      = 1 << 1,
@@ -1180,9 +1183,6 @@ struct nvme_firmware_log_page {
        __u8    resv2[448];
 };
 
-/* idle and active power scales occupy the last 2 bits of the field */
-#define POWER_SCALE(s) ((s) >> 6)
-
 struct nvme_host_mem_buffer {
        __u32                   hsize;
        __u32                   hmdlal;
@@ -1204,7 +1204,7 @@ struct nvme_timestamp {
 
 struct nvme_controller_list {
        __le16 num;
-       __le16 identifier[];
+       __le16 identifier[2047];
 };
 
 struct nvme_secondary_controller_entry {
index 61e79910d12ea9cf891957b2939d6a6808e7baba..cdaca74e010af4b34bee0dd0d5a93cc204adb5c0 100644 (file)
@@ -88,12 +88,12 @@ int nvme_submit_passthru(int fd, unsigned long ioctl_cmd,
        return ioctl(fd, ioctl_cmd, cmd);
 }
 
-static int nvme_submit_admin_passthru(int fd, struct nvme_passthru_cmd *cmd)
+int nvme_submit_admin_passthru(int fd, struct nvme_passthru_cmd *cmd)
 {
        return ioctl(fd, NVME_IOCTL_ADMIN_CMD, cmd);
 }
 
-static int nvme_submit_io_passthru(int fd, struct nvme_passthru_cmd *cmd)
+int nvme_submit_io_passthru(int fd, struct nvme_passthru_cmd *cmd)
 {
        return ioctl(fd, NVME_IOCTL_IO_CMD, cmd);
 }
@@ -417,33 +417,38 @@ int nvme_identify_uuid(int fd, void *data)
 int nvme_get_log14(int fd, __u32 nsid, __u8 log_id, __u8 lsp, __u64 lpo,
                  __u16 lsi, bool rae, __u8 uuid_ix, __u32 data_len, void *data)
 {
+       __u32 numd = (data_len >> 2) - 1;
+       __u16 numdu = numd >> 16, numdl = numd & 0xffff;
+       __u32 cdw10 = log_id | (numdl << 16) | (rae ? 1 << 15 : 0) | lsp << 8;
+
        struct nvme_admin_cmd cmd = {
                .opcode         = nvme_admin_get_log_page,
                .nsid           = nsid,
                .addr           = (__u64)(uintptr_t) data,
                .data_len       = data_len,
+               .cdw10          = cdw10,
+               .cdw11          = numdu | (lsi << 16),
+               .cdw12          = lpo & 0xffffffff,
+               .cdw13          = lpo >> 32,
+               .cdw14          = uuid_ix,
        };
-       __u32 numd = (data_len >> 2) - 1;
-       __u16 numdu = numd >> 16, numdl = numd & 0xffff;
-
-       cmd.cdw10 = log_id | (numdl << 16) | (rae ? 1 << 15 : 0);
-       if (lsp)
-                cmd.cdw10 |= lsp << 8;
-
-       cmd.cdw11 = numdu | (lsi << 16);
-       cmd.cdw12 = lpo;
-       cmd.cdw13 = (lpo >> 32);
-       cmd.cdw14 = uuid_ix;
 
        return nvme_submit_admin_passthru(fd, &cmd);
+}
 
+int nvme_get_log13(int fd, __u32 nsid, __u8 log_id, __u8 lsp,
+                __u64 lpo, __u16 lsi, bool rae, __u32 data_len,
+                void *data)
+{
+       return nvme_get_log14(fd, nsid, log_id, lsp, lpo, lsi, rae, 0,
+                             data_len, data);
 }
 
 int nvme_get_log(int fd, __u32 nsid, __u8 log_id, bool rae,
                 __u32 data_len, void *data)
 {
-       void *ptr = data;
        __u32 offset = 0, xfer_len = data_len;
+       void *ptr = data;
        int ret;
 
        /*
@@ -518,9 +523,7 @@ int nvme_smart_log(int fd, __u32 nsid, struct nvme_smart_log *smart_log)
 
 int nvme_ana_log(int fd, void *ana_log, size_t ana_log_len, int rgo)
 {
-       __u64 lpo = 0;
-
-       return nvme_get_log13(fd, NVME_NSID_ALL, NVME_LOG_ANA, rgo, lpo, 0,
+       return nvme_get_log13(fd, NVME_NSID_ALL, NVME_LOG_ANA, rgo, 0, 0,
                        true, ana_log_len, ana_log);
 }
 
@@ -597,8 +600,7 @@ int nvme_get_properties(int fd, void **pbar)
 {
        int offset;
        uint64_t value;
-       int err;
-       int size = getpagesize();
+       int err, size = getpagesize();
 
        *pbar = malloc(size);
        if (!*pbar) {
@@ -706,22 +708,21 @@ int nvme_ns_delete(int fd, __u32 nsid, __u32 timeout)
 int nvme_ns_attachment(int fd, __u32 nsid, __u16 num_ctrls, __u16 *ctrlist,
                       bool attach)
 {
-       int i;
-       __u8 buf[0x1000];
-       struct nvme_controller_list *cntlist =
-                                       (struct nvme_controller_list *)buf;
+       struct nvme_controller_list cntlist = {
+               .num = cpu_to_le16(num_ctrls),
+       };
+
        struct nvme_admin_cmd cmd = {
                .opcode         = nvme_admin_ns_attach,
                .nsid           = nsid,
-               .addr           = (__u64)(uintptr_t) cntlist,
+               .addr           = (__u64)(uintptr_t)&cntlist,
                .cdw10          = attach ? 0 : 1,
                .data_len       = 0x1000,
        };
+       int i;
 
-       memset(buf, 0, sizeof(buf));
-       cntlist->num = cpu_to_le16(num_ctrls);
        for (i = 0; i < num_ctrls; i++)
-               cntlist->identifier[i] = cpu_to_le16(ctrlist[i]);
+               cntlist.identifier[i] = cpu_to_le16(ctrlist[i]);
 
        return nvme_submit_admin_passthru(fd, &cmd);
 }
index d784818295ef8716627a1643066102bf6089fe40..50e5d960e325f7655365def15d665969217f8e8a 100644 (file)
@@ -13,6 +13,8 @@ int nvme_get_nsid(int fd);
 /* Generic passthrough */
 int nvme_submit_passthru(int fd, unsigned long ioctl_cmd,
                         struct nvme_passthru_cmd *cmd);
+int nvme_submit_admin_passthru(int fd, struct nvme_passthru_cmd *cmd);
+int nvme_submit_io_passthru(int fd, struct nvme_passthru_cmd *cmd);
 
 int nvme_passthru(int fd, unsigned long ioctl_cmd, __u8 opcode, __u8 flags,
                  __u16 rsvd, __u32 nsid, __u32 cdw2, __u32 cdw3,
@@ -21,6 +23,7 @@ int nvme_passthru(int fd, unsigned long ioctl_cmd, __u8 opcode, __u8 flags,
                  __u32 data_len, void *data, __u32 metadata_len,
                  void *metadata, __u32 timeout_ms, __u32 *result);
 
+
 /* NVME_SUBMIT_IO */
 int nvme_io(int fd, __u8 opcode, __u64 slba, __u16 nblocks, __u16 control,
              __u32 dsmgmt, __u32 reftag, __u16 apptag,
@@ -38,9 +41,6 @@ int nvme_compare(int fd, __u64 slba, __u16 nblocks, __u16 control,
                 __u32 dsmgmt, __u32 reftag, __u16 apptag,
                 __u16 appmask, void *data, void *metadata);
 
-int nvme_verify(int fd, __u32 nsid, __u64 slba, __u16 nblocks,
-               __u16 control, __u32 reftag, __u16 apptag, __u16 appmask);
-
 /* NVME_IO_CMD */
 int nvme_passthru_io(int fd, __u8 opcode, __u8 flags, __u16 rsvd,
                     __u32 nsid, __u32 cdw2, __u32 cdw3,
@@ -54,6 +54,9 @@ int nvme_write_zeros(int fd, __u32 nsid, __u64 slba, __u16 nlb,
 
 int nvme_write_uncorrectable(int fd, __u32 nsid, __u64 slba, __u16 nlb);
 
+int nvme_verify(int fd, __u32 nsid, __u64 slba, __u16 nblocks,
+               __u16 control, __u32 reftag, __u16 apptag, __u16 appmask);
+
 int nvme_flush(int fd, __u32 nsid);
 
 int nvme_dsm(int fd, __u32 nsid, __u32 cdw11, struct nvme_dsm_range *dsm,
@@ -70,6 +73,7 @@ int nvme_resv_release(int fd, __u32 nsid, __u8 rtype, __u8 rrela,
                      bool iekey, __u64 crkey);
 int nvme_resv_report(int fd, __u32 nsid, __u32 numd, __u32 cdw11, void *data);
 
+/* NVME_ADMIN_CMD */
 int nvme_identify13(int fd, __u32 nsid, __u32 cdw10, __u32 cdw11, void *data);
 int nvme_identify(int fd, __u32 nsid, __u32 cdw10, void *data);
 int nvme_identify_ctrl(int fd, void *data);
@@ -86,15 +90,9 @@ int nvme_get_log(int fd, __u32 nsid, __u8 log_id, bool rae,
 int nvme_get_log14(int fd, __u32 nsid, __u8 log_id, __u8 lsp, __u64 lpo,
                   __u16 group_id, bool rae, __u8 uuid_ix,
                   __u32 data_len, void *data);
-
-static inline int nvme_get_log13(int fd, __u32 nsid, __u8 log_id, __u8 lsp,
-                                __u64 lpo, __u16 lsi, bool rae, __u32 data_len,
-                                void *data)
-{
-       return nvme_get_log14(fd, nsid, log_id, lsp, lpo, lsi, rae, 0,
-                             data_len, data);
-}
-
+int nvme_get_log13(int fd, __u32 nsid, __u8 log_id, __u8 lsp,
+                __u64 lpo, __u16 lsi, bool rae, __u32 data_len,
+                void *data);
 int nvme_get_telemetry_log(int fd, void *lp, int generate_report,
                           int ctrl_gen, size_t log_page_size, __u64 offset);
 int nvme_fw_log(int fd, struct nvme_firmware_log_page *fw_log);
index 68140009730db5b86cb31df35990b105c78a895d..4351aaf1355cbd0329e33a96d54ee2f8d5222448 100644 (file)
@@ -20,7 +20,6 @@
 #define CREATE_CMD
 #include "intel-nvme.h"
 
-#pragma pack(push,1)
 struct nvme_additional_smart_log_item {
        __u8                    key;
        __u8                    _kp[2];
@@ -32,15 +31,14 @@ struct nvme_additional_smart_log_item {
                        __le16  min;
                        __le16  max;
                        __le16  avg;
-               } wear_level ;
+               } wear_level;
                struct thermal_throttle {
                        __u8    pct;
                        __u32   count;
                } thermal_throttle;
        };
        __u8                    _rp;
-};
-#pragma pack(pop)
+} __attribute__((packed));
 
 struct nvme_additional_smart_log {
        struct nvme_additional_smart_log_item   program_fail_cnt;
@@ -58,7 +56,7 @@ struct nvme_additional_smart_log {
        struct nvme_additional_smart_log_item   host_bytes_written;
 };
 
-struct nvme_vu_id_ctrl_field { //CDR MR5
+struct nvme_vu_id_ctrl_field { /* CDR MR5 */
        __u8                    rsvd1[3];
        __u8                    ss;
        __u8                    health[20];
@@ -68,7 +66,7 @@ struct nvme_vu_id_ctrl_field { //CDR MR5
        __u8                    sstat;
        __u8                    bl[8];
        __u8                    rsvd2[38];
-       __u8                    ww[8]; //little endian
+       __u8                    ww[8]; /* little endian */
        __u8                    mic_bl[4];
        __u8                    mic_fw[4];
 };
@@ -94,13 +92,14 @@ static void intel_id_ctrl(__u8 *vs, struct json_object *root)
        mic_fw[sizeof(mic_fw) - 1] = '\0';
 
        snprintf(ww, 19, "%02X%02X%02X%02X%02X%02X%02X%02X", log->ww[7],
-                                       log->ww[6], log->ww[5], log->ww[4], log->ww[3], log->ww[2],
-                                       log->ww[1], log->ww[0]);
+               log->ww[6], log->ww[5], log->ww[4], log->ww[3], log->ww[2],
+               log->ww[1], log->ww[0]);
 
 
        if (root) {
                json_object_add_value_int(root, "ss", log->ss);
-               json_object_add_value_string(root, "health", health[0] ? health : "healthy");
+               json_object_add_value_string(root, "health",
+                       health[0] ? health : "healthy");
                json_object_add_value_int(root, "cls", log->cls);
                json_object_add_value_int(root, "nlw", log->nlw);
                json_object_add_value_int(root, "scap", log->scap);
@@ -268,13 +267,15 @@ static void show_intel_smart_log(struct nvme_additional_smart_log *smart,
 
 static int get_additional_smart_log(int argc, char **argv, struct command *cmd, struct plugin *plugin)
 {
-       struct nvme_additional_smart_log smart_log;
-       int err, fd;
        const char *desc = "Get Intel vendor specific additional smart log (optionally, "\
                      "for the specified namespace), and show it.";
        const char *namespace = "(optional) desired namespace";
        const char *raw = "Dump output in binary format";
        const char *json= "Dump output in json format";
+
+       struct nvme_additional_smart_log smart_log;
+       int err, fd;
+
        struct config {
                __u32 namespace_id;
                int   raw_binary;
@@ -314,11 +315,12 @@ static int get_additional_smart_log(int argc, char **argv, struct command *cmd,
 
 static int get_market_log(int argc, char **argv, struct command *cmd, struct plugin *plugin)
 {
+       const char *desc = "Get Intel Marketing Name log and show it.";
+       const char *raw = "dump output in binary format";
+
        char log[512];
        int err, fd;
 
-       const char *desc = "Get Intel Marketing Name log and show it.";
-       const char *raw = "dump output in binary format";
        struct config {
                int  raw_binary;
        };
@@ -480,11 +482,11 @@ static int get_lat_stats_log(int argc, char **argv, struct command *cmd, struct
 }
 
 struct intel_assert_dump {
-    __u32 coreoffset;
-    __u32 assertsize;
-    __u8  assertdumptype;
-    __u8  assertvalid;
-    __u8  reserved[2];
+       __u32 coreoffset;
+       __u32 assertsize;
+       __u8  assertdumptype;
+       __u8  assertvalid;
+       __u8  reserved[2];
 };
 
 struct intel_event_dump {
@@ -534,17 +536,17 @@ struct intel_vu_nlog {
 };
 
 struct intel_cd_log {
-    union {
-       struct {
-               __u32 selectLog  : 3;
-               __u32 selectCore : 2;
-               __u32 selectNlog : 8;
-               __u8  selectOffsetRef : 1;
-               __u32 selectNlogPause : 2;
-               __u32 reserved2  : 16;
-       }fields;
-       __u32 entireDword;
-    }u;
+       union {
+               struct {
+                       __u32 selectLog  : 3;
+                       __u32 selectCore : 2;
+                       __u32 selectNlog : 8;
+                       __u8  selectOffsetRef : 1;
+                       __u32 selectNlogPause : 2;
+                       __u32 reserved2  : 16;
+               } fields;
+               __u32 entireDword;
+    } u;
 };
 
 static void print_intel_nlog(struct intel_vu_nlog *intel_nlog)
@@ -585,9 +587,12 @@ static int read_entire_cmd(struct nvme_passthru_cmd *cmd, int total_size,
 
        dword_tfer = min(max_tfer, total_size);
        while (total_size > 0) {
-               err = nvme_submit_passthru(ioctl_fd, NVME_IOCTL_ADMIN_CMD, cmd);
+               err = nvme_submit_admin_passthru(ioctl_fd, cmd);
                if (err) {
-                       fprintf(stderr, "failed on cmd.data_len %u cmd.cdw13 %u cmd.cdw12 %x cmd.cdw10 %u err %x remaining size %d\n", cmd->data_len, cmd->cdw13, cmd->cdw12, cmd->cdw10, err, total_size);
+                       fprintf(stderr,
+                               "failed on cmd.data_len %u cmd.cdw13 %u cmd.cdw12 %x cmd.cdw10 %u err %x remaining size %d\n",
+                               cmd->data_len, cmd->cdw13, cmd->cdw12,
+                               cmd->cdw10, err, total_size);
                        goto out;
                }
 
@@ -616,7 +621,8 @@ static int write_header(__u8 *buf, int fd, size_t amnt)
        return 0;
 }
 
-static int read_header(struct nvme_passthru_cmd *cmd,__u8 *buf, int ioctl_fd, __u32 dw12, int nsid)
+static int read_header(struct nvme_passthru_cmd *cmd,__u8 *buf, int ioctl_fd,
+                       __u32 dw12, int nsid)
 {
        memset(cmd, 0, sizeof(*cmd));
        memset(buf, 0, 4096);
@@ -681,7 +687,8 @@ static int get_internal_log_old(__u8 *buf, int output, int fd,
        return err;
 }
 
-static int get_internal_log(int argc, char **argv, struct command *command, struct plugin *plugin)
+static int get_internal_log(int argc, char **argv, struct command *command,
+                               struct plugin *plugin)
 {
        __u8 buf[0x2000];
        char f[0x100];
@@ -769,8 +776,8 @@ static int get_internal_log(int argc, char **argv, struct command *command, stru
        if (cfg.log == 2) {
                if (cfg.verbose)
                        printf("Log major:%d minor:%d header:%d size:%d numcores:%d\n",
-                              intel->ver.major, intel->ver.minor, intel->header, intel->size,
-                              intel->numcores);
+                              intel->ver.major, intel->ver.minor,
+                               intel->header, intel->size, intel->numcores);
 
                err = write_header(buf, output, 0x1000);
                if (err) {
@@ -794,7 +801,9 @@ static int get_internal_log(int argc, char **argv, struct command *command, stru
                        goto out;
        }
 
-       for (j = (cfg.core < 0 ? 0 : cfg.core); j < (cfg.core < 0 ? core_num : cfg.core + 1); j++) {
+       for (j = (cfg.core < 0 ? 0 : cfg.core);
+                       j < (cfg.core < 0 ? core_num : cfg.core + 1);
+                       j++) {
                cdlog.u.fields.selectCore = j;
                for (i = 0; i < count; i++) {
                        if (cfg.log == 2) {
index 33c23c9062697399415e66863ce30a317b97ac38..f43d12af19527c65ede2ac6e3279c282e4ea3539 100644 (file)
@@ -22,8 +22,8 @@ static int micron_fw_commit(int fd, int select)
                .cdw10          = 8,
                .cdw12      = select,
        };
-       return nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &cmd);
 
+       return nvme_submit_admin_passthru(fd, &cmd);
 }
 
 static int micron_selective_download(int argc, char **argv, struct command *cmd, struct plugin *plugin)
index d1838b4a675fcf3d8f2aa5a0e8ce5d171289e221..915833abe9fb6bdf35d0321b70b4fbce5941c424 100644 (file)
@@ -379,7 +379,7 @@ static int nvme_get_ontap_c2_log(int fd, __u32 nsid, void *buf, __u32 buflen)
        get_log.cdw10 |= ONTAP_C2_LOG_NSINFO_LSP << 8;
        get_log.cdw11 = numdu;
 
-       err = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &get_log);
+       err = nvme_submit_admin_passthru(fd, &get_log);
        if (err) {
                fprintf(stderr, "ioctl error %0x\n", err);
                return 1;
index c0d6c745fc88c4caaf37dc3dd899a4c4f12c475f..ebb3c6fe73b03e9529db52af31848b21d4462368 100644 (file)
@@ -1057,7 +1057,7 @@ static int wdc_do_clear_dump(int fd, __u8 opcode, __u32 cdw12)
        memset(&admin_cmd, 0, sizeof (struct nvme_admin_cmd));
        admin_cmd.opcode = opcode;
        admin_cmd.cdw12 = cdw12;
-       ret = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &admin_cmd);
+       ret = nvme_submit_admin_passthru(fd, &admin_cmd);
        if (ret != 0) {
                fprintf(stdout, "ERROR : WDC : Crash dump erase failed\n");
        }
@@ -1080,7 +1080,7 @@ static __u32 wdc_dump_length(int fd, __u32 opcode, __u32 cdw10, __u32 cdw12, __u
        admin_cmd.cdw10 = cdw10;
        admin_cmd.cdw12 = cdw12;
 
-       ret = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &admin_cmd);
+       ret = nvme_submit_admin_passthru(fd, &admin_cmd);
        if (ret != 0) {
                l->log_size = 0;
                ret = -1;
@@ -1108,7 +1108,7 @@ static __u32 wdc_dump_length_e6(int fd, __u32 opcode, __u32 cdw10, __u32 cdw12,
        admin_cmd.cdw10 = cdw10;
        admin_cmd.cdw12 = cdw12;
 
-       ret = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &admin_cmd);
+       ret = nvme_submit_admin_passthru(fd, &admin_cmd);
        if (ret != 0) {
                fprintf(stderr, "ERROR : WDC : reading dump length failed\n");
                fprintf(stderr, "NVMe Status:%s(%x)\n", nvme_status_to_string(ret), ret);
@@ -1135,7 +1135,7 @@ static __u32 wdc_dump_dui_data(int fd, __u32 dataLen, __u32 offset, __u8 *dump_d
                admin_cmd.cdw14 = WDC_NVME_CAP_DUI_DISABLE_IO;
 
 
-       ret = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &admin_cmd);
+       ret = nvme_submit_admin_passthru(fd, &admin_cmd);
        if (ret != 0) {
                fprintf(stderr, "ERROR : WDC : reading DUI data failed\n");
                fprintf(stderr, "NVMe Status:%s(%x)\n", nvme_status_to_string(ret), ret);
@@ -1162,7 +1162,7 @@ static __u32 wdc_dump_dui_data_v2(int fd, __u32 dataLen, __u64 offset, __u8 *dum
        else
                admin_cmd.cdw14 = WDC_NVME_CAP_DUI_DISABLE_IO;
 
-       ret = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &admin_cmd);
+       ret = nvme_submit_admin_passthru(fd, &admin_cmd);
        if (ret != 0) {
                fprintf(stderr, "ERROR : WDC : reading DUI data V2 failed\n");
                fprintf(stderr, "NVMe Status:%s(%x)\n", nvme_status_to_string(ret), ret);
@@ -1200,7 +1200,7 @@ static int wdc_do_dump(int fd, __u32 opcode,__u32 data_len,
        admin_cmd.cdw13 = curr_data_offset;
 
        while (curr_data_offset < data_len) {
-               ret = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &admin_cmd);
+               ret = nvme_submit_admin_passthru(fd, &admin_cmd);
                if (ret != 0) {
                        fprintf(stderr, "%s: ERROR : WDC : NVMe Status:%s(%x)\n",
                                __func__, nvme_status_to_string(ret), ret);
@@ -1265,7 +1265,7 @@ static int wdc_do_dump_e6(int fd, __u32 opcode,__u32 data_len,
                admin_cmd.cdw10 = xfer_size >> 2;
                admin_cmd.cdw13 = curr_data_offset >> 2;
 
-               ret = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &admin_cmd);
+               ret = nvme_submit_admin_passthru(fd, &admin_cmd);
                if (ret != 0) {
                        fprintf(stderr, "%s: ERROR : WDC : NVMe Status:%s(%x)\n", __func__, nvme_status_to_string(ret), ret);
                        fprintf(stderr, "%s: ERROR : WDC : Get chunk %d, size = 0x%x, offset = 0x%x, addr = 0x%lx\n",
@@ -1666,7 +1666,7 @@ static int wdc_do_get_sn730_log_len(int fd, uint32_t *len_buf, uint32_t subopcod
        admin_cmd.cdw12 = subopcode;
        admin_cmd.cdw10 = SN730_LOG_CHUNK_SIZE / 4;
 
-       ret = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &admin_cmd);
+       ret = nvme_submit_admin_passthru(fd, &admin_cmd);
        if (ret == 0)
                *len_buf = *output;
        free(output);
@@ -1691,7 +1691,7 @@ static int wdc_do_get_sn730_log(int fd, void * log_buf, uint32_t offset, uint32_
        admin_cmd.cdw13 = offset;
        admin_cmd.cdw10 = SN730_LOG_CHUNK_SIZE / 4;
 
-       ret = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &admin_cmd);
+       ret = nvme_submit_admin_passthru(fd, &admin_cmd);
        if (!ret)
                memcpy(log_buf, output, SN730_LOG_CHUNK_SIZE);
        return ret;
@@ -2111,7 +2111,7 @@ static int wdc_do_drive_log(int fd, char *file)
        admin_cmd.cdw12 = ((WDC_NVME_DRIVE_LOG_SUBCMD <<
                                WDC_NVME_SUBCMD_SHIFT) | WDC_NVME_DRIVE_LOG_SIZE_CMD);
 
-       ret = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &admin_cmd);
+       ret = nvme_submit_admin_passthru(fd, &admin_cmd);
        fprintf(stderr, "NVMe Status:%s(%x)\n", nvme_status_to_string(ret),
                        ret);
        if (ret == 0) {
@@ -2322,7 +2322,7 @@ static int wdc_purge(int argc, char **argv,
        if (!wdc_check_device(fd))
                return -1;
 
-       ret = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &admin_cmd);
+       ret = nvme_submit_admin_passthru(fd, &admin_cmd);
        if (ret > 0) {
                switch (ret) {
                case WDC_NVME_PURGE_CMD_SEQ_ERR:
@@ -2371,7 +2371,7 @@ static int wdc_purge_monitor(int argc, char **argv,
        if (!wdc_check_device(fd))
                return -1;
 
-       ret = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &admin_cmd);
+       ret = nvme_submit_admin_passthru(fd, &admin_cmd);
        if (ret == 0) {
                mon = (struct wdc_nvme_purge_monitor_data *) output;
                printf("Purge state = 0x%0x\n", admin_cmd.result);
@@ -3191,7 +3191,7 @@ static int wdc_clear_pcie_correctable_errors(int argc, char **argv, struct comma
        admin_cmd.cdw12 = ((WDC_NVME_CLEAR_PCIE_CORR_SUBCMD << WDC_NVME_SUBCMD_SHIFT) |
                        WDC_NVME_CLEAR_PCIE_CORR_CMD);
 
-       ret = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &admin_cmd);
+       ret = nvme_submit_admin_passthru(fd, &admin_cmd);
        fprintf(stderr, "NVMe Status:%s(%x)\n", nvme_status_to_string(ret), ret);
 out:
        return ret;
@@ -3348,7 +3348,7 @@ static int wdc_clear_assert_dump(int argc, char **argv, struct command *command,
                admin_cmd.cdw12 = ((WDC_NVME_CLEAR_ASSERT_DUMP_SUBCMD << WDC_NVME_SUBCMD_SHIFT) |
                                WDC_NVME_CLEAR_ASSERT_DUMP_CMD);
 
-               ret = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &admin_cmd);
+               ret = nvme_submit_admin_passthru(fd, &admin_cmd);
                fprintf(stderr, "NVMe Status:%s(%x)\n", nvme_status_to_string(ret), ret);
        } else
                fprintf(stderr, "INFO : WDC : No Assert Dump Present\n");
@@ -3481,7 +3481,7 @@ static int wdc_clear_fw_activate_history(int argc, char **argv, struct command *
        admin_cmd.cdw12 = ((WDC_NVME_CLEAR_FW_ACT_HIST_SUBCMD << WDC_NVME_SUBCMD_SHIFT) |
                        WDC_NVME_CLEAR_FW_ACT_HIST_CMD);
 
-       ret = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &admin_cmd);
+       ret = nvme_submit_admin_passthru(fd, &admin_cmd);
        fprintf(stderr, "NVMe Status:%s(%x)\n", nvme_status_to_string(ret), ret);
 
 out:
@@ -3552,7 +3552,7 @@ static int wdc_de_VU_read_size(int fd, __u32 fileId, __u16 spiDestn, __u32* logS
        cmd.cdw13 = fileId<<16;
        cmd.cdw14 = spiDestn;
 
-       ret = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &cmd);
+       ret = nvme_submit_admin_passthru(fd, &cmd);
 
        if (!ret && logSize)
                *logSize = cmd.result;
@@ -3587,7 +3587,7 @@ static int wdc_de_VU_read_buffer(int fd, __u32 fileId, __u16 spiDestn, __u32 off
        cmd.addr = (__u64)(__u64)(uintptr_t)dataBuffer;
        cmd.data_len = *bufferSize;
 
-       ret = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &cmd);
+       ret = nvme_submit_admin_passthru(fd, &cmd);
 
        if( ret != WDC_STATUS_SUCCESS)
                fprintf(stderr, "ERROR : WDC : VUReadBuffer() failed, status:%s(0x%x)\n", nvme_status_to_string(ret), ret);
@@ -4241,7 +4241,7 @@ static int wdc_do_drive_resize(int fd, uint64_t new_size)
                            WDC_NVME_DRIVE_RESIZE_CMD);
        admin_cmd.cdw13 = new_size;
 
-       ret = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &admin_cmd);
+       ret = nvme_submit_admin_passthru(fd, &admin_cmd);
        return ret;
 }