blob: 670dc9fd6dd9a89f33e1943912d62a9315627f10 [file] [log] [blame]
Christopher Meis7e446a42024-10-22 09:36:41 +02001#pragma once
2
3#include <sdbusplus/async.hpp>
4
5#include <cstdint>
6#include <memory>
7#include <string>
8
9namespace phosphor::software::VR
10{
11
12enum class VRType
13{
14 XDPE1X2XX,
15};
16
17class VoltageRegulator
18{
19 public:
20 explicit VoltageRegulator(sdbusplus::async::context& ctx) : ctx(ctx) {}
21 virtual ~VoltageRegulator() = default;
22
23 VoltageRegulator(VoltageRegulator& vr) = delete;
24 VoltageRegulator& operator=(VoltageRegulator other) = delete;
25 VoltageRegulator(VoltageRegulator&& other) = delete;
26 VoltageRegulator& operator=(VoltageRegulator&& other) = delete;
27
28 // @brief Parses the firmware image into the configuration structure
29 // and verifies its correctness.
30 // @return sdbusplus::async::task<bool> true indicates success.
31 virtual sdbusplus::async::task<bool> verifyImage(const uint8_t* image,
32 size_t imageSize) = 0;
33
34 // @brief Applies update to the voltage regulator
35 // @return sdbusplus::async::task<bool> true indicates success.
36 virtual sdbusplus::async::task<bool> updateFirmware(bool force) = 0;
37
38 // @brief resets the voltage regulator for the update to take effect.
39 // @return sdbusplus::async::task<bool> true indicates success.
40 virtual sdbusplus::async::task<bool> reset() = 0;
41
42 // @brief Requests the CRC value of the voltage regulator over I2C.
43 // @param pointer to write the result to.
44 // @returns < 0 on error
45 virtual sdbusplus::async::task<bool> getCRC(uint32_t* checksum) = 0;
46
47 // @brief This function returns true if the voltage regulator supports
48 // force of updates.
49 virtual bool forcedUpdateAllowed() = 0;
50
51 protected:
52 sdbusplus::async::context& ctx;
53};
54
55std::unique_ptr<VoltageRegulator> create(sdbusplus::async::context& ctx,
56 enum VRType vrType, uint16_t bus,
57 uint16_t address);
58
59bool stringToEnum(std::string& vrStr, VRType& vrType);
60
61} // namespace phosphor::software::VR