]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
nvme-print: Refactor CMBLOC and PMRSTS registers function
authorTokunori Ikegami <ikegami.t@gmail.com>
Sat, 23 Mar 2024 02:18:56 +0000 (11:18 +0900)
committerDaniel Wagner <wagi@monom.org>
Tue, 9 Apr 2024 15:23:31 +0000 (17:23 +0200)
Move the mmio_read up the call chain.

Signed-off-by: Tokunori Ikegami <ikegami.t@gmail.com>
nvme-print-json.c
nvme-print-stdout.c
nvme-print.c
nvme-print.h

index 870c98b455c6e2959f81fec527f5f73f08b08093..ed8f32327fc63df6991ae47f6ef4994c2a9ea47c 100644 (file)
@@ -1049,13 +1049,11 @@ static void json_registers_acq(uint64_t acq, struct json_object *r)
        obj_add_prix64(r, "Admin Completion Queue Base (ACQB)", acq);
 }
 
-static void json_registers_cmbloc(uint32_t cmbloc, void *bar, struct json_object *r)
+static void json_registers_cmbloc(uint32_t cmbloc, bool support, struct json_object *r)
 {
-       uint32_t cmbsz = mmio_read32(bar + NVME_REG_CMBSZ);
-
        obj_add_uint_x(r, "cmbloc", cmbloc);
 
-       if (!cmbsz) {
+       if (!support) {
                obj_add_result(r, "Controller Memory Buffer feature is not supported");
                return;
        }
@@ -1184,17 +1182,15 @@ static void json_registers_pmrctl(uint32_t pmrctl, struct json_object *r)
        obj_add_str(r, "Enable (EN)", pmrctl & 1 ? "Ready" : "Disabled");
 }
 
-static void json_registers_pmrsts(uint32_t pmrsts, void *bar, struct json_object *r)
+static void json_registers_pmrsts(uint32_t pmrsts, bool ready, struct json_object *r)
 {
-       uint32_t pmrctl = mmio_read32(bar + NVME_REG_PMRCTL);
-
        obj_add_uint_x(r, "pmrsts", pmrsts);
 
        obj_add_uint_x(r, "Controller Base Address Invalid (CBAI)", (pmrsts & 0x1000) >> 12);
        obj_add_str(r, "Health Status (HSTS)",
-                    nvme_register_pmr_hsts_to_string((pmrsts & 0xe00) >> 9));
+                   nvme_register_pmr_hsts_to_string((pmrsts & 0xe00) >> 9));
        obj_add_str(r, "Not Ready (NRDY)",
-                    !(pmrsts & 0x100) && (pmrctl & 1) ? "Ready" : "Not ready");
+                   !(pmrsts & 0x100) && ready ? "Ready" : "Not ready");
        obj_add_uint_x(r, "Error (ERR)", pmrsts & 0xff);
 }
 
@@ -2543,11 +2539,16 @@ static void json_ctrl_registers_acq(void *bar, struct json_object *r)
 static void json_ctrl_registers_cmbloc(void *bar, struct json_object *r)
 {
        uint32_t cmbloc = mmio_read32(bar + NVME_REG_CMBLOC);
+       uint32_t cmbsz;
+       bool support;
 
-       if (human())
-               json_registers_cmbloc(cmbloc, bar, obj_create_array_obj(r, "cmbloc"));
-       else
+       if (human()) {
+               cmbsz = mmio_read32(bar + NVME_REG_CMBSZ);
+               support = nvme_registers_cmbloc_support(cmbsz);
+               json_registers_cmbloc(cmbloc, support, obj_create_array_obj(r, "cmbloc"));
+       } else {
                obj_add_int(r, "cmbloc", cmbloc);
+       }
 }
 
 static void json_ctrl_registers_cmbsz(void *bar, struct json_object *r)
@@ -2633,11 +2634,16 @@ static void json_ctrl_registers_pmrctl(void *bar, struct json_object *r)
 static void json_ctrl_registers_pmrsts(void *bar, struct json_object *r)
 {
        uint32_t pmrsts = mmio_read32(bar + NVME_REG_PMRSTS);
+       uint32_t pmrctl;
+       bool ready;
 
-       if (human())
-               json_registers_pmrsts(pmrsts, bar, obj_create_array_obj(r, "pmrsts"));
-       else
+       if (human()) {
+               pmrctl = mmio_read32(bar + NVME_REG_PMRCTL);
+               ready = nvme_registers_pmrctl_ready(pmrctl);
+               json_registers_pmrsts(pmrsts, ready, obj_create_array_obj(r, "pmrsts"));
+       } else {
                obj_add_int(r, "pmrsts", pmrsts);
+       }
 }
 
 static void json_ctrl_registers_pmrebs(void *bar, struct json_object *r)
index 0b74561913b368a43ae745a895464965456fb12a..d2b36df18f787a8e89e42267ece89510fdb44d81 100644 (file)
@@ -1225,14 +1225,15 @@ static void stdout_registers_aqa(__u32 aqa)
        printf("\tAdmin Submission Queue Size (ASQS): %u\n\n", NVME_AQA_ASQS(aqa) + 1);
 }
 
-static void stdout_registers_cmbloc(__u32 cmbloc, __u32 cmbsz)
+static void stdout_registers_cmbloc(__u32 cmbloc, bool support)
 {
        static const char * const enforced[] = { "Enforced", "Not Enforced" };
 
-       if (cmbsz == 0) {
+       if (!support) {
                printf("\tController Memory Buffer feature is not supported\n\n");
                return;
        }
+
        printf("\tOffset                                                        (OFST): ");
        printf("%#x (See cmbsz.szu for granularity)\n", (cmbloc & 0xfffff000) >> 12);
 
index 0a8deb2a8bd9bdc6425931fcfb06a103f80cfd6f..ed58032fa684fc9ff461e47db62e337a4a9f4716 100644 (file)
@@ -362,6 +362,15 @@ const char *nvme_register_pmr_pmrszu_to_string(__u8 pmrszu)
        }
 }
 
+bool nvme_registers_cmbloc_support(__u32 cmbsz)
+{
+       return !!cmbsz;
+}
+
+bool nvme_registers_pmrctl_ready(__u32 pmrctl)
+{
+       return NVME_PMRCTL_EN(pmrctl);
+}
 void nvme_show_ctrl_registers(void *bar, bool fabrics, enum nvme_print_flags flags)
 {
        nvme_print(ctrl_registers, flags, bar, fabrics);
index d2a32f5a0531bd00b2e6c7a024bf0bccc7089fc6..fcca8e935a64971cdf31800247aac1a598c6a4d7 100644 (file)
@@ -312,4 +312,6 @@ void nvme_show_perror(const char *msg);
 void nvme_show_error_status(int status, const char *msg, ...);
 void nvme_show_init(void);
 void nvme_show_finish(void);
+bool nvme_registers_cmbloc_support(__u32 cmbsz);
+bool nvme_registers_pmrctl_ready(__u32 pmrctl);
 #endif /* NVME_PRINT_H */