blob: 670dc9fd6dd9a89f33e1943912d62a9315627f10 [file] [log] [blame]
#pragma once
#include <sdbusplus/async.hpp>
#include <cstdint>
#include <memory>
#include <string>
namespace phosphor::software::VR
{
enum class VRType
{
XDPE1X2XX,
};
class VoltageRegulator
{
public:
explicit VoltageRegulator(sdbusplus::async::context& ctx) : ctx(ctx) {}
virtual ~VoltageRegulator() = default;
VoltageRegulator(VoltageRegulator& vr) = delete;
VoltageRegulator& operator=(VoltageRegulator other) = delete;
VoltageRegulator(VoltageRegulator&& other) = delete;
VoltageRegulator& operator=(VoltageRegulator&& other) = delete;
// @brief Parses the firmware image into the configuration structure
// and verifies its correctness.
// @return sdbusplus::async::task<bool> true indicates success.
virtual sdbusplus::async::task<bool> verifyImage(const uint8_t* image,
size_t imageSize) = 0;
// @brief Applies update to the voltage regulator
// @return sdbusplus::async::task<bool> true indicates success.
virtual sdbusplus::async::task<bool> updateFirmware(bool force) = 0;
// @brief resets the voltage regulator for the update to take effect.
// @return sdbusplus::async::task<bool> true indicates success.
virtual sdbusplus::async::task<bool> reset() = 0;
// @brief Requests the CRC value of the voltage regulator over I2C.
// @param pointer to write the result to.
// @returns < 0 on error
virtual sdbusplus::async::task<bool> getCRC(uint32_t* checksum) = 0;
// @brief This function returns true if the voltage regulator supports
// force of updates.
virtual bool forcedUpdateAllowed() = 0;
protected:
sdbusplus::async::context& ctx;
};
std::unique_ptr<VoltageRegulator> create(sdbusplus::async::context& ctx,
enum VRType vrType, uint16_t bus,
uint16_t address);
bool stringToEnum(std::string& vrStr, VRType& vrType);
} // namespace phosphor::software::VR