Lines Matching +full:double +full:- +full:channel
2 * Copyright (c) 2012 Hewlett-Packard Development Company, L.P.
25 * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
72 /* ipmi_sdr_get_unit_string - return units for base/modifier
86 * By default, if units are supposed to be percent, we will pre-pend in ipmi_sdr_get_unit_string()
117 /* sdr_sensor_has_analog_reading - Determine if sensor has an analog reading
125 if (!sr->full) { in sdr_sensor_has_analog_reading()
135 * readings into some of their non-Threshold Sensor. There is in sdr_sensor_has_analog_reading()
137 * an Analog reading is available in a Non-Threshod sensor and in sdr_sensor_has_analog_reading()
140 * non-Threshold. To be safe, we provide this extension for in sdr_sensor_has_analog_reading()
144 if ( UNITS_ARE_DISCRETE(&sr->full->cmn) ) { in sdr_sensor_has_analog_reading()
147 if ( !IS_THRESHOLD_SENSOR(&sr->full->cmn) ) { in sdr_sensor_has_analog_reading()
148 /* Non-Threshold Sensors are not defined as having analog */ in sdr_sensor_has_analog_reading()
150 if ( (sr->full->cmn.unit.pct | sr->full->cmn.unit.modifier | in sdr_sensor_has_analog_reading()
151 sr->full->cmn.unit.type.base | in sdr_sensor_has_analog_reading()
152 sr->full->cmn.unit.type.modifier)) { in sdr_sensor_has_analog_reading()
154 if ( !(intf->manufacturer_id == IPMI_OEM_HP) ) { in sdr_sensor_has_analog_reading()
166 if (sr->full->linearization >= SDR_SENSOR_L_NONLINEAR && in sdr_sensor_has_analog_reading()
167 sr->full->linearization <= 0x7F) { in sdr_sensor_has_analog_reading()
168 if (ipmi_sensor_get_sensor_reading_factors(intf, sr->full, sr->s_reading) < 0){ in sdr_sensor_has_analog_reading()
169 sr->s_reading_valid = 0; in sdr_sensor_has_analog_reading()
177 /* sdr_convert_sensor_reading - convert raw sensor reading
182 * returns floating-point sensor reading
184 double
188 double result; in sdr_convert_sensor_reading()
190 m = __TO_M(sensor->mtol); in sdr_convert_sensor_reading()
191 b = __TO_B(sensor->bacc); in sdr_convert_sensor_reading()
192 k1 = __TO_B_EXP(sensor->bacc); in sdr_convert_sensor_reading()
193 k2 = __TO_R_EXP(sensor->bacc); in sdr_convert_sensor_reading()
195 switch (sensor->cmn.unit.analog) { in sdr_convert_sensor_reading()
197 result = (double) (((m * val) + in sdr_convert_sensor_reading()
205 result = (double) (((m * (int8_t) val) + in sdr_convert_sensor_reading()
213 switch (sensor->linearization & 0x7f) { in sdr_convert_sensor_reading()
221 result = (double) (log(result) / log(2.0)); in sdr_convert_sensor_reading()
233 result = pow(result, -1.0); /*1/x w/o exception */ in sdr_convert_sensor_reading()
253 /* sdr_convert_sensor_hysterisis - convert raw sensor hysterisis
258 * threshold rearm point is computed using threshold +/- hysterisis
264 * returns floating-point sensor reading
266 double
270 double result; in sdr_convert_sensor_hysterisis()
272 m = __TO_M(sensor->mtol); in sdr_convert_sensor_hysterisis()
274 k2 = __TO_R_EXP(sensor->bacc); in sdr_convert_sensor_hysterisis()
276 switch (sensor->cmn.unit.analog) { in sdr_convert_sensor_hysterisis()
278 result = (double) (((m * val)) * pow(10, k2)); in sdr_convert_sensor_hysterisis()
285 result = (double) (((m * (int8_t) val) ) * pow(10, k2)); in sdr_convert_sensor_hysterisis()
292 switch (sensor->linearization & 0x7f) { in sdr_convert_sensor_hysterisis()
300 result = (double) (log(result) / log(2.0)); in sdr_convert_sensor_hysterisis()
312 result = pow(result, -1.0); /*1/x w/o exception */ in sdr_convert_sensor_hysterisis()
334 /* sdr_convert_sensor_tolerance - convert raw sensor reading
339 * returns floating-point sensor tolerance(interpreted)
341 double
345 double result; in sdr_convert_sensor_tolerance()
347 m = __TO_M(sensor->mtol); in sdr_convert_sensor_tolerance()
348 k2 = __TO_R_EXP(sensor->bacc); in sdr_convert_sensor_tolerance()
350 switch (sensor->cmn.unit.analog) { in sdr_convert_sensor_tolerance()
353 result = (double) ((((m * (double)val/2)) ) * pow(10, k2)); in sdr_convert_sensor_tolerance()
360 result = (double) (((m * ((double)((int8_t) val)/2))) * pow(10, k2)); in sdr_convert_sensor_tolerance()
367 switch (sensor->linearization & 0x7f) { in sdr_convert_sensor_tolerance()
375 result = (double) (log(result) / log(2.0)); in sdr_convert_sensor_tolerance()
387 result = pow(result, -1.0); /*1/x w/o exception */ in sdr_convert_sensor_tolerance()
408 /* sdr_convert_sensor_value_to_raw - convert sensor reading back to raw
417 double val) in sdr_convert_sensor_value_to_raw()
420 double result; in sdr_convert_sensor_value_to_raw()
423 if (UNITS_ARE_DISCRETE((&sensor->cmn))) in sdr_convert_sensor_value_to_raw()
426 m = __TO_M(sensor->mtol); in sdr_convert_sensor_value_to_raw()
427 b = __TO_B(sensor->bacc); in sdr_convert_sensor_value_to_raw()
428 k1 = __TO_B_EXP(sensor->bacc); in sdr_convert_sensor_value_to_raw()
429 k2 = __TO_R_EXP(sensor->bacc); in sdr_convert_sensor_value_to_raw()
435 result = (((val / pow(10, k2)) - (b * pow(10, k1))) / m); in sdr_convert_sensor_value_to_raw()
437 if ((result - (int) result) >= .5) in sdr_convert_sensor_value_to_raw()
443 /* ipmi_sdr_get_sensor_thresholds - return thresholds for sensor
449 * @channel: channel number
455 uint8_t target, uint8_t lun, uint8_t channel) in ipmi_sdr_get_sensor_thresholds() argument
463 if ( BRIDGE_TO_SENSOR(intf, target, channel) ) { in ipmi_sdr_get_sensor_thresholds()
465 save_addr = intf->target_addr; in ipmi_sdr_get_sensor_thresholds()
466 intf->target_addr = target; in ipmi_sdr_get_sensor_thresholds()
467 save_channel = intf->target_channel; in ipmi_sdr_get_sensor_thresholds()
468 intf->target_channel = channel; in ipmi_sdr_get_sensor_thresholds()
478 rsp = intf->sendrecv(intf, &req); in ipmi_sdr_get_sensor_thresholds()
480 intf->target_addr = save_addr; in ipmi_sdr_get_sensor_thresholds()
481 intf->target_channel = save_channel; in ipmi_sdr_get_sensor_thresholds()
486 /* ipmi_sdr_get_sensor_hysteresis - return hysteresis for sensor
492 * @channel: channel number
498 uint8_t target, uint8_t lun, uint8_t channel) in ipmi_sdr_get_sensor_hysteresis() argument
507 if ( BRIDGE_TO_SENSOR(intf, target, channel) ) { in ipmi_sdr_get_sensor_hysteresis()
509 save_addr = intf->target_addr; in ipmi_sdr_get_sensor_hysteresis()
510 intf->target_addr = target; in ipmi_sdr_get_sensor_hysteresis()
511 save_channel = intf->target_channel; in ipmi_sdr_get_sensor_hysteresis()
512 intf->target_channel = channel; in ipmi_sdr_get_sensor_hysteresis()
525 rsp = intf->sendrecv(intf, &req); in ipmi_sdr_get_sensor_hysteresis()
527 intf->target_addr = save_addr; in ipmi_sdr_get_sensor_hysteresis()
528 intf->target_channel = save_channel; in ipmi_sdr_get_sensor_hysteresis()
533 /* ipmi_sdr_get_sensor_reading - retrieve a raw sensor reading
551 return intf->sendrecv(intf, &req); in ipmi_sdr_get_sensor_reading()
555 /* ipmi_sdr_get_sensor_reading_ipmb - retrieve a raw sensor reading from ipmb
561 * @channel: channel number
567 uint8_t target, uint8_t lun, uint8_t channel) in ipmi_sdr_get_sensor_reading_ipmb() argument
575 if ( BRIDGE_TO_SENSOR(intf, target, channel) ) { in ipmi_sdr_get_sensor_reading_ipmb()
579 intf->my_addr, intf->target_addr, intf->target_channel, in ipmi_sdr_get_sensor_reading_ipmb()
580 target, channel); in ipmi_sdr_get_sensor_reading_ipmb()
582 save_addr = intf->target_addr; in ipmi_sdr_get_sensor_reading_ipmb()
583 intf->target_addr = target; in ipmi_sdr_get_sensor_reading_ipmb()
584 save_channel = intf->target_channel; in ipmi_sdr_get_sensor_reading_ipmb()
585 intf->target_channel = channel; in ipmi_sdr_get_sensor_reading_ipmb()
594 rsp = intf->sendrecv(intf, &req); in ipmi_sdr_get_sensor_reading_ipmb()
596 intf->target_addr = save_addr; in ipmi_sdr_get_sensor_reading_ipmb()
597 intf->target_channel = save_channel; in ipmi_sdr_get_sensor_reading_ipmb()
602 /* ipmi_sdr_get_sensor_event_status - retrieve sensor event status
608 * @channel: channel number
614 uint8_t target, uint8_t lun, uint8_t channel) in ipmi_sdr_get_sensor_event_status() argument
622 if ( BRIDGE_TO_SENSOR(intf, target, channel) ) { in ipmi_sdr_get_sensor_event_status()
624 save_addr = intf->target_addr; in ipmi_sdr_get_sensor_event_status()
625 intf->target_addr = target; in ipmi_sdr_get_sensor_event_status()
626 save_channel = intf->target_channel; in ipmi_sdr_get_sensor_event_status()
627 intf->target_channel = channel; in ipmi_sdr_get_sensor_event_status()
636 rsp = intf->sendrecv(intf, &req); in ipmi_sdr_get_sensor_event_status()
638 intf->target_addr = save_addr; in ipmi_sdr_get_sensor_event_status()
639 intf->target_channel = save_channel; in ipmi_sdr_get_sensor_event_status()
644 /* ipmi_sdr_get_sensor_event_enable - retrieve sensor event enables
650 * @channel: channel number
656 uint8_t target, uint8_t lun, uint8_t channel) in ipmi_sdr_get_sensor_event_enable() argument
664 if ( BRIDGE_TO_SENSOR(intf, target, channel) ) { in ipmi_sdr_get_sensor_event_enable()
666 save_addr = intf->target_addr; in ipmi_sdr_get_sensor_event_enable()
667 intf->target_addr = target; in ipmi_sdr_get_sensor_event_enable()
668 save_channel = intf->target_channel; in ipmi_sdr_get_sensor_event_enable()
669 intf->target_channel = channel; in ipmi_sdr_get_sensor_event_enable()
679 rsp = intf->sendrecv(intf, &req); in ipmi_sdr_get_sensor_event_enable()
681 intf->target_addr = save_addr; in ipmi_sdr_get_sensor_event_enable()
682 intf->target_channel = save_channel; in ipmi_sdr_get_sensor_event_enable()
687 /* ipmi_sdr_get_sensor_type_desc - Get sensor type descriptor
713 /* ipmi_sdr_get_thresh_status - threshold status indicator
721 * nc = non-critical
722 * nr = non-recoverable
730 if (!sr->s_reading_valid) { in ipmi_sdr_get_thresh_status()
733 stat = sr->s_data2; in ipmi_sdr_get_thresh_status()
736 return "Lower Non-Recoverable"; in ipmi_sdr_get_thresh_status()
743 return "Upper Non-Recoverable"; in ipmi_sdr_get_thresh_status()
764 return "Lower Non-Critical"; in ipmi_sdr_get_thresh_status()
771 return "Upper Non-Critical"; in ipmi_sdr_get_thresh_status()
780 /* ipmi_sdr_get_header - retreive SDR record header
798 sdr_rq.reserve_id = itr->reservation; in ipmi_sdr_get_header()
799 sdr_rq.id = itr->next; in ipmi_sdr_get_header()
804 if (itr->use_built_in == 0) { in ipmi_sdr_get_header()
815 sdr_rq.reserve_id = itr->reservation; in ipmi_sdr_get_header()
816 rsp = intf->sendrecv(intf, &req); in ipmi_sdr_get_header()
819 itr->next); in ipmi_sdr_get_header()
821 } else if (rsp->ccode == 0xc5) { in ipmi_sdr_get_header()
825 itr->reservation); in ipmi_sdr_get_header()
829 if (ipmi_sdr_get_reservation(intf, itr->use_built_in, in ipmi_sdr_get_header()
830 &(itr->reservation)) < 0) { in ipmi_sdr_get_header()
835 } else if (rsp->ccode > 0) { in ipmi_sdr_get_header()
837 itr->next, val2str(rsp->ccode, in ipmi_sdr_get_header()
851 lprintf(LOG_DEBUG, "SDR record ID : 0x%04x", itr->next); in ipmi_sdr_get_header()
853 memcpy(&sdr_rs, rsp->data, sizeof (sdr_rs)); in ipmi_sdr_get_header()
857 itr->next, sdr_rs.length); in ipmi_sdr_get_header()
861 /* achu (chu11 at llnl dot gov): - Some boards are stupid and in ipmi_sdr_get_header()
869 if (sdr_rs.id != itr->next) { in ipmi_sdr_get_header()
871 sdr_rs.id = itr->next; in ipmi_sdr_get_header()
881 /* ipmi_sdr_get_next_header - retreive next SDR header
894 if (itr->next == 0xffff) in ipmi_sdr_get_next_header()
901 itr->next = header->next; in ipmi_sdr_get_next_header()
916 if (UNITS_ARE_DISCRETE((&FULLSENS->cmn))) \
927 if ((FULLSENS)->analog_flag.READ != 0) { \
928 printf(" %-21s : ", NAME); \
929 if (UNITS_ARE_DISCRETE((&FULLSENS->cmn))) \
931 (FULLSENS)->READ); \
934 (FULLSENS), (FULLSENS)->READ));\
939 if ((FULLSENS)->cmn.sensor.init.thresholds && \
940 (FULLSENS)->cmn.mask.type.threshold.read.FLAG != 0) { \
941 printf(" %-21s : ", NAME); \
942 if (UNITS_ARE_DISCRETE((&FULLSENS->cmn))) \
944 (FULLSENS)->threshold.READ); \
947 (FULLSENS), (FULLSENS)->threshold.READ)); \
955 uint8_t target, uint8_t lun, uint8_t channel) in ipmi_sdr_print_sensor_event_status() argument
961 {0x40, "unc-"}, in ipmi_sdr_print_sensor_event_status()
963 {0x10, "lnr-"}, in ipmi_sdr_print_sensor_event_status()
965 {0x04, "lcr-"}, in ipmi_sdr_print_sensor_event_status()
967 {0x01, "lnc-"}, in ipmi_sdr_print_sensor_event_status()
972 {0x04, "unr-"}, in ipmi_sdr_print_sensor_event_status()
974 {0x01, "ucr-"}, in ipmi_sdr_print_sensor_event_status()
979 target, lun, channel); in ipmi_sdr_print_sensor_event_status()
985 return -1; in ipmi_sdr_print_sensor_event_status()
987 if (rsp->ccode > 0) { in ipmi_sdr_print_sensor_event_status()
990 sensor_num, val2str(rsp->ccode, completion_code_vals)); in ipmi_sdr_print_sensor_event_status()
991 return -1; in ipmi_sdr_print_sensor_event_status()
994 if (IS_READING_UNAVAILABLE(rsp->data[0])) { in ipmi_sdr_print_sensor_event_status()
998 if (IS_SCANNING_DISABLED(rsp->data[0])) { in ipmi_sdr_print_sensor_event_status()
1002 if (IS_EVENT_MSG_DISABLED(rsp->data[0])) { in ipmi_sdr_print_sensor_event_status()
1009 if (rsp->data_len == 2) { in ipmi_sdr_print_sensor_event_status()
1012 rsp->data[1], 0); in ipmi_sdr_print_sensor_event_status()
1013 } else if (rsp->data_len > 2) { in ipmi_sdr_print_sensor_event_status()
1016 rsp->data[1], in ipmi_sdr_print_sensor_event_status()
1017 rsp->data[2]); in ipmi_sdr_print_sensor_event_status()
1019 if (rsp->data_len == 4) { in ipmi_sdr_print_sensor_event_status()
1022 rsp->data[3], 0); in ipmi_sdr_print_sensor_event_status()
1023 } else if (rsp->data_len > 4) { in ipmi_sdr_print_sensor_event_status()
1026 rsp->data[3], in ipmi_sdr_print_sensor_event_status()
1027 rsp->data[4]); in ipmi_sdr_print_sensor_event_status()
1034 if (rsp->data[1] & (1 << i)) in ipmi_sdr_print_sensor_event_status()
1037 if (rsp->data_len > 2) { in ipmi_sdr_print_sensor_event_status()
1039 if (rsp->data[2] & (1 << i)) in ipmi_sdr_print_sensor_event_status()
1044 if ((rsp->data_len == 4 && rsp->data[3] != 0) || in ipmi_sdr_print_sensor_event_status()
1045 (rsp->data_len > 4 in ipmi_sdr_print_sensor_event_status()
1046 && (rsp->data[3] != 0 && rsp->data[4] != 0))) { in ipmi_sdr_print_sensor_event_status()
1049 if (rsp->data[3] & (1 << i)) in ipmi_sdr_print_sensor_event_status()
1054 if (rsp->data_len > 4) { in ipmi_sdr_print_sensor_event_status()
1056 if (rsp->data[4] & (1 << i)) in ipmi_sdr_print_sensor_event_status()
1081 /* iceblink - don't print some event status fields - CVS rev1.53 */ in ipmi_sdr_print_sensor_mask()
1088 mask->type.discrete. in ipmi_sdr_print_sensor_mask()
1090 (mask->type.discrete. in ipmi_sdr_print_sensor_mask()
1094 mask->type.discrete. in ipmi_sdr_print_sensor_mask()
1096 (mask->type.discrete. in ipmi_sdr_print_sensor_mask()
1102 if (mask->type.threshold.assert_lnr_high) in ipmi_sdr_print_sensor_mask()
1104 if (mask->type.threshold.assert_lnr_low) in ipmi_sdr_print_sensor_mask()
1105 printf("lnr- "); in ipmi_sdr_print_sensor_mask()
1106 if (mask->type.threshold.assert_lcr_high) in ipmi_sdr_print_sensor_mask()
1108 if (mask->type.threshold.assert_lcr_low) in ipmi_sdr_print_sensor_mask()
1109 printf("lcr- "); in ipmi_sdr_print_sensor_mask()
1110 if (mask->type.threshold.assert_lnc_high) in ipmi_sdr_print_sensor_mask()
1112 if (mask->type.threshold.assert_lnc_low) in ipmi_sdr_print_sensor_mask()
1113 printf("lnc- "); in ipmi_sdr_print_sensor_mask()
1114 if (mask->type.threshold.assert_unc_high) in ipmi_sdr_print_sensor_mask()
1116 if (mask->type.threshold.assert_unc_low) in ipmi_sdr_print_sensor_mask()
1117 printf("unc- "); in ipmi_sdr_print_sensor_mask()
1118 if (mask->type.threshold.assert_ucr_high) in ipmi_sdr_print_sensor_mask()
1120 if (mask->type.threshold.assert_ucr_low) in ipmi_sdr_print_sensor_mask()
1121 printf("ucr- "); in ipmi_sdr_print_sensor_mask()
1122 if (mask->type.threshold.assert_unr_high) in ipmi_sdr_print_sensor_mask()
1124 if (mask->type.threshold.assert_unr_low) in ipmi_sdr_print_sensor_mask()
1125 printf("unr- "); in ipmi_sdr_print_sensor_mask()
1129 if (mask->type.threshold.deassert_lnr_high) in ipmi_sdr_print_sensor_mask()
1131 if (mask->type.threshold.deassert_lnr_low) in ipmi_sdr_print_sensor_mask()
1132 printf("lnr- "); in ipmi_sdr_print_sensor_mask()
1133 if (mask->type.threshold.deassert_lcr_high) in ipmi_sdr_print_sensor_mask()
1135 if (mask->type.threshold.deassert_lcr_low) in ipmi_sdr_print_sensor_mask()
1136 printf("lcr- "); in ipmi_sdr_print_sensor_mask()
1137 if (mask->type.threshold.deassert_lnc_high) in ipmi_sdr_print_sensor_mask()
1139 if (mask->type.threshold.deassert_lnc_low) in ipmi_sdr_print_sensor_mask()
1140 printf("lnc- "); in ipmi_sdr_print_sensor_mask()
1141 if (mask->type.threshold.deassert_unc_high) in ipmi_sdr_print_sensor_mask()
1143 if (mask->type.threshold.deassert_unc_low) in ipmi_sdr_print_sensor_mask()
1144 printf("unc- "); in ipmi_sdr_print_sensor_mask()
1145 if (mask->type.threshold.deassert_ucr_high) in ipmi_sdr_print_sensor_mask()
1147 if (mask->type.threshold.deassert_ucr_low) in ipmi_sdr_print_sensor_mask()
1148 printf("ucr- "); in ipmi_sdr_print_sensor_mask()
1149 if (mask->type.threshold.deassert_unr_high) in ipmi_sdr_print_sensor_mask()
1151 if (mask->type.threshold.deassert_unr_low) in ipmi_sdr_print_sensor_mask()
1152 printf("unr- "); in ipmi_sdr_print_sensor_mask()
1168 uint8_t target, uint8_t lun, uint8_t channel) in ipmi_sdr_print_sensor_event_enable() argument
1174 {0x40, "unc-"}, in ipmi_sdr_print_sensor_event_enable()
1176 {0x10, "lnr-"}, in ipmi_sdr_print_sensor_event_enable()
1178 {0x04, "lcr-"}, in ipmi_sdr_print_sensor_event_enable()
1180 {0x01, "lnc-"}, in ipmi_sdr_print_sensor_event_enable()
1185 {0x04, "unr-"}, in ipmi_sdr_print_sensor_event_enable()
1187 {0x01, "ucr-"}, in ipmi_sdr_print_sensor_event_enable()
1192 target, lun, channel); in ipmi_sdr_print_sensor_event_enable()
1198 return -1; in ipmi_sdr_print_sensor_event_enable()
1200 if (rsp->ccode > 0) { in ipmi_sdr_print_sensor_event_enable()
1203 sensor_num, val2str(rsp->ccode, completion_code_vals)); in ipmi_sdr_print_sensor_event_enable()
1204 return -1; in ipmi_sdr_print_sensor_event_enable()
1207 if (IS_SCANNING_DISABLED(rsp->data[0])) { in ipmi_sdr_print_sensor_event_enable()
1211 if (IS_EVENT_MSG_DISABLED(rsp->data[0])) { in ipmi_sdr_print_sensor_event_enable()
1219 if (rsp->data_len == 2) { in ipmi_sdr_print_sensor_event_enable()
1222 rsp->data[1], 0); in ipmi_sdr_print_sensor_event_enable()
1223 } else if (rsp->data_len > 2) { in ipmi_sdr_print_sensor_event_enable()
1226 rsp->data[1], in ipmi_sdr_print_sensor_event_enable()
1227 rsp->data[2]); in ipmi_sdr_print_sensor_event_enable()
1229 if (rsp->data_len == 4) { in ipmi_sdr_print_sensor_event_enable()
1232 rsp->data[3], 0); in ipmi_sdr_print_sensor_event_enable()
1233 } else if (rsp->data_len > 4) { in ipmi_sdr_print_sensor_event_enable()
1236 rsp->data[3], in ipmi_sdr_print_sensor_event_enable()
1237 rsp->data[4]); in ipmi_sdr_print_sensor_event_enable()
1245 if (rsp->data[1] & (1 << i)) in ipmi_sdr_print_sensor_event_enable()
1248 if (rsp->data_len > 2) { in ipmi_sdr_print_sensor_event_enable()
1250 if (rsp->data[2] & (1 << i)) in ipmi_sdr_print_sensor_event_enable()
1255 if ((rsp->data_len == 4 && rsp->data[3] != 0) || in ipmi_sdr_print_sensor_event_enable()
1256 (rsp->data_len > 4 in ipmi_sdr_print_sensor_event_enable()
1257 && (rsp->data[3] != 0 || rsp->data[4] != 0))) { in ipmi_sdr_print_sensor_event_enable()
1260 if (rsp->data[3] & (1 << i)) in ipmi_sdr_print_sensor_event_enable()
1265 if (rsp->data_len > 4) { in ipmi_sdr_print_sensor_event_enable()
1267 if (rsp->data[4] & (1 << i)) in ipmi_sdr_print_sensor_event_enable()
1287 /* ipmi_sdr_print_sensor_hysteresis - print hysteresis for Discrete & Analog
1316 double creading = sdr_convert_sensor_hysterisis(full, hysteresis_value); in ipmi_sdr_print_sensor_hysteresis()
1325 /* print_sensor_min_max - print Discrete & Analog Minimum/Maximum Sensor Range
1338 double creading = 0.0; in print_sensor_min_max()
1339 uint8_t is_analog = !UNITS_ARE_DISCRETE(&full->cmn); in print_sensor_min_max()
1341 creading = sdr_convert_sensor_reading(full, full->sensor_min); in print_sensor_min_max()
1342 if ((full->cmn.unit.analog == 0 && full->sensor_min == 0x00) || in print_sensor_min_max()
1343 (full->cmn.unit.analog == 1 && full->sensor_min == 0xff) || in print_sensor_min_max()
1344 (full->cmn.unit.analog == 2 && full->sensor_min == 0x80) || in print_sensor_min_max()
1351 printf(" Minimum sensor range : 0x%02X\n", full->sensor_min); in print_sensor_min_max()
1355 creading = sdr_convert_sensor_reading(full, full->sensor_max); in print_sensor_min_max()
1356 if ((full->cmn.unit.analog == 0 && full->sensor_max == 0xff) || in print_sensor_min_max()
1357 (full->cmn.unit.analog == 1 && full->sensor_max == 0x00) || in print_sensor_min_max()
1358 (full->cmn.unit.analog == 2 && full->sensor_max == 0x7f) || in print_sensor_min_max()
1365 printf(" Maximum sensor range : 0x%02X\n", full->sensor_max); in print_sensor_min_max()
1369 /* print_csv_discrete - print csv formatted discrete sensor
1380 if (!sr->s_reading_valid || sr->s_reading_unavailable) { in print_csv_discrete()
1382 sensor->keys.sensor_num, in print_csv_discrete()
1383 sensor->entity.id, in print_csv_discrete()
1384 sensor->entity.instance); in print_csv_discrete()
1388 if (sr->s_has_analog_value) { /* Sensor has an analog value */ in print_csv_discrete()
1389 printf("%s,%s,", sr->s_a_str, sr->s_a_units); in print_csv_discrete()
1391 printf("%02Xh,", sensor->keys.sensor_num); in print_csv_discrete()
1394 sensor->entity.id, in print_csv_discrete()
1395 sensor->entity.instance); in print_csv_discrete()
1397 sensor->sensor.type, in print_csv_discrete()
1398 sensor->event_type, in print_csv_discrete()
1399 sr->s_data2, in print_csv_discrete()
1400 sr->s_data3); in print_csv_discrete()
1403 /* ipmi_sdr_read_sensor_value - read sensor value
1429 idlen = sr.full->id_code & 0x1f; in ipmi_sdr_read_sensor_value()
1431 idlen : sizeof(sr.s_id) - 1; in ipmi_sdr_read_sensor_value()
1432 memcpy(sr.s_id, sr.full->id_string, idlen); in ipmi_sdr_read_sensor_value()
1436 idlen = sr.compact->id_code & 0x1f; in ipmi_sdr_read_sensor_value()
1438 idlen : sizeof(sr.s_id) - 1; in ipmi_sdr_read_sensor_value()
1439 memcpy(sr.s_id, sr.compact->id_string, idlen); in ipmi_sdr_read_sensor_value()
1450 sensor->keys.sensor_num, in ipmi_sdr_read_sensor_value()
1451 sensor->keys.owner_id, in ipmi_sdr_read_sensor_value()
1452 sensor->keys.lun, in ipmi_sdr_read_sensor_value()
1453 sensor->keys.channel); in ipmi_sdr_read_sensor_value()
1461 sr.s_id, sensor->keys.sensor_num); in ipmi_sdr_read_sensor_value()
1465 if (rsp->ccode) { in ipmi_sdr_read_sensor_value()
1466 if ( !((sr.full && rsp->ccode == 0xcb) || in ipmi_sdr_read_sensor_value()
1467 (sr.compact && rsp->ccode == 0xcd)) ) { in ipmi_sdr_read_sensor_value()
1470 sensor->keys.sensor_num, in ipmi_sdr_read_sensor_value()
1471 val2str(rsp->ccode, completion_code_vals)); in ipmi_sdr_read_sensor_value()
1476 if (rsp->data_len < 2) { in ipmi_sdr_read_sensor_value()
1484 sr.s_id, rsp->data_len); in ipmi_sdr_read_sensor_value()
1489 if (IS_READING_UNAVAILABLE(rsp->data[1])) in ipmi_sdr_read_sensor_value()
1492 if (IS_SCANNING_DISABLED(rsp->data[1])) { in ipmi_sdr_read_sensor_value()
1495 sr.s_id, sensor->keys.sensor_num); in ipmi_sdr_read_sensor_value()
1500 sr.s_reading = rsp->data[0]; in ipmi_sdr_read_sensor_value()
1502 if (rsp->data_len > 2) in ipmi_sdr_read_sensor_value()
1503 sr.s_data2 = rsp->data[2]; in ipmi_sdr_read_sensor_value()
1504 if (rsp->data_len > 3) in ipmi_sdr_read_sensor_value()
1505 sr.s_data3 = rsp->data[3]; in ipmi_sdr_read_sensor_value()
1512 sr.s_a_units = ipmi_sdr_get_unit_string(sr.full->cmn.unit.pct, in ipmi_sdr_read_sensor_value()
1513 sr.full->cmn.unit.modifier, in ipmi_sdr_read_sensor_value()
1514 sr.full->cmn.unit.type.base, in ipmi_sdr_read_sensor_value()
1515 sr.full->cmn.unit.type.modifier); in ipmi_sdr_read_sensor_value()
1523 /* ipmi_sdr_print_sensor_fc - print full & compact SDR records
1530 * returns -1 on error
1539 uint8_t target, lun, channel; in ipmi_sdr_print_sensor_fc() local
1546 return -1; in ipmi_sdr_print_sensor_fc()
1548 target = sensor->keys.owner_id; in ipmi_sdr_print_sensor_fc()
1549 lun = sensor->keys.lun; in ipmi_sdr_print_sensor_fc()
1550 channel = sensor->keys.channel; in ipmi_sdr_print_sensor_fc()
1560 printf("%s,", sr->s_id); in ipmi_sdr_print_sensor_fc()
1562 /* Discrete/Non-Threshold */ in ipmi_sdr_print_sensor_fc()
1568 if (sr->s_reading_valid) { in ipmi_sdr_print_sensor_fc()
1569 if (sr->s_has_analog_value) { in ipmi_sdr_print_sensor_fc()
1571 printf("%.*f,", (sr->s_a_val == in ipmi_sdr_print_sensor_fc()
1572 (int) sr->s_a_val) ? 0 : 3, in ipmi_sdr_print_sensor_fc()
1573 sr->s_a_val); in ipmi_sdr_print_sensor_fc()
1574 printf("%s,%s", sr->s_a_units, in ipmi_sdr_print_sensor_fc()
1585 sensor->entity.id, sensor->entity.instance, in ipmi_sdr_print_sensor_fc()
1586 val2str(sensor->entity.id, entity_id_vals), in ipmi_sdr_print_sensor_fc()
1587 ipmi_sdr_get_sensor_type_desc(sensor->sensor. in ipmi_sdr_print_sensor_fc()
1590 if (sr->full) { in ipmi_sdr_print_sensor_fc()
1591 SENSOR_PRINT_CSV(sr->full, sr->full->analog_flag.nominal_read, in ipmi_sdr_print_sensor_fc()
1592 sr->full->nominal_read); in ipmi_sdr_print_sensor_fc()
1593 SENSOR_PRINT_CSV(sr->full, sr->full->analog_flag.normal_min, in ipmi_sdr_print_sensor_fc()
1594 sr->full->normal_min); in ipmi_sdr_print_sensor_fc()
1595 SENSOR_PRINT_CSV(sr->full, sr->full->analog_flag.normal_max, in ipmi_sdr_print_sensor_fc()
1596 sr->full->normal_max); in ipmi_sdr_print_sensor_fc()
1597 SENSOR_PRINT_CSV(sr->full, sensor->mask.type.threshold.read.unr, in ipmi_sdr_print_sensor_fc()
1598 sr->full->threshold.upper.non_recover); in ipmi_sdr_print_sensor_fc()
1599 SENSOR_PRINT_CSV(sr->full, sensor->mask.type.threshold.read.ucr, in ipmi_sdr_print_sensor_fc()
1600 sr->full->threshold.upper.critical); in ipmi_sdr_print_sensor_fc()
1601 SENSOR_PRINT_CSV(sr->full, sensor->mask.type.threshold.read.unc, in ipmi_sdr_print_sensor_fc()
1602 sr->full->threshold.upper.non_critical); in ipmi_sdr_print_sensor_fc()
1603 SENSOR_PRINT_CSV(sr->full, sensor->mask.type.threshold.read.lnr, in ipmi_sdr_print_sensor_fc()
1604 sr->full->threshold.lower.non_recover); in ipmi_sdr_print_sensor_fc()
1605 SENSOR_PRINT_CSV(sr->full, sensor->mask.type.threshold.read.lcr, in ipmi_sdr_print_sensor_fc()
1606 sr->full->threshold.lower.critical); in ipmi_sdr_print_sensor_fc()
1607 SENSOR_PRINT_CSV(sr->full, sensor->mask.type.threshold.read.lnc, in ipmi_sdr_print_sensor_fc()
1608 sr->full->threshold.lower.non_critical); in ipmi_sdr_print_sensor_fc()
1611 printf("0x%02X,0x%02X", sr->full->sensor_min, sr->full->sensor_max); in ipmi_sdr_print_sensor_fc()
1615 sdr_convert_sensor_reading(sr->full, in ipmi_sdr_print_sensor_fc()
1616 sr->full->sensor_min), in ipmi_sdr_print_sensor_fc()
1617 sdr_convert_sensor_reading(sr->full, in ipmi_sdr_print_sensor_fc()
1618 sr->full->sensor_max)); in ipmi_sdr_print_sensor_fc()
1638 printf("%-16s | ", sr->s_id); in ipmi_sdr_print_sensor_fc()
1642 if (sr->s_reading_valid) { in ipmi_sdr_print_sensor_fc()
1643 if( sr->s_has_analog_value ) { in ipmi_sdr_print_sensor_fc()
1645 sr->s_a_str, in ipmi_sdr_print_sensor_fc()
1646 sr->s_a_units); in ipmi_sdr_print_sensor_fc()
1649 "0x%02x", sr->s_reading); in ipmi_sdr_print_sensor_fc()
1651 else if (sr->s_scanning_disabled) in ipmi_sdr_print_sensor_fc()
1652 snprintf(sval, sizeof (sval), sr->full ? "disabled" : "Not Readable"); in ipmi_sdr_print_sensor_fc()
1654 snprintf(sval, sizeof (sval), sr->full ? "no reading" : "Not Readable"); in ipmi_sdr_print_sensor_fc()
1666 printf("%s", sr->s_reading_valid ? "ok" : "ns"); in ipmi_sdr_print_sensor_fc()
1676 printf("%-16s | %02Xh | ", in ipmi_sdr_print_sensor_fc()
1677 sr->s_id, sensor->keys.sensor_num); in ipmi_sdr_print_sensor_fc()
1681 printf("%-3s | %2d.%1d | ", in ipmi_sdr_print_sensor_fc()
1683 sensor->entity.id, sensor->entity.instance); in ipmi_sdr_print_sensor_fc()
1687 printf("%-3s | %2d.%1d | ", in ipmi_sdr_print_sensor_fc()
1688 (sr->s_reading_valid ? "ok" : "ns"), in ipmi_sdr_print_sensor_fc()
1689 sensor->entity.id, sensor->entity.instance); in ipmi_sdr_print_sensor_fc()
1694 if (sr->s_reading_valid) { in ipmi_sdr_print_sensor_fc()
1696 sr->s_has_analog_value ) { in ipmi_sdr_print_sensor_fc()
1699 sr->s_a_str, in ipmi_sdr_print_sensor_fc()
1700 sr->s_a_units); in ipmi_sdr_print_sensor_fc()
1704 if (sr->s_has_analog_value) { /* Sensor has an analog value */ in ipmi_sdr_print_sensor_fc()
1705 printf("%s %s", sr->s_a_str, sr->s_a_units); in ipmi_sdr_print_sensor_fc()
1709 sensor->sensor.type, in ipmi_sdr_print_sensor_fc()
1710 sensor->event_type, in ipmi_sdr_print_sensor_fc()
1711 sr->s_data2, in ipmi_sdr_print_sensor_fc()
1712 sr->s_data3); in ipmi_sdr_print_sensor_fc()
1715 else if (sr->s_scanning_disabled) in ipmi_sdr_print_sensor_fc()
1728 sr->s_id, sensor->keys.sensor_num); in ipmi_sdr_print_sensor_fc()
1730 sensor->entity.id, sensor->entity.instance, in ipmi_sdr_print_sensor_fc()
1731 val2str(sensor->entity.id, entity_id_vals)); in ipmi_sdr_print_sensor_fc()
1736 ipmi_sdr_get_sensor_type_desc(sensor->sensor.type), in ipmi_sdr_print_sensor_fc()
1737 sensor->sensor.type); in ipmi_sdr_print_sensor_fc()
1739 sensor->event_type); in ipmi_sdr_print_sensor_fc()
1742 if (sr->s_reading_valid) { in ipmi_sdr_print_sensor_fc()
1743 if (sr->s_has_analog_value) { /* Sensor has an analog value */ in ipmi_sdr_print_sensor_fc()
1744 printf("%s %s\n", sr->s_a_str, sr->s_a_units); in ipmi_sdr_print_sensor_fc()
1746 printf("%xh\n", sr->s_reading); in ipmi_sdr_print_sensor_fc()
1749 else if (sr->s_scanning_disabled) in ipmi_sdr_print_sensor_fc()
1757 switch (sensor->sensor.capabilities.event_msg) { in ipmi_sdr_print_sensor_fc()
1759 printf("Per-threshold\n"); in ipmi_sdr_print_sensor_fc()
1773 sensor->sensor.type, in ipmi_sdr_print_sensor_fc()
1774 sensor->event_type, in ipmi_sdr_print_sensor_fc()
1775 sr->s_data2, in ipmi_sdr_print_sensor_fc()
1776 sr->s_data3); in ipmi_sdr_print_sensor_fc()
1777 ipmi_sdr_print_sensor_mask(&sensor->mask, sensor->sensor.type, in ipmi_sdr_print_sensor_fc()
1778 sensor->event_type, DISCRETE_SENSOR); in ipmi_sdr_print_sensor_fc()
1780 sensor->keys.sensor_num, in ipmi_sdr_print_sensor_fc()
1781 sensor->sensor.type, in ipmi_sdr_print_sensor_fc()
1782 sensor->event_type, in ipmi_sdr_print_sensor_fc()
1785 lun, channel); in ipmi_sdr_print_sensor_fc()
1787 sensor->keys.sensor_num, in ipmi_sdr_print_sensor_fc()
1788 sensor->sensor.type, in ipmi_sdr_print_sensor_fc()
1789 sensor->event_type, in ipmi_sdr_print_sensor_fc()
1792 lun, channel); in ipmi_sdr_print_sensor_fc()
1794 sr->full ? sr->full->oem : sr->compact->oem); in ipmi_sdr_print_sensor_fc()
1800 ipmi_sdr_get_sensor_type_desc(sensor->sensor.type), in ipmi_sdr_print_sensor_fc()
1801 sensor->sensor.type); in ipmi_sdr_print_sensor_fc()
1804 if (sr->s_reading_valid) { in ipmi_sdr_print_sensor_fc()
1805 if (sr->full) { in ipmi_sdr_print_sensor_fc()
1806 uint16_t raw_tol = __TO_TOL(sr->full->mtol); in ipmi_sdr_print_sensor_fc()
1808 printf("0x%02X (+/- 0x%02X) %s\n", in ipmi_sdr_print_sensor_fc()
1809 sr->s_reading, raw_tol, sr->s_a_units); in ipmi_sdr_print_sensor_fc()
1812 double tol = sdr_convert_sensor_tolerance(sr->full, raw_tol); in ipmi_sdr_print_sensor_fc()
1813 printf("%.*f (+/- %.*f) %s\n", in ipmi_sdr_print_sensor_fc()
1814 (sr->s_a_val == (int) sr->s_a_val) ? 0 : 3, in ipmi_sdr_print_sensor_fc()
1815 sr->s_a_val, (tol == (int) tol) ? 0 : in ipmi_sdr_print_sensor_fc()
1816 3, tol, sr->s_a_units); in ipmi_sdr_print_sensor_fc()
1819 printf("0x%02X %s\n", sr->s_reading, sr->s_a_units); in ipmi_sdr_print_sensor_fc()
1821 } else if (sr->s_scanning_disabled) in ipmi_sdr_print_sensor_fc()
1829 if(sr->full) { in ipmi_sdr_print_sensor_fc()
1830 SENSOR_PRINT_NORMAL(sr->full, "Nominal Reading", nominal_read); in ipmi_sdr_print_sensor_fc()
1831 SENSOR_PRINT_NORMAL(sr->full, "Normal Minimum", normal_min); in ipmi_sdr_print_sensor_fc()
1832 SENSOR_PRINT_NORMAL(sr->full, "Normal Maximum", normal_max); in ipmi_sdr_print_sensor_fc()
1834 SENSOR_PRINT_THRESH(sr->full, "Upper non-recoverable", upper.non_recover, unr); in ipmi_sdr_print_sensor_fc()
1835 SENSOR_PRINT_THRESH(sr->full, "Upper critical", upper.critical, ucr); in ipmi_sdr_print_sensor_fc()
1836 SENSOR_PRINT_THRESH(sr->full, "Upper non-critical", upper.non_critical, unc); in ipmi_sdr_print_sensor_fc()
1837 SENSOR_PRINT_THRESH(sr->full, "Lower non-recoverable", lower.non_recover, lnr); in ipmi_sdr_print_sensor_fc()
1838 SENSOR_PRINT_THRESH(sr->full, "Lower critical", lower.critical, lcr); in ipmi_sdr_print_sensor_fc()
1839 SENSOR_PRINT_THRESH(sr->full, "Lower non-critical", lower.non_critical, lnc); in ipmi_sdr_print_sensor_fc()
1841 ipmi_sdr_print_sensor_hysteresis(sensor, sr->full, in ipmi_sdr_print_sensor_fc()
1842 sr->full ? sr->full->threshold.hysteresis.positive : in ipmi_sdr_print_sensor_fc()
1843 sr->compact->threshold.hysteresis.positive, "Positive Hysteresis"); in ipmi_sdr_print_sensor_fc()
1845 ipmi_sdr_print_sensor_hysteresis(sensor, sr->full, in ipmi_sdr_print_sensor_fc()
1846 sr->full ? sr->full->threshold.hysteresis.negative : in ipmi_sdr_print_sensor_fc()
1847 sr->compact->threshold.hysteresis.negative, "Negative Hysteresis"); in ipmi_sdr_print_sensor_fc()
1849 print_sensor_min_max(sr->full); in ipmi_sdr_print_sensor_fc()
1852 switch (sensor->sensor.capabilities.event_msg) { in ipmi_sdr_print_sensor_fc()
1854 printf("Per-threshold\n"); in ipmi_sdr_print_sensor_fc()
1868 switch (sensor->sensor.capabilities.threshold) { in ipmi_sdr_print_sensor_fc()
1874 if (sensor->mask.type.threshold.read.lnr) in ipmi_sdr_print_sensor_fc()
1876 if (sensor->mask.type.threshold.read.lcr) in ipmi_sdr_print_sensor_fc()
1878 if (sensor->mask.type.threshold.read.lnc) in ipmi_sdr_print_sensor_fc()
1880 if (sensor->mask.type.threshold.read.unc) in ipmi_sdr_print_sensor_fc()
1882 if (sensor->mask.type.threshold.read.ucr) in ipmi_sdr_print_sensor_fc()
1884 if (sensor->mask.type.threshold.read.unr) in ipmi_sdr_print_sensor_fc()
1894 switch (sensor->sensor.capabilities.threshold) { in ipmi_sdr_print_sensor_fc()
1900 if (sensor->mask.type.threshold.set.lnr) in ipmi_sdr_print_sensor_fc()
1902 if (sensor->mask.type.threshold.set.lcr) in ipmi_sdr_print_sensor_fc()
1904 if (sensor->mask.type.threshold.set.lnc) in ipmi_sdr_print_sensor_fc()
1906 if (sensor->mask.type.threshold.set.unc) in ipmi_sdr_print_sensor_fc()
1908 if (sensor->mask.type.threshold.set.ucr) in ipmi_sdr_print_sensor_fc()
1910 if (sensor->mask.type.threshold.set.unr) in ipmi_sdr_print_sensor_fc()
1919 if (sensor->mask.type.threshold.status_lnr || in ipmi_sdr_print_sensor_fc()
1920 sensor->mask.type.threshold.status_lcr || in ipmi_sdr_print_sensor_fc()
1921 sensor->mask.type.threshold.status_lnc || in ipmi_sdr_print_sensor_fc()
1922 sensor->mask.type.threshold.status_unc || in ipmi_sdr_print_sensor_fc()
1923 sensor->mask.type.threshold.status_ucr || in ipmi_sdr_print_sensor_fc()
1924 sensor->mask.type.threshold.status_unr) { in ipmi_sdr_print_sensor_fc()
1926 if (sensor->mask.type.threshold.status_lnr) in ipmi_sdr_print_sensor_fc()
1928 if (sensor->mask.type.threshold.status_lcr) in ipmi_sdr_print_sensor_fc()
1930 if (sensor->mask.type.threshold.status_lnc) in ipmi_sdr_print_sensor_fc()
1932 if (sensor->mask.type.threshold.status_unc) in ipmi_sdr_print_sensor_fc()
1934 if (sensor->mask.type.threshold.status_ucr) in ipmi_sdr_print_sensor_fc()
1936 if (sensor->mask.type.threshold.status_unr) in ipmi_sdr_print_sensor_fc()
1941 ipmi_sdr_print_sensor_mask(&sensor->mask, in ipmi_sdr_print_sensor_fc()
1942 sensor->sensor.type, in ipmi_sdr_print_sensor_fc()
1943 sensor->event_type, ANALOG_SENSOR); in ipmi_sdr_print_sensor_fc()
1945 sensor->keys.sensor_num, in ipmi_sdr_print_sensor_fc()
1946 sensor->sensor.type, in ipmi_sdr_print_sensor_fc()
1947 sensor->event_type, ANALOG_SENSOR, in ipmi_sdr_print_sensor_fc()
1949 lun, channel); in ipmi_sdr_print_sensor_fc()
1952 sensor->keys.sensor_num, in ipmi_sdr_print_sensor_fc()
1953 sensor->sensor.type, in ipmi_sdr_print_sensor_fc()
1954 sensor->event_type, ANALOG_SENSOR, in ipmi_sdr_print_sensor_fc()
1956 lun, channel); in ipmi_sdr_print_sensor_fc()
1972 /* ipmi_sdr_print_discrete_state_mini - print list of asserted states
2006 for (; evt->type != NULL; evt++) { in ipmi_sdr_print_discrete_state_mini()
2007 if ((evt->code != typ) || in ipmi_sdr_print_discrete_state_mini()
2008 (evt->data != 0xFF)) in ipmi_sdr_print_discrete_state_mini()
2011 if (evt->offset > 7) { in ipmi_sdr_print_discrete_state_mini()
2012 if ((1 << (evt->offset - 8)) & (state2 & 0x7f)) { in ipmi_sdr_print_discrete_state_mini()
2015 if (evt->desc) in ipmi_sdr_print_discrete_state_mini()
2016 printf("%s", evt->desc); in ipmi_sdr_print_discrete_state_mini()
2019 if ((1 << evt->offset) & state1) { in ipmi_sdr_print_discrete_state_mini()
2022 if (evt->desc) in ipmi_sdr_print_discrete_state_mini()
2023 printf("%s", evt->desc); in ipmi_sdr_print_discrete_state_mini()
2030 /* ipmi_sdr_print_discrete_state - print list of asserted states
2060 for (; evt->type != NULL; evt++) { in ipmi_sdr_print_discrete_state()
2061 if ((evt->code != typ) || in ipmi_sdr_print_discrete_state()
2062 (evt->data != 0xFF)) in ipmi_sdr_print_discrete_state()
2066 printf(" %-21s : %s\n", desc, evt->type); in ipmi_sdr_print_discrete_state()
2070 if (evt->offset > 7) { in ipmi_sdr_print_discrete_state()
2071 if ((1 << (evt->offset - 8)) & (state2 & 0x7f)) { in ipmi_sdr_print_discrete_state()
2072 if (evt->desc) { in ipmi_sdr_print_discrete_state()
2075 evt->desc); in ipmi_sdr_print_discrete_state()
2082 if ((1 << evt->offset) & state1) { in ipmi_sdr_print_discrete_state()
2083 if (evt->desc) { in ipmi_sdr_print_discrete_state()
2086 evt->desc); in ipmi_sdr_print_discrete_state()
2098 /* ipmi_sdr_print_sensor_eventonly - print SDR event only record
2104 * returns -1 on error
2113 return -1; in ipmi_sdr_print_sensor_eventonly()
2116 snprintf(desc, (sensor->id_code & 0x1f) + 1, "%s", sensor->id_string); in ipmi_sdr_print_sensor_eventonly()
2120 sensor->id_code ? desc : "", sensor->keys.sensor_num); in ipmi_sdr_print_sensor_eventonly()
2122 sensor->entity.id, sensor->entity.instance, in ipmi_sdr_print_sensor_eventonly()
2123 val2str(sensor->entity.id, entity_id_vals)); in ipmi_sdr_print_sensor_eventonly()
2125 ipmi_sdr_get_sensor_type_desc(sensor->sensor_type), in ipmi_sdr_print_sensor_eventonly()
2126 sensor->sensor_type); in ipmi_sdr_print_sensor_eventonly()
2128 sensor->event_type); in ipmi_sdr_print_sensor_eventonly()
2132 printf("%s,%02Xh,ns,%d.%d,Event-Only\n", in ipmi_sdr_print_sensor_eventonly()
2133 sensor->id_code ? desc : "", in ipmi_sdr_print_sensor_eventonly()
2134 sensor->keys.sensor_num, in ipmi_sdr_print_sensor_eventonly()
2135 sensor->entity.id, sensor->entity.instance); in ipmi_sdr_print_sensor_eventonly()
2137 printf("%-16s | %02Xh | ns | %2d.%1d | Event-Only\n", in ipmi_sdr_print_sensor_eventonly()
2138 sensor->id_code ? desc : "", in ipmi_sdr_print_sensor_eventonly()
2139 sensor->keys.sensor_num, in ipmi_sdr_print_sensor_eventonly()
2140 sensor->entity.id, sensor->entity.instance); in ipmi_sdr_print_sensor_eventonly()
2142 printf("%-16s | Event-Only | ns\n", in ipmi_sdr_print_sensor_eventonly()
2143 sensor->id_code ? desc : ""); in ipmi_sdr_print_sensor_eventonly()
2149 /* ipmi_sdr_print_sensor_mc_locator - print SDR MC locator record
2155 * returns -1 on error
2164 return -1; in ipmi_sdr_print_sensor_mc_locator()
2167 snprintf(desc, (mc->id_code & 0x1f) + 1, "%s", mc->id_string); in ipmi_sdr_print_sensor_mc_locator()
2172 mc->id_code ? desc : "", in ipmi_sdr_print_sensor_mc_locator()
2173 mc->entity.id, mc->entity.instance); in ipmi_sdr_print_sensor_mc_locator()
2175 printf("%-16s | 00h | ok | %2d.%1d | ", in ipmi_sdr_print_sensor_mc_locator()
2176 mc->id_code ? desc : "", in ipmi_sdr_print_sensor_mc_locator()
2177 mc->entity.id, mc->entity.instance); in ipmi_sdr_print_sensor_mc_locator()
2180 (mc-> in ipmi_sdr_print_sensor_mc_locator()
2182 mc->dev_slave_addr); in ipmi_sdr_print_sensor_mc_locator()
2184 printf("%-16s | %s MC @ %02Xh %s | ok\n", in ipmi_sdr_print_sensor_mc_locator()
2185 mc->id_code ? desc : "", in ipmi_sdr_print_sensor_mc_locator()
2186 (mc-> in ipmi_sdr_print_sensor_mc_locator()
2188 mc->dev_slave_addr, in ipmi_sdr_print_sensor_mc_locator()
2189 (mc->pwr_state_notif & 0x1) ? " " : ""); in ipmi_sdr_print_sensor_mc_locator()
2195 printf("Device ID : %s\n", mc->id_string); in ipmi_sdr_print_sensor_mc_locator()
2197 mc->entity.id, mc->entity.instance, in ipmi_sdr_print_sensor_mc_locator()
2198 val2str(mc->entity.id, entity_id_vals)); in ipmi_sdr_print_sensor_mc_locator()
2200 printf("Device Slave Address : %02Xh\n", mc->dev_slave_addr); in ipmi_sdr_print_sensor_mc_locator()
2201 printf("Channel Number : %01Xh\n", mc->channel_num); in ipmi_sdr_print_sensor_mc_locator()
2204 (mc->pwr_state_notif & 0x4) ? "" : "Not "); in ipmi_sdr_print_sensor_mc_locator()
2206 (mc->pwr_state_notif & 0x2) ? "" : "Not "); in ipmi_sdr_print_sensor_mc_locator()
2208 (mc->pwr_state_notif & 0x1) ? "Static" : "Dynamic"); in ipmi_sdr_print_sensor_mc_locator()
2210 (mc->global_init & 0x8) ? "Yes" : "No"); in ipmi_sdr_print_sensor_mc_locator()
2213 if (!(mc->global_init & 0x3)) in ipmi_sdr_print_sensor_mc_locator()
2215 else if ((mc->global_init & 0x3) == 0x1) in ipmi_sdr_print_sensor_mc_locator()
2217 else if ((mc->global_init & 0x3) == 0x2) in ipmi_sdr_print_sensor_mc_locator()
2224 (mc->dev_support & 0x80) ? "Yes" : "No"); in ipmi_sdr_print_sensor_mc_locator()
2226 (mc->dev_support & 0x40) ? "Yes" : "No"); in ipmi_sdr_print_sensor_mc_locator()
2228 (mc->dev_support & 0x20) ? "Yes" : "No"); in ipmi_sdr_print_sensor_mc_locator()
2230 (mc->dev_support & 0x10) ? "Yes" : "No"); in ipmi_sdr_print_sensor_mc_locator()
2232 (mc->dev_support & 0x08) ? "Yes" : "No"); in ipmi_sdr_print_sensor_mc_locator()
2234 (mc->dev_support & 0x04) ? "Yes" : "No"); in ipmi_sdr_print_sensor_mc_locator()
2236 (mc->dev_support & 0x02) ? "Yes" : "No"); in ipmi_sdr_print_sensor_mc_locator()
2238 (mc->dev_support & 0x01) ? "Yes" : "No"); in ipmi_sdr_print_sensor_mc_locator()
2245 /* ipmi_sdr_print_sensor_generic_locator - print generic device locator record
2251 * returns -1 on error
2260 snprintf(desc, (dev->id_code & 0x1f) + 1, "%s", dev->id_string); in ipmi_sdr_print_sensor_generic_locator()
2265 dev->id_code ? desc : "", in ipmi_sdr_print_sensor_generic_locator()
2266 dev->entity.id, dev->entity.instance); in ipmi_sdr_print_sensor_generic_locator()
2269 ("%-16s | 00h | ns | %2d.%1d | Generic Device @%02Xh:%02Xh.%1d\n", in ipmi_sdr_print_sensor_generic_locator()
2270 dev->id_code ? desc : "", dev->entity.id, in ipmi_sdr_print_sensor_generic_locator()
2271 dev->entity.instance, dev->dev_access_addr, in ipmi_sdr_print_sensor_generic_locator()
2272 dev->dev_slave_addr, dev->oem); in ipmi_sdr_print_sensor_generic_locator()
2274 printf("%-16s | Generic @%02X:%02X.%-2d | ok\n", in ipmi_sdr_print_sensor_generic_locator()
2275 dev->id_code ? desc : "", in ipmi_sdr_print_sensor_generic_locator()
2276 dev->dev_access_addr, in ipmi_sdr_print_sensor_generic_locator()
2277 dev->dev_slave_addr, dev->oem); in ipmi_sdr_print_sensor_generic_locator()
2282 printf("Device ID : %s\n", dev->id_string); in ipmi_sdr_print_sensor_generic_locator()
2284 dev->entity.id, dev->entity.instance, in ipmi_sdr_print_sensor_generic_locator()
2285 val2str(dev->entity.id, entity_id_vals)); in ipmi_sdr_print_sensor_generic_locator()
2287 printf("Device Access Address : %02Xh\n", dev->dev_access_addr); in ipmi_sdr_print_sensor_generic_locator()
2288 printf("Device Slave Address : %02Xh\n", dev->dev_slave_addr); in ipmi_sdr_print_sensor_generic_locator()
2289 printf("Address Span : %02Xh\n", dev->addr_span); in ipmi_sdr_print_sensor_generic_locator()
2290 printf("Channel Number : %01Xh\n", dev->channel_num); in ipmi_sdr_print_sensor_generic_locator()
2291 printf("LUN.Bus : %01Xh.%01Xh\n", dev->lun, dev->bus); in ipmi_sdr_print_sensor_generic_locator()
2293 dev->dev_type, dev->dev_type_modifier, in ipmi_sdr_print_sensor_generic_locator()
2294 val2str(dev->dev_type << 8 | dev->dev_type_modifier, in ipmi_sdr_print_sensor_generic_locator()
2296 printf("OEM : %02Xh\n", dev->oem); in ipmi_sdr_print_sensor_generic_locator()
2302 /* ipmi_sdr_print_sensor_fru_locator - print FRU locator record
2308 * returns -1 on error
2317 snprintf(desc, (fru->id_code & 0x1f) + 1, "%s", fru->id_string); in ipmi_sdr_print_sensor_fru_locator()
2322 fru->id_code ? desc : "", in ipmi_sdr_print_sensor_fru_locator()
2323 fru->entity.id, fru->entity.instance); in ipmi_sdr_print_sensor_fru_locator()
2325 printf("%-16s | 00h | ns | %2d.%1d | %s FRU @%02Xh\n", in ipmi_sdr_print_sensor_fru_locator()
2326 fru->id_code ? desc : "", in ipmi_sdr_print_sensor_fru_locator()
2327 fru->entity.id, fru->entity.instance, in ipmi_sdr_print_sensor_fru_locator()
2328 (fru->logical) ? "Logical" : "Physical", in ipmi_sdr_print_sensor_fru_locator()
2329 fru->device_id); in ipmi_sdr_print_sensor_fru_locator()
2331 printf("%-16s | %s FRU @%02Xh %02x.%x | ok\n", in ipmi_sdr_print_sensor_fru_locator()
2332 fru->id_code ? desc : "", in ipmi_sdr_print_sensor_fru_locator()
2333 (fru->logical) ? "Log" : "Phy", in ipmi_sdr_print_sensor_fru_locator()
2334 fru->device_id, in ipmi_sdr_print_sensor_fru_locator()
2335 fru->entity.id, fru->entity.instance); in ipmi_sdr_print_sensor_fru_locator()
2340 printf("Device ID : %s\n", fru->id_string); in ipmi_sdr_print_sensor_fru_locator()
2342 fru->entity.id, fru->entity.instance, in ipmi_sdr_print_sensor_fru_locator()
2343 val2str(fru->entity.id, entity_id_vals)); in ipmi_sdr_print_sensor_fru_locator()
2345 printf("Device Access Address : %02Xh\n", fru->dev_slave_addr); in ipmi_sdr_print_sensor_fru_locator()
2347 fru->logical ? "Logical FRU Device " : in ipmi_sdr_print_sensor_fru_locator()
2348 "Slave Address ", fru->device_id); in ipmi_sdr_print_sensor_fru_locator()
2349 printf("Channel Number : %01Xh\n", fru->channel_num); in ipmi_sdr_print_sensor_fru_locator()
2350 printf("LUN.Bus : %01Xh.%01Xh\n", fru->lun, fru->bus); in ipmi_sdr_print_sensor_fru_locator()
2352 fru->dev_type, fru->dev_type_modifier, in ipmi_sdr_print_sensor_fru_locator()
2353 val2str(fru->dev_type << 8 | fru->dev_type_modifier, in ipmi_sdr_print_sensor_fru_locator()
2355 printf("OEM : %02Xh\n", fru->oem); in ipmi_sdr_print_sensor_fru_locator()
2361 /* ipmi_sdr_print_sensor_entity_assoc - print SDR entity association record
2367 * returns -1 on error
2376 /* ipmi_sdr_print_sensor_oem_intel - print Intel OEM sensors
2382 * returns -1 on error
2388 switch (oem->data[3]) { /* record sub-type */ in ipmi_sdr_print_sensor_oem_intel()
2393 oem->data[4]); in ipmi_sdr_print_sensor_oem_intel()
2395 ("Sensor Type : Intel OEM - Power Unit Map\n"); in ipmi_sdr_print_sensor_oem_intel()
2396 printf("Redundant Supplies : %d", oem->data[6]); in ipmi_sdr_print_sensor_oem_intel()
2397 if (oem->data[5]) in ipmi_sdr_print_sensor_oem_intel()
2398 printf(" (flags %xh)", oem->data[5]); in ipmi_sdr_print_sensor_oem_intel()
2402 switch (oem->data_len) { in ipmi_sdr_print_sensor_oem_intel()
2403 case 7: /* SR1300, non-redundant */ in ipmi_sdr_print_sensor_oem_intel()
2416 oem->data[8]); in ipmi_sdr_print_sensor_oem_intel()
2419 oem->data[8]); in ipmi_sdr_print_sensor_oem_intel()
2423 oem->data[8]); in ipmi_sdr_print_sensor_oem_intel()
2426 case 9: /* SR2300, non-redundant, PSx present */ in ipmi_sdr_print_sensor_oem_intel()
2430 oem->data[7]); in ipmi_sdr_print_sensor_oem_intel()
2432 oem->data[8]); in ipmi_sdr_print_sensor_oem_intel()
2436 oem->data[7], oem->data[8]); in ipmi_sdr_print_sensor_oem_intel()
2440 oem->data[7], oem->data[8]); in ipmi_sdr_print_sensor_oem_intel()
2455 oem->data[3]); in ipmi_sdr_print_sensor_oem_intel()
2461 /* ipmi_sdr_print_sensor_oem - print OEM sensors
2471 * returns -1 on error
2479 return -1; in ipmi_sdr_print_sensor_oem()
2480 if (oem->data_len == 0 || oem->data == NULL) in ipmi_sdr_print_sensor_oem()
2481 return -1; in ipmi_sdr_print_sensor_oem()
2484 printbuf(oem->data, oem->data_len, "OEM Record"); in ipmi_sdr_print_sensor_oem()
2487 if (oem->data[0] == 0x57 && in ipmi_sdr_print_sensor_oem()
2488 oem->data[1] == 0x01 && oem->data[2] == 0x00) { in ipmi_sdr_print_sensor_oem()
2495 /* ipmi_sdr_print_name_from_rawentry - Print SDR name from raw data
2502 * returns -1 on error
2526 snprintf(desc, (record.full->id_code & 0x1f) +1, "%s", in ipmi_sdr_print_name_from_rawentry()
2527 (const char *)record.full->id_string); in ipmi_sdr_print_name_from_rawentry()
2531 snprintf(desc, (record.compact->id_code & 0x1f) +1, "%s", in ipmi_sdr_print_name_from_rawentry()
2532 (const char *)record.compact->id_string); in ipmi_sdr_print_name_from_rawentry()
2536 snprintf(desc, (record.eventonly->id_code & 0x1f) +1, "%s", in ipmi_sdr_print_name_from_rawentry()
2537 (const char *)record.eventonly->id_string); in ipmi_sdr_print_name_from_rawentry()
2541 snprintf(desc, (record.mcloc->id_code & 0x1f) +1, "%s", in ipmi_sdr_print_name_from_rawentry()
2542 (const char *)record.mcloc->id_string); in ipmi_sdr_print_name_from_rawentry()
2545 rc = -1; in ipmi_sdr_print_name_from_rawentry()
2549 lprintf(LOG_INFO, "ID: 0x%04x , NAME: %-16s", id, desc); in ipmi_sdr_print_name_from_rawentry()
2553 /* ipmi_sdr_print_rawentry - Print SDR entry from raw data
2561 * returns -1 on error
2625 /* ipmi_sdr_print_listentry - Print SDR entry from list
2631 * returns -1 on error
2638 switch (entry->type) { in ipmi_sdr_print_listentry()
2641 rc = ipmi_sdr_print_sensor_fc(intf, entry->record.common, entry->type); in ipmi_sdr_print_listentry()
2645 entry->record.eventonly); in ipmi_sdr_print_listentry()
2649 entry->record. in ipmi_sdr_print_listentry()
2654 entry->record.fruloc); in ipmi_sdr_print_listentry()
2658 entry->record.mcloc); in ipmi_sdr_print_listentry()
2662 entry->record.entassoc); in ipmi_sdr_print_listentry()
2665 rc = ipmi_sdr_print_sensor_oem(intf, entry->record.oem); in ipmi_sdr_print_listentry()
2677 /* ipmi_sdr_print_sdr - iterate through SDR printing records
2683 * returns -1 on error
2698 return -1; in ipmi_sdr_print_sdr()
2702 for (e = sdr_list_head; e != NULL; e = e->next) { in ipmi_sdr_print_sdr()
2703 if (type != e->type && type != 0xff && type != 0xfe) in ipmi_sdr_print_sdr()
2706 e->type != SDR_RECORD_TYPE_FULL_SENSOR && in ipmi_sdr_print_sdr()
2707 e->type != SDR_RECORD_TYPE_COMPACT_SENSOR) in ipmi_sdr_print_sdr()
2710 rc = -1; in ipmi_sdr_print_sdr()
2720 rc = -1; in ipmi_sdr_print_sdr()
2734 sdrr->id = header->id; in ipmi_sdr_print_sdr()
2735 sdrr->type = header->type; in ipmi_sdr_print_sdr()
2737 switch (header->type) { in ipmi_sdr_print_sdr()
2740 sdrr->record.common = in ipmi_sdr_print_sdr()
2744 sdrr->record.eventonly = in ipmi_sdr_print_sdr()
2748 sdrr->record.genloc = in ipmi_sdr_print_sdr()
2752 sdrr->record.fruloc = in ipmi_sdr_print_sdr()
2756 sdrr->record.mcloc = in ipmi_sdr_print_sdr()
2760 sdrr->record.entassoc = in ipmi_sdr_print_sdr()
2773 lprintf(LOG_DEBUG, "SDR record ID : 0x%04x", sdrr->id); in ipmi_sdr_print_sdr()
2775 if (type == header->type || type == 0xff || in ipmi_sdr_print_sdr()
2777 (header->type == SDR_RECORD_TYPE_FULL_SENSOR || in ipmi_sdr_print_sdr()
2778 header->type == SDR_RECORD_TYPE_COMPACT_SENSOR))) { in ipmi_sdr_print_sdr()
2779 if (ipmi_sdr_print_rawentry(intf, header->type, in ipmi_sdr_print_sdr()
2780 rec, header->length) < 0) in ipmi_sdr_print_sdr()
2781 rc = -1; in ipmi_sdr_print_sdr()
2788 sdr_list_tail->next = sdrr; in ipmi_sdr_print_sdr()
2796 /* ipmi_sdr_get_reservation - Obtain SDR reservation ID
2802 * returns -1 on error
2821 rsp = intf->sendrecv(intf, &req); in ipmi_sdr_get_reservation()
2825 return -1; in ipmi_sdr_get_reservation()
2826 if (rsp->ccode > 0) in ipmi_sdr_get_reservation()
2827 return -1; in ipmi_sdr_get_reservation()
2829 *reserve_id = ((struct sdr_reserve_repo_rs *) &(rsp->data))->reserve_id; in ipmi_sdr_get_reservation()
2835 /* ipmi_sdr_start - setup sdr iterator
2863 rsp = intf->sendrecv(intf, &req); in ipmi_sdr_start()
2871 if (rsp->ccode > 0) { in ipmi_sdr_start()
2873 rsp->ccode, val2str(rsp->ccode, completion_code_vals)); in ipmi_sdr_start()
2878 devid = (struct ipm_devid_rsp *) rsp->data; in ipmi_sdr_start()
2880 sdriana = (long)IPM_DEV_MANUFACTURER_ID(devid->manufacturer_id); in ipmi_sdr_start()
2882 if (!use_builtin && (devid->device_revision & IPM_DEV_DEVICE_ID_SDR_MASK)) { in ipmi_sdr_start()
2883 if ((devid->adtl_device_support & 0x02) == 0) { in ipmi_sdr_start()
2884 if ((devid->adtl_device_support & 0x01)) { in ipmi_sdr_start()
2897 itr->use_built_in = use_builtin ? 1 : use_built_in; in ipmi_sdr_start()
2899 if (itr->use_built_in == 0) { in ipmi_sdr_start()
2906 rsp = intf->sendrecv(intf, &req); in ipmi_sdr_start()
2913 if (rsp->ccode > 0) { in ipmi_sdr_start()
2915 val2str(rsp->ccode, completion_code_vals)); in ipmi_sdr_start()
2921 memcpy(&sdr_info, rsp->data, sizeof (sdr_info)); in ipmi_sdr_start()
2933 itr->total = sdr_info.count; in ipmi_sdr_start()
2934 itr->next = 0; in ipmi_sdr_start()
2957 rsp = intf->sendrecv(intf, &req); in ipmi_sdr_start()
2958 if (!rsp || !rsp->data_len || rsp->ccode) { in ipmi_sdr_start()
2964 memcpy(&sdr_info, rsp->data, sizeof (sdr_info)); in ipmi_sdr_start()
2966 itr->total = sdr_info.count; in ipmi_sdr_start()
2967 itr->next = 0; in ipmi_sdr_start()
2971 if (ipmi_sdr_get_reservation(intf, itr->use_built_in, in ipmi_sdr_start()
2972 &(itr->reservation)) < 0) { in ipmi_sdr_start()
2982 /* ipmi_sdr_get_record - return RAW SDR record
2999 int i = 0, len = header->length; in ipmi_sdr_get_record()
3012 sdr_rq.reserve_id = itr->reservation; in ipmi_sdr_get_record()
3013 sdr_rq.id = header->id; in ipmi_sdr_get_record()
3017 if (itr->use_built_in == 0) { in ipmi_sdr_get_record()
3030 sdr_max_read_len = ipmi_intf_get_max_response_data_size(intf) - 2; in ipmi_sdr_get_record()
3043 sdr_rq.length = (len - i < sdr_max_read_len) ? in ipmi_sdr_get_record()
3044 len - i : sdr_max_read_len; in ipmi_sdr_get_record()
3050 rsp = intf->sendrecv(intf, &req); in ipmi_sdr_get_record()
3052 sdr_max_read_len = sdr_rq.length - 1; in ipmi_sdr_get_record()
3064 switch (rsp->ccode) { in ipmi_sdr_get_record()
3067 sdr_max_read_len = sdr_rq.length - 1; in ipmi_sdr_get_record()
3076 if (ipmi_sdr_get_reservation(intf, itr->use_built_in, in ipmi_sdr_get_record()
3077 &(itr->reservation)) < 0) { in ipmi_sdr_get_record()
3082 sdr_rq.reserve_id = itr->reservation; in ipmi_sdr_get_record()
3087 if (rsp->ccode > 0 || rsp->data_len == 0) { in ipmi_sdr_get_record()
3093 memcpy(data + i, rsp->data + 2, sdr_rq.length); in ipmi_sdr_get_record()
3100 /* ipmi_sdr_end - cleanup SDR iterator
3116 /* __sdr_list_add - helper function to add SDR record to list
3122 * returns -1 on error
3131 return -1; in __sdr_list_add()
3136 return -1; in __sdr_list_add()
3141 while (e->next) in __sdr_list_add()
3142 e = e->next; in __sdr_list_add()
3143 e->next = new; in __sdr_list_add()
3144 new->next = NULL; in __sdr_list_add()
3149 /* __sdr_list_empty - low-level handler to clean up record list
3160 f = e->next; in __sdr_list_empty()
3167 /* ipmi_sdr_list_empty - clean global SDR list
3181 switch (list->type) { in ipmi_sdr_list_empty()
3184 if (list->record.common) { in ipmi_sdr_list_empty()
3185 free(list->record.common); in ipmi_sdr_list_empty()
3186 list->record.common = NULL; in ipmi_sdr_list_empty()
3190 if (list->record.eventonly) { in ipmi_sdr_list_empty()
3191 free(list->record.eventonly); in ipmi_sdr_list_empty()
3192 list->record.eventonly = NULL; in ipmi_sdr_list_empty()
3196 if (list->record.genloc) { in ipmi_sdr_list_empty()
3197 free(list->record.genloc); in ipmi_sdr_list_empty()
3198 list->record.genloc = NULL; in ipmi_sdr_list_empty()
3202 if (list->record.fruloc) { in ipmi_sdr_list_empty()
3203 free(list->record.fruloc); in ipmi_sdr_list_empty()
3204 list->record.fruloc = NULL; in ipmi_sdr_list_empty()
3208 if (list->record.mcloc) { in ipmi_sdr_list_empty()
3209 free(list->record.mcloc); in ipmi_sdr_list_empty()
3210 list->record.mcloc = NULL; in ipmi_sdr_list_empty()
3214 if (list->record.entassoc) { in ipmi_sdr_list_empty()
3215 free(list->record.entassoc); in ipmi_sdr_list_empty()
3216 list->record.entassoc = NULL; in ipmi_sdr_list_empty()
3220 next = list->next; in ipmi_sdr_list_empty()
3230 /* ipmi_sdr_find_sdr_bynumtype - lookup SDR entry by number/type
3233 * @gen_id: sensor owner ID/LUN - SEL generator ID
3256 for (e = sdr_list_head; e != NULL; e = e->next) { in ipmi_sdr_find_sdr_bynumtype()
3257 switch (e->type) { in ipmi_sdr_find_sdr_bynumtype()
3260 if (e->record.common->keys.sensor_num == num && in ipmi_sdr_find_sdr_bynumtype()
3261 e->record.common->keys.owner_id == (gen_id & 0x00ff) && in ipmi_sdr_find_sdr_bynumtype()
3262 e->record.common->sensor.type == type) in ipmi_sdr_find_sdr_bynumtype()
3266 if (e->record.eventonly->keys.sensor_num == num && in ipmi_sdr_find_sdr_bynumtype()
3267 e->record.eventonly->keys.owner_id == (gen_id & 0x00ff) && in ipmi_sdr_find_sdr_bynumtype()
3268 e->record.eventonly->sensor_type == type) in ipmi_sdr_find_sdr_bynumtype()
3285 sdrr->id = header->id; in ipmi_sdr_find_sdr_bynumtype()
3286 sdrr->type = header->type; in ipmi_sdr_find_sdr_bynumtype()
3297 switch (header->type) { in ipmi_sdr_find_sdr_bynumtype()
3300 sdrr->record.common = in ipmi_sdr_find_sdr_bynumtype()
3302 if (sdrr->record.common->keys.sensor_num == num in ipmi_sdr_find_sdr_bynumtype()
3303 && sdrr->record.common->keys.owner_id == (gen_id & 0x00ff) in ipmi_sdr_find_sdr_bynumtype()
3304 && sdrr->record.common->sensor.type == type) in ipmi_sdr_find_sdr_bynumtype()
3308 sdrr->record.eventonly = in ipmi_sdr_find_sdr_bynumtype()
3310 if (sdrr->record.eventonly->keys.sensor_num == num in ipmi_sdr_find_sdr_bynumtype()
3311 && sdrr->record.eventonly->keys.owner_id == (gen_id & 0x00ff) in ipmi_sdr_find_sdr_bynumtype()
3312 && sdrr->record.eventonly->sensor_type == type) in ipmi_sdr_find_sdr_bynumtype()
3316 sdrr->record.genloc = in ipmi_sdr_find_sdr_bynumtype()
3320 sdrr->record.fruloc = in ipmi_sdr_find_sdr_bynumtype()
3324 sdrr->record.mcloc = in ipmi_sdr_find_sdr_bynumtype()
3328 sdrr->record.entassoc = in ipmi_sdr_find_sdr_bynumtype()
3345 sdr_list_tail->next = sdrr; in ipmi_sdr_find_sdr_bynumtype()
3356 /* ipmi_sdr_find_sdr_bysensortype - lookup SDR entry by sensor type
3387 for (e = sdr_list_head; e != NULL; e = e->next) { in ipmi_sdr_find_sdr_bysensortype()
3388 switch (e->type) { in ipmi_sdr_find_sdr_bysensortype()
3391 if (e->record.common->sensor.type == type) in ipmi_sdr_find_sdr_bysensortype()
3395 if (e->record.eventonly->sensor_type == type) in ipmi_sdr_find_sdr_bysensortype()
3412 sdrr->id = header->id; in ipmi_sdr_find_sdr_bysensortype()
3413 sdrr->type = header->type; in ipmi_sdr_find_sdr_bysensortype()
3424 switch (header->type) { in ipmi_sdr_find_sdr_bysensortype()
3427 sdrr->record.common = in ipmi_sdr_find_sdr_bysensortype()
3429 if (sdrr->record.common->sensor.type == type) in ipmi_sdr_find_sdr_bysensortype()
3433 sdrr->record.eventonly = in ipmi_sdr_find_sdr_bysensortype()
3435 if (sdrr->record.eventonly->sensor_type == type) in ipmi_sdr_find_sdr_bysensortype()
3439 sdrr->record.genloc = in ipmi_sdr_find_sdr_bysensortype()
3443 sdrr->record.fruloc = in ipmi_sdr_find_sdr_bysensortype()
3447 sdrr->record.mcloc = in ipmi_sdr_find_sdr_bysensortype()
3451 sdrr->record.entassoc = in ipmi_sdr_find_sdr_bysensortype()
3468 sdr_list_tail->next = sdrr; in ipmi_sdr_find_sdr_bysensortype()
3476 /* ipmi_sdr_find_sdr_byentity - lookup SDR entry by entity association
3507 for (e = sdr_list_head; e != NULL; e = e->next) { in ipmi_sdr_find_sdr_byentity()
3508 switch (e->type) { in ipmi_sdr_find_sdr_byentity()
3511 if (e->record.common->entity.id == entity->id && in ipmi_sdr_find_sdr_byentity()
3512 (entity->instance == 0x7f || in ipmi_sdr_find_sdr_byentity()
3513 e->record.common->entity.instance == in ipmi_sdr_find_sdr_byentity()
3514 entity->instance)) in ipmi_sdr_find_sdr_byentity()
3518 if (e->record.eventonly->entity.id == entity->id && in ipmi_sdr_find_sdr_byentity()
3519 (entity->instance == 0x7f || in ipmi_sdr_find_sdr_byentity()
3520 e->record.eventonly->entity.instance == in ipmi_sdr_find_sdr_byentity()
3521 entity->instance)) in ipmi_sdr_find_sdr_byentity()
3525 if (e->record.genloc->entity.id == entity->id && in ipmi_sdr_find_sdr_byentity()
3526 (entity->instance == 0x7f || in ipmi_sdr_find_sdr_byentity()
3527 e->record.genloc->entity.instance == in ipmi_sdr_find_sdr_byentity()
3528 entity->instance)) in ipmi_sdr_find_sdr_byentity()
3532 if (e->record.fruloc->entity.id == entity->id && in ipmi_sdr_find_sdr_byentity()
3533 (entity->instance == 0x7f || in ipmi_sdr_find_sdr_byentity()
3534 e->record.fruloc->entity.instance == in ipmi_sdr_find_sdr_byentity()
3535 entity->instance)) in ipmi_sdr_find_sdr_byentity()
3539 if (e->record.mcloc->entity.id == entity->id && in ipmi_sdr_find_sdr_byentity()
3540 (entity->instance == 0x7f || in ipmi_sdr_find_sdr_byentity()
3541 e->record.mcloc->entity.instance == in ipmi_sdr_find_sdr_byentity()
3542 entity->instance)) in ipmi_sdr_find_sdr_byentity()
3546 if (e->record.entassoc->entity.id == entity->id && in ipmi_sdr_find_sdr_byentity()
3547 (entity->instance == 0x7f || in ipmi_sdr_find_sdr_byentity()
3548 e->record.entassoc->entity.instance == in ipmi_sdr_find_sdr_byentity()
3549 entity->instance)) in ipmi_sdr_find_sdr_byentity()
3566 sdrr->id = header->id; in ipmi_sdr_find_sdr_byentity()
3567 sdrr->type = header->type; in ipmi_sdr_find_sdr_byentity()
3578 switch (header->type) { in ipmi_sdr_find_sdr_byentity()
3581 sdrr->record.common = in ipmi_sdr_find_sdr_byentity()
3583 if (sdrr->record.common->entity.id == entity->id in ipmi_sdr_find_sdr_byentity()
3584 && (entity->instance == 0x7f in ipmi_sdr_find_sdr_byentity()
3585 || sdrr->record.common->entity.instance == in ipmi_sdr_find_sdr_byentity()
3586 entity->instance)) in ipmi_sdr_find_sdr_byentity()
3590 sdrr->record.eventonly = in ipmi_sdr_find_sdr_byentity()
3592 if (sdrr->record.eventonly->entity.id == entity->id in ipmi_sdr_find_sdr_byentity()
3593 && (entity->instance == 0x7f in ipmi_sdr_find_sdr_byentity()
3594 || sdrr->record.eventonly->entity.instance == in ipmi_sdr_find_sdr_byentity()
3595 entity->instance)) in ipmi_sdr_find_sdr_byentity()
3599 sdrr->record.genloc = in ipmi_sdr_find_sdr_byentity()
3601 if (sdrr->record.genloc->entity.id == entity->id in ipmi_sdr_find_sdr_byentity()
3602 && (entity->instance == 0x7f in ipmi_sdr_find_sdr_byentity()
3603 || sdrr->record.genloc->entity.instance == in ipmi_sdr_find_sdr_byentity()
3604 entity->instance)) in ipmi_sdr_find_sdr_byentity()
3608 sdrr->record.fruloc = in ipmi_sdr_find_sdr_byentity()
3610 if (sdrr->record.fruloc->entity.id == entity->id in ipmi_sdr_find_sdr_byentity()
3611 && (entity->instance == 0x7f in ipmi_sdr_find_sdr_byentity()
3612 || sdrr->record.fruloc->entity.instance == in ipmi_sdr_find_sdr_byentity()
3613 entity->instance)) in ipmi_sdr_find_sdr_byentity()
3617 sdrr->record.mcloc = in ipmi_sdr_find_sdr_byentity()
3619 if (sdrr->record.mcloc->entity.id == entity->id in ipmi_sdr_find_sdr_byentity()
3620 && (entity->instance == 0x7f in ipmi_sdr_find_sdr_byentity()
3621 || sdrr->record.mcloc->entity.instance == in ipmi_sdr_find_sdr_byentity()
3622 entity->instance)) in ipmi_sdr_find_sdr_byentity()
3626 sdrr->record.entassoc = in ipmi_sdr_find_sdr_byentity()
3628 if (sdrr->record.entassoc->entity.id == entity->id in ipmi_sdr_find_sdr_byentity()
3629 && (entity->instance == 0x7f in ipmi_sdr_find_sdr_byentity()
3630 || sdrr->record.entassoc->entity.instance == in ipmi_sdr_find_sdr_byentity()
3631 entity->instance)) in ipmi_sdr_find_sdr_byentity()
3648 sdr_list_tail->next = sdrr; in ipmi_sdr_find_sdr_byentity()
3656 /* ipmi_sdr_find_sdr_bytype - lookup SDR entries by type
3687 for (e = sdr_list_head; e != NULL; e = e->next) in ipmi_sdr_find_sdr_bytype()
3688 if (e->type == type) in ipmi_sdr_find_sdr_bytype()
3702 sdrr->id = header->id; in ipmi_sdr_find_sdr_bytype()
3703 sdrr->type = header->type; in ipmi_sdr_find_sdr_bytype()
3714 switch (header->type) { in ipmi_sdr_find_sdr_bytype()
3717 sdrr->record.common = in ipmi_sdr_find_sdr_bytype()
3721 sdrr->record.eventonly = in ipmi_sdr_find_sdr_bytype()
3725 sdrr->record.genloc = in ipmi_sdr_find_sdr_bytype()
3729 sdrr->record.fruloc = in ipmi_sdr_find_sdr_bytype()
3733 sdrr->record.mcloc = in ipmi_sdr_find_sdr_bytype()
3737 sdrr->record.entassoc = in ipmi_sdr_find_sdr_bytype()
3750 if (header->type == type) in ipmi_sdr_find_sdr_bytype()
3757 sdr_list_tail->next = sdrr; in ipmi_sdr_find_sdr_bytype()
3765 /* ipmi_sdr_find_sdr_byid - lookup SDR entry by ID string
3795 for (e = sdr_list_head; e != NULL; e = e->next) { in ipmi_sdr_find_sdr_byid()
3796 switch (e->type) { in ipmi_sdr_find_sdr_byid()
3798 if (!strncmp((const char *)e->record.full->id_string, in ipmi_sdr_find_sdr_byid()
3800 __max(e->record.full->id_code & 0x1f, idlen))) in ipmi_sdr_find_sdr_byid()
3804 if (!strncmp((const char *)e->record.compact->id_string, in ipmi_sdr_find_sdr_byid()
3806 __max(e->record.compact->id_code & 0x1f, idlen))) in ipmi_sdr_find_sdr_byid()
3810 if (!strncmp((const char *)e->record.eventonly->id_string, in ipmi_sdr_find_sdr_byid()
3812 __max(e->record.eventonly->id_code & 0x1f, idlen))) in ipmi_sdr_find_sdr_byid()
3816 if (!strncmp((const char *)e->record.genloc->id_string, in ipmi_sdr_find_sdr_byid()
3818 __max(e->record.genloc->id_code & 0x1f, idlen))) in ipmi_sdr_find_sdr_byid()
3822 if (!strncmp((const char *)e->record.fruloc->id_string, in ipmi_sdr_find_sdr_byid()
3824 __max(e->record.fruloc->id_code & 0x1f, idlen))) in ipmi_sdr_find_sdr_byid()
3828 if (!strncmp((const char *)e->record.mcloc->id_string, in ipmi_sdr_find_sdr_byid()
3830 __max(e->record.mcloc->id_code & 0x1f, idlen))) in ipmi_sdr_find_sdr_byid()
3847 sdrr->id = header->id; in ipmi_sdr_find_sdr_byid()
3848 sdrr->type = header->type; in ipmi_sdr_find_sdr_byid()
3859 switch (header->type) { in ipmi_sdr_find_sdr_byid()
3861 sdrr->record.full = in ipmi_sdr_find_sdr_byid()
3864 (const char *)sdrr->record.full->id_string, in ipmi_sdr_find_sdr_byid()
3866 __max(sdrr->record.full->id_code & 0x1f, idlen))) in ipmi_sdr_find_sdr_byid()
3870 sdrr->record.compact = in ipmi_sdr_find_sdr_byid()
3873 (const char *)sdrr->record.compact->id_string, in ipmi_sdr_find_sdr_byid()
3875 __max(sdrr->record.compact->id_code & 0x1f, in ipmi_sdr_find_sdr_byid()
3880 sdrr->record.eventonly = in ipmi_sdr_find_sdr_byid()
3883 (const char *)sdrr->record.eventonly->id_string, in ipmi_sdr_find_sdr_byid()
3885 __max(sdrr->record.eventonly->id_code & 0x1f, in ipmi_sdr_find_sdr_byid()
3890 sdrr->record.genloc = in ipmi_sdr_find_sdr_byid()
3893 (const char *)sdrr->record.genloc->id_string, in ipmi_sdr_find_sdr_byid()
3895 __max(sdrr->record.genloc->id_code & 0x1f, idlen))) in ipmi_sdr_find_sdr_byid()
3899 sdrr->record.fruloc = in ipmi_sdr_find_sdr_byid()
3902 (const char *)sdrr->record.fruloc->id_string, in ipmi_sdr_find_sdr_byid()
3904 __max(sdrr->record.fruloc->id_code & 0x1f, idlen))) in ipmi_sdr_find_sdr_byid()
3908 sdrr->record.mcloc = in ipmi_sdr_find_sdr_byid()
3911 (const char *)sdrr->record.mcloc->id_string, in ipmi_sdr_find_sdr_byid()
3913 __max(sdrr->record.mcloc->id_code & 0x1f, idlen))) in ipmi_sdr_find_sdr_byid()
3917 sdrr->record.entassoc = in ipmi_sdr_find_sdr_byid()
3934 sdr_list_tail->next = sdrr; in ipmi_sdr_find_sdr_byid()
3945 /* ipmi_sdr_list_cache_fromfile - generate SDR cache for fast lookup from local file
3969 return -1; in ipmi_sdr_list_cache_fromfile()
3976 return -1; in ipmi_sdr_list_cache_fromfile()
3988 ret = -1; in ipmi_sdr_list_cache_fromfile()
4000 ret = -1; in ipmi_sdr_list_cache_fromfile()
4007 ret = -1; in ipmi_sdr_list_cache_fromfile()
4012 sdrr->id = header.id; in ipmi_sdr_list_cache_fromfile()
4013 sdrr->type = header.type; in ipmi_sdr_list_cache_fromfile()
4018 ret = -1; in ipmi_sdr_list_cache_fromfile()
4032 ret = -1; in ipmi_sdr_list_cache_fromfile()
4047 sdrr->record.common = in ipmi_sdr_list_cache_fromfile()
4051 sdrr->record.eventonly = in ipmi_sdr_list_cache_fromfile()
4055 sdrr->record.genloc = in ipmi_sdr_list_cache_fromfile()
4059 sdrr->record.fruloc = in ipmi_sdr_list_cache_fromfile()
4063 sdrr->record.mcloc = in ipmi_sdr_list_cache_fromfile()
4067 sdrr->record.entassoc = in ipmi_sdr_list_cache_fromfile()
4084 sdr_list_tail->next = sdrr; in ipmi_sdr_list_cache_fromfile()
4091 sdrr->id); in ipmi_sdr_list_cache_fromfile()
4097 sdr_list_itr->reservation = 0; in ipmi_sdr_list_cache_fromfile()
4098 sdr_list_itr->total = count; in ipmi_sdr_list_cache_fromfile()
4099 sdr_list_itr->next = 0xffff; in ipmi_sdr_list_cache_fromfile()
4107 /* ipmi_sdr_list_cache - generate SDR cache for fast lookup
4123 return -1; in ipmi_sdr_list_cache()
4137 sdrr->id = header->id; in ipmi_sdr_list_cache()
4138 sdrr->type = header->type; in ipmi_sdr_list_cache()
4149 switch (header->type) { in ipmi_sdr_list_cache()
4152 sdrr->record.common = in ipmi_sdr_list_cache()
4156 sdrr->record.eventonly = in ipmi_sdr_list_cache()
4160 sdrr->record.genloc = in ipmi_sdr_list_cache()
4164 sdrr->record.fruloc = in ipmi_sdr_list_cache()
4168 sdrr->record.mcloc = in ipmi_sdr_list_cache()
4172 sdrr->record.entassoc = in ipmi_sdr_list_cache()
4189 sdr_list_tail->next = sdrr; in ipmi_sdr_list_cache()
4205 * -1 on transport error
4222 rsp = intf->sendrecv(intf, &req); in ipmi_sdr_get_info()
4226 return -1; in ipmi_sdr_get_info()
4228 if (rsp->ccode > 0) { in ipmi_sdr_get_info()
4230 val2str(rsp->ccode, completion_code_vals)); in ipmi_sdr_get_info()
4231 return -1; in ipmi_sdr_get_info()
4235 rsp->data, in ipmi_sdr_get_info()
4237 rsp->data_len)); in ipmi_sdr_get_info()
4242 /* ipmi_sdr_timestamp - return string from timestamp value
4267 * -1 on error
4278 return -1; in ipmi_sdr_print_info()
4299 printf("> 64Kb - 2 bytes\n"); in ipmi_sdr_print_info()
4331 printf("non-modal\n"); in ipmi_sdr_print_info()
4337 printf("modal and non-modal\n"); in ipmi_sdr_print_info()
4358 /* ipmi_sdr_dump_bin - Write raw SDR to binary file
4360 * used for post-processing by other utilities
4366 * returns -1 on error
4381 return -1; in ipmi_sdr_dump_bin()
4391 return -1; in ipmi_sdr_dump_bin()
4396 header->id, header->length); in ipmi_sdr_dump_bin()
4398 sdrr->id = header->id; in ipmi_sdr_dump_bin()
4399 sdrr->version = header->version; in ipmi_sdr_dump_bin()
4400 sdrr->type = header->type; in ipmi_sdr_dump_bin()
4401 sdrr->length = header->length; in ipmi_sdr_dump_bin()
4402 sdrr->raw = ipmi_sdr_get_record(intf, header, itr); in ipmi_sdr_dump_bin()
4404 if (sdrr->raw == NULL) { in ipmi_sdr_dump_bin()
4405 lprintf(LOG_ERR, "ipmitool: cannot obtain SDR record %04x", header->id); in ipmi_sdr_dump_bin()
4410 return -1; in ipmi_sdr_dump_bin()
4416 sdr_list_tail->next = sdrr; in ipmi_sdr_dump_bin()
4426 return -1; in ipmi_sdr_dump_bin()
4428 for (sdrr = sdr_list_head; sdrr != NULL; sdrr = sdrr->next) { in ipmi_sdr_dump_bin()
4433 h[0] = sdrr->id & 0xff; // LS Byte first in ipmi_sdr_dump_bin()
4434 h[1] = (sdrr->id >> 8) & 0xff; in ipmi_sdr_dump_bin()
4435 h[2] = sdrr->version; in ipmi_sdr_dump_bin()
4436 h[3] = sdrr->type; in ipmi_sdr_dump_bin()
4437 h[4] = sdrr->length; in ipmi_sdr_dump_bin()
4443 rc = -1; in ipmi_sdr_dump_bin()
4448 if (!sdrr->raw) { in ipmi_sdr_dump_bin()
4450 sdrr->length); in ipmi_sdr_dump_bin()
4451 rc = -1; in ipmi_sdr_dump_bin()
4454 r = fwrite(sdrr->raw, 1, sdrr->length, fp); in ipmi_sdr_dump_bin()
4455 if (r != sdrr->length) { in ipmi_sdr_dump_bin()
4457 "to output file %s", sdrr->length, ofile); in ipmi_sdr_dump_bin()
4458 rc = -1; in ipmi_sdr_dump_bin()
4467 /* ipmi_sdr_print_type - print all sensors of specified type
4473 * returns -1 on error
4488 printf("\t%-25s (0x%02x) %-25s (0x%02x)\n", in ipmi_sdr_print_type()
4501 return (-1); in ipmi_sdr_print_type()
4517 printf("\t%-25s (0x%02x) %-25s (0x%02x)\n", in ipmi_sdr_print_type()
4527 for (entry = list; entry != NULL; entry = entry->next) { in ipmi_sdr_print_type()
4536 /* ipmi_sdr_print_entity - print entity's for an id/instance
4542 * returns -1 on error
4556 print_valstr_2col(entity_id_vals, "Entity IDs", -1); in ipmi_sdr_print_entity()
4579 return -1; in ipmi_sdr_print_entity()
4592 for (entry = list; entry != NULL; entry = entry->next) { in ipmi_sdr_print_entity()
4601 /* ipmi_sdr_print_entry_byid - print sdr entries identified by sensor id
4608 * returns -1 on error
4619 return -1; in ipmi_sdr_print_entry_byid()
4632 rc = -1; in ipmi_sdr_print_entry_byid()
4641 /* ipmi_sdr_main - top-level handler for SDR subsystem
4648 * returns -1 on error
4705 return (-1); in ipmi_sdr_main()
4716 rc = ipmi_sdr_print_entry_byid(intf, argc - 1, &argv[1]); in ipmi_sdr_main()
4721 return (-1); in ipmi_sdr_main()
4730 return (-1); in ipmi_sdr_main()
4741 return (-1); in ipmi_sdr_main()
4750 return (-1); in ipmi_sdr_main()
4760 return (-1); in ipmi_sdr_main()
4764 rc = -1; in ipmi_sdr_main()
4784 " event Event-Only Sensor Record"); in printf_sdr_usage()
4832 " or range. Use ',' for list or '-' for"); in printf_sdr_usage()
4834 " range, eg. 0x28,0x32,0x40-0x44"); in printf_sdr_usage()