From 4ed089396bc7f14bcb94e80f0f9f4757fd8c48b7 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 5 Nov 2022 19:23:30 +0100 Subject: Merging upstream version 2.2.1. Signed-off-by: Daniel Baumann --- nvme.h | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 2 deletions(-) (limited to 'nvme.h') diff --git a/nvme.h b/nvme.h index 5afeece..c13ca8e 100644 --- a/nvme.h +++ b/nvme.h @@ -19,8 +19,12 @@ #include #include #include +#include #include #include +#include + +#include #include "plugin.h" #include "util/json.h" @@ -34,13 +38,68 @@ enum nvme_print_flags { BINARY = 1 << 3, /* binary dump raw bytes */ }; +enum nvme_cli_topo_ranking { + NVME_CLI_TOPO_NAMESPACE, + NVME_CLI_TOPO_CTRL, +}; + #define SYS_NVME "/sys/class/nvme" +enum nvme_dev_type { + NVME_DEV_DIRECT, + NVME_DEV_MI, +}; + +struct nvme_dev { + enum nvme_dev_type type; + union { + struct { + int fd; + struct stat stat; + } direct; + struct { + nvme_root_t root; + nvme_mi_ep_t ep; + nvme_mi_ctrl_t ctrl; + } mi; + }; + + const char *name; +}; + +#define dev_fd(d) __dev_fd(d, __func__, __LINE__) + +static inline int __dev_fd(struct nvme_dev *dev, const char *func, int line) +{ + if (dev->type != NVME_DEV_DIRECT) { + fprintf(stderr, + "warning: %s:%d not a direct transport!\n", + func, line); + return -1; + } + return dev->direct.fd; +} + +static inline nvme_mi_ep_t dev_mi_ep(struct nvme_dev *dev) +{ + if (dev->type != NVME_DEV_MI) { + fprintf(stderr, + "warning: not a MI transport!\n"); + return NULL; + } + return dev->mi.ep; +} + void register_extension(struct plugin *plugin); -int parse_and_open(int argc, char **argv, const char *desc, + +/* + * parse_and_open - parses arguments and opens the NVMe device, populating @dev + */ +int parse_and_open(struct nvme_dev **dev, int argc, char **argv, const char *desc, const struct argconfig_commandline_options *clo); -extern const char *devicename; +void dev_close(struct nvme_dev *dev); + extern const char *output_format; enum nvme_print_flags validate_output_format(const char *format); -- cgit v1.2.3