All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bin Meng <bmeng.cn@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 12/14] nvme: Adjust the 'nvme' command to use blk_common_cmd()
Date: Tue, 22 Aug 2017 08:15:17 -0700	[thread overview]
Message-ID: <1503414919-30820-13-git-send-email-bmeng.cn@gmail.com> (raw)
In-Reply-To: <1503414919-30820-1-git-send-email-bmeng.cn@gmail.com>

Instead of having separate code in the 'nvme' command, adjust it to use
the common function.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
---

 cmd/nvme.c                 | 195 +++++++--------------------------------------
 doc/README.nvme            |   4 +-
 include/config_fallbacks.h |   1 +
 3 files changed, 30 insertions(+), 170 deletions(-)

diff --git a/cmd/nvme.c b/cmd/nvme.c
index e1ef95f..63a8e5a 100644
--- a/cmd/nvme.c
+++ b/cmd/nvme.c
@@ -9,189 +9,48 @@
 #include <command.h>
 #include <dm.h>
 #include <nvme.h>
-#include <part.h>
-#include <linux/math64.h>
 
-static int nvme_curr_device;
+static int nvme_curr_dev;
 
-static int do_nvme_scan(cmd_tbl_t *cmdtp, int flag,
-		int argc, char * const argv[])
+static int do_nvme(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
 	int ret;
 
-	ret = nvme_scan_namespace();
-	if (ret)
-		return CMD_RET_FAILURE;
+	if (argc == 2) {
+		if (strncmp(argv[1], "scan", 4) == 0) {
+			ret = nvme_scan_namespace();
+			if (ret)
+				return CMD_RET_FAILURE;
 
-	return CMD_RET_SUCCESS;
-}
-
-static int do_nvme_list(cmd_tbl_t *cmdtp, int flag,
-		int argc, char * const argv[])
-{
-	blk_list_devices(IF_TYPE_NVME);
-
-	return CMD_RET_SUCCESS;
-}
-
-static int do_nvme_info(cmd_tbl_t *cmdtp, int flag,
-		int argc, char * const argv[])
-{
-	int devnum;
-	struct udevice *udev;
-	int ret;
-
-	if (argc > 1)
-		devnum = (int)simple_strtoul(argv[1], NULL, 10);
-	else
-		devnum = nvme_curr_device;
-
-	ret = blk_get_device(IF_TYPE_NVME, devnum, &udev);
-	if (ret < 0)
-		return CMD_RET_FAILURE;
-
-	nvme_print_info(udev);
-
-	return CMD_RET_SUCCESS;
-}
-
-static int do_nvme_device(cmd_tbl_t *cmdtp, int flag,
-		int argc, char * const argv[])
-{
-	if (argc > 1) {
-		int devnum = (int)simple_strtoul(argv[1], NULL, 10);
-
-		if (!blk_show_device(IF_TYPE_NVME, devnum)) {
-			nvme_curr_device = devnum;
-			printf("... is now current device\n");
-		} else {
-			return CMD_RET_FAILURE;
+			return ret;
 		}
-	} else {
-		blk_show_device(IF_TYPE_NVME, nvme_curr_device);
-	}
+		if (strncmp(argv[1], "deta", 4) == 0) {
+			struct udevice *udev;
 
-	return CMD_RET_SUCCESS;
-}
+			ret = blk_get_device(IF_TYPE_NVME, nvme_curr_dev,
+					     &udev);
+			if (ret < 0)
+				return CMD_RET_FAILURE;
 
-static int do_nvme_part(cmd_tbl_t *cmdtp, int flag,
-		int argc, char * const argv[])
-{
-	if (argc > 1) {
-		int devnum = (int)simple_strtoul(argv[2], NULL, 10);
+			nvme_print_info(udev);
 
-		if (blk_print_part_devnum(IF_TYPE_NVME, devnum)) {
-			printf("\nNVMe device %d not available\n", devnum);
-			return CMD_RET_FAILURE;
+			return ret;
 		}
-	} else {
-		blk_print_part_devnum(IF_TYPE_NVME, nvme_curr_device);
-	}
-
-	return CMD_RET_SUCCESS;
-}
-
-static int do_nvme_read(cmd_tbl_t *cmdtp, int flag, int argc,
-		char * const argv[])
-{
-	unsigned long time;
-	if (argc != 4)
-		return CMD_RET_USAGE;
-
-	ulong addr = simple_strtoul(argv[1], NULL, 16);
-	ulong cnt = simple_strtoul(argv[3], NULL, 16);
-	ulong n;
-	lbaint_t blk = simple_strtoul(argv[2], NULL, 16);
-
-	printf("\nNVMe read: device %d block # " LBAFU " count %ld ... ",
-	       nvme_curr_device, blk, cnt);
-
-	time = get_timer(0);
-	n = blk_read_devnum(IF_TYPE_NVME, nvme_curr_device, blk,
-			    cnt, (ulong *)addr);
-	time = get_timer(time);
-
-	printf("read: %s\n", (n == cnt) ? "OK" : "ERROR");
-	printf("%lu bytes read in %lu ms", cnt * 512, time);
-	if (time > 0) {
-		puts(" (");
-		print_size(div_u64(cnt * 512, time) * 1000, "/s");
-		puts(")");
 	}
-	puts("\n");
-
-	return (n == cnt) ? CMD_RET_SUCCESS : CMD_RET_FAILURE;
-}
-
-static int do_nvme_write(cmd_tbl_t *cmdtp, int flag, int argc,
-		char * const argv[])
-{
-	unsigned long time;
-	if (argc != 4)
-		return CMD_RET_USAGE;
-
-	ulong addr = simple_strtoul(argv[1], NULL, 16);
-	ulong cnt = simple_strtoul(argv[3], NULL, 16);
-	ulong n;
-	lbaint_t blk = simple_strtoul(argv[2], NULL, 16);
-
-	printf("\nNVMe write: device %d block # " LBAFU " count %ld ... ",
-	       nvme_curr_device, blk, cnt);
-
-	time = get_timer(0);
-	n = blk_write_devnum(IF_TYPE_NVME, nvme_curr_device, blk,
-			    cnt, (ulong *)addr);
-	time = get_timer(time);
-
-	printf("write: %s\n", (n == cnt) ? "OK" : "ERROR");
-	printf("%lu bytes write in %lu ms", cnt * 512, time);
-	if (time > 0) {
-		puts(" (");
-		print_size(div_u64(cnt * 512, time) * 1000, "/s");
-		puts(")");
-	}
-	puts("\n");
-
-	return (n == cnt) ? CMD_RET_SUCCESS : CMD_RET_FAILURE;
-}
-
-static cmd_tbl_t cmd_nvme[] = {
-	U_BOOT_CMD_MKENT(scan, 1, 1, do_nvme_scan, "", ""),
-	U_BOOT_CMD_MKENT(list, 1, 1, do_nvme_list, "", ""),
-	U_BOOT_CMD_MKENT(info, 2, 1, do_nvme_info, "", ""),
-	U_BOOT_CMD_MKENT(device, 2, 1, do_nvme_device, "", ""),
-	U_BOOT_CMD_MKENT(part, 2, 1, do_nvme_part, "", ""),
-	U_BOOT_CMD_MKENT(write, 4, 0, do_nvme_write, "", ""),
-	U_BOOT_CMD_MKENT(read, 4, 0, do_nvme_read, "", "")
-};
-
-static int do_nvmecops(cmd_tbl_t *cmdtp, int flag, int argc,
-		char * const argv[])
-{
-	cmd_tbl_t *cp;
-
-	cp = find_cmd_tbl(argv[1], cmd_nvme, ARRAY_SIZE(cmd_nvme));
-
-	argc--;
-	argv++;
-
-	if (cp == NULL || argc > cp->maxargs)
-		return CMD_RET_USAGE;
-
-	if (flag == CMD_FLAG_REPEAT && !cp->repeatable)
-		return CMD_RET_SUCCESS;
 
-	return cp->cmd(cmdtp, flag, argc, argv);
+	return blk_common_cmd(argc, argv, IF_TYPE_NVME, &nvme_curr_dev);
 }
 
 U_BOOT_CMD(
-	nvme, 8, 1, do_nvmecops,
+	nvme, 8, 1, do_nvme,
 	"NVM Express sub-system",
-	"\nnvme scan - scan NVMe blk devices\n"
-	"nvme list - show all available NVMe blk devices\n"
-	"nvme info [dev]- show current or a specific NVMe blk device\n"
-	"nvme device [dev] - show or set current device\n"
-	"nvme part [dev] - print partition table\n"
-	"nvme read  addr blk# cnt\n"
-	"nvme write addr blk# cnt"
+	"scan - scan NVMe devices\n"
+	"nvme detail - show details of current NVMe device\n"
+	"nvme info - show all available NVMe devices\n"
+	"nvme device [dev] - show or set current NVMe device\n"
+	"nvme part [dev] - print partition table of one or all NVMe devices\n"
+	"nvme read addr blk# cnt - read `cnt' blocks starting at block\n"
+	"     `blk#' to memory address `addr'\n"
+	"nvme write addr blk# cnt - write `cnt' blocks starting at block\n"
+	"     `blk#' from memory address `addr'"
 );
diff --git a/doc/README.nvme b/doc/README.nvme
index 3afa912..d9bda23 100644
--- a/doc/README.nvme
+++ b/doc/README.nvme
@@ -50,14 +50,14 @@ identified.
 
 To list all of the NVMe hard disks, try:
 
-  => nvme list
+  => nvme info
   Device 0: Vendor: 0x8086 Rev: 8DV10131 Prod: CVFT535600LS400BGN
 	    Type: Hard Disk
 	    Capacity: 381554.0 MB = 372.6 GB (781422768 x 512)
 
 and print out detailed information for controller and namespaces via:
 
-  => nvme info
+  => nvme detail
 
 Raw block read/write to can be done via the 'nvme read/write' commands:
 
diff --git a/include/config_fallbacks.h b/include/config_fallbacks.h
index 961a83d..d1bde5f 100644
--- a/include/config_fallbacks.h
+++ b/include/config_fallbacks.h
@@ -50,6 +50,7 @@
 	defined(CONFIG_CMD_PART) || \
 	defined(CONFIG_CMD_GPT) || \
 	defined(CONFIG_MMC) || \
+	defined(CONFIG_NVME) || \
 	defined(CONFIG_SYSTEMACE) || \
 	defined(CONFIG_SANDBOX)
 #define HAVE_BLOCK_DEVICE
-- 
2.9.2

  parent reply	other threads:[~2017-08-22 15:15 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-22 15:15 [U-Boot] [PATCH 00/14] nvme: Various bug fixes and updates Bin Meng
2017-08-22 15:15 ` [U-Boot] [PATCH 01/14] nvme: Remove useless defines Bin Meng
2017-08-29  2:55   ` [U-Boot] [U-Boot,01/14] " Tom Rini
2017-08-22 15:15 ` [U-Boot] [PATCH 02/14] nvme: Fix getting PCI vendor id of the NVMe block device Bin Meng
2017-08-29  2:55   ` [U-Boot] [U-Boot, " Tom Rini
2017-08-22 15:15 ` [U-Boot] [PATCH 03/14] nvme: Fix ndev->queues allocation Bin Meng
2017-08-29  2:55   ` [U-Boot] [U-Boot,03/14] " Tom Rini
2017-08-22 15:15 ` [U-Boot] [PATCH 04/14] nvme: Fix endianness assignment to prp2 in nvme_identify() Bin Meng
2017-08-29  2:55   ` [U-Boot] [U-Boot, " Tom Rini
2017-08-22 15:15 ` [U-Boot] [PATCH 05/14] nvme: Cache controller's capabilities Bin Meng
2017-08-29  2:55   ` [U-Boot] [U-Boot,05/14] " Tom Rini
2017-08-22 15:15 ` [U-Boot] [PATCH 06/14] nvme: Respect timeout when en/disabling the controller Bin Meng
2017-08-29  2:56   ` [U-Boot] [U-Boot, " Tom Rini
2017-08-22 15:15 ` [U-Boot] [PATCH 07/14] nvme: Use macros to access NVMe queues Bin Meng
2017-08-29  2:56   ` [U-Boot] [U-Boot,07/14] " Tom Rini
2017-08-22 15:15 ` [U-Boot] [PATCH 08/14] nvme: Consolidate block read and write routines Bin Meng
2017-08-29  2:56   ` [U-Boot] [U-Boot, " Tom Rini
2017-08-22 15:15 ` [U-Boot] [PATCH 09/14] nvme: Apply cache operations on the DMA buffers Bin Meng
2017-08-29  2:56   ` [U-Boot] [U-Boot, " Tom Rini
2017-08-22 15:15 ` [U-Boot] [PATCH 10/14] nvme: Use blk_create_devicef() API Bin Meng
2017-08-29  2:56   ` [U-Boot] [U-Boot,10/14] " Tom Rini
2017-08-22 15:15 ` [U-Boot] [PATCH 11/14] nvme: Get rid of the global variable nvme_info Bin Meng
2017-08-29  2:56   ` [U-Boot] [U-Boot, " Tom Rini
2017-08-22 15:15 ` Bin Meng [this message]
2017-08-29  2:56   ` [U-Boot] [U-Boot, 12/14] nvme: Adjust the 'nvme' command to use blk_common_cmd() Tom Rini
2017-08-22 15:15 ` [U-Boot] [PATCH 13/14] sandbox: Add a dummy invalidate_dcache_range() function Bin Meng
2017-08-29  2:56   ` [U-Boot] [U-Boot, " Tom Rini
2017-08-22 15:15 ` [U-Boot] [PATCH 14/14] sandbox: Enable NVMe driver for build testing Bin Meng
2017-08-29  2:56   ` [U-Boot] [U-Boot, " Tom Rini
2017-08-25  1:14 ` [U-Boot] [PATCH 00/14] nvme: Various bug fixes and updates Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1503414919-30820-13-git-send-email-bmeng.cn@gmail.com \
    --to=bmeng.cn@gmail.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.