summaryrefslogtreecommitdiff
path: root/redfish-core
diff options
context:
space:
mode:
authorChris Cain <cjcain@us.ibm.com>2024-02-01 23:35:33 +0300
committerEd Tanous <ed@tanous.net>2024-02-08 19:51:19 +0300
commitb66551019cf3c31186877c30a91ff8622454f342 (patch)
tree9932ea0bad6ecc395568c2b6d4354bdd2994d38c /redfish-core
parent8615915cc51a468c1c0b6eabb684616d0f2abe0f (diff)
downloadbmcweb-b66551019cf3c31186877c30a91ff8622454f342.tar.xz
Systems: Add support for new eco power modes
Add support for the following new power modes: - Efficiency Favor Performance - Efficiency Favor Power - Balanced Performance New modes were added in ComputerSystem schema to v1.22 Tested on Rainier and passed Validator ''' GET /redfish/v1/Systems/system: "@odata.type": "#ComputerSystem.v1_22_0.ComputerSystem", ... "PowerMode": "EfficiencyFavorPerformance", "PowerMode@Redfish.AllowableValues": [ "Static", "MaximumPerformance", "PowerSaving" ], PATCH -d '{ "PowerMode":"BalancedPerformance"}' https://$bmc/redfish/v1/Systems/system "PowerMode": "BalancedPerformance", PATCH -d '{ "PowerMode":"EfficiencyFavorPerformance"}' https://$bmc/redfish/v1/Systems/system "PowerMode": "EfficiencyFavorPerformance", PATCH -d '{ "PowerMode":"EfficiencyFavorPower"}' https://$bmc/redfish/v1/Systems/system "PowerMode": "EfficiencyFavorPower", PATCH -d '{ "PowerMode":"MaximumPerformance"}' https://$bmc/redfish/v1/Systems/system "PowerMode": "MaximumPerformance", PATCH -d '{ "PowerMode":"NotARealMode"}' https://$bmc/redfish/v1/Systems/system { "PowerMode@Message.ExtendedInfo": [ { "@odata.type": "#Message.v1_1_1.Message", "Message": "The value '\"NotARealMode\"' for the property PowerMode is not in the list of acceptable values.", "MessageArgs": [ "\"NotARealMode\"", "PowerMode" ], "MessageId": "Base.1.13.0.PropertyValueNotInList", "MessageSeverity": "Warning", "Resolution": "Choose a value from the enumeration list that the implementation can support and resubmit the request if the operation failed." } ] ''' Validator Results: ''' Type (ComputerSystem.v1_22_0.ComputerSystem), GET SUCCESS (time: 0:00:00.107269) ... PASS ... Elapsed time: 0:15:07 invalidPropertyValue: 62 metadataNamespaces: 4324 pass: 14323 passAction: 20 passGet: 1051 passRedfishUri: 1002 skipNoSchema: 3 skipOptional: 25582 unverifiedAdditional.complex: 21 warnDeprecated: 8 warningPresent: 83 warnings: 67 Validation has succeeded. ''' Change-Id: I56296a524b01d64adccad2d3da1757056900b6db Signed-off-by: Chris Cain <cjcain@us.ibm.com>
Diffstat (limited to 'redfish-core')
-rw-r--r--redfish-core/lib/systems.hpp60
1 files changed, 49 insertions, 11 deletions
diff --git a/redfish-core/lib/systems.hpp b/redfish-core/lib/systems.hpp
index 5f6cd8783c..2d62763ee3 100644
--- a/redfish-core/lib/systems.hpp
+++ b/redfish-core/lib/systems.hpp
@@ -37,6 +37,7 @@
#include <boost/container/flat_map.hpp>
#include <boost/system/error_code.hpp>
#include <boost/url/format.hpp>
+#include <generated/enums/computer_system.hpp>
#include <sdbusplus/asio/property.hpp>
#include <sdbusplus/message.hpp>
#include <sdbusplus/unpack_properties.hpp>
@@ -2176,25 +2177,46 @@ inline void
translatePowerMode(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
const std::string& modeValue)
{
+ using PowerMode = computer_system::PowerMode;
+
if (modeValue == "xyz.openbmc_project.Control.Power.Mode.PowerMode.Static")
{
- asyncResp->res.jsonValue["PowerMode"] = "Static";
+ asyncResp->res.jsonValue["PowerMode"] = PowerMode::Static;
}
else if (
modeValue ==
"xyz.openbmc_project.Control.Power.Mode.PowerMode.MaximumPerformance")
{
- asyncResp->res.jsonValue["PowerMode"] = "MaximumPerformance";
+ asyncResp->res.jsonValue["PowerMode"] = PowerMode::MaximumPerformance;
}
else if (modeValue ==
"xyz.openbmc_project.Control.Power.Mode.PowerMode.PowerSaving")
{
- asyncResp->res.jsonValue["PowerMode"] = "PowerSaving";
+ asyncResp->res.jsonValue["PowerMode"] = PowerMode::PowerSaving;
+ }
+ else if (
+ modeValue ==
+ "xyz.openbmc_project.Control.Power.Mode.PowerMode.BalancedPerformance")
+ {
+ asyncResp->res.jsonValue["PowerMode"] = PowerMode::BalancedPerformance;
+ }
+ else if (
+ modeValue ==
+ "xyz.openbmc_project.Control.Power.Mode.PowerMode.EfficiencyFavorPerformance")
+ {
+ asyncResp->res.jsonValue["PowerMode"] =
+ PowerMode::EfficiencyFavorPerformance;
+ }
+ else if (
+ modeValue ==
+ "xyz.openbmc_project.Control.Power.Mode.PowerMode.EfficiencyFavorPower")
+ {
+ asyncResp->res.jsonValue["PowerMode"] = PowerMode::EfficiencyFavorPower;
}
else if (modeValue ==
"xyz.openbmc_project.Control.Power.Mode.PowerMode.OEM")
{
- asyncResp->res.jsonValue["PowerMode"] = "OEM";
+ asyncResp->res.jsonValue["PowerMode"] = PowerMode::OEM;
}
else
{
@@ -2288,32 +2310,48 @@ inline void getPowerMode(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
* name associated with that string
*
* @param[in] asyncResp Shared pointer for generating response message.
- * @param[in] modeString String representing the desired PowerMode
+ * @param[in] modeValue String representing the desired PowerMode
*
* @return PowerMode value or empty string if mode is not valid
*/
inline std::string
validatePowerMode(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
- const std::string& modeString)
+ const nlohmann::json& modeValue)
{
+ using PowerMode = computer_system::PowerMode;
std::string mode;
- if (modeString == "Static")
+ if (modeValue == PowerMode::Static)
{
mode = "xyz.openbmc_project.Control.Power.Mode.PowerMode.Static";
}
- else if (modeString == "MaximumPerformance")
+ else if (modeValue == PowerMode::MaximumPerformance)
{
mode =
"xyz.openbmc_project.Control.Power.Mode.PowerMode.MaximumPerformance";
}
- else if (modeString == "PowerSaving")
+ else if (modeValue == PowerMode::PowerSaving)
{
mode = "xyz.openbmc_project.Control.Power.Mode.PowerMode.PowerSaving";
}
+ else if (modeValue == PowerMode::BalancedPerformance)
+ {
+ mode =
+ "xyz.openbmc_project.Control.Power.Mode.PowerMode.BalancedPerformance";
+ }
+ else if (modeValue == PowerMode::EfficiencyFavorPerformance)
+ {
+ mode =
+ "xyz.openbmc_project.Control.Power.Mode.PowerMode.EfficiencyFavorPerformance";
+ }
+ else if (modeValue == PowerMode::EfficiencyFavorPower)
+ {
+ mode =
+ "xyz.openbmc_project.Control.Power.Mode.PowerMode.EfficiencyFavorPower";
+ }
else
{
- messages::propertyValueNotInList(asyncResp->res, modeString,
+ messages::propertyValueNotInList(asyncResp->res, modeValue.dump(),
"PowerMode");
}
return mode;
@@ -3233,7 +3271,7 @@ inline void
boost::beast::http::field::link,
"</redfish/v1/JsonSchemas/ComputerSystem/ComputerSystem.json>; rel=describedby");
asyncResp->res.jsonValue["@odata.type"] =
- "#ComputerSystem.v1_16_0.ComputerSystem";
+ "#ComputerSystem.v1_22_0.ComputerSystem";
asyncResp->res.jsonValue["Name"] = "system";
asyncResp->res.jsonValue["Id"] = "system";
asyncResp->res.jsonValue["SystemType"] = "Physical";