summaryrefslogtreecommitdiffstats
path: root/sbin/nvmecontrol
diff options
context:
space:
mode:
authorjimharris <jimharris@FreeBSD.org>2013-06-26 23:46:31 +0000
committerjimharris <jimharris@FreeBSD.org>2013-06-26 23:46:31 +0000
commitd67aed2f532632a2528eefcb53d629a814b476b4 (patch)
tree9afa0b6b3f1fb5be052bee1f7e5351bbdffe43c4 /sbin/nvmecontrol
parentc089ab01fb8f33d060ae82f527fd60d9dfa9f084 (diff)
downloadFreeBSD-src-d67aed2f532632a2528eefcb53d629a814b476b4.zip
FreeBSD-src-d67aed2f532632a2528eefcb53d629a814b476b4.tar.gz
Add generalized helper functions for printing hex data as part of
nvmecontrol commands. Submitted by: Joe Golio <joseph.golio@emc.com> Obtained from: EMC / Isilon Storage Division MFC after: 3 days
Diffstat (limited to 'sbin/nvmecontrol')
-rw-r--r--sbin/nvmecontrol/identify.c42
-rw-r--r--sbin/nvmecontrol/nvmecontrol.c48
-rw-r--r--sbin/nvmecontrol/nvmecontrol.h1
3 files changed, 51 insertions, 40 deletions
diff --git a/sbin/nvmecontrol/identify.c b/sbin/nvmecontrol/identify.c
index c405508..afe5ac0 100644
--- a/sbin/nvmecontrol/identify.c
+++ b/sbin/nvmecontrol/identify.c
@@ -42,25 +42,6 @@ __FBSDID("$FreeBSD$");
#include "nvmecontrol.h"
static void
-print_controller_hex(struct nvme_controller_data *cdata, uint32_t length)
-{
- uint32_t *p;
- uint32_t i, j;
-
- p = (uint32_t *)cdata;
- length /= sizeof(uint32_t);
-
- for (i = 0; i < length; i+=8) {
- printf("%03x: ", i*4);
- for (j = 0; j < 8; j++)
- printf("%08x ", p[i+j]);
- printf("\n");
- }
-
- printf("\n");
-}
-
-static void
print_controller(struct nvme_controller_data *cdata)
{
printf("Controller Capabilities/Features\n");
@@ -128,25 +109,6 @@ print_controller(struct nvme_controller_data *cdata)
}
static void
-print_namespace_hex(struct nvme_namespace_data *nsdata, uint32_t length)
-{
- uint32_t *p;
- uint32_t i, j;
-
- p = (uint32_t *)nsdata;
- length /= sizeof(uint32_t);
-
- for (i = 0; i < length; i+=8) {
- printf("%03x: ", i*4);
- for (j = 0; j < 8; j++)
- printf("%08x ", p[i+j]);
- printf("\n");
- }
-
- printf("\n");
-}
-
-static void
print_namespace(struct nvme_namespace_data *nsdata)
{
uint32_t i;
@@ -214,7 +176,7 @@ identify_ctrlr(int argc, char *argv[])
else
hexlength = offsetof(struct nvme_controller_data,
reserved5);
- print_controller_hex(&cdata, hexlength);
+ print_hex(&cdata, hexlength);
exit(EX_OK);
}
@@ -290,7 +252,7 @@ identify_ns(int argc, char *argv[])
else
hexlength = offsetof(struct nvme_namespace_data,
reserved6);
- print_namespace_hex(&nsdata, hexlength);
+ print_hex(&nsdata, hexlength);
exit(EX_OK);
}
diff --git a/sbin/nvmecontrol/nvmecontrol.c b/sbin/nvmecontrol/nvmecontrol.c
index b95ff32..eb41419 100644
--- a/sbin/nvmecontrol/nvmecontrol.c
+++ b/sbin/nvmecontrol/nvmecontrol.c
@@ -72,6 +72,54 @@ usage(void)
exit(EX_USAGE);
}
+static void
+print_bytes(void *data, uint32_t length)
+{
+ uint32_t i, j;
+ uint8_t *p, *end;
+
+ end = (uint8_t *)data + length;
+
+ for (i = 0; i < length; i++) {
+ p = (uint8_t *)data + (i*16);
+ printf("%03x: ", i*16);
+ for (j = 0; j < 16 && p < end; j++)
+ printf("%02x ", *p++);
+ if (p >= end)
+ break;
+ printf("\n");
+ }
+ printf("\n");
+}
+
+static void
+print_dwords(void *data, uint32_t length)
+{
+ uint32_t *p;
+ uint32_t i, j;
+
+ p = (uint32_t *)data;
+ length /= sizeof(uint32_t);
+
+ for (i = 0; i < length; i+=8) {
+ printf("%03x: ", i*4);
+ for (j = 0; j < 8; j++)
+ printf("%08x ", p[i+j]);
+ printf("\n");
+ }
+
+ printf("\n");
+}
+
+void
+print_hex(void *data, uint32_t length)
+{
+ if (length >= sizeof(uint32_t) || length % sizeof(uint32_t) == 0)
+ print_dwords(data, length);
+ else
+ print_bytes(data, length);
+}
+
void
read_controller_data(int fd, struct nvme_controller_data *cdata)
{
diff --git a/sbin/nvmecontrol/nvmecontrol.h b/sbin/nvmecontrol/nvmecontrol.h
index c05792e..422728b 100644
--- a/sbin/nvmecontrol/nvmecontrol.h
+++ b/sbin/nvmecontrol/nvmecontrol.h
@@ -57,6 +57,7 @@ void reset(int argc, char *argv[]);
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 print_hex(void *data, uint32_t length);
#endif
OpenPOWER on IntegriCloud