Skip to content

Commit 0e98910

Browse files
committed
util: introduce int56_to_long() type conversion helper
This is to remove unnecessary mask with 0x00FFFFFFFFFFFFFF. Signed-off-by: Tokunori Ikegami <ikegami.t@gmail.com>
1 parent 5887743 commit 0e98910

File tree

4 files changed

+20
-7
lines changed

4 files changed

+20
-7
lines changed

plugins/ocp/ocp-print-json.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,7 @@ static void json_smart_extended_log_v1(void *data)
168168
obj_add_uint(root, "End to end corrected errors",
169169
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_EECE]));
170170
obj_add_uint(root, "System data percent used", (__u8)log_data[SCAO_SDPU]);
171-
obj_add_uint64(root, "Refresh counts",
172-
(uint64_t)(le64_to_cpu(*(uint64_t *)&log_data[SCAO_RFSC]) & 0x00FFFFFFFFFFFFFF));
171+
obj_add_uint64(root, "Refresh counts", int56_to_long(&log_data[SCAO_RFSC]));
173172
obj_add_uint(root, "Max User data erase counts",
174173
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_MXUDEC]));
175174
obj_add_uint(root, "Min User data erase counts",

plugins/ocp/ocp-print-stdout.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ static void stdout_smart_extended_log(void *data, unsigned int version)
131131
printf(" System data percent used %d\n",
132132
(__u8)log_data[SCAO_SDPU]);
133133
printf(" Refresh counts %"PRIu64"\n",
134-
(uint64_t)(le64_to_cpu(*(uint64_t *)&log_data[SCAO_RFSC]) & 0x00FFFFFFFFFFFFFF));
134+
int56_to_long(&log_data[SCAO_RFSC]));
135135
printf(" Max User data erase counts %"PRIu32"\n",
136136
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_MXUDEC]));
137137
printf(" Min User data erase counts %"PRIu32"\n",

util/types.c

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <string.h>
66
#include <locale.h>
77
#include <time.h>
8+
#include <limits.h>
89

910
#include <ccan/endian/endian.h>
1011

@@ -36,18 +37,30 @@ long double int128_to_double(__u8 *data)
3637
return result;
3738
}
3839

39-
uint64_t int48_to_long(const __u8 *data)
40+
static uint64_t int_to_long(int bits, const __u8 *data)
4041
{
4142
int i;
4243
uint64_t result = 0;
44+
int bytes = (bits + CHAR_BIT - 1) / CHAR_BIT;
4345

44-
for (i = 0; i < 6; i++) {
45-
result *= 256;
46-
result += data[5 - i];
46+
for (i = 0; i < bytes; i++) {
47+
result <<= CHAR_BIT;
48+
result += data[bytes - 1 - i];
4749
}
50+
4851
return result;
4952
}
5053

54+
uint64_t int48_to_long(const __u8 *data)
55+
{
56+
return int_to_long(48, data);
57+
}
58+
59+
uint64_t int56_to_long(const __u8 *data)
60+
{
61+
return int_to_long(56, data);
62+
}
63+
5164
long double uint128_t_to_double(nvme_uint128_t data)
5265
{
5366
long double result = 0;

util/types.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ typedef union nvme_uint128 nvme_uint128_t;
3737
nvme_uint128_t le128_to_cpu(__u8 *data);
3838
long double int128_to_double(__u8 *data);
3939
uint64_t int48_to_long(const __u8 *data);
40+
uint64_t int56_to_long(const __u8 *data);
4041

4142
char *uint128_t_to_string(nvme_uint128_t val);
4243
char *uint128_t_to_l10n_string(nvme_uint128_t val);

0 commit comments

Comments
 (0)