summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarri Devender Rao <devenrao@in.ibm.com>2018-01-22 05:55:10 -0600
committerTom Joseph <tomjoseph@in.ibm.com>2018-02-06 05:21:43 +0000
commit9c966e01eac6d27524ae0289c38ec0b7360e6dee (patch)
tree4ce4f029ca8916db21698984a1e2f5eb41bc275c
parent66c5fda293759e993c18812cac4620a210387dba (diff)
downloadphosphor-host-ipmid-9c966e01eac6d27524ae0289c38ec0b7360e6dee.tar.gz
phosphor-host-ipmid-9c966e01eac6d27524ae0289c38ec0b7360e6dee.zip
DCMI: Populate response buffer with power reading
Populate the IPMI response buffer with the power value read from the total_power sensor. Resolves openbmc/openbmc#2625 Change-Id: Ib494e40aa37aa16064a4471f79bd7f9d5c0e5c8c Signed-off-by: Marri Devender Rao <devenrao@in.ibm.com>
-rw-r--r--dcmihandler.cpp27
1 files changed, 26 insertions, 1 deletions
diff --git a/dcmihandler.cpp b/dcmihandler.cpp
index 3c77ed5..11befdc 100644
--- a/dcmihandler.cpp
+++ b/dcmihandler.cpp
@@ -1057,10 +1057,22 @@ ipmi_ret_t getPowerReading(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
ipmi_data_len_t data_len, ipmi_context_t context)
{
ipmi_ret_t rc = IPMI_CC_OK;
+ auto requestData = reinterpret_cast<const dcmi::GetPowerReadingRequest*>
+ (request);
+ auto responseData = reinterpret_cast<dcmi::GetPowerReadingResponse*>
+ (response);
+
+ if (requestData->groupID != dcmi::groupExtId)
+ {
+ *data_len = 0;
+ return IPMI_CC_INVALID_FIELD_REQUEST;
+ }
+
sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()};
+ int64_t power = 0;
try
{
- getPowerReading(bus);
+ power = getPowerReading(bus);
}
catch (InternalFailure& e)
{
@@ -1069,6 +1081,19 @@ ipmi_ret_t getPowerReading(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
entry("PROPERTY=%s", SENSOR_VALUE_PROP));
return IPMI_CC_UNSPECIFIED_ERROR;
}
+ responseData->groupID = dcmi::groupExtId;
+
+ // TODO: openbmc/openbmc#2819
+ // Minumum, Maximum, Average power, TimeFrame, TimeStamp,
+ // PowerReadingState readings need to be populated
+ // after Telemetry changes.
+ uint16_t totalPower = static_cast<uint16_t>(power);
+ responseData->currentPower = totalPower;
+ responseData->minimumPower = totalPower;
+ responseData->maximumPower = totalPower;
+ responseData->averagePower = totalPower;
+
+ *data_len = sizeof(*responseData);
return rc;
}
OpenPOWER on IntegriCloud