178e86012SChris Cain #pragma once 278e86012SChris Cain 378e86012SChris Cain #include "config.h" 478e86012SChris Cain 5bddcf853SGeorge Liu #ifdef POWER10 636f9cdedSChris Cain #include "occ_command.hpp" 778e86012SChris Cain 836f9cdedSChris Cain #include <cereal/archives/json.hpp> 936f9cdedSChris Cain //#include <cereal/archives/binary.hpp> 1036f9cdedSChris Cain #include <cereal/cereal.hpp> 1136f9cdedSChris Cain #include <cereal/types/string.hpp> 1236f9cdedSChris Cain #include <cereal/types/tuple.hpp> 1336f9cdedSChris Cain #include <cereal/types/vector.hpp> 1478e86012SChris Cain #include <sdbusplus/bus.hpp> 1578e86012SChris Cain #include <sdbusplus/bus/match.hpp> 161be4337bSChris Cain #include <xyz/openbmc_project/Control/Power/IdlePowerSaver/server.hpp> 171be4337bSChris Cain #include <xyz/openbmc_project/Control/Power/Mode/server.hpp> 1878e86012SChris Cain 19bcef3b48SGeorge Liu #include <filesystem> 20b5ca1015SGeorge Liu 2178e86012SChris Cain namespace open_power 2278e86012SChris Cain { 2378e86012SChris Cain namespace occ 2478e86012SChris Cain { 2536f9cdedSChris Cain 2636f9cdedSChris Cain class Manager; 2736f9cdedSChris Cain 2878e86012SChris Cain namespace powermode 2978e86012SChris Cain { 301be4337bSChris Cain namespace Base = sdbusplus::xyz::openbmc_project::Control::Power::server; 311be4337bSChris Cain using ModeInterface = sdbusplus::server::object::object<Base::Mode>; 321be4337bSChris Cain using IpsInterface = sdbusplus::server::object::object<Base::IdlePowerSaver>; 331be4337bSChris Cain using namespace std::literals::string_literals; 3478e86012SChris Cain 3578e86012SChris Cain constexpr auto PMODE_PATH = "/xyz/openbmc_project/control/host0/power_mode"; 3678e86012SChris Cain constexpr auto PMODE_INTERFACE = "xyz.openbmc_project.Control.Power.Mode"; 3778e86012SChris Cain constexpr auto POWER_MODE_PROP = "PowerMode"; 3878e86012SChris Cain 391d51da29SChris Cain constexpr auto PIPS_PATH = "/xyz/openbmc_project/control/host0/power_ips"; 401d51da29SChris Cain constexpr auto PIPS_INTERFACE = 411d51da29SChris Cain "xyz.openbmc_project.Control.Power.IdlePowerSaver"; 421d51da29SChris Cain constexpr auto IPS_ENABLED_PROP = "Enabled"; 431d51da29SChris Cain constexpr auto IPS_ENTER_UTIL = "EnterUtilizationPercent"; 441d51da29SChris Cain constexpr auto IPS_ENTER_TIME = "EnterDwellTime"; 451d51da29SChris Cain constexpr auto IPS_EXIT_UTIL = "ExitUtilizationPercent"; 461d51da29SChris Cain constexpr auto IPS_EXIT_TIME = "ExitDwellTime"; 471d51da29SChris Cain 481be4337bSChris Cain const auto PMODE_DEFAULT_INTERFACE = 491be4337bSChris Cain "xyz.openbmc_project.Configuration.PowerModeProperties"s; 501be4337bSChris Cain 5136f9cdedSChris Cain /** @brief Query the current Hypervisor target 5236f9cdedSChris Cain * @return true if the current Hypervisor target is PowerVM 5336f9cdedSChris Cain */ 5436f9cdedSChris Cain bool isPowerVM(); 5536f9cdedSChris Cain 5678e86012SChris Cain /** @brief Convert power mode string to OCC SysPwrMode value 5778e86012SChris Cain * 5878e86012SChris Cain * @param[in] i_modeString - power mode string 5978e86012SChris Cain * 6078e86012SChris Cain * @return SysPwrMode or SysPwrMode::NO_CHANGE if not found 6178e86012SChris Cain */ 6278e86012SChris Cain SysPwrMode convertStringToMode(const std::string& i_modeString); 6378e86012SChris Cain 641be4337bSChris Cain struct PowerModeData 6536f9cdedSChris Cain { 661be4337bSChris Cain bool modeInitialized = false; 671be4337bSChris Cain SysPwrMode mode = SysPwrMode::NO_CHANGE; 681be4337bSChris Cain uint16_t oemModeData = 0x0000; 691be4337bSChris Cain bool ipsInitialized = false; 701be4337bSChris Cain bool ipsEnabled = true; 711be4337bSChris Cain uint8_t ipsEnterUtil = 0; 721be4337bSChris Cain uint16_t ipsEnterTime = 0; 731be4337bSChris Cain uint8_t ipsExitUtil = 0; 741be4337bSChris Cain uint16_t ipsExitTime = 0; 7536f9cdedSChris Cain 7636f9cdedSChris Cain /** @brief Function specifying data to archive for cereal. 7736f9cdedSChris Cain */ 7836f9cdedSChris Cain template <class Archive> 7936f9cdedSChris Cain void serialize(Archive& archive) 8036f9cdedSChris Cain { 811be4337bSChris Cain archive(modeInitialized, mode, oemModeData, ipsInitialized, ipsEnabled, 821be4337bSChris Cain ipsEnterUtil, ipsEnterTime, ipsExitUtil, ipsExitTime); 8336f9cdedSChris Cain } 8436f9cdedSChris Cain }; 8536f9cdedSChris Cain 8636f9cdedSChris Cain /** @class OccPersistData 8736f9cdedSChris Cain * @brief Provides persistent container to store data for OCC 8836f9cdedSChris Cain * 8936f9cdedSChris Cain * Data is stored via cereal 9036f9cdedSChris Cain */ 9136f9cdedSChris Cain class OccPersistData 9236f9cdedSChris Cain { 9336f9cdedSChris Cain public: 9436f9cdedSChris Cain ~OccPersistData() = default; 9536f9cdedSChris Cain OccPersistData(const OccPersistData&) = default; 9636f9cdedSChris Cain OccPersistData& operator=(const OccPersistData&) = default; 9736f9cdedSChris Cain OccPersistData(OccPersistData&&) = default; 9836f9cdedSChris Cain OccPersistData& operator=(OccPersistData&&) = default; 9936f9cdedSChris Cain 1001be4337bSChris Cain /** @brief Loads any saved power mode data */ 10136f9cdedSChris Cain OccPersistData() 10236f9cdedSChris Cain { 10336f9cdedSChris Cain load(); 10436f9cdedSChris Cain } 10536f9cdedSChris Cain 10636f9cdedSChris Cain /** @brief Save Power Mode data to persistent file 10736f9cdedSChris Cain * 1081be4337bSChris Cain * @param[in] newMode - desired System Power Mode 1091be4337bSChris Cain * @param[in] oemModeData - data required by some OEM Power Modes 11036f9cdedSChris Cain */ 1111be4337bSChris Cain void updateMode(const SysPwrMode newMode, const uint16_t oemModeData) 11236f9cdedSChris Cain { 1131be4337bSChris Cain modeData.mode = newMode; 1141be4337bSChris Cain modeData.oemModeData = oemModeData; 1151be4337bSChris Cain modeData.modeInitialized = true; 11636f9cdedSChris Cain save(); 11736f9cdedSChris Cain } 11836f9cdedSChris Cain 1191be4337bSChris Cain /** @brief Write Idle Power Saver parameters to persistent file 12036f9cdedSChris Cain * 1211be4337bSChris Cain * @param[in] enabled - Idle Power Save status (true = enabled) 1221be4337bSChris Cain * @param[in] enterUtil - IPS Enter Utilization (%) 1231be4337bSChris Cain * @param[in] enterTime - IPS Enter Time (seconds) 1241be4337bSChris Cain * @param[in] exitUtil - IPS Exit Utilization (%) 1251be4337bSChris Cain * @param[in] exitTime - IPS Exit Time (seconds) 12636f9cdedSChris Cain */ 1271be4337bSChris Cain void updateIPS(const bool enabled, const uint8_t enterUtil, 1281be4337bSChris Cain const uint16_t enterTime, const uint8_t exitUtil, 1291be4337bSChris Cain const uint16_t exitTime) 13036f9cdedSChris Cain { 1311be4337bSChris Cain modeData.ipsEnabled = enabled; 1321be4337bSChris Cain modeData.ipsEnterUtil = enterUtil; 1331be4337bSChris Cain modeData.ipsEnterTime = enterTime; 1341be4337bSChris Cain modeData.ipsExitUtil = exitUtil; 1351be4337bSChris Cain modeData.ipsExitTime = exitTime; 1361be4337bSChris Cain modeData.ipsInitialized = true; 1371be4337bSChris Cain save(); 1381be4337bSChris Cain } 1391be4337bSChris Cain 1401be4337bSChris Cain /** @brief Return the Power Mode and mode data 1411be4337bSChris Cain * 1421be4337bSChris Cain * @param[out] mode - current system power mode 1431be4337bSChris Cain * @param[out] oemModeData - frequency data for some OEM mode 1441be4337bSChris Cain * 1451be4337bSChris Cain * @returns true if mode was available 1461be4337bSChris Cain */ 1471be4337bSChris Cain bool getMode(SysPwrMode& mode, uint16_t& oemModeData) const 1481be4337bSChris Cain { 1491be4337bSChris Cain if (!modeData.modeInitialized) 15036f9cdedSChris Cain { 15136f9cdedSChris Cain return false; 15236f9cdedSChris Cain } 15336f9cdedSChris Cain 1541be4337bSChris Cain mode = modeData.mode; 1551be4337bSChris Cain oemModeData = modeData.oemModeData; 15636f9cdedSChris Cain return true; 15736f9cdedSChris Cain } 15836f9cdedSChris Cain 1591be4337bSChris Cain /** @brief Get the Idle Power Saver properties from DBus 1601be4337bSChris Cain * 1611be4337bSChris Cain * @param[out] enabled - Idle Power Save status (true = enabled) 1621be4337bSChris Cain * @param[out] enterUtil - IPS Enter Utilization (%) 1631be4337bSChris Cain * @param[out] enterTime - IPS Enter Time (seconds) 1641be4337bSChris Cain * @param[out] exitUtil - IPS Exit Utilization (%) 1651be4337bSChris Cain * @param[out] exitTime - IPS Exit Time (seconds) 1661be4337bSChris Cain * 1671be4337bSChris Cain * @return true if parameters were read successfully 1681be4337bSChris Cain */ 1691be4337bSChris Cain bool getIPS(bool& enabled, uint8_t& enterUtil, uint16_t& enterTime, 1701be4337bSChris Cain uint8_t& exitUtil, uint16_t& exitTime) 1711be4337bSChris Cain { 1721be4337bSChris Cain if (!modeData.ipsInitialized) 1731be4337bSChris Cain { 1741be4337bSChris Cain return false; 1751be4337bSChris Cain } 1761be4337bSChris Cain 1771be4337bSChris Cain enabled = modeData.ipsEnabled; 1781be4337bSChris Cain enterUtil = modeData.ipsEnterUtil; 1791be4337bSChris Cain enterTime = modeData.ipsEnterTime; 1801be4337bSChris Cain exitUtil = modeData.ipsExitUtil; 1811be4337bSChris Cain exitTime = modeData.ipsExitTime; 1821be4337bSChris Cain return true; 1831be4337bSChris Cain } 1841be4337bSChris Cain 1851be4337bSChris Cain /** @brief Return true if the power mode is available */ 1861be4337bSChris Cain bool modeAvailable() 1871be4337bSChris Cain { 1881be4337bSChris Cain return (modeData.modeInitialized); 1891be4337bSChris Cain } 1901be4337bSChris Cain 191*cde7bea3SChris Cain /** @brief Return true if the IPS data is available */ 1921be4337bSChris Cain bool ipsAvailable() 1931be4337bSChris Cain { 1941be4337bSChris Cain return (modeData.ipsInitialized); 1951be4337bSChris Cain } 1961be4337bSChris Cain 19736f9cdedSChris Cain /** @brief Saves the Power Mode data in the filesystem using cereal. */ 19836f9cdedSChris Cain void save(); 19936f9cdedSChris Cain 2001be4337bSChris Cain /** @brief Trace the Power Mode and IPS parameters. */ 2011be4337bSChris Cain void print(); 20236f9cdedSChris Cain 20336f9cdedSChris Cain private: 2041be4337bSChris Cain /** @brief Power Mode data filename to store persistent data */ 2051be4337bSChris Cain static constexpr auto powerModeFilename = "powerModeData"; 20636f9cdedSChris Cain 2071be4337bSChris Cain /** @brief Power Mode data object to be persisted */ 2081be4337bSChris Cain PowerModeData modeData; 20936f9cdedSChris Cain 21036f9cdedSChris Cain /** @brief Loads the OEM mode data in the filesystem using cereal. */ 21136f9cdedSChris Cain void load(); 21236f9cdedSChris Cain }; 21336f9cdedSChris Cain 21478e86012SChris Cain /** @class PowerMode 21578e86012SChris Cain * @brief Monitors for changes to the power mode and notifies occ 21678e86012SChris Cain * 21778e86012SChris Cain * The customer power mode is provided to the OCC by host TMGT when the occ 21878e86012SChris Cain * first goes active or is reset. This code is responsible for sending 21978e86012SChris Cain * the power mode to the OCC if the mode is changed while the occ is active. 22078e86012SChris Cain */ 22178e86012SChris Cain 2221be4337bSChris Cain class PowerMode : public ModeInterface, public IpsInterface 22378e86012SChris Cain { 22478e86012SChris Cain public: 22578e86012SChris Cain /** @brief PowerMode object to inform occ of changes to mode 22678e86012SChris Cain * 22778e86012SChris Cain * This object will monitor for changes to the power mode setting. 22878e86012SChris Cain * If a change is detected, and the occ is active, then this object will 22978e86012SChris Cain * notify the OCC of the change. 23078e86012SChris Cain * 2311be4337bSChris Cain * @param[in] managerRef - manager object reference 2321be4337bSChris Cain * @param[in] modePath - Power Mode dbus path 2331be4337bSChris Cain * @param[in] ipsPath - Idle Power Saver dbus path 23478e86012SChris Cain */ 2351be4337bSChris Cain explicit PowerMode(const Manager& managerRef, const char* modePath, 2361be4337bSChris Cain const char* ipsPath) : 2371be4337bSChris Cain ModeInterface(utils::getBus(), modePath, false), 2381be4337bSChris Cain IpsInterface(utils::getBus(), ipsPath, false), manager(managerRef), 23978e86012SChris Cain pmodeMatch(utils::getBus(), 24078e86012SChris Cain sdbusplus::bus::match::rules::propertiesChanged( 24178e86012SChris Cain PMODE_PATH, PMODE_INTERFACE), 24236f9cdedSChris Cain [this](auto& msg) { this->modeChanged(msg); }), 24336f9cdedSChris Cain ipsMatch(utils::getBus(), 24436f9cdedSChris Cain sdbusplus::bus::match::rules::propertiesChanged( 24536f9cdedSChris Cain PIPS_PATH, PIPS_INTERFACE), 24636f9cdedSChris Cain [this](auto& msg) { this->ipsChanged(msg); }), 2471be4337bSChris Cain defaultsUpdateMatch( 2481be4337bSChris Cain utils::getBus(), 2491be4337bSChris Cain sdbusplus::bus::match::rules::propertiesChangedNamespace( 2501be4337bSChris Cain "/xyz/openbmc_project/inventory", PMODE_DEFAULT_INTERFACE), 2511be4337bSChris Cain [this](auto& msg) { this->defaultsReady(msg); }), 2521be4337bSChris Cain masterOccSet(false), masterActive(false) 2531be4337bSChris Cain { 2541be4337bSChris Cain // restore Power Mode to DBus 2551be4337bSChris Cain SysPwrMode currentMode; 2561be4337bSChris Cain uint16_t oemModeData = 0; 2571be4337bSChris Cain if (getMode(currentMode, oemModeData)) 2581be4337bSChris Cain { 2591be4337bSChris Cain updateDbusMode(currentMode); 2601be4337bSChris Cain } 2611be4337bSChris Cain // restore Idle Power Saver parameters to DBus 2621be4337bSChris Cain uint8_t enterUtil, exitUtil; 2631be4337bSChris Cain uint16_t enterTime, exitTime; 2641be4337bSChris Cain bool ipsEnabled; 2651be4337bSChris Cain if (getIPSParms(ipsEnabled, enterUtil, enterTime, exitUtil, exitTime)) 2661be4337bSChris Cain { 2671be4337bSChris Cain updateDbusIPS(ipsEnabled, enterUtil, enterTime, exitUtil, exitTime); 2681be4337bSChris Cain } 2691be4337bSChris Cain }; 27036f9cdedSChris Cain 2711be4337bSChris Cain /** @brief Initialize the persistent data with default values 2721be4337bSChris Cain * 2731be4337bSChris Cain * @return true if initialization completed 2741be4337bSChris Cain */ 2751be4337bSChris Cain bool initPersistentData(); 2761be4337bSChris Cain 2771be4337bSChris Cain /** @brief Set the current power mode property 2781be4337bSChris Cain * 2791be4337bSChris Cain * @param[in] newMode - desired system power mode 2801be4337bSChris Cain * @param[in] oemModeData - data required by some OEM Power Modes 2811be4337bSChris Cain * 2821be4337bSChris Cain * @return true if mode accepted 2831be4337bSChris Cain */ 2841be4337bSChris Cain bool setMode(const SysPwrMode newMode, const uint16_t oemModeData); 28536f9cdedSChris Cain 28636f9cdedSChris Cain /** @brief Send mode change command to the master OCC 28736f9cdedSChris Cain * @return SUCCESS on success 28836f9cdedSChris Cain */ 28936f9cdedSChris Cain CmdStatus sendModeChange(); 29036f9cdedSChris Cain 29136f9cdedSChris Cain /** @brief Send Idle Power Saver config data to the master OCC 29236f9cdedSChris Cain * @return SUCCESS on success 29336f9cdedSChris Cain */ 29436f9cdedSChris Cain CmdStatus sendIpsData(); 29536f9cdedSChris Cain 2966fa848a9SChris Cain /** @brief Set the master OCC path 2976fa848a9SChris Cain * 2986fa848a9SChris Cain * @param[in] occPath - hwmon path for master OCC 2996fa848a9SChris Cain */ 3006fa848a9SChris Cain void setMasterOcc(const std::string& occPath); 3016fa848a9SChris Cain 30236f9cdedSChris Cain /** @brief Notify object of master OCC state. If not acitve, no 30336f9cdedSChris Cain * commands will be sent to the master OCC 30436f9cdedSChris Cain * 30536f9cdedSChris Cain * @param[in] isActive - true when master OCC is active 30636f9cdedSChris Cain */ 30736f9cdedSChris Cain void setMasterActive(const bool isActive = true) 30836f9cdedSChris Cain { 30936f9cdedSChris Cain masterActive = isActive; 31036f9cdedSChris Cain }; 31178e86012SChris Cain 31278e86012SChris Cain private: 31336f9cdedSChris Cain /** @brief OCC manager object */ 31436f9cdedSChris Cain const Manager& manager; 31536f9cdedSChris Cain 31636f9cdedSChris Cain /** @brief Pass-through occ path on the bus */ 31736f9cdedSChris Cain std::string path; 31836f9cdedSChris Cain 31936f9cdedSChris Cain /** @brief OCC instance number */ 32036f9cdedSChris Cain int occInstance; 32136f9cdedSChris Cain 32236f9cdedSChris Cain /** @brief Object to send commands to the OCC */ 3236fa848a9SChris Cain std::unique_ptr<open_power::occ::OccCommand> occCmd; 32436f9cdedSChris Cain 32536f9cdedSChris Cain /** @brief Used to subscribe to dbus pmode property changes **/ 32636f9cdedSChris Cain sdbusplus::bus::match_t pmodeMatch; 32736f9cdedSChris Cain 32836f9cdedSChris Cain /** @brief Used to subscribe to dbus IPS property changes **/ 32936f9cdedSChris Cain sdbusplus::bus::match_t ipsMatch; 33036f9cdedSChris Cain 3311be4337bSChris Cain /** @brief Used to subscribe to dbus defaults property changes **/ 3321be4337bSChris Cain sdbusplus::bus::match_t defaultsUpdateMatch; 3331be4337bSChris Cain 33436f9cdedSChris Cain OccPersistData persistedData; 33536f9cdedSChris Cain 3366fa848a9SChris Cain /** @brief True when the master OCC has been established */ 3376fa848a9SChris Cain bool masterOccSet; 3386fa848a9SChris Cain 3396fa848a9SChris Cain /** @brief True when the master OCC is active */ 34036f9cdedSChris Cain bool masterActive; 34136f9cdedSChris Cain 34278e86012SChris Cain /** @brief Callback for pmode setting changes 34378e86012SChris Cain * 34478e86012SChris Cain * Process change and inform OCC 34578e86012SChris Cain * 34678e86012SChris Cain * @param[in] msg - Data associated with pmode change signal 34778e86012SChris Cain * 34878e86012SChris Cain */ 34978e86012SChris Cain void modeChanged(sdbusplus::message::message& msg); 35078e86012SChris Cain 3511be4337bSChris Cain /** @brief Get the current power mode property 3521be4337bSChris Cain * 3531be4337bSChris Cain * @param[out] currentMode - current system power mode 3541be4337bSChris Cain * @param[out] oemModeData - frequency data for some OEM mode 3551be4337bSChris Cain * 3561be4337bSChris Cain * @return true if data read successfully 3571d51da29SChris Cain */ 3581be4337bSChris Cain bool getMode(SysPwrMode& currentMode, uint16_t& oemModeData); 3591d51da29SChris Cain 36036f9cdedSChris Cain /** @brief Update the power mode property on DBus 36136f9cdedSChris Cain * 36236f9cdedSChris Cain * @param[in] newMode - desired power mode 36336f9cdedSChris Cain * 36436f9cdedSChris Cain * @return true on success 36536f9cdedSChris Cain */ 36636f9cdedSChris Cain bool updateDbusMode(const SysPwrMode newMode); 36736f9cdedSChris Cain 3681d51da29SChris Cain /** @brief Callback for IPS setting changes 3691d51da29SChris Cain * 3701d51da29SChris Cain * Process change and inform OCC 3711d51da29SChris Cain * 3721d51da29SChris Cain * @param[in] msg - Data associated with IPS change signal 3731d51da29SChris Cain * 3741d51da29SChris Cain */ 3751d51da29SChris Cain void ipsChanged(sdbusplus::message::message& msg); 3761d51da29SChris Cain 3771be4337bSChris Cain /** @brief Get the Idle Power Saver properties 3781be4337bSChris Cain * 3791be4337bSChris Cain * @param[out] enabled - Idle Power Save status (true = enabled) 3801be4337bSChris Cain * @param[out] enterUtil - IPS Enter Utilization (%) 3811be4337bSChris Cain * @param[out] enterTime - IPS Enter Time (seconds) 3821be4337bSChris Cain * @param[out] exitUtil - IPS Exit Utilization (%) 3831be4337bSChris Cain * @param[out] exitTime - IPS Exit Time (seconds) 3841be4337bSChris Cain * 3851be4337bSChris Cain * @return true if data read successfully 38636f9cdedSChris Cain */ 3871be4337bSChris Cain bool getIPSParms(bool& enabled, uint8_t& enterUtil, uint16_t& enterTime, 3881be4337bSChris Cain uint8_t& exitUtil, uint16_t& exitTime); 3891be4337bSChris Cain 3901be4337bSChris Cain /** Update the Idle Power Saver data on DBus 3911be4337bSChris Cain * 3921be4337bSChris Cain * @param[in] enabled - Idle Power Save status (true = enabled) 3931be4337bSChris Cain * @param[in] enterUtil - IPS Enter Utilization (%) 3941be4337bSChris Cain * @param[in] enterTime - IPS Enter Time (seconds) 3951be4337bSChris Cain * @param[in] exitUtil - IPS Exit Utilization (%) 3961be4337bSChris Cain * @param[in] exitTime - IPS Exit Time (seconds) 3971be4337bSChris Cain * 3981be4337bSChris Cain * @return true if parameters were set successfully 3991be4337bSChris Cain */ 4001be4337bSChris Cain bool updateDbusIPS(const bool enabled, const uint8_t enterUtil, 4011be4337bSChris Cain const uint16_t enterTime, const uint8_t exitUtil, 4021be4337bSChris Cain const uint16_t exitTime); 4031be4337bSChris Cain 4041be4337bSChris Cain /** @brief Callback for entity manager default changes 4051be4337bSChris Cain * 4061be4337bSChris Cain * Called when PowerModeProperties defaults are available 4071be4337bSChris Cain */ 4081be4337bSChris Cain void defaultsReady(sdbusplus::message::message& msg); 4091be4337bSChris Cain 4101be4337bSChris Cain /** @brief Get the default power mode property for this system type 4111be4337bSChris Cain * 4121be4337bSChris Cain * @param[out] defaultMode - default system power mode 4131be4337bSChris Cain * 4141be4337bSChris Cain * @return true if data read successfully 4151be4337bSChris Cain */ 4161be4337bSChris Cain bool getDefaultMode(SysPwrMode& defaultMode); 4171be4337bSChris Cain 4181be4337bSChris Cain /** @brief Get the default Idle Power Saver properties for this system type 4191be4337bSChris Cain * 4201be4337bSChris Cain * @param[out] enabled - Idle Power Save status (true = enabled) 4211be4337bSChris Cain * @param[out] enterUtil - IPS Enter Utilization (%) 4221be4337bSChris Cain * @param[out] enterTime - IPS Enter Time (seconds) 4231be4337bSChris Cain * @param[out] exitUtil - IPS Exit Utilization (%) 4241be4337bSChris Cain * @param[out] exitTime - IPS Exit Time (seconds) 4251be4337bSChris Cain * 4261be4337bSChris Cain * @return true if parameters were read successfully 4271be4337bSChris Cain */ 4281be4337bSChris Cain bool getDefaultIPSParms(bool& enabled, uint8_t& enterUtil, 4291be4337bSChris Cain uint16_t& enterTime, uint8_t& exitUtil, 43036f9cdedSChris Cain uint16_t& exitTime); 431*cde7bea3SChris Cain 432*cde7bea3SChris Cain /** @brief Read the default Idle Power Saver parameters and save them to the 433*cde7bea3SChris Cain * DBUS so they will get used 434*cde7bea3SChris Cain * 435*cde7bea3SChris Cain * @return true if restore was successful 436*cde7bea3SChris Cain */ 437*cde7bea3SChris Cain bool useDefaultIPSParms(); 4381d51da29SChris Cain }; 4391d51da29SChris Cain 44078e86012SChris Cain } // namespace powermode 44178e86012SChris Cain 44278e86012SChris Cain } // namespace occ 44378e86012SChris Cain 44478e86012SChris Cain } // namespace open_power 44578e86012SChris Cain #endif 446