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