Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

src: nvmectl(8): Sync with FreeBSD nvmecontrol(8) r328763.



details:   https://anonhg.NetBSD.org/src/rev/fd6276e923ee
branches:  trunk
changeset: 318271:fd6276e923ee
user:      nonaka <nonaka%NetBSD.org@localhost>
date:      Tue Apr 17 08:54:35 2018 +0000
description:
nvmectl(8): Sync with FreeBSD nvmecontrol(8) r328763.

diffstat:

 sbin/nvmectl/Makefile   |    3 +-
 sbin/nvmectl/devlist.c  |    8 +-
 sbin/nvmectl/firmware.c |    8 +-
 sbin/nvmectl/identify.c |   22 ++++-
 sbin/nvmectl/logpage.c  |  115 ++++++++++---------------
 sbin/nvmectl/nvmectl.c  |   47 +---------
 sbin/nvmectl/nvmectl.h  |   16 ++-
 sbin/nvmectl/perftest.c |    8 +-
 sbin/nvmectl/reset.c    |    8 +-
 sbin/nvmectl/util.c     |  131 +++++++++++++++++++++++++++++
 sbin/nvmectl/wdc.c      |  213 +++++++----------------------------------------
 sys/dev/ic/nvmereg.h    |   93 ++++++++++++++++++++-
 12 files changed, 356 insertions(+), 316 deletions(-)

diffs (truncated from 1209 to 300 lines):

diff -r 410942819905 -r fd6276e923ee sbin/nvmectl/Makefile
--- a/sbin/nvmectl/Makefile     Tue Apr 17 08:47:43 2018 +0000
+++ b/sbin/nvmectl/Makefile     Tue Apr 17 08:54:35 2018 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: Makefile,v 1.3 2017/04/29 00:06:40 nonaka Exp $
+#      $NetBSD: Makefile,v 1.4 2018/04/17 08:54:35 nonaka Exp $
 
 .include <bsd.own.mk>
 
@@ -11,6 +11,7 @@
 SRCS+= perftest.c
 SRCS+= power.c
 SRCS+= reset.c
+SRCS+= util.c
 SRCS+= wdc.c
 SRCS+= bignum.c
 SRCS+= humanize_bignum.c
