return "Country of Origin";
case HWCOMP_ID_HW_REV:
return "Global Device Hardware Revision";
+ case HWCOMP_ID_BORN_ON_DATE:
+ return "Born on Date";
case HWCOMP_ID_VENDOR ... HWCOMP_ID_MAX:
return "Vendor Unique Component";
case HWCOMP_ID_RSVD:
print_info_array("guid", log->guid, ARRAY_SIZE(log->guid));
print_info("size: %s\n", uint128_t_to_string(le128_to_cpu(log->size)));
- args.len = uint128_t_to_double(le128_to_cpu(log->size)) * sizeof(__le32) - desc_offset;
+ if (log->ver > 1)
+ args.len = uint128_t_to_double(le128_to_cpu(log->size)) - desc_offset;
+ else
+ args.len = uint128_t_to_double(le128_to_cpu(log->size)) * sizeof(__le32)
+ - desc_offset;
+
log->desc = calloc(1, args.len);
if (!log->desc) {
fprintf(stderr, "error: ocp: calloc: %s\n", strerror(errno));
VAL_LONG("sn", HWCOMP_ID_SN),
VAL_LONG("country", HWCOMP_ID_COUNTRY),
VAL_LONG("hw-rev", HWCOMP_ID_HW_REV),
+ VAL_LONG("born-on-date", HWCOMP_ID_BORN_ON_DATE),
VAL_LONG("vendor", HWCOMP_ID_VENDOR),
VAL_END()
};
HWCOMP_ID_SN,
HWCOMP_ID_COUNTRY,
HWCOMP_ID_HW_REV,
+ HWCOMP_ID_BORN_ON_DATE,
HWCOMP_ID_VENDOR = 0x8000,
HWCOMP_ID_MAX = 0xffff,
};
static void binary_hwcomp_log(struct hwcomp_log *log, __u32 id, bool list)
{
- long double desc_len = uint128_t_to_double(le128_to_cpu(log->size)) * sizeof(__le32);
+ long double desc_len = uint128_t_to_double(le128_to_cpu(log->size));
+ if (log->ver == 1)
+ desc_len *= sizeof(__le32);
- d_raw((unsigned char *)log, offsetof(struct hwcomp_log, desc) + desc_len);
+ d_raw((unsigned char *)log, desc_len);
}
static void binary_c5_log(struct nvme_dev *dev, struct unsupported_requirement_log *log_data)
{
struct json_object *r = json_create_object();
- long double log_size = uint128_t_to_double(le128_to_cpu(log->size)) * sizeof(__le32);
+ long double log_size = uint128_t_to_double(le128_to_cpu(log->size));
+ if (log->ver == 1)
+ log_size *= sizeof(__le32);
obj_add_uint_02x(r, "Log Identifier", LID_HWCOMP);
obj_add_uint_0x(r, "Log Page Version", le16_to_cpu(log->ver));
int num = 1;
struct hwcomp_desc_entry e = { log->desc };
- long double log_size = uint128_t_to_double(le128_to_cpu(log->size)) * sizeof(__le32);
+ long double log_size = uint128_t_to_double(le128_to_cpu(log->size));
+ if (log->ver == 1)
+ log_size *= sizeof(__le32);
printf("Log Identifier: 0x%02xh\n", LID_HWCOMP);
printf("Log Page Version: 0x%x\n", le16_to_cpu(log->ver));