blob: df51f474084cbc55326d32d804aa69d97c545989 [file] [log] [blame]
/*
// Copyright (c) 2017 2018 Intel Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
*/
#pragma once
#include <dbus-sdr/sdrutils.hpp>
#include <cstdint>
#pragma pack(push, 1)
struct SensorThresholdResp
{
uint8_t readable;
uint8_t lowernc;
uint8_t lowercritical;
uint8_t lowernonrecoverable;
uint8_t uppernc;
uint8_t uppercritical;
uint8_t uppernonrecoverable;
};
#pragma pack(pop)
enum class IPMIThresholdRespBits
{
lowerNonCritical,
lowerCritical,
lowerNonRecoverable,
upperNonCritical,
upperCritical,
upperNonRecoverable
};
enum class IPMISensorReadingByte2 : uint8_t
{
eventMessagesEnable = (1 << 7),
sensorScanningEnable = (1 << 6),
readingStateUnavailable = (1 << 5),
};
enum class IPMISensorReadingByte3 : uint8_t
{
upperNonRecoverable = (1 << 5),
upperCritical = (1 << 4),
upperNonCritical = (1 << 3),
lowerNonRecoverable = (1 << 2),
lowerCritical = (1 << 1),
lowerNonCritical = (1 << 0),
};
enum class IPMISensorEventEnableByte2 : uint8_t
{
eventMessagesEnable = (1 << 7),
sensorScanningEnable = (1 << 6),
};
enum class IPMISensorEventEnableThresholds : uint8_t
{
nonRecoverableThreshold = (1 << 6),
criticalThreshold = (1 << 5),
nonCriticalThreshold = (1 << 4),
upperNonRecoverableGoingHigh = (1 << 3),
upperNonRecoverableGoingLow = (1 << 2),
upperCriticalGoingHigh = (1 << 1),
upperCriticalGoingLow = (1 << 0),
upperNonCriticalGoingHigh = (1 << 7),
upperNonCriticalGoingLow = (1 << 6),
lowerNonRecoverableGoingHigh = (1 << 5),
lowerNonRecoverableGoingLow = (1 << 4),
lowerCriticalGoingHigh = (1 << 3),
lowerCriticalGoingLow = (1 << 2),
lowerNonCriticalGoingHigh = (1 << 1),
lowerNonCriticalGoingLow = (1 << 0),
};
enum class IPMIGetSensorEventEnableThresholds : uint8_t
{
lowerNonCriticalGoingLow = 0,
lowerNonCriticalGoingHigh = 1,
lowerCriticalGoingLow = 2,
lowerCriticalGoingHigh = 3,
lowerNonRecoverableGoingLow = 4,
lowerNonRecoverableGoingHigh = 5,
upperNonCriticalGoingLow = 6,
upperNonCriticalGoingHigh = 7,
upperCriticalGoingLow = 8,
upperCriticalGoingHigh = 9,
upperNonRecoverableGoingLow = 10,
upperNonRecoverableGoingHigh = 11,
};
enum class IPMINetfnSensorCmds : ipmi_cmd_t
{
ipmiCmdGetDeviceSDRInfo = 0x20,
ipmiCmdGetDeviceSDR = 0x21,
ipmiCmdReserveDeviceSDRRepo = 0x22,
ipmiCmdSetSensorThreshold = 0x26,
ipmiCmdGetSensorThreshold = 0x27,
ipmiCmdGetSensorEventEnable = 0x29,
ipmiCmdGetSensorEventStatus = 0x2B,
ipmiCmdGetSensorReading = 0x2D,
ipmiCmdGetSensorType = 0x2F,
ipmiCmdSetSensorReadingAndEventStatus = 0x30,
};
namespace ipmi
{
uint16_t getNumberOfSensors();
SensorSubTree& getSensorTree();
ipmi_ret_t getSensorConnection(ipmi::Context::ptr ctx, uint8_t sensnum,
std::string& connection, std::string& path,
std::vector<std::string>* interfaces = nullptr);
struct IPMIThresholds
{
std::optional<uint8_t> warningLow;
std::optional<uint8_t> warningHigh;
std::optional<uint8_t> criticalLow;
std::optional<uint8_t> criticalHigh;
};
namespace sensor
{
/**
* @brief Retrieve the number of sensors that are not included in the list of
* sensors published via D-Bus
*
* @param[in]: ctx: the pointer to the D-Bus context
* @return: The number of additional sensors separate from those published
* dynamically on D-Bus
*/
size_t getOtherSensorsCount(ipmi::Context::ptr ctx);
/**
* @brief Retrieve the record data for the sensors not published via D-Bus
*
* @param[in]: ctx: the pointer to the D-Bus context
* @param[in]: recordID: the integer index for the sensor to retrieve
* @param[out]: SDR data for the indexed sensor
* @return: 0: success
* negative number: error condition
*/
int getOtherSensorsDataRecord(ipmi::Context::ptr ctx, uint16_t recordID,
std::vector<uint8_t>& recordData);
} // namespace sensor
namespace dcmi
{
struct sensorInfo
{
std::string objectPath;
uint8_t type;
uint16_t recordId;
uint8_t entityId;
uint8_t entityInstance;
};
} // namespace dcmi
} // namespace ipmi