]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
Add New fields on PEL based on NVMe 2.0a
authorSteven Seungcheol Lee <sc108.lee@samsung.com>
Thu, 26 Aug 2021 01:53:24 +0000 (10:53 +0900)
committerDaniel Wagner <dwagner@suse.de>
Mon, 15 Nov 2021 11:06:29 +0000 (12:06 +0100)
Persistent Event Log header got new fields below
[373:372] Generation Number
[377:374] Reporting Context Information (RCI)

Signed-off-by: Steven Seungcheol Lee <sc108.lee@samsung.com>
[dwagner: removed nvme-ioct.c changes, part of libnvme]
Signed-off-by: Daniel Wagner <dwagner@suse.de>
nvme-print.c

index 2e1fbc6a675919737480ad82ed8399c830fe720c..268cc2ed9d61e12acbbf7047be730af8c8b15889 100644 (file)
@@ -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)