1*1b6fae3fSVijay Khemka #pragma once 2*1b6fae3fSVijay Khemka 3*1b6fae3fSVijay Khemka #include <ipmid/types.hpp> 4*1b6fae3fSVijay Khemka 5*1b6fae3fSVijay Khemka #include <ipmid/api.h> 6*1b6fae3fSVijay Khemka #include <stdint.h> 7*1b6fae3fSVijay Khemka 8*1b6fae3fSVijay Khemka /** 9*1b6fae3fSVijay Khemka * Get SDR 10*1b6fae3fSVijay Khemka */ 11*1b6fae3fSVijay Khemka namespace get_sdr 12*1b6fae3fSVijay Khemka { 13*1b6fae3fSVijay Khemka 14*1b6fae3fSVijay Khemka // Response 15*1b6fae3fSVijay Khemka struct GetSdrResp 16*1b6fae3fSVijay Khemka { 17*1b6fae3fSVijay Khemka uint8_t next_record_id_lsb; 18*1b6fae3fSVijay Khemka uint8_t next_record_id_msb; 19*1b6fae3fSVijay Khemka uint8_t record_data[64]; 20*1b6fae3fSVijay Khemka } __attribute__((packed)); 21*1b6fae3fSVijay Khemka 22*1b6fae3fSVijay Khemka // Record header 23*1b6fae3fSVijay Khemka struct SensorDataRecordHeader 24*1b6fae3fSVijay Khemka { 25*1b6fae3fSVijay Khemka uint8_t record_id_lsb; 26*1b6fae3fSVijay Khemka uint8_t record_id_msb; 27*1b6fae3fSVijay Khemka uint8_t sdr_version; 28*1b6fae3fSVijay Khemka uint8_t record_type; 29*1b6fae3fSVijay Khemka uint8_t record_length; // Length not counting the header 30*1b6fae3fSVijay Khemka } __attribute__((packed)); 31*1b6fae3fSVijay Khemka 32*1b6fae3fSVijay Khemka enum SensorDataRecordType 33*1b6fae3fSVijay Khemka { 34*1b6fae3fSVijay Khemka SENSOR_DATA_FULL_RECORD = 0x1, 35*1b6fae3fSVijay Khemka SENSOR_DATA_FRU_RECORD = 0x11, 36*1b6fae3fSVijay Khemka SENSOR_DATA_ENTITY_RECORD = 0x8, 37*1b6fae3fSVijay Khemka }; 38*1b6fae3fSVijay Khemka 39*1b6fae3fSVijay Khemka // Record key 40*1b6fae3fSVijay Khemka struct SensorDataRecordKey 41*1b6fae3fSVijay Khemka { 42*1b6fae3fSVijay Khemka uint8_t owner_id; 43*1b6fae3fSVijay Khemka uint8_t owner_lun; 44*1b6fae3fSVijay Khemka uint8_t sensor_number; 45*1b6fae3fSVijay Khemka } __attribute__((packed)); 46*1b6fae3fSVijay Khemka 47*1b6fae3fSVijay Khemka /** @struct SensorDataFruRecordKey 48*1b6fae3fSVijay Khemka * 49*1b6fae3fSVijay Khemka * FRU Device Locator Record(key) - SDR Type 11 50*1b6fae3fSVijay Khemka */ 51*1b6fae3fSVijay Khemka struct SensorDataFruRecordKey 52*1b6fae3fSVijay Khemka { 53*1b6fae3fSVijay Khemka uint8_t deviceAddress; 54*1b6fae3fSVijay Khemka uint8_t fruID; 55*1b6fae3fSVijay Khemka uint8_t accessLun; 56*1b6fae3fSVijay Khemka uint8_t channelNumber; 57*1b6fae3fSVijay Khemka } __attribute__((packed)); 58*1b6fae3fSVijay Khemka 59*1b6fae3fSVijay Khemka // Body - full record 60*1b6fae3fSVijay Khemka #define FULL_RECORD_ID_STR_MAX_LENGTH 16 61*1b6fae3fSVijay Khemka 62*1b6fae3fSVijay Khemka static const int FRU_RECORD_DEVICE_ID_MAX_LENGTH = 16; 63*1b6fae3fSVijay Khemka 64*1b6fae3fSVijay Khemka struct SensorDataFullRecordBody 65*1b6fae3fSVijay Khemka { 66*1b6fae3fSVijay Khemka uint8_t entity_id; 67*1b6fae3fSVijay Khemka uint8_t entity_instance; 68*1b6fae3fSVijay Khemka uint8_t sensor_initialization; 69*1b6fae3fSVijay Khemka uint8_t sensor_capabilities; // no macro support 70*1b6fae3fSVijay Khemka uint8_t sensor_type; 71*1b6fae3fSVijay Khemka uint8_t event_reading_type; 72*1b6fae3fSVijay Khemka uint8_t supported_assertions[2]; // no macro support 73*1b6fae3fSVijay Khemka uint8_t supported_deassertions[2]; // no macro support 74*1b6fae3fSVijay Khemka uint8_t discrete_reading_setting_mask[2]; // no macro support 75*1b6fae3fSVijay Khemka uint8_t sensor_units_1; 76*1b6fae3fSVijay Khemka uint8_t sensor_units_2_base; 77*1b6fae3fSVijay Khemka uint8_t sensor_units_3_modifier; 78*1b6fae3fSVijay Khemka uint8_t linearization; 79*1b6fae3fSVijay Khemka uint8_t m_lsb; 80*1b6fae3fSVijay Khemka uint8_t m_msb_and_tolerance; 81*1b6fae3fSVijay Khemka uint8_t b_lsb; 82*1b6fae3fSVijay Khemka uint8_t b_msb_and_accuracy_lsb; 83*1b6fae3fSVijay Khemka uint8_t accuracy_and_sensor_direction; 84*1b6fae3fSVijay Khemka uint8_t r_b_exponents; 85*1b6fae3fSVijay Khemka uint8_t analog_characteristic_flags; // no macro support 86*1b6fae3fSVijay Khemka uint8_t nominal_reading; 87*1b6fae3fSVijay Khemka uint8_t normal_max; 88*1b6fae3fSVijay Khemka uint8_t normal_min; 89*1b6fae3fSVijay Khemka uint8_t sensor_max; 90*1b6fae3fSVijay Khemka uint8_t sensor_min; 91*1b6fae3fSVijay Khemka uint8_t upper_nonrecoverable_threshold; 92*1b6fae3fSVijay Khemka uint8_t upper_critical_threshold; 93*1b6fae3fSVijay Khemka uint8_t upper_noncritical_threshold; 94*1b6fae3fSVijay Khemka uint8_t lower_nonrecoverable_threshold; 95*1b6fae3fSVijay Khemka uint8_t lower_critical_threshold; 96*1b6fae3fSVijay Khemka uint8_t lower_noncritical_threshold; 97*1b6fae3fSVijay Khemka uint8_t positive_threshold_hysteresis; 98*1b6fae3fSVijay Khemka uint8_t negative_threshold_hysteresis; 99*1b6fae3fSVijay Khemka uint16_t reserved; 100*1b6fae3fSVijay Khemka uint8_t oem_reserved; 101*1b6fae3fSVijay Khemka uint8_t id_string_info; 102*1b6fae3fSVijay Khemka char id_string[FULL_RECORD_ID_STR_MAX_LENGTH]; 103*1b6fae3fSVijay Khemka } __attribute__((packed)); 104*1b6fae3fSVijay Khemka 105*1b6fae3fSVijay Khemka /** @struct SensorDataFruRecordBody 106*1b6fae3fSVijay Khemka * 107*1b6fae3fSVijay Khemka * FRU Device Locator Record(body) - SDR Type 11 108*1b6fae3fSVijay Khemka */ 109*1b6fae3fSVijay Khemka struct SensorDataFruRecordBody 110*1b6fae3fSVijay Khemka { 111*1b6fae3fSVijay Khemka uint8_t reserved; 112*1b6fae3fSVijay Khemka uint8_t deviceType; 113*1b6fae3fSVijay Khemka uint8_t deviceTypeModifier; 114*1b6fae3fSVijay Khemka uint8_t entityID; 115*1b6fae3fSVijay Khemka uint8_t entityInstance; 116*1b6fae3fSVijay Khemka uint8_t oem; 117*1b6fae3fSVijay Khemka uint8_t deviceIDLen; 118*1b6fae3fSVijay Khemka char deviceID[FRU_RECORD_DEVICE_ID_MAX_LENGTH]; 119*1b6fae3fSVijay Khemka } __attribute__((packed)); 120*1b6fae3fSVijay Khemka 121*1b6fae3fSVijay Khemka struct SensorDataFullRecord 122*1b6fae3fSVijay Khemka { 123*1b6fae3fSVijay Khemka SensorDataRecordHeader header; 124*1b6fae3fSVijay Khemka SensorDataRecordKey key; 125*1b6fae3fSVijay Khemka SensorDataFullRecordBody body; 126*1b6fae3fSVijay Khemka } __attribute__((packed)); 127*1b6fae3fSVijay Khemka 128*1b6fae3fSVijay Khemka /** @struct SensorDataFruRecord 129*1b6fae3fSVijay Khemka * 130*1b6fae3fSVijay Khemka * FRU Device Locator Record - SDR Type 11 131*1b6fae3fSVijay Khemka */ 132*1b6fae3fSVijay Khemka struct SensorDataFruRecord 133*1b6fae3fSVijay Khemka { 134*1b6fae3fSVijay Khemka SensorDataRecordHeader header; 135*1b6fae3fSVijay Khemka SensorDataFruRecordKey key; 136*1b6fae3fSVijay Khemka SensorDataFruRecordBody body; 137*1b6fae3fSVijay Khemka } __attribute__((packed)); 138*1b6fae3fSVijay Khemka 139*1b6fae3fSVijay Khemka } // namespace get_sdr 140