Skip to content

Commit 2247a5d

Browse files
ikegami-tigaw
authored andcommitted
nvme: add rotational-media-info-log command
Since added the NVMe 2.1 log page. Signed-off-by: Tokunori Ikegami <[email protected]>
1 parent b9b34be commit 2247a5d

File tree

9 files changed

+104
-1
lines changed

9 files changed

+104
-1
lines changed

nvme-builtin.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ COMMAND_LIST(
5959
ENTRY("media-unit-stat-log", "Retrieve the configuration and wear of media units, show it", get_media_unit_stat_log)
6060
ENTRY("supported-cap-config-log", "Retrieve the list of Supported Capacity Configuration Descriptors", get_supp_cap_config_log)
6161
ENTRY("mgmt-addr-list-log", "Retrieve Management Address List Log, show it", get_mgmt_addr_list_log)
62+
ENTRY("rotational-media-info-log", "Retrieve Rotational Media Information Log, show it", get_rotational_media_info_log)
6263
ENTRY("set-feature", "Set a feature and show the resulting value", set_feature)
6364
ENTRY("set-property", "Set a property and show the resulting value", set_property)
6465
ENTRY("get-property", "Get a property and show the resulting value", get_property)

nvme-print-binary.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,11 @@ static void binary_mgmt_addr_list_log(struct nvme_mgmt_addr_list_log *ma_list)
312312
d_raw((unsigned char *)ma_list, sizeof(*ma_list));
313313
}
314314

