13f7c5e40SJason M. Bills /*
23f7c5e40SJason M. Bills // Copyright (c) 2017 2018 Intel Corporation
33f7c5e40SJason M. Bills //
43f7c5e40SJason M. Bills // Licensed under the Apache License, Version 2.0 (the "License");
53f7c5e40SJason M. Bills // you may not use this file except in compliance with the License.
63f7c5e40SJason M. Bills // You may obtain a copy of the License at
73f7c5e40SJason M. Bills //
83f7c5e40SJason M. Bills // http://www.apache.org/licenses/LICENSE-2.0
93f7c5e40SJason M. Bills //
103f7c5e40SJason M. Bills // Unless required by applicable law or agreed to in writing, software
113f7c5e40SJason M. Bills // distributed under the License is distributed on an "AS IS" BASIS,
123f7c5e40SJason M. Bills // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133f7c5e40SJason M. Bills // See the License for the specific language governing permissions and
143f7c5e40SJason M. Bills // limitations under the License.
153f7c5e40SJason M. Bills */
163f7c5e40SJason M. Bills
173f7c5e40SJason M. Bills #pragma once
1814c36a81SPatrick Venture #include "sdrutils.hpp"
1914c36a81SPatrick Venture
20545fb2d5SPatrick Venture #include <ipmid/api.hpp>
213f7c5e40SJason M. Bills
22fcd2d3a9SJames Feist #include <cstdint>
23fcd2d3a9SJames Feist
243f7c5e40SJason M. Bills #pragma pack(push, 1)
253f7c5e40SJason M. Bills
263f7c5e40SJason M. Bills struct SensorThresholdResp
273f7c5e40SJason M. Bills {
283f7c5e40SJason M. Bills uint8_t readable;
293f7c5e40SJason M. Bills uint8_t lowernc;
303f7c5e40SJason M. Bills uint8_t lowercritical;
313f7c5e40SJason M. Bills uint8_t lowernonrecoverable;
323f7c5e40SJason M. Bills uint8_t uppernc;
333f7c5e40SJason M. Bills uint8_t uppercritical;
343f7c5e40SJason M. Bills uint8_t uppernonrecoverable;
353f7c5e40SJason M. Bills };
363f7c5e40SJason M. Bills
373f7c5e40SJason M. Bills #pragma pack(pop)
383f7c5e40SJason M. Bills
39902c4c58SJames Feist enum class IPMIThresholdRespBits
403f7c5e40SJason M. Bills {
413f7c5e40SJason M. Bills lowerNonCritical,
423f7c5e40SJason M. Bills lowerCritical,
433f7c5e40SJason M. Bills lowerNonRecoverable,
443f7c5e40SJason M. Bills upperNonCritical,
453f7c5e40SJason M. Bills upperCritical,
463f7c5e40SJason M. Bills upperNonRecoverable
473f7c5e40SJason M. Bills };
483f7c5e40SJason M. Bills
493f7c5e40SJason M. Bills enum class IPMISensorReadingByte2 : uint8_t
503f7c5e40SJason M. Bills {
513f7c5e40SJason M. Bills eventMessagesEnable = (1 << 7),
523f7c5e40SJason M. Bills sensorScanningEnable = (1 << 6),
533f7c5e40SJason M. Bills readingStateUnavailable = (1 << 5),
543f7c5e40SJason M. Bills };
553f7c5e40SJason M. Bills
560cd014acSJames Feist enum class IPMISensorReadingByte3 : uint8_t
570cd014acSJames Feist {
580cd014acSJames Feist upperNonRecoverable = (1 << 5),
590cd014acSJames Feist upperCritical = (1 << 4),
600cd014acSJames Feist upperNonCritical = (1 << 3),
610cd014acSJames Feist lowerNonRecoverable = (1 << 2),
620cd014acSJames Feist lowerCritical = (1 << 1),
630cd014acSJames Feist lowerNonCritical = (1 << 0),
640cd014acSJames Feist };
650cd014acSJames Feist
663f7c5e40SJason M. Bills enum class IPMISensorEventEnableByte2 : uint8_t
673f7c5e40SJason M. Bills {
683f7c5e40SJason M. Bills eventMessagesEnable = (1 << 7),
693f7c5e40SJason M. Bills sensorScanningEnable = (1 << 6),
703f7c5e40SJason M. Bills };
713f7c5e40SJason M. Bills
723f7c5e40SJason M. Bills enum class IPMISensorEventEnableThresholds : uint8_t
733f7c5e40SJason M. Bills {
74963a95b6SRashmi RV nonRecoverableThreshold = (1 << 6),
75963a95b6SRashmi RV criticalThreshold = (1 << 5),
76963a95b6SRashmi RV nonCriticalThreshold = (1 << 4),
773f7c5e40SJason M. Bills upperNonRecoverableGoingHigh = (1 << 3),
783f7c5e40SJason M. Bills upperNonRecoverableGoingLow = (1 << 2),
793f7c5e40SJason M. Bills upperCriticalGoingHigh = (1 << 1),
803f7c5e40SJason M. Bills upperCriticalGoingLow = (1 << 0),
813f7c5e40SJason M. Bills upperNonCriticalGoingHigh = (1 << 7),
823f7c5e40SJason M. Bills upperNonCriticalGoingLow = (1 << 6),
833f7c5e40SJason M. Bills lowerNonRecoverableGoingHigh = (1 << 5),
843f7c5e40SJason M. Bills lowerNonRecoverableGoingLow = (1 << 4),
853f7c5e40SJason M. Bills lowerCriticalGoingHigh = (1 << 3),
863f7c5e40SJason M. Bills lowerCriticalGoingLow = (1 << 2),
873f7c5e40SJason M. Bills lowerNonCriticalGoingHigh = (1 << 1),
883f7c5e40SJason M. Bills lowerNonCriticalGoingLow = (1 << 0),
893f7c5e40SJason M. Bills };
903f7c5e40SJason M. Bills
91ccf88f66Sjayaprakash Mutyala enum class IPMIGetSensorEventEnableThresholds : uint8_t
92ccf88f66Sjayaprakash Mutyala {
93ccf88f66Sjayaprakash Mutyala lowerNonCriticalGoingLow = 0,
94ccf88f66Sjayaprakash Mutyala lowerNonCriticalGoingHigh = 1,
95ccf88f66Sjayaprakash Mutyala lowerCriticalGoingLow = 2,
96ccf88f66Sjayaprakash Mutyala lowerCriticalGoingHigh = 3,
97ccf88f66Sjayaprakash Mutyala lowerNonRecoverableGoingLow = 4,
98ccf88f66Sjayaprakash Mutyala lowerNonRecoverableGoingHigh = 5,
99ccf88f66Sjayaprakash Mutyala upperNonCriticalGoingLow = 6,
100ccf88f66Sjayaprakash Mutyala upperNonCriticalGoingHigh = 7,
101ccf88f66Sjayaprakash Mutyala upperCriticalGoingLow = 8,
102ccf88f66Sjayaprakash Mutyala upperCriticalGoingHigh = 9,
103ccf88f66Sjayaprakash Mutyala upperNonRecoverableGoingLow = 10,
104ccf88f66Sjayaprakash Mutyala upperNonRecoverableGoingHigh = 11,
105ccf88f66Sjayaprakash Mutyala };
106ccf88f66Sjayaprakash Mutyala
1073f7c5e40SJason M. Bills enum class IPMINetfnSensorCmds : ipmi_cmd_t
1083f7c5e40SJason M. Bills {
1093f7c5e40SJason M. Bills ipmiCmdGetDeviceSDRInfo = 0x20,
1103f7c5e40SJason M. Bills ipmiCmdGetDeviceSDR = 0x21,
1113f7c5e40SJason M. Bills ipmiCmdReserveDeviceSDRRepo = 0x22,
112fcce83dfSJames Feist ipmiCmdSetSensorThreshold = 0x26,
1133f7c5e40SJason M. Bills ipmiCmdGetSensorThreshold = 0x27,
1143f7c5e40SJason M. Bills ipmiCmdGetSensorEventEnable = 0x29,
1153f7c5e40SJason M. Bills ipmiCmdGetSensorEventStatus = 0x2B,
1163f7c5e40SJason M. Bills ipmiCmdGetSensorReading = 0x2D,
1173f7c5e40SJason M. Bills ipmiCmdGetSensorType = 0x2F,
1183f7c5e40SJason M. Bills ipmiCmdSetSensorReadingAndEventStatus = 0x30,
1193f7c5e40SJason M. Bills };
12001fbcb50SRichard Marian Thomaiyar
1214c88d4c5SRichard Marian Thomaiyar namespace ipmi
1224c88d4c5SRichard Marian Thomaiyar {
12301fbcb50SRichard Marian Thomaiyar extern SensorSubTree sensorTree;
getSensorConnection(ipmi::Context::ptr ctx,uint8_t sensnum,std::string & connection,std::string & path)124*2346b5d2SJohnathan Mantey static ipmi_ret_t getSensorConnection(ipmi::Context::ptr ctx, uint8_t sensnum,
125308c3a8bSJohnathan Mantey std::string& connection,
12601fbcb50SRichard Marian Thomaiyar std::string& path)
12701fbcb50SRichard Marian Thomaiyar {
12817eadbfbSKuiying Wang if (!getSensorSubtree(sensorTree) && sensorTree.empty())
12901fbcb50SRichard Marian Thomaiyar {
13001fbcb50SRichard Marian Thomaiyar return IPMI_CC_RESPONSE_ERROR;
13101fbcb50SRichard Marian Thomaiyar }
13201fbcb50SRichard Marian Thomaiyar
133308c3a8bSJohnathan Mantey if (ctx == nullptr)
134308c3a8bSJohnathan Mantey {
135308c3a8bSJohnathan Mantey return IPMI_CC_RESPONSE_ERROR;
136308c3a8bSJohnathan Mantey }
137308c3a8bSJohnathan Mantey
138308c3a8bSJohnathan Mantey path = getPathFromSensorNumber((ctx->lun << 8) | sensnum);
139308c3a8bSJohnathan Mantey if (path.empty())
14001fbcb50SRichard Marian Thomaiyar {
14101fbcb50SRichard Marian Thomaiyar return IPMI_CC_INVALID_FIELD_REQUEST;
14201fbcb50SRichard Marian Thomaiyar }
14301fbcb50SRichard Marian Thomaiyar
14401fbcb50SRichard Marian Thomaiyar for (const auto& sensor : sensorTree)
14501fbcb50SRichard Marian Thomaiyar {
146308c3a8bSJohnathan Mantey if (path == sensor.first)
14701fbcb50SRichard Marian Thomaiyar {
14801fbcb50SRichard Marian Thomaiyar connection = sensor.second.begin()->first;
14901fbcb50SRichard Marian Thomaiyar break;
15001fbcb50SRichard Marian Thomaiyar }
15101fbcb50SRichard Marian Thomaiyar }
15201fbcb50SRichard Marian Thomaiyar
15301fbcb50SRichard Marian Thomaiyar return 0;
15401fbcb50SRichard Marian Thomaiyar }
155902c4c58SJames Feist
156902c4c58SJames Feist struct IPMIThresholds
157902c4c58SJames Feist {
158902c4c58SJames Feist std::optional<uint8_t> warningLow;
159902c4c58SJames Feist std::optional<uint8_t> warningHigh;
160902c4c58SJames Feist std::optional<uint8_t> criticalLow;
161902c4c58SJames Feist std::optional<uint8_t> criticalHigh;
162902c4c58SJames Feist };
163902c4c58SJames Feist
1644c88d4c5SRichard Marian Thomaiyar } // namespace ipmi
165