コード例 #1
0
static void
devlist(int argc, char *argv[])
{
	struct nvme_controller_data	cdata;
	struct nvme_namespace_data	nsdata;
	struct stat			devstat;
	char				name[64], path[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:
			usage();
		}
	}

	ctrlr = -1;
	found = 0;

	while (1) {
		ctrlr++;
		sprintf(name, "nvme%d", ctrlr);
		sprintf(path, "/dev/%s", name);

		if (stat(path, &devstat) != 0)
			break;

		found++;

		fd = open(path, O_RDWR);
		if (fd < 0) {
			printf("Could not open %s. errno=%d (%s)\n", path,
			    errno, strerror(errno));
			exit_code = EX_NOPERM;
			continue;
		}

		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);
		}
	}

	if (found == 0)
		printf("No NVMe controllers found.\n");

	exit(exit_code);
}
コード例 #2
0
ファイル: devlist.c プロジェクト: ryo/netbsd-src
void
devlist(int argc, char *argv[])
{
	struct nvm_identify_controller	cdata;
	struct nvm_identify_namespace	nsdata;
	char				name[64];
	uint8_t				mn[64];
	uint32_t			i;
	int				ch, ctrlr, fd, found, ret;

	while ((ch = getopt(argc, argv, "")) != -1) {
		switch (ch) {
		default:
			devlist_usage();
		}
	}

	ctrlr = -1;
	found = 0;

	while (1) {
		ctrlr++;
		sprintf(name, "%s%d", NVME_CTRLR_PREFIX, ctrlr);

		ret = open_dev(name, &fd, 0, 0);

		if (ret != 0) {
			if (ret == EACCES) {
				warnx("could not open "_PATH_DEV"%s\n", name);
				continue;
			} else
				break;
		}

		found++;
		read_controller_data(fd, &cdata);
		nvme_strvis(mn, sizeof(mn), cdata.mn, sizeof(cdata.mn));
		printf("%6s: %s\n", name, mn);

		for (i = 0; i < cdata.nn; i++) {
			sprintf(name, "%s%d%s%d", NVME_CTRLR_PREFIX, ctrlr,
			    NVME_NS_PREFIX, i+1);
			read_namespace_data(fd, i+1, &nsdata);
			printf("  %10s (%lldMB)\n",
				name,
				nsdata.nsze *
				(long long)ns_get_sector_size(&nsdata) /
				1024 / 1024);
		}

		close(fd);
	}

	if (found == 0)
		printf("No NVMe controllers found.\n");

	exit(1);
}