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
libjedec_temp_range(libjedec_temp_range_t temp,int32_t * min,int32_t * max)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