1 /*
2  * Copyright (C) 2003-2015 FreeIPMI Core Team
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16  *
17  */
18 
19 #ifndef IPMI_SDR_RECORD_FORMAT_H
20 #define IPMI_SDR_RECORD_FORMAT_H
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 #include <freeipmi/fiid/fiid.h>
27 
28 #define IPMI_SDR_FORMAT_FULL_SENSOR_RECORD                          0x01
29 #define IPMI_SDR_FORMAT_COMPACT_SENSOR_RECORD                       0x02
30 #define IPMI_SDR_FORMAT_EVENT_ONLY_RECORD                           0x03
31 #define IPMI_SDR_FORMAT_ENTITY_ASSOCIATION_RECORD                   0x08
32 #define IPMI_SDR_FORMAT_DEVICE_RELATIVE_ENTITY_ASSOCIATION_RECORD   0x09
33 #define IPMI_SDR_FORMAT_GENERIC_DEVICE_LOCATOR_RECORD               0x10
34 #define IPMI_SDR_FORMAT_FRU_DEVICE_LOCATOR_RECORD                   0x11
35 #define IPMI_SDR_FORMAT_MANAGEMENT_CONTROLLER_DEVICE_LOCATOR_RECORD 0x12
36 #define IPMI_SDR_FORMAT_MANAGEMENT_CONTROLLER_CONFIRMATION_RECORD   0x13
37 #define IPMI_SDR_FORMAT_BMC_MESSAGE_CHANNEL_INFO_RECORD             0x14
38 #define IPMI_SDR_FORMAT_OEM_RECORD                                  0xC0
39 
40 #define IPMI_SDR_FORMAT_TYPE_VALID(__val)                                     \
41   (((__val) == IPMI_SDR_FORMAT_FULL_SENSOR_RECORD                             \
42     || (__val) == IPMI_SDR_FORMAT_COMPACT_SENSOR_RECORD                       \
43     || (__val) == IPMI_SDR_FORMAT_EVENT_ONLY_RECORD                           \
44     || (__val) == IPMI_SDR_FORMAT_ENTITY_ASSOCIATION_RECORD                   \
45     || (__val) == IPMI_SDR_FORMAT_DEVICE_RELATIVE_ENTITY_ASSOCIATION_RECORD   \
46     || (__val) == IPMI_SDR_FORMAT_GENERIC_DEVICE_LOCATOR_RECORD               \
47     || (__val) == IPMI_SDR_FORMAT_FRU_DEVICE_LOCATOR_RECORD                   \
48     || (__val) == IPMI_SDR_FORMAT_MANAGEMENT_CONTROLLER_DEVICE_LOCATOR_RECORD \
49     || (__val) == IPMI_SDR_FORMAT_MANAGEMENT_CONTROLLER_CONFIRMATION_RECORD   \
50     || (__val) == IPMI_SDR_FORMAT_BMC_MESSAGE_CHANNEL_INFO_RECORD             \
51     || (__val) == IPMI_SDR_FORMAT_OEM_RECORD) ? 1 : 0)
52 
53 #define IPMI_SDR_SENSOR_OWNER_ID_TYPE_IPMB_SLAVE_ADDRESS   0x0
54 #define IPMI_SDR_SENSOR_OWNER_ID_TYPE_SYSTEM_SOFTWARE_ID   0x1
55 
56 #define IPMI_SDR_ANALOG_DATA_FORMAT_UNSIGNED      0x0
57 #define IPMI_SDR_ANALOG_DATA_FORMAT_1S_COMPLEMENT 0x1
58 #define IPMI_SDR_ANALOG_DATA_FORMAT_2S_COMPLEMENT 0x2
59 #define IPMI_SDR_ANALOG_DATA_FORMAT_NOT_ANALOG    0x3
60 
61 #define IPMI_SDR_ANALOG_DATA_FORMAT_UNSIGNED_STRING          "unsigned"
62 #define IPMI_SDR_ANALOG_DATA_FORMAT_1S_COMPLEMENT_STRING     "1's complement (signed)"
63 #define IPMI_SDR_ANALOG_DATA_FORMAT_2S_COMPLEMENT_STRING     "2's complement (signed)"
64 #define IPMI_SDR_ANALOG_DATA_FORMAT_NOT_ANALOG_STRING        "Does not return analog (numeric) reading"
65 
66 #define IPMI_SDR_ANALOG_DATA_FORMAT_VALID(__val)            \
67   (((__val) == IPMI_SDR_ANALOG_DATA_FORMAT_UNSIGNED         \
68     || (__val) == IPMI_SDR_ANALOG_DATA_FORMAT_1S_COMPLEMENT \
69     || (__val) == IPMI_SDR_ANALOG_DATA_FORMAT_2S_COMPLEMENT) ? 1 : 0)
70 
71 #define IPMI_SDR_MODIFIER_UNIT_NONE           0
72 #define IPMI_SDR_MODIFIER_UNIT_DIVIDE         1
73 #define IPMI_SDR_MODIFIER_UNIT_MULTIPLY       2
74 
75 #define IPMI_SDR_MODIFIER_UNIT_VALID(__sensor_modifier_unit)     \
76   (((__sensor_modifier_unit) == IPMI_SDR_MODIFIER_UNIT_NONE      \
77     || (__sensor_modifier_unit) == IPMI_SDR_MODIFIER_UNIT_DIVIDE \
78     || (__sensor_modifier_unit) == IPMI_SDR_MODIFIER_UNIT_MULTIPLY) ? 1 : 0)
79 
80 #define IPMI_SDR_LINEARIZATION_LINEAR                0
81 #define IPMI_SDR_LINEARIZATION_LN                    1
82 #define IPMI_SDR_LINEARIZATION_LOG10                 2
83 #define IPMI_SDR_LINEARIZATION_LOG2                  3
84 #define IPMI_SDR_LINEARIZATION_E                     4
85 #define IPMI_SDR_LINEARIZATION_EXP10                 5
86 #define IPMI_SDR_LINEARIZATION_EXP2                  6
87 #define IPMI_SDR_LINEARIZATION_INVERSE               7
88 #define IPMI_SDR_LINEARIZATION_SQR                   8
89 #define IPMI_SDR_LINEARIZATION_CUBE                  9
90 #define IPMI_SDR_LINEARIZATION_SQRT                 10
91 #define IPMI_SDR_LINEARIZATION_CUBERT               11
92 #define IPMI_SDR_LINEARIZATION_NON_LINEAR         0x70
93 #define IPMI_SDR_LINEARIZATION_NON_LINEAR_OEM_MIN 0x71
94 #define IPMI_SDR_LINEARIZATION_NON_LINEAR_OEM_MAX 0x7F
95 
96 #define IPMI_SDR_LINEARIZATION_LINEAR_STRING     "linear"
97 #define IPMI_SDR_LINEARIZATION_LN_STRING         "ln"
98 #define IPMI_SDR_LINEARIZATION_LOG10_STRING      "log10"
99 #define IPMI_SDR_LINEARIZATION_LOG2_STRING       "log2"
100 #define IPMI_SDR_LINEARIZATION_E_STRING          "e"
101 #define IPMI_SDR_LINEARIZATION_EXP10_STRING      "exp10"
102 #define IPMI_SDR_LINEARIZATION_EXP2_STRING       "exp2"
103 #define IPMI_SDR_LINEARIZATION_INVERSE_STRING    "1/x"
104 #define IPMI_SDR_LINEARIZATION_SQR_STRING        "sqr(x)"
105 #define IPMI_SDR_LINEARIZATION_CUBE_STRING       "cube(x)"
106 #define IPMI_SDR_LINEARIZATION_SQRT_STRING       "sqrt(x)"
107 #define IPMI_SDR_LINEARIZATION_CUBERT_STRING     "cube^-1(x)"
108 #define IPMI_SDR_LINEARIZATION_NON_LINEAR_STRING "non-linear"
109 
110 /* To avoid gcc warnings, add +1 in comparison */
111 #define IPMI_SDR_LINEARIZATION_IS_LINEAR(__sensor_linearization) \
112   ((((__sensor_linearization) + 1) >= IPMI_SDR_LINEARIZATION_LN  \
113     && (__sensor_linearization) <= IPMI_SDR_LINEARIZATION_CUBERT) ? 1 : 0)
114 
115 #define IPMI_SDR_LINEARIZATION_IS_NON_LINEAR(__sensor_linearization) \
116   (((__sensor_linearization) >= IPMI_SDR_LINEARIZATION_NON_LINEAR \
117     && (__sensor_linearization) <=IPMI_SDR_LINEARIZATION_NON_LINEAR_OEM_MAX) ? 1 : 0)
118 
119 #define IPMI_SDR_PERCENTAGE_NO  0
120 #define IPMI_SDR_PERCENTAGE_YES 1
121 
122 #define IPMI_SDR_PERCENTAGE_VALID(__val) \
123   (((__val) == IPMI_SDR_PERCENTAGE_NO    \
124     || (__val) == IPMI_SDR_PERCENTAGE_YES) ? 1 : 0)
125 
126 #define IPMI_SDR_PHYSICAL_ENTITY          0x0
127 #define IPMI_SDR_LOGICAL_CONTAINER_ENTITY 0x1
128 
129 #define IPMI_SDR_SENSOR_SCANNING_ENABLED  0x1
130 #define IPMI_SDR_SENSOR_SCANNING_DISABLED 0x0
131 
132 #define IPMI_SDR_EVENT_GENERATION_ENABLED  0x1
133 #define IPMI_SDR_EVENT_GENERATION_DISABLED 0x0
134 
135 #define IPMI_SDR_SENSOR_AUTO_REARM_SUPPORT_MANUAL 0x0
136 #define IPMI_SDR_SENSOR_AUTO_REARM_SUPPORT_AUTO   0x1
137 
138 #define IPMI_SDR_PER_EVENT_ENABLE_DISABLE_SUPPORT    0x0
139 #define IPMI_SDR_ENTIRE_SENSOR_ONLY                  0x1
140 #define IPMI_SDR_GLOBAL_DISABLE_ONLY                 0x2
141 #define IPMI_SDR_NO_EVENTS_FROM_SENSOR               0x3
142 
143 #define IPMI_SDR_NO_THRESHOLDS_SUPPORT                   0x0
144 #define IPMI_SDR_READABLE_THRESHOLDS_SUPPORT             0x1
145 #define IPMI_SDR_READABLE_SETTABLE_THRESHOLDS_SUPPORT    0x2
146 #define IPMI_SDR_FIXED_UNREADABLE_THRESHOLDS_SUPPORT     0x3
147 
148 #define IPMI_SDR_NO_HYSTERESIS_SUPPORT                   0x0
149 #define IPMI_SDR_READABLE_HYSTERESIS_SUPPORT             0x1
150 #define IPMI_SDR_READABLE_SETTABLE_HYSTERESIS_SUPPORT    0x2
151 #define IPMI_SDR_FIXED_UNREADABLE_HYSTERESIS_SUPPORT     0x3
152 
153 #define IPMI_SDR_ANALOG_CHARACTERISTICS_NOMINAL_READING_SPECIFIED   0x1
154 #define IPMI_SDR_ANALOG_CHARACTERISTICS_NOMINAL_READING_UNSPECIFIED 0x0
155 
156 #define IPMI_SDR_ANALOG_CHARACTERISTICS_NORMAL_MAX_SPECIFIED   0x1
157 #define IPMI_SDR_ANALOG_CHARACTERISTICS_NORMAL_MAX_UNSPECIFIED 0x0
158 
159 #define IPMI_SDR_ANALOG_CHARACTERISTICS_NORMAL_MIN_SPECIFIED   0x1
160 #define IPMI_SDR_ANALOG_CHARACTERISTICS_NORMAL_MIN_UNSPECIFIED 0x0
161 
162 #define IPMI_SDR_ID_STRING_INSTANCE_MODIFIER_TYPE_NUMERIC 0x0
163 #define IPMI_SDR_ID_STRING_INSTANCE_MODIFIER_TYPE_ALPHA   0x1
164 
165 #define IPMI_SDR_SENSOR_DIRECTION_UNSPECIFIED 0x0
166 #define IPMI_SDR_SENSOR_DIRECTION_INPUT       0x1
167 #define IPMI_SDR_SENSOR_DIRECTION_OUTPUT      0x2
168 #define IPMI_SDR_SENSOR_DIRECTION_RESERVED    0x3
169 
170 #define IPMI_SDR_ENTITY_INSTANCE_SAME_FOR_ALL_SHARED_RECORDS       0x0
171 #define IPMI_SDR_ENTITY_INSTANCE_INCREMENTS_FOR_EACH_SHARED_RECORD 0x1
172 
173 #define IPMI_SDR_RECORD_NO_LINKED_ENTITY_ASSOCIATION_RECORDS_EXIST 0x0
174 #define IPMI_SDR_RECORD_LINKED_ENTITY_ASSOCIATION_RECORDS_EXIST    0x1
175 
176 #define IPMI_SDR_CONTAINED_ENTITY_SPECIFIED_AS_LIST  0x0
177 #define IPMI_SDR_CONTAINED_ENTITY_SPECIFIED_AS_RANGE 0x1
178 
179 #define IPMI_SDR_DEVICE_IS_NOT_A_LOGICAL_FRU_DEVICE 0x0
180 #define IPMI_SDR_DEVICE_IS_LOGICAL_FRU_DEVICE       0x1
181 
182 #define IPMI_SDR_EVENT_MESSAGE_GENERATION_FROM_CONTROLLER_ENABLE       0x0
183 #define IPMI_SDR_EVENT_MESSAGE_GENERATION_FROM_CONTROLLER_DISABLE      0x1
184 #define IPMI_SDR_EVENT_MESSAGE_GENERATION_DO_NOT_INITIALIZE_CONTROLLER 0x2
185 #define IPMI_SDR_EVENT_MESSAGE_GENERATION_RESERVED                     0x3
186 
187 #define IPMI_SDR_LOG_INITIALIZATION_AGENT_ERRORS_ENABLE  0x0
188 #define IPMI_SDR_LOG_INITIALIZATION_AGENT_ERRORS_DISABLE 0x1
189 
190 #define IPMI_SDR_CONTROLLER_LOGS_INITIALIZATION_AGENT_ERRORS_ENABLE  0x0
191 #define IPMI_SDR_CONTROLLER_LOGS_INITIALIZATION_AGENT_ERRORS_DISABLE 0x1
192 
193 #define IPMI_SDR_CONTROLLER_DYNAMIC 0x0
194 #define IPMI_SDR_CONTROLLER_STATIC  0x1
195 
196 #define IPMI_SDR_ACPI_DEVICE_POWER_STATE_NOTIFICATION_REQUIRED     0x0
197 #define IPMI_SDR_NO_ACPI_DEVICE_POWER_STATE_NOTIFICATION_REQUIRED  0x1
198 
199 #define IPMI_SDR_ACPI_SYSTEM_POWER_STATE_NOTIFICATION_REQUIRED     0x0
200 #define IPMI_SDR_NO_ACPI_SYSTEM_POWER_STATE_NOTIFICATION_REQUIRED  0x1
201 
202 #define IPMI_SDR_MAX_ID_STRING_LENGTH        16
203 #define IPMI_SDR_MAX_DEVICE_ID_STRING_LENGTH 16
204 
205 /*
206  * see freeipmi/templates/ for template definitions
207  */
208 
209 extern fiid_template_t tmpl_sdr_record_header;
210 extern fiid_template_t tmpl_sdr_full_sensor_record;
211 extern fiid_template_t tmpl_sdr_full_sensor_record_non_threshold_based_sensors;
212 extern fiid_template_t tmpl_sdr_full_sensor_record_threshold_based_sensors;
213 extern fiid_template_t tmpl_sdr_compact_sensor_record;
214 extern fiid_template_t tmpl_sdr_compact_sensor_record_non_threshold_based_sensors;
215 extern fiid_template_t tmpl_sdr_compact_sensor_record_threshold_based_sensors;
216 extern fiid_template_t tmpl_sdr_event_only_record;
217 extern fiid_template_t tmpl_sdr_entity_association_record;
218 extern fiid_template_t tmpl_sdr_device_relative_entity_association_record;
219 extern fiid_template_t tmpl_sdr_generic_device_locator_record;
220 extern fiid_template_t tmpl_sdr_fru_device_locator_record;
221 extern fiid_template_t tmpl_sdr_fru_device_locator_record_non_intelligent;
222 extern fiid_template_t tmpl_sdr_management_controller_device_locator_record;
223 extern fiid_template_t tmpl_sdr_management_controller_confirmation_record;
224 extern fiid_template_t tmpl_sdr_bmc_message_channel_info_record;
225 extern fiid_template_t tmpl_sdr_oem_record;
226 
227 #ifdef __cplusplus
228 }
229 #endif
230 
231 #endif /* IPMI_SDR_RECORD_FORMAT_H */
232