315+
static void binary_rotational_media_info_log(struct nvme_rotational_media_info_log *info)
316+
{
317+
d_raw((unsigned char *)info, sizeof(*info));
318+
}
319+
315320
static struct print_ops binary_print_ops = {
316321
/* libnvme types.h print functions */
317322
.ana_log = binary_ana_log,
@@ -379,6 +384,7 @@ static struct print_ops binary_print_ops = {
379384
.show_init = NULL,
380385
.show_finish = NULL,
381386
.mgmt_addr_list_log = binary_mgmt_addr_list_log,
387+
.rotational_media_info_log = binary_rotational_media_info_log,
382388

383389
/* libnvme tree print functions */
384390
.list_item = NULL,

nvme-print-json.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4638,6 +4638,21 @@ static void json_mgmt_addr_list_log(struct nvme_mgmt_addr_list_log *ma_list)
46384638
json_print(r);
46394639
}
46404640

4641+
static void json_rotational_media_info_log(struct nvme_rotational_media_info_log *info)
4642+
{
4643+
struct json_object *r = json_create_object();
4644+
4645+
obj_add_uint(r, "endgid", le16_to_cpu(info->endgid));
4646+
obj_add_uint(r, "numa", le16_to_cpu(info->numa));
4647+
obj_add_uint(r, "nrs", le16_to_cpu(info->nrs));
4648+
obj_add_uint(r, "spinc", le32_to_cpu(info->spinc));
4649+
obj_add_uint(r, "fspinc", le32_to_cpu(info->fspinc));
4650+
obj_add_uint(r, "ldc", le32_to_cpu(info->ldc));
4651+
obj_add_uint(r, "fldc", le32_to_cpu(info->fldc));
4652+
4653+
json_print(r);
4654+
}
4655+
46414656
static struct print_ops json_print_ops = {
46424657
/* libnvme types.h print functions */
46434658
.ana_log = json_ana_log,
@@ -4706,6 +4721,7 @@ static struct print_ops json_print_ops = {
47064721
.show_init = json_show_init,
47074722
.show_finish = json_show_finish,
47084723
.mgmt_addr_list_log = json_mgmt_addr_list_log,
4724+
.rotational_media_info_log = json_rotational_media_info_log,
47094725

47104726
/* libnvme tree print functions */
47114727
.list_item = json_list_item,

nvme-print-stdout.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5566,6 +5566,17 @@ static void stdout_mgmt_addr_list_log(struct nvme_mgmt_addr_list_log *ma_list)
55665566
printf("All management address descriptors reserved\n");
55675567
}
55685568

5569+
static void stdout_rotational_media_info_log(struct nvme_rotational_media_info_log *info)
5570+
{
5571+
printf("endgid: %u\n", le16_to_cpu(info->endgid));
5572+
printf("numa: %u\n", le16_to_cpu(info->numa));
5573+
printf("nrs: %u\n", le16_to_cpu(info->nrs));
5574+
printf("spinc: %u\n", le32_to_cpu(info->spinc));
5575+
printf("fspinc: %u\n", le32_to_cpu(info->fspinc));
5576+
printf("ldc: %u\n", le32_to_cpu(info->ldc));
5577+
printf("fldc: %u\n", le32_to_cpu(info->fldc));
5578+
}
5579+
55695580
static struct print_ops stdout_print_ops = {
55705581
/* libnvme types.h print functions */
55715582
.ana_log = stdout_ana_log,
@@ -5634,6 +5645,7 @@ static struct print_ops stdout_print_ops = {
56345645
.show_init = NULL,
56355646
.show_finish = NULL,
56365647
.mgmt_addr_list_log = stdout_mgmt_addr_list_log,
5648+
.rotational_media_info_log = stdout_rotational_media_info_log,
56375649

56385650
/* libnvme tree print functions */
56395651
.list_item = stdout_list_item,

nvme-print.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1497,3 +1497,9 @@ void nvme_show_mgmt_addr_list_log(struct nvme_mgmt_addr_list_log *ma_list, nvme_
14971497
{
14981498
nvme_print(mgmt_addr_list_log, flags, ma_list);
14991499
}
1500+
1501+
void nvme_show_rotational_media_info_log(struct nvme_rotational_media_info_log *info,
1502+
nvme_print_flags_t flags)
1503+
{
1504+
nvme_print(rotational_media_info_log, flags, info);
1505+
}

nvme-print.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ struct print_ops {
8989
void (*show_init)(void);
9090
void (*show_finish)(void);
9191
void (*mgmt_addr_list_log)(struct nvme_mgmt_addr_list_log *ma_log);
92+
void (*rotational_media_info_log)(struct nvme_rotational_media_info_log *info);
9293

9394
/* libnvme tree print functions */
9495
void (*list_item)(nvme_ns_t n);
@@ -332,4 +333,6 @@ void json_print(struct json_object *r);
332333
struct json_object *obj_create_array_obj(struct json_object *o, const char *k);
333334
void nvme_show_mgmt_addr_list_log(struct nvme_mgmt_addr_list_log *ma_list,
334335
nvme_print_flags_t flags);
336+
void nvme_show_rotational_media_info_log(struct nvme_rotational_media_info_log *info,
337+
nvme_print_flags_t flags);
335338
#endif /* NVME_PRINT_H */

nvme-wrap.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,3 +436,12 @@ int nvme_cli_get_log_mgmt_addr_list(struct nvme_dev *dev, __u32 len,
436436
{
437437
return do_admin_op(get_log_mgmt_addr_list, dev, len, ma_list);
438438
}
439+
440+
int nvme_cli_get_log_rotational_media_info(struct nvme_dev *dev, __u16 endgid, __u32 len,
441+
struct nvme_rotational_media_info_log *info)
442+
{
443+
if (dev->type == NVME_DEV_DIRECT)
444+
return nvme_get_log_rotational_media_info(dev->direct.fd, endgid, len, info);
445+
446+
return -ENODEV;
447+
}

nvme-wrap.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,4 +149,7 @@ int nvme_cli_security_receive(struct nvme_dev *dev,
149149
int nvme_cli_get_log_mgmt_addr_list(struct nvme_dev *dev, __u32 len,
150150
struct nvme_mgmt_addr_list_log *ma_list);
151151

152+
int nvme_cli_get_log_rotational_media_info(struct nvme_dev *dev, __u16 endgid, __u32 len,
153+
struct nvme_rotational_media_info_log *info);
154+
152155
#endif /* _NVME_WRAP_H */

nvme.c

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ static const char *doper = "directive operation";
204204
static const char *dry = "show command instead of sending";
205205
static const char *dspec_w_dtype = "directive specification associated with directive type";
206206
static const char *dtype = "directive type";
207+
static const char *endgid = "Endurance Group Identifier (ENDGID)";
207208
static const char *force_unit_access = "force device to commit data before command completes";
208209
static const char *human_readable_directive = "show directive in readable format";
209210
static const char *human_readable_identify = "show identify in readable format";
@@ -3096,7 +3097,6 @@ static int create_ns(int argc, char **argv, struct command *cmd, struct plugin *
30963097
const char *nmic = "multipath and sharing capabilities (NMIC)";
30973098
const char *anagrpid = "ANA Group Identifier (ANAGRPID)";
30983099
const char *nvmsetid = "NVM Set Identifier (NVMSETID)";
3099-
const char *endgid = "Endurance Group Identifier (ENDGID)";
31003100
const char *csi = "command set identifier (CSI)";
31013101
const char *lbstm = "logical block storage tag mask (LBSTM)";
31023102
const char *nphndls = "Number of Placement Handles (NPHNDLS)";
@@ -10091,6 +10091,53 @@ static int get_mgmt_addr_list_log(int argc, char **argv, struct command *cmd, st
1009110091
return err;
1009210092
}
1009310093

10094+
static int get_rotational_media_info_log(int argc, char **argv, struct command *cmd,
10095+
struct plugin *plugin)
10096+
{
10097+
const char *desc = "Retrieve Rotational Media Information Log, show it";
10098+
nvme_print_flags_t flags;
10099+
int err = -1;
10100+
10101+
_cleanup_free_ struct nvme_rotational_media_info_log *info = NULL;
10102+
10103+
_cleanup_nvme_dev_ struct nvme_dev *dev = NULL;
10104+
10105+
struct config {
10106+
__u16 endgid;
10107+
};
10108+
10109+
struct config cfg = {
10110+
.endgid = 0,
10111+
};
10112+
10113+
NVME_ARGS(opts,
10114+
OPT_UINT("endg-id", 'e', &cfg.endgid, endgid));
10115+
10116+
err = parse_and_open(&dev, argc, argv, desc, opts);
10117+
if (err)
10118+
return err;
10119+
10120+
err = validate_output_format(nvme_cfg.output_format, &flags);
10121+
if (err < 0) {
10122+
nvme_show_error("Invalid output format");
10123+
return err;
10124+
}
10125+
10126+
info = nvme_alloc(sizeof(*info));
10127+
if (!info)
10128+
return -ENOMEM;
10129+
10130+
err = nvme_cli_get_log_rotational_media_info(dev, cfg.endgid, sizeof(*info), info);
10131+
if (!err)
10132+
nvme_show_rotational_media_info_log(info, flags);
10133+
else if (err > 0)
10134+
nvme_show_status(err);
10135+
else
10136+
nvme_show_perror("rotational media info log");
10137+
10138+
return err;
10139+
}
10140+
1009410141
void register_extension(struct plugin *plugin)
1009510142
{
1009610143
plugin->parent = &nvme;

0 commit comments

Comments
 (0)