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