xref: /openbmc/intel-ipmi-oem/include/sensorcommands.hpp (revision 2346b5d2af99f433573a5052cd48700121db6424)
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