diff options
author | Chris Cain <cjcain@us.ibm.com> | 2024-02-01 23:35:33 +0300 |
---|---|---|
committer | Ed Tanous <ed@tanous.net> | 2024-02-08 19:51:19 +0300 |
commit | b66551019cf3c31186877c30a91ff8622454f342 (patch) | |
tree | 9932ea0bad6ecc395568c2b6d4354bdd2994d38c /redfish-core | |
parent | 8615915cc51a468c1c0b6eabb684616d0f2abe0f (diff) | |
download | bmcweb-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.hpp | 60 |
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"; |