1 /* 2 * This file and its contents are supplied under the terms of the 3 * Common Development and Distribution License ("CDDL"), version 1.0. 4 * You may only use this file in accordance with the terms of version 5 * 1.0 of the CDDL. 6 * 7 * A full copy of the text of the CDDL should have accompanied this 8 * source. A copy of the CDDL is also available via the Internet at 9 * http://www.illumos.org/license/CDDL. 10 */ 11 12 /* 13 * Copyright 2024 Oxide Computer Company 14 */ 15 16 /* 17 * JESD402-1B Temperature Ranges 18 */ 19 20 #include <libjedec.h> 21 #include <sys/sysmacros.h> 22 23 typedef struct { 24 libjedec_temp_range_t ltm_temp; 25 int32_t ltm_min; 26 int32_t ltm_max; 27 } libjedec_temp_map_t; 28 29 static const libjedec_temp_map_t libjedec_temp_map[] = { 30 { JEDEC_TEMP_CASE_A1T, -40, 125 }, 31 { JEDEC_TEMP_CASE_A2T, -40, 105 }, 32 { JEDEC_TEMP_CASE_A3T, -40, 85 }, 33 { JEDEC_TEMP_CASE_IT, -40, 95 }, 34 { JEDEC_TEMP_CASE_ET, -25, 105 }, 35 { JEDEC_TEMP_CASE_ST, -25, 85 }, 36 { JEDEC_TEMP_CASE_XT, 0, 95 }, 37 { JEDEC_TEMP_CASE_NT, 0, 85 }, 38 { JEDEC_TEMP_CASE_RT, 0, 45 }, 39 { JEDEC_TEMP_AMB_CT, 0, 70 }, 40 { JEDEC_TEMP_AMB_IOT, -40, 85 }, 41 { JEDEC_TEMP_AMB_IPT, -40, 105 }, 42 { JEDEC_TEMP_AMB_IXT, -40, 125 }, 43 { JEDEC_TEMP_AMB_AO3T, -40, 85 }, 44 { JEDEC_TEMP_AMB_AO2T, -40, 105 }, 45 { JEDEC_TEMP_AMB_AO1T, -40, 125 }, 46 { JEDEC_TEMP_STOR_2, -55, 125 }, 47 { JEDEC_TEMP_STOR_1B, -55, 100 }, 48 { JEDEC_TEMP_STOR_1A, -40, 105 }, 49 { JEDEC_TEMP_STOR_ST, -40, 85 }, 50 { JEDEC_TEMP_JNCT_A135, -40, 135 }, 51 { JEDEC_TEMP_JNCT_A130, -40, 130 }, 52 { JEDEC_TEMP_JNCT_A1T, -40, 125 }, 53 { JEDEC_TEMP_JNCT_A120, -40, 120 }, 54 { JEDEC_TEMP_JNCT_A115, -40, 115 }, 55 { JEDEC_TEMP_JNCT_A110, -40, 110 }, 56 { JEDEC_TEMP_JNCT_A2T, -40, 105 }, 57 { JEDEC_TEMP_JNCT_A100, -40, 100 }, 58 { JEDEC_TEMP_JNCT_A95, -40, 95 }, 59 { JEDEC_TEMP_JNCT_A90, -40, 90 }, 60 { JEDEC_TEMP_JNCT_A3T, -40, 85 }, 61 { JEDEC_TEMP_JNCT_LT135, -40, 135 }, 62 { JEDEC_TEMP_JNCT_LT130, -40, 130 }, 63 { JEDEC_TEMP_JNCT_LT125, -40, 125 }, 64 { JEDEC_TEMP_JNCT_LT120, -40, 120 }, 65 { JEDEC_TEMP_JNCT_LT115, -40, 115 }, 66 { JEDEC_TEMP_JNCT_LT110, -40, 110 }, 67 { JEDEC_TEMP_JNCT_LT105, -40, 105 }, 68 { JEDEC_TEMP_JNCT_LT100, -40, 100 }, 69 { JEDEC_TEMP_JNCT_IT, -40, 95 }, 70 { JEDEC_TEMP_JNCT_LT90, -40, 90 }, 71 { JEDEC_TEMP_JNCT_LT85, -40, 85 }, 72 { JEDEC_TEMP_JNCT_ET120, -25, 120 }, 73 { JEDEC_TEMP_JNCT_ET115, -25, 115 }, 74 { JEDEC_TEMP_JNCT_ET110, -25, 110 }, 75 { JEDEC_TEMP_JNCT_ET, -25, 105 }, 76 { JEDEC_TEMP_JNCT_ET100, -25, 100 }, 77 { JEDEC_TEMP_JNCT_ET95, -25, 95 }, 78 { JEDEC_TEMP_JNCT_ET90, -25, 90 }, 79 { JEDEC_TEMP_JNCT_ST, -25, 85 }, 80 { JEDEC_TEMP_JNCT_120, 0, 120 }, 81 { JEDEC_TEMP_JNCT_115, 0, 115 }, 82 { JEDEC_TEMP_JNCT_110, 0, 110 }, 83 { JEDEC_TEMP_JNCT_105, 0, 105 }, 84 { JEDEC_TEMP_JNCT_100, 0, 100 }, 85 { JEDEC_TEMP_JNCT_XT, 0, 95 }, 86 { JEDEC_TEMP_JNCT_90, 0, 90 }, 87 { JEDEC_TEMP_JNCT_NT, 0, 85 } 88 }; 89 90 boolean_t 91 libjedec_temp_range(libjedec_temp_range_t temp, int32_t *min, int32_t *max) 92 { 93 for (size_t i = 0; i < ARRAY_SIZE(libjedec_temp_map); i++) { 94 if (temp == libjedec_temp_map[i].ltm_temp) { 95 *min = libjedec_temp_map[i].ltm_min; 96 *max = libjedec_temp_map[i].ltm_max; 97 return (B_TRUE); 98 } 99 } 100 101 return (B_FALSE); 102 } 103