1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (c) 2023 Solidigm.
*
* Author: leonardo.da.cunha@solidigm.com
*/
#include <inttypes.h>
#include "common.h"
#include "solidigm-id-ctrl.h"
struct __packed nvme_vu_id_ctrl_field { /* CDR MR5 */
__u8 rsvd1[3];
__u8 ss;
char health[20];
__u8 cls;
__u8 nlw;
__u8 scap;
__u8 sstat;
char bl[8];
__u8 rsvd2[38];
__le64 ww;
char mic_bl[4];
char mic_fw[4];
};
void sldgm_id_ctrl(uint8_t *vs, struct json_object *root)
{
// text output aligns nicely with property name up to 10 chars
const char *str_ss = "stripeSize";
const char *str_health = "health";
const char *str_cls = "linkSpeed";
const char *str_nlw = "negLnkWdth";
const char *str_scap = "secCapab";
const char *str_sstat = "secStatus";
const char *str_bl = "bootLoader";
const char *str_ww = "wwid";
const char *str_mic_bl = "bwLimGran";
const char *str_mic_fw = "ioLimGran";
struct nvme_vu_id_ctrl_field *id = (struct nvme_vu_id_ctrl_field *)vs;
const char str_heathy[sizeof(id->health)] = "healthy";
const char *health = id->health[0] ? id->health : str_heathy;
if (root == NULL) {
printf("%-10s: %u\n", str_ss, id->ss);
printf("%-10s: %.*s\n", str_health, (int)sizeof(id->health), health);
printf("%-10s: %u\n", str_cls, id->cls);
printf("%-10s: %u\n", str_nlw, id->nlw);
printf("%-10s: %u\n", str_scap, id->scap);
printf("%-10s: %u\n", str_sstat, id->sstat);
printf("%-10s: %.*s\n", str_bl, (int)sizeof(id->bl), id->bl);
printf("%-10s: 0x%016"PRIx64"\n", str_ww, le64_to_cpu(id->ww));
printf("%-10s: %.*s\n", str_mic_bl, (int)sizeof(id->mic_bl), id->mic_bl);
printf("%-10s: %.*s\n", str_mic_fw, (int)sizeof(id->mic_fw), id->mic_fw);
return;
}
json_object_add_value_uint(root, str_ss, id->ss);
json_object_object_add(root, str_health,
json_object_new_string_len(health, sizeof(id->health)));
json_object_add_value_uint(root, str_cls, id->cls);
json_object_add_value_uint(root, str_nlw, id->nlw);
json_object_add_value_uint(root, str_scap, id->scap);
json_object_add_value_uint(root, str_sstat, id->sstat);
json_object_object_add(root, str_bl, json_object_new_string_len(id->bl, sizeof(id->bl)));
json_object_add_value_uint64(root, str_ww, le64_to_cpu(id->ww));
json_object_object_add(root, str_mic_bl,
json_object_new_string_len(id->mic_bl, sizeof(id->mic_bl)));
json_object_object_add(root, str_mic_fw,
json_object_new_string_len(id->mic_fw, sizeof(id->mic_fw)));
}
|