xref: /illumos-gate/usr/src/cmd/nvmeadm/nvmeadm_solidigm.c (revision 0439b35b4c5b977fedef1ab5cbeff2c08150aba5)
1*0439b35bSRobert Mustacchi /*
2*0439b35bSRobert Mustacchi  * This file and its contents are supplied under the terms of the
3*0439b35bSRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
4*0439b35bSRobert Mustacchi  * You may only use this file in accordance with the terms of version
5*0439b35bSRobert Mustacchi  * 1.0 of the CDDL.
6*0439b35bSRobert Mustacchi  *
7*0439b35bSRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
8*0439b35bSRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
9*0439b35bSRobert Mustacchi  * http://www.illumos.org/license/CDDL.
10*0439b35bSRobert Mustacchi  */
11*0439b35bSRobert Mustacchi 
12*0439b35bSRobert Mustacchi /*
13*0439b35bSRobert Mustacchi  * Copyright 2026 Oxide Computer Company
14*0439b35bSRobert Mustacchi  */
15*0439b35bSRobert Mustacchi 
16*0439b35bSRobert Mustacchi /*
17*0439b35bSRobert Mustacchi  * Deal with Solidigm-specific logs.
18*0439b35bSRobert Mustacchi  */
19*0439b35bSRobert Mustacchi 
20*0439b35bSRobert Mustacchi #include <sys/stddef.h>
21*0439b35bSRobert Mustacchi #include <sys/sysmacros.h>
22*0439b35bSRobert Mustacchi #include <sys/nvme/solidigm.h>
23*0439b35bSRobert Mustacchi 
24*0439b35bSRobert Mustacchi #include "nvmeadm.h"
25*0439b35bSRobert Mustacchi 
26*0439b35bSRobert Mustacchi #define	SOLIDIGM_F_POWER(f)	\
27*0439b35bSRobert Mustacchi 	.nf_off = offsetof(solidigm_vul_p5x2x_power_t, pow_##f), \
28*0439b35bSRobert Mustacchi 	.nf_len = sizeof (((solidigm_vul_p5x2x_power_t *)NULL)->pow_##f)
29*0439b35bSRobert Mustacchi 
30*0439b35bSRobert Mustacchi static const nvmeadm_field_t solidigm_vul_power_fields[] = { {
31*0439b35bSRobert Mustacchi 	SOLIDIGM_F_POWER(vin1),
32*0439b35bSRobert Mustacchi 	.nf_short = "pin1",
33*0439b35bSRobert Mustacchi 	.nf_desc = "Voltage Rail 1 Power",
34*0439b35bSRobert Mustacchi 	.nf_type = NVMEADM_FT_UNIT,
35*0439b35bSRobert Mustacchi 	.nf_addend = { .nfa_unit = "uW" }
36*0439b35bSRobert Mustacchi }, {
37*0439b35bSRobert Mustacchi 	SOLIDIGM_F_POWER(vin2),
38*0439b35bSRobert Mustacchi 	.nf_short = "pin2",
39*0439b35bSRobert Mustacchi 	.nf_desc = "Voltage Rail 2 Power",
40*0439b35bSRobert Mustacchi 	.nf_type = NVMEADM_FT_UNIT,
41*0439b35bSRobert Mustacchi 	.nf_addend = { .nfa_unit = "uW" }
42*0439b35bSRobert Mustacchi } };
43*0439b35bSRobert Mustacchi 
44*0439b35bSRobert Mustacchi const nvmeadm_log_field_info_t solidigm_vul_power_field_info = {
45*0439b35bSRobert Mustacchi 	.nlfi_log = "solidigm/power",
46*0439b35bSRobert Mustacchi 	.nlfi_fields = solidigm_vul_power_fields,
47*0439b35bSRobert Mustacchi 	.nlfi_nfields = ARRAY_SIZE(solidigm_vul_power_fields),
48*0439b35bSRobert Mustacchi 	.nlfi_min = sizeof (solidigm_vul_p5x2x_power_t)
49*0439b35bSRobert Mustacchi };
50*0439b35bSRobert Mustacchi 
51*0439b35bSRobert Mustacchi #define	SOLIDIGM_F_TEMP(f)	\
52*0439b35bSRobert Mustacchi 	.nf_off = offsetof(solidigm_vul_temp_t, temp_##f), \
53*0439b35bSRobert Mustacchi 	.nf_len = sizeof (((solidigm_vul_temp_t *)NULL)->temp_##f)
54*0439b35bSRobert Mustacchi 
55*0439b35bSRobert Mustacchi static const nvmeadm_field_t solidigm_vul_temp_fields[] = { {
56*0439b35bSRobert Mustacchi 	SOLIDIGM_F_TEMP(cur),
57*0439b35bSRobert Mustacchi 	.nf_short = "cur",
58*0439b35bSRobert Mustacchi 	.nf_desc = "Current Internal Temperature",
59*0439b35bSRobert Mustacchi 	.nf_type = NVMEADM_FT_UNIT,
60*0439b35bSRobert Mustacchi 	.nf_addend = { .nfa_unit = "C" }
61*0439b35bSRobert Mustacchi }, {
62*0439b35bSRobert Mustacchi 	SOLIDIGM_F_TEMP(over_last),
63*0439b35bSRobert Mustacchi 	.nf_short = "otlpow",
64*0439b35bSRobert Mustacchi 	.nf_desc = "SSD Overtemp Shutdown flag for Last Power On",
65*0439b35bSRobert Mustacchi 	.nf_type = NVMEADM_FT_HEX
66*0439b35bSRobert Mustacchi }, {
67*0439b35bSRobert Mustacchi 	SOLIDIGM_F_TEMP(over_life),
68*0439b35bSRobert Mustacchi 	.nf_short = "otlife",
69*0439b35bSRobert Mustacchi 	.nf_desc = "SSD Overtemp Shutdown flag for Lifetime",
70*0439b35bSRobert Mustacchi 	.nf_type = NVMEADM_FT_HEX
71*0439b35bSRobert Mustacchi }, {
72*0439b35bSRobert Mustacchi 	SOLIDIGM_F_TEMP(comp_life_high),
73*0439b35bSRobert Mustacchi 	.nf_short = "lifehigh",
74*0439b35bSRobert Mustacchi 	.nf_desc = "Highest (Lifetime) Composite Temperature",
75*0439b35bSRobert Mustacchi 	.nf_type = NVMEADM_FT_UNIT,
76*0439b35bSRobert Mustacchi 	.nf_addend = { .nfa_unit = "C" }
77*0439b35bSRobert Mustacchi }, {
78*0439b35bSRobert Mustacchi 	SOLIDIGM_F_TEMP(comp_life_low),
79*0439b35bSRobert Mustacchi 	.nf_short = "lifelow",
80*0439b35bSRobert Mustacchi 	.nf_desc = "Lowest (Lifetime) Composite Temperature",
81*0439b35bSRobert Mustacchi 	.nf_type = NVMEADM_FT_UNIT,
82*0439b35bSRobert Mustacchi 	.nf_addend = { .nfa_unit = "C" }
83*0439b35bSRobert Mustacchi }, {
84*0439b35bSRobert Mustacchi 	SOLIDIGM_F_TEMP(norm_max_warn),
85*0439b35bSRobert Mustacchi 	.nf_short = "maxnorm",
86*0439b35bSRobert Mustacchi 	.nf_desc = "Max Warning Normalized Threshold",
87*0439b35bSRobert Mustacchi 	.nf_type = NVMEADM_FT_UNIT,
88*0439b35bSRobert Mustacchi 	.nf_addend = { .nfa_unit = "C" }
89*0439b35bSRobert Mustacchi }, {
90*0439b35bSRobert Mustacchi 	SOLIDIGM_F_TEMP(spec_min_op),
91*0439b35bSRobert Mustacchi 	.nf_short = "minorm",
92*0439b35bSRobert Mustacchi 	.nf_desc = "Specified Minimum Operating Temp",
93*0439b35bSRobert Mustacchi 	.nf_type = NVMEADM_FT_UNIT,
94*0439b35bSRobert Mustacchi 	.nf_addend = { .nfa_unit = "C" }
95*0439b35bSRobert Mustacchi }, {
96*0439b35bSRobert Mustacchi 	SOLIDIGM_F_TEMP(est_off),
97*0439b35bSRobert Mustacchi 	.nf_short = "estoff",
98*0439b35bSRobert Mustacchi 	.nf_desc = "Estimated Offset",
99*0439b35bSRobert Mustacchi 	.nf_type = NVMEADM_FT_UNIT,
100*0439b35bSRobert Mustacchi 	.nf_addend = { .nfa_unit = "C" }
101*0439b35bSRobert Mustacchi } };
102*0439b35bSRobert Mustacchi 
103*0439b35bSRobert Mustacchi const nvmeadm_log_field_info_t solidigm_vul_temp_field_info = {
104*0439b35bSRobert Mustacchi 	.nlfi_log = "solidigm/temp",
105*0439b35bSRobert Mustacchi 	.nlfi_fields = solidigm_vul_temp_fields,
106*0439b35bSRobert Mustacchi 	.nlfi_nfields = ARRAY_SIZE(solidigm_vul_temp_fields),
107*0439b35bSRobert Mustacchi 	.nlfi_min = sizeof (solidigm_vul_temp_t)
108*0439b35bSRobert Mustacchi };
109