1 #pragma once 2 3 #include <sdbusplus/async.hpp> 4 5 #include <cstdint> 6 #include <memory> 7 #include <string> 8 9 namespace phosphor::software::VR 10 { 11 12 enum class VRType 13 { 14 XDPE1X2XX, 15 }; 16 17 class 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 55 std::unique_ptr<VoltageRegulator> create(sdbusplus::async::context& ctx, 56 enum VRType vrType, uint16_t bus, 57 uint16_t address); 58 59 bool stringToEnum(std::string& vrStr, VRType& vrType); 60 61 } // namespace phosphor::software::VR 62