diff -r 410942819905 -r fd6276e923ee sbin/nvmectl/devlist.c
--- a/sbin/nvmectl/devlist.c    Tue Apr 17 08:47:43 2018 +0000
+++ b/sbin/nvmectl/devlist.c    Tue Apr 17 08:54:35 2018 +0000
@@ -1,6 +1,8 @@
-/*     $NetBSD: devlist.c,v 1.3 2018/03/17 11:07:26 jdolecek Exp $     */
+/*     $NetBSD: devlist.c,v 1.4 2018/04/17 08:54:35 nonaka Exp $       */
 
 /*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
  * Copyright (C) 2012-2013 Intel Corporation
  * All rights reserved.
  *
@@ -28,9 +30,9 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: devlist.c,v 1.3 2018/03/17 11:07:26 jdolecek Exp $");
+__RCSID("$NetBSD: devlist.c,v 1.4 2018/04/17 08:54:35 nonaka Exp $");
 #if 0
-__FBSDID("$FreeBSD: head/sbin/nvmecontrol/devlist.c 260381 2014-01-06 23:48:47Z jimharris $");
+__FBSDID("$FreeBSD: head/sbin/nvmecontrol/devlist.c 326276 2017-11-27 15:37:16Z pfg $");
 #endif
 #endif
 
diff -r 410942819905 -r fd6276e923ee sbin/nvmectl/firmware.c
--- a/sbin/nvmectl/firmware.c   Tue Apr 17 08:47:43 2018 +0000
+++ b/sbin/nvmectl/firmware.c   Tue Apr 17 08:54:35 2018 +0000
@@ -1,6 +1,8 @@
-/*     $NetBSD: firmware.c,v 1.2 2017/04/29 00:06:40 nonaka Exp $      */
+/*     $NetBSD: firmware.c,v 1.3 2018/04/17 08:54:35 nonaka Exp $      */
 
 /*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
  * Copyright (c) 2013 EMC Corp.
  * All rights reserved.
  *
@@ -31,9 +33,9 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: firmware.c,v 1.2 2017/04/29 00:06:40 nonaka Exp $");
+__RCSID("$NetBSD: firmware.c,v 1.3 2018/04/17 08:54:35 nonaka Exp $");
 #if 0
-__FBSDID("$FreeBSD: head/sbin/nvmecontrol/firmware.c 313188 2017-02-04 05:52:50Z imp $");
+__FBSDID("$FreeBSD: head/sbin/nvmecontrol/firmware.c 326276 2017-11-27 15:37:16Z pfg $");
 #endif
 #endif
 
diff -r 410942819905 -r fd6276e923ee sbin/nvmectl/identify.c
--- a/sbin/nvmectl/identify.c   Tue Apr 17 08:47:43 2018 +0000
+++ b/sbin/nvmectl/identify.c   Tue Apr 17 08:54:35 2018 +0000
@@ -1,6 +1,8 @@
-/*     $NetBSD: identify.c,v 1.3 2018/03/17 11:07:26 jdolecek Exp $    */
+/*     $NetBSD: identify.c,v 1.4 2018/04/17 08:54:35 nonaka Exp $      */
 
 /*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
  * Copyright (C) 2012-2013 Intel Corporation
  * All rights reserved.
  *
@@ -28,9 +30,9 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: identify.c,v 1.3 2018/03/17 11:07:26 jdolecek Exp $");
+__RCSID("$NetBSD: identify.c,v 1.4 2018/04/17 08:54:35 nonaka Exp $");
 #if 0
-__FBSDID("$FreeBSD: head/sbin/nvmecontrol/identify.c 253476 2013-07-19 21:40:57Z jimharris $");
+__FBSDID("$FreeBSD: head/sbin/nvmecontrol/identify.c 326276 2017-11-27 15:37:16Z pfg $");
 #endif
 #endif
 
@@ -72,6 +74,7 @@
                printf("Unlimited\n");
        else
                printf("%ld\n", sysconf(_SC_PAGESIZE) * (1 << cdata->mdts));
+       printf("Controller ID:              0x%02x\n", cdata->cntlid);
        printf("\n");
 
        printf("Admin Command Set Attributes\n");
@@ -85,6 +88,9 @@
        printf("Firmware Activate/Download:  %s\n",
                (cdata->oacs & NVME_ID_CTRLR_OACS_FW) ?
                "Supported" : "Not Supported");
+       printf("Namespace Managment:         %s\n",
+               (cdata->oacs & NVME_ID_CTRLR_OACS_NS) ?
+               "Supported" : "Not Supported");
        printf("Abort Command Limit:         %d\n", cdata->acl+1);
        printf("Async Event Request Limit:   %d\n", cdata->aerl+1);
        printf("Number of Firmware Slots:    ");
@@ -139,6 +145,16 @@
        printf("Volatile Write Cache:        %s\n",
                (cdata->vwc & NVME_ID_CTRLR_VWC_PRESENT) ?
                "Present" : "Not Present");
+
+       if (cdata->oacs & NVME_ID_CTRLR_OACS_NS) {
+               printf("\n");
+               printf("Namespace Drive Attributes\n");
+               printf("==========================\n");
+               print_bignum("NVM total cap:               ",
+                   cdata->untncap.tnvmcap, "");
+               print_bignum("NVM unallocated cap:         ",
+                   cdata->untncap.unvmcap, "");
+       }
 }
 
 static void
diff -r 410942819905 -r fd6276e923ee sbin/nvmectl/logpage.c
--- a/sbin/nvmectl/logpage.c    Tue Apr 17 08:47:43 2018 +0000
+++ b/sbin/nvmectl/logpage.c    Tue Apr 17 08:54:35 2018 +0000
@@ -1,6 +1,8 @@
-/*     $NetBSD: logpage.c,v 1.5 2018/03/17 11:07:26 jdolecek Exp $     */
+/*     $NetBSD: logpage.c,v 1.6 2018/04/17 08:54:35 nonaka Exp $       */
 
 /*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
  * Copyright (c) 2013 EMC Corp.
  * All rights reserved.
  *
@@ -31,9 +33,9 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: logpage.c,v 1.5 2018/03/17 11:07:26 jdolecek Exp $");
+__RCSID("$NetBSD: logpage.c,v 1.6 2018/04/17 08:54:35 nonaka Exp $");
 #if 0
-__FBSDID("$FreeBSD: head/sbin/nvmecontrol/logpage.c 314230 2017-02-25 00:09:16Z imp $");
+__FBSDID("$FreeBSD: head/sbin/nvmecontrol/logpage.c 326276 2017-11-27 15:37:16Z pfg $");
 #endif
 #endif
 
@@ -52,12 +54,12 @@
 #include <unistd.h>
 
 #include "nvmectl.h"
-#include "bn.h"
 
 #define DEFAULT_SIZE   (4096)
 #define MAX_FW_SLOTS   (7)
 
-typedef void (*print_fn_t)(void *buf, uint32_t size);
+typedef void (*print_fn_t)(const struct nvm_identify_controller *cdata, void *buf,
+    uint32_t size);
 
 struct kv_name {
        uint32_t key;
@@ -78,18 +80,17 @@
 }
 
 static void
-print_bin(void *data, uint32_t length)
+print_log_hex(const struct nvm_identify_controller *cdata __unused, void *data,
+    uint32_t length)
 {
-       write(STDOUT_FILENO, data, length);
+       print_hex(data, length);
 }
 
-/* "Missing" from endian.h */
-static __inline uint64_t
-le48dec(const void *pp)
+static void
+print_bin(const struct nvm_identify_controller *cdata __unused, void *data,
+    uint32_t length)
 {
-       uint8_t const *p = (uint8_t const *)pp;
-
-       return (((uint64_t)le16dec(p + 4) << 32) | le32dec(p));
+       write(STDOUT_FILENO, data, length);
 }
 
 static void *
