summaryrefslogtreecommitdiffstats
path: root/sbin/nvmecontrol
diff options
context:
space:
mode:
authorjimharris <jimharris@FreeBSD.org>2013-06-26 22:58:59 +0000
committerjimharris <jimharris@FreeBSD.org>2013-06-26 22:58:59 +0000
commit9be98f32603c4fcdf33df3e8835aacd52634c434 (patch)
tree466335a8dd71a8955a030e158cfb4796994a76f2 /sbin/nvmecontrol
parentd44eb52f68b14bcc0506717efc547a9699e12ca1 (diff)
downloadFreeBSD-src-9be98f32603c4fcdf33df3e8835aacd52634c434.zip
FreeBSD-src-9be98f32603c4fcdf33df3e8835aacd52634c434.tar.gz
Break out code related to the devlist command into a separate source file.
Sponsored by: Intel MFC after: 3 days
Diffstat (limited to 'sbin/nvmecontrol')
-rw-r--r--sbin/nvmecontrol/Makefile1
-rw-r--r--sbin/nvmecontrol/devlist.c114
-rw-r--r--sbin/nvmecontrol/nvmecontrol.c96
-rw-r--r--sbin/nvmecontrol/nvmecontrol.h56
4 files changed, 175 insertions, 92 deletions
diff --git a/sbin/nvmecontrol/Makefile b/sbin/nvmecontrol/Makefile
index 04cefaa..4440c6f 100644
--- a/sbin/nvmecontrol/Makefile
+++ b/sbin/nvmecontrol/Makefile
@@ -1,6 +1,7 @@
# $FreeBSD$
PROG= nvmecontrol
+SRCS= nvmecontrol.c devlist.c
MAN= nvmecontrol.8
.include <bsd.prog.mk>
diff --git a/sbin/nvmecontrol/devlist.c b/sbin/nvmecontrol/devlist.c
new file mode 100644
index 0000000..4085e7e
--- /dev/null
+++ b/sbin/nvmecontrol/devlist.c
@@ -0,0 +1,114 @@
+/*-
+ * Copyright (C) 2012-2013 Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <unistd.h>
+
+#include "nvmecontrol.h"
+
+static void
+devlist_usage(void)
+{
+ fprintf(stderr, "usage:\n");
+ fprintf(stderr, DEVLIST_USAGE);
+ exit(EX_USAGE);
+}
+
+static inline uint32_t
+ns_get_sector_size(struct nvme_namespace_data *nsdata)
+{
+
+ return (1 << nsdata->lbaf[0].lbads);
+}
+
+void
+devlist(int argc, char *argv[])
+{
+ struct nvme_controller_data cdata;
+ struct nvme_namespace_data nsdata;
+ char name[64];
+ uint32_t i;
+ int ch, ctrlr, exit_code, fd, found;
+
+ exit_code = EX_OK;
+
+ while ((ch = getopt(argc, argv, "")) != -1) {
+ switch ((char)ch) {
+ default:
+ devlist_usage();
+ }
+ }
+
+ ctrlr = -1;
+ found = 0;
+
+ while (1) {
+ ctrlr++;
+ sprintf(name, "nvme%d", ctrlr);
+
+ exit_code = open_dev(name, &fd, 0, 0);
+
+ if (exit_code == EX_NOINPUT)
+ break;
+ else if (exit_code == EX_NOPERM) {
+ printf("Could not open /dev/%s, errno = %d (%s)\n",
+ name, errno, strerror(errno));
+ continue;
+ }
+
+ found++;
+ read_controller_data(fd, &cdata);
+ printf("%6s: %s\n", name, cdata.mn);
+
+ for (i = 0; i < cdata.nn; i++) {
+ sprintf(name, "nvme%dns%d", ctrlr, i+1);
+ read_namespace_data(fd, i+1, &nsdata);
+ printf(" %10s (%lldGB)\n",
+ name,
+ nsdata.nsze *
+ (long long)ns_get_sector_size(&nsdata) /
+ 1024 / 1024 / 1024);
+ }
+
+ close(fd);
+ }
+
+ if (found == 0)
+ printf("No NVMe controllers found.\n");
+
+ exit(EX_OK);
+}
diff --git a/sbin/nvmecontrol/nvmecontrol.c b/sbin/nvmecontrol/nvmecontrol.c
index 9ac5d19..a3286c1 100644
--- a/sbin/nvmecontrol/nvmecontrol.c
+++ b/sbin/nvmecontrol/nvmecontrol.c
@@ -31,8 +31,6 @@ __FBSDID("$FreeBSD$");
#include <sys/ioccom.h>
#include <sys/stat.h>
-#include <dev/nvme/nvme.h>
-
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
@@ -44,20 +42,7 @@ __FBSDID("$FreeBSD$");
#include <sysexits.h>
#include <unistd.h>
-#define DEVLIST_USAGE \
-" nvmecontrol devlist\n"
-
-#define IDENTIFY_USAGE \
-" nvmecontrol identify <controller id|namespace id>\n"
-
-#define PERFTEST_USAGE \
-" nvmecontrol perftest <-n num_threads> <-o read|write>\n" \
-" <-s size_in_bytes> <-t time_in_seconds>\n" \
-" <-i intr|wait> [-f refthread] [-p]\n" \
-" <namespace id>\n"
-
-#define RESET_USAGE \
-" nvmecontrol reset <controller id>\n"
+#include "nvmecontrol.h"
static void perftest_usage(void);
@@ -203,14 +188,7 @@ print_namespace(struct nvme_namespace_data *nsdata)
}
}
-static uint32_t
-ns_get_sector_size(struct nvme_namespace_data *nsdata)
-{
-
- return (1 << nsdata->lbaf[0].lbads);
-}
-
-static void
+void
read_controller_data(int fd, struct nvme_controller_data *cdata)
{
struct nvme_pt_command pt;
@@ -234,7 +212,7 @@ read_controller_data(int fd, struct nvme_controller_data *cdata)
}
}
-static void
+void
read_namespace_data(int fd, int nsid, struct nvme_namespace_data *nsdata)
{
struct nvme_pt_command pt;
@@ -258,7 +236,7 @@ read_namespace_data(int fd, int nsid, struct nvme_namespace_data *nsdata)
}
}
-static int
+int
open_dev(const char *str, int *fd, int show_error, int exit_on_error)
{
struct stat devstat;
@@ -289,72 +267,6 @@ open_dev(const char *str, int *fd, int show_error, int exit_on_error)
}
static void
-devlist_usage(void)
-{
- fprintf(stderr, "usage:\n");
- fprintf(stderr, DEVLIST_USAGE);
- exit(EX_USAGE);
-}
-
-static void
-devlist(int argc, char *argv[])
-{
- struct nvme_controller_data cdata;
- struct nvme_namespace_data nsdata;
- char name[64];
- uint32_t i;
- int ch, ctrlr, exit_code, fd, found;
-
- exit_code = EX_OK;
-
- while ((ch = getopt(argc, argv, "")) != -1) {
- switch ((char)ch) {
- default:
- devlist_usage();
- }
- }
-
- ctrlr = -1;
- found = 0;
-
- while (1) {
- ctrlr++;
- sprintf(name, "nvme%d", ctrlr);
-
- exit_code = open_dev(name, &fd, 0, 0);
-
- if (exit_code == EX_NOINPUT)
- break;
- else if (exit_code == EX_NOPERM) {
- printf("Could not open /dev/%s, errno = %d (%s)\n",
- name, errno, strerror(errno));
- continue;
- }
-
- found++;
- read_controller_data(fd, &cdata);
- printf("%6s: %s\n", name, cdata.mn);
-
- for (i = 0; i < cdata.nn; i++) {
- sprintf(name, "nvme%dns%d", ctrlr, i+1);
- read_namespace_data(fd, i+1, &nsdata);
- printf(" %10s (%lldGB)\n",
- name,
- nsdata.nsze *
- (long long)ns_get_sector_size(&nsdata) /
- 1024 / 1024 / 1024);
- }
-
- close(fd);
- }
-
- if (found == 0)
- printf("No NVMe controllers found.\n");
-
- exit(EX_OK);
-}
-
-static void
identify_usage(void)
{
fprintf(stderr, "usage:\n");
diff --git a/sbin/nvmecontrol/nvmecontrol.h b/sbin/nvmecontrol/nvmecontrol.h
new file mode 100644
index 0000000..a026ced
--- /dev/null
+++ b/sbin/nvmecontrol/nvmecontrol.h
@@ -0,0 +1,56 @@
+/*-
+ * Copyright (C) 2012-2013 Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef __NVMECONTROL_H__
+#define __NVMECONTROL_H__
+
+#include <dev/nvme/nvme.h>
+
+#define DEVLIST_USAGE \
+" nvmecontrol devlist\n"
+
+#define IDENTIFY_USAGE \
+" nvmecontrol identify <controller id|namespace id>\n"
+
+#define PERFTEST_USAGE \
+" nvmecontrol perftest <-n num_threads> <-o read|write>\n" \
+" <-s size_in_bytes> <-t time_in_seconds>\n" \
+" <-i intr|wait> [-f refthread] [-p]\n" \
+" <namespace id>\n"
+
+#define RESET_USAGE \
+" nvmecontrol reset <controller id>\n"
+
+int open_dev(const char *str, int *fd, int show_error, int exit_on_error);
+void read_controller_data(int fd, struct nvme_controller_data *cdata);
+void read_namespace_data(int fd, int nsid, struct nvme_namespace_data *nsdata);
+
+void devlist(int argc, char *argv[]);
+
+#endif
+
OpenPOWER on IntegriCloud