]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
util: introduce int56_to_long() type conversion helper
authorTokunori Ikegami <ikegami.t@gmail.com>
Fri, 3 Jan 2025 13:15:54 +0000 (22:15 +0900)
committerDaniel Wagner <wagi@monom.org>
Fri, 3 Jan 2025 14:29:22 +0000 (15:29 +0100)
This is to remove unnecessary mask with 0x00FFFFFFFFFFFFFF.

Signed-off-by: Tokunori Ikegami <ikegami.t@gmail.com>
plugins/ocp/ocp-print-json.c
plugins/ocp/ocp-print-stdout.c
util/types.c
util/types.h

index 316f152e064eac70c69e1e3a43b79d946ab04d54..146dd0305e17978376b0aed1cb4075dc11d45f1c 100644 (file)
@@ -181,8 +181,7 @@ static void json_smart_extended_log_v1(void *data)
                (uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_EECE]));
        json_object_add_value_uint(root, "System data percent used",
                (__u8)log_data[SCAO_SDPU]);
-       json_object_add_value_uint64(root, "Refresh counts",
-               (uint64_t)(le64_to_cpu(*(uint64_t *)&log_data[SCAO_RFSC]) & 0x00FFFFFFFFFFFFFF));
+       json_object_add_value_uint64(root, "Refresh counts", int56_to_long(&log_data[SCAO_RFSC]));
        json_object_add_value_uint(root, "Max User data erase counts",
                (uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_MXUDEC]));
        json_object_add_value_uint(root, "Min User data erase counts",
index 7f767bbfb452fbd03e7adb50af8628feeddcf5d5..5880104af6947f5471f9cb9681f3db90b5bbbe12 100644 (file)
@@ -131,7 +131,7 @@ static void stdout_smart_extended_log(void *data, unsigned int version)
        printf("  System data percent used                      %d\n",
               (__u8)log_data[SCAO_SDPU]);
        printf("  Refresh counts                                %"PRIu64"\n",
-              (uint64_t)(le64_to_cpu(*(uint64_t *)&log_data[SCAO_RFSC]) & 0x00FFFFFFFFFFFFFF));
+              int56_to_long(&log_data[SCAO_RFSC]));
        printf("  Max User data erase counts                    %"PRIu32"\n",
               (uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_MXUDEC]));
        printf("  Min User data erase counts                    %"PRIu32"\n",
index cc2e7550b180ddf82f782f2a4691823194017362..a34479a55127796dfcb81d56b4dd1a3af8151a39 100644 (file)
@@ -5,6 +5,7 @@
 #include <string.h>
 #include <locale.h>
 #include <time.h>
+#include <limits.h>
 
 #include <ccan/endian/endian.h>
 
@@ -36,18 +37,30 @@ long double int128_to_double(__u8 *data)
        return result;
 }
 
-uint64_t int48_to_long(const __u8 *data)
+static uint64_t int_to_long(int bits, const __u8 *data)
 {
        int i;
        uint64_t result = 0;
+       int bytes = (bits + CHAR_BIT - 1) / CHAR_BIT;
 
-       for (i = 0; i < 6; i++) {
-               result *= 256;
-               result += data[5 - i];
+       for (i = 0; i < bytes; i++) {
+               result <<= CHAR_BIT;
+               result += data[bytes - 1 - i];
        }
+
        return result;
 }
 
+uint64_t int48_to_long(const __u8 *data)
+{
+       return int_to_long(48, data);
+}
+
+uint64_t int56_to_long(const __u8 *data)
+{
+       return int_to_long(56, data);
+}
+
 long double uint128_t_to_double(nvme_uint128_t data)
 {
        long double result = 0;
index bb4125f2a144db6598905bb33721b62edda99142..70a77607079c6f3e09f39c8ecd79b8801cdd982a 100644 (file)
@@ -37,6 +37,7 @@ typedef union nvme_uint128 nvme_uint128_t;
 nvme_uint128_t le128_to_cpu(__u8 *data);
 long double int128_to_double(__u8 *data);
 uint64_t int48_to_long(const __u8 *data);
+uint64_t int56_to_long(const __u8 *data);
 
 char *uint128_t_to_string(nvme_uint128_t val);
 char *uint128_t_to_l10n_string(nvme_uint128_t val);