11b6fae3fSVijay Khemka #pragma once 21b6fae3fSVijay Khemka 31b6fae3fSVijay Khemka #include <ipmid/api.h> 41b6fae3fSVijay Khemka #include <stdint.h> 51b6fae3fSVijay Khemka 6*63c99be4SVijay Khemka #include <ipmid/types.hpp> 7*63c99be4SVijay Khemka 81b6fae3fSVijay Khemka /** 91b6fae3fSVijay Khemka * Get SDR 101b6fae3fSVijay Khemka */ 111b6fae3fSVijay Khemka namespace get_sdr 121b6fae3fSVijay Khemka { 131b6fae3fSVijay Khemka 141b6fae3fSVijay Khemka // Response 151b6fae3fSVijay Khemka struct GetSdrResp 161b6fae3fSVijay Khemka { 171b6fae3fSVijay Khemka uint8_t next_record_id_lsb; 181b6fae3fSVijay Khemka uint8_t next_record_id_msb; 191b6fae3fSVijay Khemka uint8_t record_data[64]; 201b6fae3fSVijay Khemka } __attribute__((packed)); 211b6fae3fSVijay Khemka 221b6fae3fSVijay Khemka // Record header 231b6fae3fSVijay Khemka struct SensorDataRecordHeader 241b6fae3fSVijay Khemka { 251b6fae3fSVijay Khemka uint8_t record_id_lsb; 261b6fae3fSVijay Khemka uint8_t record_id_msb; 271b6fae3fSVijay Khemka uint8_t sdr_version; 281b6fae3fSVijay Khemka uint8_t record_type; 291b6fae3fSVijay Khemka uint8_t record_length; // Length not counting the header 301b6fae3fSVijay Khemka } __attribute__((packed)); 311b6fae3fSVijay Khemka 321b6fae3fSVijay Khemka enum SensorDataRecordType 331b6fae3fSVijay Khemka { 341b6fae3fSVijay Khemka SENSOR_DATA_FULL_RECORD = 0x1, 351b6fae3fSVijay Khemka SENSOR_DATA_FRU_RECORD = 0x11, 361b6fae3fSVijay Khemka SENSOR_DATA_ENTITY_RECORD = 0x8, 371b6fae3fSVijay Khemka }; 381b6fae3fSVijay Khemka 391b6fae3fSVijay Khemka // Record key 401b6fae3fSVijay Khemka struct SensorDataRecordKey 411b6fae3fSVijay Khemka { 421b6fae3fSVijay Khemka uint8_t owner_id; 431b6fae3fSVijay Khemka uint8_t owner_lun; 441b6fae3fSVijay Khemka uint8_t sensor_number; 451b6fae3fSVijay Khemka } __attribute__((packed)); 461b6fae3fSVijay Khemka 471b6fae3fSVijay Khemka /** @struct SensorDataFruRecordKey 481b6fae3fSVijay Khemka * 491b6fae3fSVijay Khemka * FRU Device Locator Record(key) - SDR Type 11 501b6fae3fSVijay Khemka */ 511b6fae3fSVijay Khemka struct SensorDataFruRecordKey 521b6fae3fSVijay Khemka { 531b6fae3fSVijay Khemka uint8_t deviceAddress; 541b6fae3fSVijay Khemka uint8_t fruID; 551b6fae3fSVijay Khemka uint8_t accessLun; 561b6fae3fSVijay Khemka uint8_t channelNumber; 571b6fae3fSVijay Khemka } __attribute__((packed)); 581b6fae3fSVijay Khemka 591b6fae3fSVijay Khemka // Body - full record 601b6fae3fSVijay Khemka #define FULL_RECORD_ID_STR_MAX_LENGTH 16 611b6fae3fSVijay Khemka 621b6fae3fSVijay Khemka static const int FRU_RECORD_DEVICE_ID_MAX_LENGTH = 16; 631b6fae3fSVijay Khemka 641b6fae3fSVijay Khemka struct SensorDataFullRecordBody 651b6fae3fSVijay Khemka { 661b6fae3fSVijay Khemka uint8_t entity_id; 671b6fae3fSVijay Khemka uint8_t entity_instance; 681b6fae3fSVijay Khemka uint8_t sensor_initialization; 691b6fae3fSVijay Khemka uint8_t sensor_capabilities; // no macro support 701b6fae3fSVijay Khemka uint8_t sensor_type; 711b6fae3fSVijay Khemka uint8_t event_reading_type; 721b6fae3fSVijay Khemka uint8_t supported_assertions[2]; // no macro support 731b6fae3fSVijay Khemka uint8_t supported_deassertions[2]; // no macro support 741b6fae3fSVijay Khemka uint8_t discrete_reading_setting_mask[2]; // no macro support 751b6fae3fSVijay Khemka uint8_t sensor_units_1; 761b6fae3fSVijay Khemka uint8_t sensor_units_2_base; 771b6fae3fSVijay Khemka uint8_t sensor_units_3_modifier; 781b6fae3fSVijay Khemka uint8_t linearization; 791b6fae3fSVijay Khemka uint8_t m_lsb; 801b6fae3fSVijay Khemka uint8_t m_msb_and_tolerance; 811b6fae3fSVijay Khemka uint8_t b_lsb; 821b6fae3fSVijay Khemka uint8_t b_msb_and_accuracy_lsb; 831b6fae3fSVijay Khemka uint8_t accuracy_and_sensor_direction; 841b6fae3fSVijay Khemka uint8_t r_b_exponents; 851b6fae3fSVijay Khemka uint8_t analog_characteristic_flags; // no macro support 861b6fae3fSVijay Khemka uint8_t nominal_reading; 871b6fae3fSVijay Khemka uint8_t normal_max; 881b6fae3fSVijay Khemka uint8_t normal_min; 891b6fae3fSVijay Khemka uint8_t sensor_max; 901b6fae3fSVijay Khemka uint8_t sensor_min; 911b6fae3fSVijay Khemka uint8_t upper_nonrecoverable_threshold; 921b6fae3fSVijay Khemka uint8_t upper_critical_threshold; 931b6fae3fSVijay Khemka uint8_t upper_noncritical_threshold; 941b6fae3fSVijay Khemka uint8_t lower_nonrecoverable_threshold; 951b6fae3fSVijay Khemka uint8_t lower_critical_threshold; 961b6fae3fSVijay Khemka uint8_t lower_noncritical_threshold; 971b6fae3fSVijay Khemka uint8_t positive_threshold_hysteresis; 981b6fae3fSVijay Khemka uint8_t negative_threshold_hysteresis; 991b6fae3fSVijay Khemka uint16_t reserved; 1001b6fae3fSVijay Khemka uint8_t oem_reserved; 1011b6fae3fSVijay Khemka uint8_t id_string_info; 1021b6fae3fSVijay Khemka char id_string[FULL_RECORD_ID_STR_MAX_LENGTH]; 1031b6fae3fSVijay Khemka } __attribute__((packed)); 1041b6fae3fSVijay Khemka 1051b6fae3fSVijay Khemka /** @struct SensorDataFruRecordBody 1061b6fae3fSVijay Khemka * 1071b6fae3fSVijay Khemka * FRU Device Locator Record(body) - SDR Type 11 1081b6fae3fSVijay Khemka */ 1091b6fae3fSVijay Khemka struct SensorDataFruRecordBody 1101b6fae3fSVijay Khemka { 1111b6fae3fSVijay Khemka uint8_t reserved; 1121b6fae3fSVijay Khemka uint8_t deviceType; 1131b6fae3fSVijay Khemka uint8_t deviceTypeModifier; 1141b6fae3fSVijay Khemka uint8_t entityID; 1151b6fae3fSVijay Khemka uint8_t entityInstance; 1161b6fae3fSVijay Khemka uint8_t oem; 1171b6fae3fSVijay Khemka uint8_t deviceIDLen; 1181b6fae3fSVijay Khemka char deviceID[FRU_RECORD_DEVICE_ID_MAX_LENGTH]; 1191b6fae3fSVijay Khemka } __attribute__((packed)); 1201b6fae3fSVijay Khemka 1211b6fae3fSVijay Khemka struct SensorDataFullRecord 1221b6fae3fSVijay Khemka { 1231b6fae3fSVijay Khemka SensorDataRecordHeader header; 1241b6fae3fSVijay Khemka SensorDataRecordKey key; 1251b6fae3fSVijay Khemka SensorDataFullRecordBody body; 1261b6fae3fSVijay Khemka } __attribute__((packed)); 1271b6fae3fSVijay Khemka 1281b6fae3fSVijay Khemka /** @struct SensorDataFruRecord 1291b6fae3fSVijay Khemka * 1301b6fae3fSVijay Khemka * FRU Device Locator Record - SDR Type 11 1311b6fae3fSVijay Khemka */ 1321b6fae3fSVijay Khemka struct SensorDataFruRecord 1331b6fae3fSVijay Khemka { 1341b6fae3fSVijay Khemka SensorDataRecordHeader header; 1351b6fae3fSVijay Khemka SensorDataFruRecordKey key; 1361b6fae3fSVijay Khemka SensorDataFruRecordBody body; 1371b6fae3fSVijay Khemka } __attribute__((packed)); 1381b6fae3fSVijay Khemka 1391b6fae3fSVijay Khemka } // namespace get_sdr 140