@@ -127,7 +128,8 @@
 }
 
 static void
-print_log_error(void *buf, uint32_t size)
+print_log_error(const struct nvm_identify_controller *cdata __unused, void *buf,
+    uint32_t size)
 {
        int                                     i, nentries;
        struct nvme_error_information_entry     *entry = buf;
@@ -171,46 +173,6 @@
        }
 }
 
-#define        METRIX_PREFIX_BUFSIZ    17
-#define        NO_METRIX_PREFIX_BUFSIZ 42
-
-static void
-print_bignum(const char *title, uint64_t v[2], const char *suffix)
-{
-       char buf[64];
-       uint8_t tmp[16];
-       uint64_t l = le64toh(v[0]);
-       uint64_t h = le64toh(v[1]);
-
-       tmp[ 0] = (h >> 56) & 0xff;
-       tmp[ 1] = (h >> 48) & 0xff;
-       tmp[ 2] = (h >> 40) & 0xff;
-       tmp[ 3] = (h >> 32) & 0xff;
-       tmp[ 4] = (h >> 24) & 0xff;
-       tmp[ 5] = (h >> 16) & 0xff;
-       tmp[ 6] = (h >> 8) & 0xff;
-       tmp[ 7] = h & 0xff;
-       tmp[ 8] = (l >> 56) & 0xff;
-       tmp[ 9] = (l >> 48) & 0xff;
-       tmp[10] = (l >> 40) & 0xff;
-       tmp[11] = (l >> 32) & 0xff;
-       tmp[12] = (l >> 24) & 0xff;
-       tmp[13] = (l >> 16) & 0xff;
-       tmp[14] = (l >> 8) & 0xff;
-       tmp[15] = l & 0xff;
-
-       buf[0] = '\0';
-       BIGNUM *bn = BN_bin2bn(tmp, __arraycount(tmp), NULL);
-       if (bn != NULL) {
-               humanize_bignum(buf, METRIX_PREFIX_BUFSIZ + strlen(suffix),
-                   bn, suffix, HN_AUTOSCALE, HN_DECIMAL);
-               BN_free(bn);
-       }
-       if (buf[0] == '\0')
-               snprintf(buf, sizeof(buf), "0x%016jx%016jx", h, l);
-       printf("%-31s %s\n", title, buf);
-}
-
 static void
 print_temp(uint16_t t)
 {
@@ -219,7 +181,8 @@
 }
 
 static void
-print_log_health(void *buf, uint32_t size __unused)
+print_log_health(const struct nvm_identify_controller *cdata __unused, void *buf,
+    uint32_t size __unused)
 {
        struct nvme_health_information_page *health = buf;
        int i;
@@ -278,16 +241,23 @@
 }
 
 static void
-print_log_firmware(void *buf, uint32_t size __unused)
+print_log_firmware(const struct nvm_identify_controller *cdata, void *buf,
+    uint32_t size __unused)
 {
-       u_int                           i;
+       u_int                           i, slots;
        const char                      *status;
        struct nvme_firmware_page       *fw = buf;
 
        printf("Firmware Slot Log\n");
        printf("=================\n");
 
-       for (i = 0; i < MAX_FW_SLOTS; i++) {
+       if (!(cdata->oacs & NVME_ID_CTRLR_OACS_FW))
+               slots = 1;
+       else
+               slots = MIN(__SHIFTOUT(cdata->frmw, NVME_ID_CTRLR_FRMW_NSLOT),
+                   MAX_FW_SLOTS);
+
+       for (i = 0; i < slots; i++) {
                printf("Slot %d: ", i + 1);
                if (__SHIFTOUT(fw->afi, NVME_FW_PAGE_AFI_SLOT) == i + 1)
                        status = "  Active";
@@ -314,7 +284,8 @@
  * offset 147: it is only 1 byte, not 6.
  */
 static void
-print_intel_temp_stats(void *buf, uint32_t size __unused)
+print_intel_temp_stats(const struct nvm_identify_controller *cdata __unused,
+    void *buf, uint32_t size __unused)
 {
        struct intel_log_temp_stats     *temp = buf;
 
@@ -344,7 +315,8 @@
  * Read and write stats pages have identical encoding.
  */



Home | Main Index | Thread Index | Old Index