From 82ea68f15b5b5bb0426dc28185fee07baa3729bb Mon Sep 17 00:00:00 2001 From: Steven Seungcheol Lee Date: Thu, 26 Aug 2021 10:53:24 +0900 Subject: [PATCH] Add New fields on PEL based on NVMe 2.0a Persistent Event Log header got new fields below [373:372] Generation Number [377:374] Reporting Context Information (RCI) Signed-off-by: Steven Seungcheol Lee [dwagner: removed nvme-ioct.c changes, part of libnvme] Signed-off-by: Daniel Wagner --- nvme-print.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/nvme-print.c b/nvme-print.c index 2e1fbc6a..268cc2ed 100644 --- a/nvme-print.c +++ b/nvme-print.c @@ -1143,6 +1143,10 @@ void json_persistent_event_log(void *pevent_log_info, __u32 size) json_object_add_value_string(root, "sn", sn); json_object_add_value_string(root, "mn", mn); json_object_add_value_string(root, "subnqn", subnqn); + json_object_add_value_uint(root, "gen_number", + le16_to_cpu(pevent_log_head->gen_number)); + json_object_add_value_uint(root, "rci", + le32_to_cpu(pevent_log_head->rci)); for (int i = 0; i < 32; i++) { if (pevent_log_head->seb[i] == 0) continue; @@ -1393,6 +1397,25 @@ void json_persistent_event_log(void *pevent_log_info, __u32 size) json_free_object(root); } +static void nvme_show_persistent_event_log_rci(__le32 pel_header_rci) +{ + __u32 rci = le32_to_cpu(pel_header_rci); + __u32 rsvd19 = (rci & 0xfff80000) >> 19; + __u8 rce = (rci & 0x40000) >> 18; + __u8 rcpit = (rci & 0x30000) >> 16; + __u16 rcpid = rci & 0xffff; + + if(rsvd19) + printf(" [31:19] : %#x\tReserved\n", rsvd19); + printf("\tReporting Context Exists (RCE): %s(%u)\n", + rce ? "true" : "false", rce); + printf("\tReporting Context Port Identifier Type (RCPIT): %u(%s)\n", rcpit, + (rcpit == 0x00) ? "Does not already exist" : + (rcpit == 0x01) ? "NVM subsystem port" : + (rcpit == 0x10) ? "NVMe-MI port" : "Reserved"); + printf("\tReporting Context Port Identifier (RCPID): %#x\n\n", rcpid); +} + void nvme_show_persistent_event_log(void *pevent_log_info, __u8 action, __u32 size, const char *devname, enum nvme_print_flags flags) @@ -1413,6 +1436,7 @@ void nvme_show_persistent_event_log(void *pevent_log_info, struct nvme_persistent_event_log *pevent_log_head; struct nvme_persistent_event_entry *pevent_entry_head; + int human = flags & VERBOSE; if (flags & BINARY) return d_raw((unsigned char *)pevent_log_info, size); if (flags & JSON) @@ -1448,6 +1472,12 @@ void nvme_show_persistent_event_log(void *pevent_log_info, printf("NVM Subsystem NVMe Qualified Name (SUBNQN): %-.*s\n", (int)sizeof(pevent_log_head->subnqn), pevent_log_head->subnqn); + printf("Generation Number: %u\n", + le16_to_cpu(pevent_log_head->gen_number)); + printf("Reporting Context Information (RCI): %u\n", + le32_to_cpu(pevent_log_head->rci)); + if (human) + nvme_show_persistent_event_log_rci(pevent_log_head->rci); printf("Supported Events Bitmap: "); for (int i = 0; i < 32; i++) { if (pevent_log_head->seb[i] == 0) -- 2.50.1