Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 26 Jun 2013 22:58:59 +0000 (UTC)
From:      Jim Harris <jimharris@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r252265 - head/sbin/nvmecontrol
Message-ID:  <201306262258.r5QMwxds095390@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jimharris
Date: Wed Jun 26 22:58:59 2013
New Revision: 252265
URL: http://svnweb.freebsd.org/changeset/base/252265

Log:
  Break out code related to the devlist command into a separate source file.
  
  Sponsored by:	Intel
  MFC after:	3 days

Added:
  head/sbin/nvmecontrol/devlist.c   (contents, props changed)
  head/sbin/nvmecontrol/nvmecontrol.h   (contents, props changed)
Modified:
  head/sbin/nvmecontrol/Makefile
  head/sbin/nvmecontrol/nvmecontrol.c

Modified: head/sbin/nvmecontrol/Makefile
==============================================================================
--- head/sbin/nvmecontrol/Makefile	Wed Jun 26 22:53:21 2013	(r252264)
+++ head/sbin/nvmecontrol/Makefile	Wed Jun 26 22:58:59 2013	(r252265)
@@ -1,6 +1,7 @@
 # $FreeBSD$
 
 PROG=	nvmecontrol
+SRCS=	nvmecontrol.c devlist.c
 MAN=	nvmecontrol.8
 
 .include <bsd.prog.mk>

Added: head/sbin/nvmecontrol/devlist.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sbin/nvmecontrol/devlist.c	Wed Jun 26 22:58:59 2013	(r252265)
@@ -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);
+}

Modified: head/sbin/nvmecontrol/nvmecontrol.c
==============================================================================
--- head/sbin/nvmecontrol/nvmecontrol.c	Wed Jun 26 22:53:21 2013	(r252264)
+++ head/sbin/nvmecontrol/nvmecontrol.c	Wed Jun 26 22:58:59 2013	(r252265)
@@ -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_da
 	}
 }
 
-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
 	}
 }
 
-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, st
 	}
 }
 
-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 s
 }
 
 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");

Added: head/sbin/nvmecontrol/nvmecontrol.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sbin/nvmecontrol/nvmecontrol.h	Wed Jun 26 22:58:59 2013	(r252265)
@@ -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
+



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201306262258.r5QMwxds095390>