summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDonald Washburn <dwashbur@us.ibm.com>2017-06-14 13:08:22 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-06-27 13:21:34 -0400
commit31d097409bd233008676e4779c9e6a7582e8156f (patch)
treeca1c9afa82e0a5aa987b545f160cdbeb37cc4517 /src
parentd408402dfb499755ed265496498fabb5b0400ff0 (diff)
downloadtalos-hostboot-31d097409bd233008676e4779c9e6a7582e8156f.tar.gz
talos-hostboot-31d097409bd233008676e4779c9e6a7582e8156f.zip
Replaced calls to bmc for sensor type with static information.
The sendErrLogToBMC function was calling to the bmc in order to determine the type of a sensor based upon a sensor number. It was determined that the sensor type can be obtained from the sensor number by data loaded during initialization via the TARGETING namespace. The ipmi call from SenorBase::getSensorType was removed from the sendErrLogToBMC function and replaced with a call to IpmiConfigLookup::getSensorType. The getSensorType function from the new IpmiConfigLookup class retrieves sensor data from target attributes and as such does not call the bmc for the type information. * Added the new IpmiConfigLookup class in the IPMI namespace. This class provides static methods to retrive sensor data provided by the IPMI_SENSOR target attribute. In addition to sensor type, the sensor entity id and sensor name can be obtined from this class based upon a sensor number. * Changed sendErrLogToBMC to call IpmiConfigLookup::getSensorType instead of Sensor::SensorBase::getSensorInfo. RTC: 164493 Change-Id: Ie8e7fa5c37fa972d6cecd1e4b69e2d0cb7504533 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/42128 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Prachi Gupta <pragupta@us.ibm.com> Reviewed-by: ILYA SMIRNOV <ismirno@us.ibm.com> Reviewed-by: Richard J. Knight <rjknight@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r--src/include/usr/ipmi/ipmi_reasoncodes.H18
-rw-r--r--src/include/usr/ipmi/ipmiconfiglookup.H244
-rw-r--r--src/include/usr/targeting/targplatutil.H2
-rw-r--r--src/usr/errl/errlmanager_common.C18
-rw-r--r--src/usr/ipmi/ipmi.mk3
-rw-r--r--src/usr/ipmi/ipmiconfiglookup.C384
-rw-r--r--src/usr/targeting/targplatutil.C2
7 files changed, 651 insertions, 20 deletions
diff --git a/src/include/usr/ipmi/ipmi_reasoncodes.H b/src/include/usr/ipmi/ipmi_reasoncodes.H
index f4f08cf65..c8931bdb0 100644
--- a/src/include/usr/ipmi/ipmi_reasoncodes.H
+++ b/src/include/usr/ipmi/ipmi_reasoncodes.H
@@ -32,13 +32,16 @@ namespace IPMI
{
enum IPMIModuleId
{
- MOD_IPMISRV_SEND = 0x01, // IPMI::send/IPMI::sendrecv
- MOD_IPMISRV_REPLY = 0x02, // IPMI::respond
- MOD_IPMISENSOR = 0x03, // IPMI::sensor
- MOD_IPMIDCMI = 0x04, // IPMI::sensor
- MOD_IPMIRT = 0x05, // rt IPMI::send/IPMI::sendrecv
- MOD_IPMISRV_POSTEVENT = 0x06, // IpmiRP::postEvent
- MOD_IPMIFRU_INV = 0x07, // IPMI:fruInventory
+ MOD_IPMISRV_SEND = 0x01, // IPMI::send/IPMI::sendrecv
+ MOD_IPMISRV_REPLY = 0x02, // IPMI::respond
+ MOD_IPMISENSOR = 0x03, // IPMI::sensor
+ MOD_IPMIDCMI = 0x04, // IPMI::sensor
+ MOD_IPMIRT = 0x05, // rt IPMI::send/IPMI::sendrecv
+ MOD_IPMISRV_POSTEVENT = 0x06, // IpmiRP::postEvent
+ MOD_IPMIFRU_INV = 0x07, // IPMI:fruInventory
+ MOD_IPMISENSOR_TYPE = 0x08, // IPMI::getSensorType
+ MOD_IPMISENSOR_ENTITY_ID = 0x09, // IPMI::getSensorEntityId
+ MOD_IPMISENSOR_NAME = 0x0A, // IPMI::getSensorName
};
enum IPMIReasonCode
@@ -57,6 +60,7 @@ namespace IPMI
RC_GET_SENSOR_TYPE_CMD_FAILED = IPMI_COMP_ID | 0x0c,
RC_SENSOR_NOT_FOUND = IPMI_COMP_ID | 0x0d,
RC_INVALID_VPD_DATA = IPMI_COMP_ID | 0x0e,
+ RC_INVALID_SENSOR_NUMBER = IPMI_COMP_ID | 0x0f,
};
};
diff --git a/src/include/usr/ipmi/ipmiconfiglookup.H b/src/include/usr/ipmi/ipmiconfiglookup.H
new file mode 100644
index 000000000..bc3290096
--- /dev/null
+++ b/src/include/usr/ipmi/ipmiconfiglookup.H
@@ -0,0 +1,244 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/include/usr/ipmi/ipmiconfiglookup.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2017 */
+/* [+] International Business Machines Corp. */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+#ifndef __IPMI_IPMICONFIG_LOOKUP_H
+#define __IPMI_IPMICONFIG_LOOKUP_H
+
+
+#include <errl/errlentry.H>
+#include <targeting/common/target.H>
+
+namespace IPMI
+{
+
+/**
+ * @brief - Classs to read IPMI sensor information from the targetting
+ * namespace. This class does not send IPMI messages but rather
+ * looks up static configuration data.
+ *
+ */
+class IpmiConfigLookup
+{
+ public:
+
+ /**
+ * @brief getSensorType. Returns the sensor type of a sensor identified
+ * by a sensor number.
+ *
+ * @param[in] i_sensorNumber. The IPMI sensor whose information we wish
+ * to gather.
+ *
+ * @param[out] o_sensorType. The sensor type as read from the
+ * IPMI_SENSOR_ARRAY.
+ *
+ * @param[in] i_sensorTarget. A Target to use for looking up sensor
+ * information. If this parameter is equal to nullptr
+ * then all targets will be searched for the sensor that
+ * matches the supplied sensor number.
+ *
+ * @return An errlHndl_t (aka ErrlEntry*) if an error occurred. If
+ * the call was successful, the method returns a NULL
+ * pointer.
+ *
+ */
+ static errlHndl_t getSensorType(uint32_t i_sensorNumber,
+ uint8_t & o_sensorType,
+ TARGETING::Target * i_sensorTarget = nullptr
+ );
+
+ /**
+ * @brief getEntityId. Returns a sensor entity id of a sensor identified
+ * by a sensor number.
+ *
+ * @param[in] i_sensorNumber. The IPMI sensor whose information we wish
+ * to gather.
+ *
+ * @param[out] o_entityId. The sensor entity id as read from the
+ * IPMI_SENSOR_ARRAY.
+ *
+ * @param[in] i_sensorTarget. A Target to use for looking up sensor
+ * information. If this parameter is equal to nullptr
+ * then all targets will be searched for the sensor that
+ * matches the supplied sensor number.
+ *
+ * @return An errlHndl_t (aka ErrlEntry*) if an error occurred. If
+ * the call was successful, the method returns a NULL
+ * pointer.
+ *
+ */
+ static errlHndl_t getEntityId(uint32_t i_sensorNumber,
+ uint8_t & o_entityId,
+ TARGETING::Target * i_sensorTarget = nullptr
+ );
+
+ /**
+ * @brief getSensorName. Returns the sensor name of a sensor identified by
+ * by a sensor number.
+ *
+ * @param[in] i_sensorNumber. The IPMI sensor whose information we wish
+ * to gather.
+ *
+ * @param[out] o_sensorName. Optional parameter to the sensor name.
+ * The sensor name by definition will be
+ * (SENSOR_TYPE << 16) | (ENTITY_ID).
+ * Pass nullptr if the caller is not interested in obtaining
+ * this value. At least one of o_sensorType, o_entityId or
+ * o_sensorName must be non-null
+ *
+ * @param[in] i_sensorTarget. A Target to use for looking up sensor
+ * information. If this parameter is equal to nullptr
+ * then all targets will be searched for the sensor that
+ * matches the supplied sensor number.
+ *
+ * @return An errlHndl_t (aka ErrlEntry*) if an error occurred. If
+ * the call was successful, the method returns a NULL
+ * pointer.
+ *
+ */
+ static errlHndl_t getSensorName(uint32_t i_sensorNumber,
+ TARGETING::SENSOR_NAME & o_sensorName,
+ TARGETING::Target * i_sensorTarget = nullptr
+ );
+
+ /**
+ * @brief getSensorType. Parses a SENSOR_NAME for the sensor type
+ *
+ * @param[in] i_sensorName. SENSOR_NAME (SENSOR_TYPE | ENTITY_ID)
+ *
+ * @param[out] o_sensorType. The sensor type parsed from the SENSOR_NAME
+ *
+ */
+ inline static void getSensorType(TARGETING::SENSOR_NAME i_sensorName,
+ uint8_t & o_sensorType
+ )
+ {
+ o_sensorType = static_cast<uint8_t>(i_sensorName >> 8 & 0x000000FF);
+ }
+
+ /**
+ * @brief getEntityId. Parses a SENSOR_NAME for the entity id.
+ *
+ * @param[in] i_sensorName. SENSOR_NAME (SENSOR_TYPE | ENTITY_ID)
+ *
+ * @param[out] o_sensorType. The sensor type parsed from the SENSOR_NAME
+ */
+ inline static void getEntityId(TARGETING::SENSOR_NAME i_sensorName,
+ uint8_t & o_entityId
+ )
+ {
+ o_entityId = static_cast<uint8_t>(i_sensorName & 0x000000FF);
+ }
+
+ private:
+ /**
+ * @brief Returns parsed IPMI_SENSOR_ARRAY attribute information based upon
+ * a given sensor number.
+ *
+ * @param[in] i_sensorNumber. The IPMI sensor whose information we wish
+ * to gather.
+ *
+ * @param[out] o_sensorType. Optional parameter to the sensor type as read
+ * from the IPMI_SENSOR_ARRAY. Pass nullptr if the caller is not
+ * interested in obtaining this value. At least one of
+ * o_sensorType, o_entityId or o_sensorName must be non-null.
+ *
+ * @param[out] o_entityId. Optional parameter to the entity id associated with
+ * the sensor as read from the IPMI_SENSOR_ARRAY. Pass nullptr if
+ * the caller is not interested in obtaining this value. At least
+ * one of o_sensorType, o_entityId or o_sensorName must be
+ * non-null.
+ *
+ * @param[out] o_sensorName. Optional parameter to the sensor name. The sensor
+ * name by definition will be (SENSOR_TYPE << 16) | (ENTITY_ID).
+ * Pass nullptr if the caller is not interested in obtaining this
+ * value. At least one of o_sensorType, o_entityId or o_sensorName
+ * must be non-null.
+ *
+ * @param[in] i_sensorTarget. A Target to use for looking up sensor information.
+ * If this parameter is equal to nullptr all targets will be searched
+ * for the sensor that matches the supplied sensor number.
+ *
+ * @return True if the sensor was found in the IPMI_SENSOR_ARRAY attribute,
+ * false otherwise.
+ */
+ static bool getIPMISensorInfo(uint32_t i_sensorNumber,
+ uint8_t * o_sensorType,
+ uint8_t * o_entityId = nullptr,
+ TARGETING::SENSOR_NAME * o_sensorName = nullptr,
+ TARGETING::Target * i_sensorTarget = nullptr
+ );
+
+/**
+ * @brief Determines whether the passed in target has the IPMI_SENSOR
+ * attribute.
+ *
+ * @param[in] i_tgt. The target to test.
+ *
+ * @reurn True if the target has the IPMI_SENSOR attribute, false otherwise.
+ *
+ */
+ inline static bool doesTargetHaveIpmiSensorAttr(TARGETING::Target * i_tgt)
+ {
+ if(!i_tgt)
+ {
+ return false;
+ }
+
+ TARGETING::AttributeTraits<TARGETING::ATTR_IPMI_SENSORS>::Type
+ l_ipmiArray;
+ return i_tgt->tryGetAttr<TARGETING::ATTR_IPMI_SENSORS>(l_ipmiArray);
+ }
+
+/**
+ * @brief Given a passed in target, looks up IPMI_SENSOR data based upon
+ * the passed in sensor number.
+ *
+ * @param[in] i_target. The target whose IPMI_SENSOR attribute will be
+ * searched for information based upon the passed
+ * in sensor number.
+ *
+ * @param[in] i_sensorNumber. The IPMI sensor whose information we wish
+ * to gather.
+ *
+ * @param[out] o_sensorType. The sensor type as read from the
+ * from the IPMI_SENSOR_ARRAY.
+ *
+ * @param[out] o_entityId. The entity id associated with
+ * the sensor as read from the IPMI_SENSOR_ARRAY.
+ *
+ * @param[out] o_sensorName. The sensor name as read from
+ * the IPMI_SENSOR_ARRAY.
+ *
+ */
+ static bool lookupIPMISensorInfo(TARGETING::Target * i_target,
+ uint32_t i_sensorNumber,
+ uint8_t& o_sensorType,
+ uint8_t& o_entityId,
+ TARGETING::SENSOR_NAME& o_sensorName
+ );
+};
+
+}
+
+#endif
diff --git a/src/include/usr/targeting/targplatutil.H b/src/include/usr/targeting/targplatutil.H
index 40a587dec..198be1423 100644
--- a/src/include/usr/targeting/targplatutil.H
+++ b/src/include/usr/targeting/targplatutil.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2013,2015 */
+/* Contributors Listed Below - COPYRIGHT 2013,2017 */
/* [+] International Business Machines Corp. */
/* */
/* */
diff --git a/src/usr/errl/errlmanager_common.C b/src/usr/errl/errlmanager_common.C
index 385042748..a0a54da5e 100644
--- a/src/usr/errl/errlmanager_common.C
+++ b/src/usr/errl/errlmanager_common.C
@@ -29,6 +29,7 @@
#ifdef CONFIG_BMC_IPMI
#include <ipmi/ipmisel.H>
#include <ipmi/ipmisensor.H>
+#include <ipmi/ipmiconfiglookup.H>
#endif
#include <errl/errlentry.H>
#include <sys/mm.h>
@@ -711,21 +712,18 @@ void ErrlManager::sendErrLogToBmc(errlHndl_t &io_err, bool i_sendSels)
// grab the sensor type so the bmc knows how to use the
// offset
- uint8_t unused = 0;
- errlHndl_t e =
- SENSOR::SensorBase::getSensorType(
- l_sensorNumber[j],
- l_sensorType[j],unused);
-
- if( e )
+ errlHndl_t l_errl =
+ IPMI::IpmiConfigLookup::getSensorType(l_sensorNumber[j],
+ l_sensorType[j]
+ );
+ if(l_errl)
{
TRACFCOMP(g_trac_errl,
ERR_MRK"Failed to get sensor type for sensor %d",
l_sensorNumber[j]);
l_sensorType[j] = 0;
- // since we are in the commit path, lets just delete
- // this error and move on.
- delete e;
+
+ delete l_errl;
}
// this call will modify the sensor if any procedure
diff --git a/src/usr/ipmi/ipmi.mk b/src/usr/ipmi/ipmi.mk
index 4b8b244e3..9e4459543 100644
--- a/src/usr/ipmi/ipmi.mk
+++ b/src/usr/ipmi/ipmi.mk
@@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2015
+# Contributors Listed Below - COPYRIGHT 2015,2017
# [+] International Business Machines Corp.
#
#
@@ -26,3 +26,4 @@
OBJS += ipmisel.o
OBJS += ipmisensor.o
OBJS += ipmidcmi.o
+OBJS += ipmiconfiglookup.o
diff --git a/src/usr/ipmi/ipmiconfiglookup.C b/src/usr/ipmi/ipmiconfiglookup.C
new file mode 100644
index 000000000..0cea60a55
--- /dev/null
+++ b/src/usr/ipmi/ipmiconfiglookup.C
@@ -0,0 +1,384 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/ipmi/ipmiconfiglookup.C $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2017 */
+/* [+] International Business Machines Corp. */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+#include <ipmi/ipmiconfiglookup.H>
+
+#include <algorithm>
+#include <assert.h>
+
+#include <attributeenums.H>
+#include <ipmi/ipmi_reasoncodes.H>
+#include <targeting/targplatutil.H>
+#include <targeting/common/targetservice.H>
+
+extern trace_desc_t * g_trac_ipmi;
+
+namespace IPMI
+{
+
+//-----------------------------------------------------------------------------
+// Private method used to lookup sensor information from the IPMI_SENSOR_ARRAY
+// attribute of the i_target parameter.
+//
+// Returns true if the sensor was found, false otherwise.
+//-----------------------------------------------------------------------------
+bool IpmiConfigLookup::lookupIPMISensorInfo(TARGETING::Target * i_target,
+ uint32_t i_sensorNumber,
+ uint8_t& o_sensorType,
+ uint8_t& o_entityId,
+ TARGETING::SENSOR_NAME& o_sensorName
+ )
+{
+ using IPMI_ARRAY_ELEMENT = uint16_t[2];
+ bool l_result{false};
+
+ assert(nullptr != i_target);
+ assert(TARGETING::UTIL::INVALID_IPMI_SENSOR != i_sensorNumber);
+
+ //Get the IPMI_SENSOR_ARRAY attribute from i_target.
+ TARGETING::AttributeTraits<TARGETING::ATTR_IPMI_SENSORS>::Type l_ipmiArray;
+ if(!i_target->tryGetAttr<TARGETING::ATTR_IPMI_SENSORS>(l_ipmiArray))
+ {
+ return l_result;
+ }
+
+ //Search the IPMI_SENSOR_ARRAY for the desired sensor.
+ uint32_t elementCount = (sizeof(l_ipmiArray)/sizeof(l_ipmiArray[0]));
+ const IPMI_ARRAY_ELEMENT * begin = &l_ipmiArray[0];
+ const IPMI_ARRAY_ELEMENT * end = &l_ipmiArray[elementCount];
+ const IPMI_ARRAY_ELEMENT * itr{nullptr};
+
+ itr = std::find_if(begin,
+ end,
+ [i_sensorNumber] (const IPMI_ARRAY_ELEMENT& a)
+ {
+ return a[TARGETING::IPMI_SENSOR_ARRAY_NUMBER_OFFSET]
+ == i_sensorNumber;
+ }
+ );
+
+ if(itr != end)
+ {
+ l_result = true;
+ uint16_t l_sensorName = (*itr)
+ [TARGETING::IPMI_SENSOR_ARRAY_NAME_OFFSET];
+ o_sensorName = static_cast<TARGETING::SENSOR_NAME>(l_sensorName);
+ o_sensorType = static_cast<uint8_t>((l_sensorName >> 8) & 0x00FF);
+ o_entityId = static_cast<uint8_t>(l_sensorName & 0x00FF);
+ }
+
+ return l_result;
+}
+
+
+//--------------------------------------------------------------------------
+//Given a sensor number, lookup and parse SENSOR_NAME into SENSOR_TYPE
+//and ENTITY_ID values.
+//--------------------------------------------------------------------------
+bool IpmiConfigLookup::getIPMISensorInfo(uint32_t i_sensorNumber,
+ uint8_t * o_sensorType,
+ uint8_t * o_entityId,
+ TARGETING::SENSOR_NAME * o_sensorName,
+ TARGETING::Target * i_sensorTarget
+ )
+{
+ bool l_result{false};
+
+ //Ensure that the sensor number is not the invalid id.
+ assert(TARGETING::UTIL::INVALID_IPMI_SENSOR != i_sensorNumber);
+
+ TARGETING::SENSOR_NAME l_sensorName =
+ static_cast<TARGETING::SENSOR_NAME>(0);
+ uint8_t l_sensorType = TARGETING::SENSOR_TYPE_NA;
+ uint8_t l_entityId = TARGETING::ENTITY_ID_NA;
+
+ //Ensure that at least one optional out parameter was given.
+ assert(nullptr != o_sensorType ||
+ nullptr != o_sensorName ||
+ nullptr != o_entityId);
+
+ //If the caller passed in a target then find sensor data within the
+ //context of the passed in target.
+ if(i_sensorTarget)
+ {
+ if(doesTargetHaveIpmiSensorAttr(i_sensorTarget))
+ {
+ l_result = lookupIPMISensorInfo(i_sensorTarget,
+ i_sensorNumber,
+ l_sensorType,
+ l_entityId,
+ l_sensorName);
+ }
+ }
+ else
+ {
+ //The caller did not supply a target context for the sensor.
+ //Search for the sensor amoung all targets.
+ for(auto itr = TARGETING::targetService().begin();
+ itr != TARGETING::targetService().end(); ++itr)
+ {
+ if(doesTargetHaveIpmiSensorAttr(*itr))
+ {
+ l_result = lookupIPMISensorInfo((*itr),
+ i_sensorNumber,
+ l_sensorType,
+ l_entityId,
+ l_sensorName);
+ if(l_result)
+ {
+ break;
+ }
+ }
+ }
+ }
+
+ //set any out parameters that are desired by the caller.
+ if(o_sensorName)
+ {
+ *o_sensorName = l_sensorName;
+ }
+
+ if(o_sensorType)
+ {
+ *o_sensorType = l_sensorType;
+ }
+
+ if(o_entityId)
+ {
+ *o_entityId = l_entityId;
+ }
+
+ return l_result;
+}
+
+//------------------------------------------------------------------
+errlHndl_t IpmiConfigLookup::getSensorType(uint32_t i_sensorNumber,
+ uint8_t & o_sensorType,
+ TARGETING::Target * i_sensorTarget
+ )
+{
+ errlHndl_t l_errl{};
+
+ //Ensure that the sensor number is not the invalid id.
+ if(TARGETING::UTIL::INVALID_IPMI_SENSOR == i_sensorNumber)
+ {
+ TRACFCOMP(g_trac_ipmi,
+ ERR_MRK"The i_sensorNumber parameter "
+ "is the invalid sensor number (%X).",
+ i_sensorNumber
+ );
+ /*@
+ * @errortype ERRL_SEV_UNRECOVERABLE
+ * @moduleid IPMI::MOD_IPMISENSOR_TYPE
+ * @reasoncode IPMI::RC_INVALID_SENSOR_NUMBER
+ * @userdata1 IPMI Sensor Number
+ * @userdata2 <unused>
+ * @devdesc The passed in sensor number is not valid.
+ * @custdesc The passed in sensor number is not valid.
+ */
+ l_errl = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ IPMI::MOD_IPMISENSOR_TYPE,
+ IPMI::RC_INVALID_SENSOR_NUMBER,
+ i_sensorNumber,
+ 0,
+ false);
+ return l_errl;
+ }
+
+ bool l_rc = getIPMISensorInfo(i_sensorNumber,
+ &o_sensorType,
+ nullptr,
+ nullptr,
+ i_sensorTarget
+ );
+
+ if(!l_rc)
+ {
+
+ TRACFCOMP(g_trac_ipmi,
+ ERR_MRK"Did not find a sensor with number %X.",
+ i_sensorNumber);
+
+ /*@
+ * @errortype ERRL_SEV_UNRECOVERABLE
+ * @moduleid IPMI::MOD_IPMISENSOR_TYPE
+ * @reasoncode IPMI::RC_SENSOR_NOT_FOUND
+ * @userdata1 IPMI Sensor Number
+ * @userdata2 <unused>
+ * @devdesc The sensor could not be found based upon
+ * the sensor number.
+ * @custdesc Unable to determine sensor information.
+ */
+ l_errl = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ IPMI::MOD_IPMISENSOR_TYPE,
+ IPMI::RC_SENSOR_NOT_FOUND,
+ i_sensorNumber,
+ 0,
+ false);
+ }
+
+ return l_errl;
+}
+
+//--------------------------------------------------------------------------
+errlHndl_t IpmiConfigLookup::getEntityId(uint32_t i_sensorNumber,
+ uint8_t & o_entityId,
+ TARGETING::Target * i_sensorTarget
+ )
+{
+ errlHndl_t l_errl{};
+
+ if(TARGETING::UTIL::INVALID_IPMI_SENSOR == i_sensorNumber)
+ {
+
+ TRACFCOMP(g_trac_ipmi,
+ ERR_MRK"The i_sensorNumber parameter "
+ "is an invalid sensor number (%X).",
+ i_sensorNumber
+ );
+ /*@
+ * @errortype ERRL_SEV_UNRECOVERABLE
+ * @moduleid IPMI::MOD_IPMISENSOR_ENTITY_ID
+ * @reasoncode IPMI::RC_INVALID_SENSOR_NUMBER
+ * @userdata1 IPMI Sensor Number
+ * @userdata2 <unused>
+ * @devdesc The passed in sensor number is not valid.
+ * @custdesc The passed in sensor number is not valid.
+ */
+ l_errl = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ IPMI::MOD_IPMISENSOR_ENTITY_ID,
+ IPMI::RC_INVALID_SENSOR_NUMBER,
+ i_sensorNumber,
+ 0,
+ false);
+ return l_errl;
+ }
+
+ bool l_rc = getIPMISensorInfo(i_sensorNumber,
+ nullptr,
+ &o_entityId,
+ nullptr,
+ i_sensorTarget
+ );
+
+ if(!l_rc)
+ {
+
+ TRACFCOMP(g_trac_ipmi,
+ ERR_MRK"Did not find a sensor with number %X.",
+ i_sensorNumber);
+
+ /*@
+ * @errortype ERRL_SEV_UNRECOVERABLE
+ * @moduleid IPMI::MOD_IPMISENSOR_ENTITY_ID
+ * @reasoncode IPMI::RC_SENSOR_NOT_FOUND
+ * @userdata1 IPMI Sensor Number
+ * @userdata2 <unused>
+ * @devdesc The sensor could not be found based upon
+ * the sensor number.
+ * @custdesc Unable to determine sensor information.
+ */
+ l_errl = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ IPMI::MOD_IPMISENSOR_ENTITY_ID,
+ IPMI::RC_SENSOR_NOT_FOUND,
+ i_sensorNumber,
+ 0,
+ false);
+ }
+
+ return l_errl;
+}
+
+//-----------------------------------------------------------------------
+errlHndl_t IpmiConfigLookup::getSensorName(uint32_t i_sensorNumber,
+ TARGETING::SENSOR_NAME & o_sensorName,
+ TARGETING::Target * i_sensorTarget
+ )
+{
+ errlHndl_t l_errl{};
+
+ if(TARGETING::UTIL::INVALID_IPMI_SENSOR == i_sensorNumber)
+ {
+
+ TRACFCOMP(g_trac_ipmi,
+ ERR_MRK"The i_sensorNumber parameter "
+ "is an invalid sensor number (%X).",
+ i_sensorNumber
+ );
+
+ /*@
+ * @errortype ERRL_SEV_UNRECOVERABLE
+ * @moduleid IPMI::MOD_IPMISENSOR_NAME
+ * @reasoncode IPMI::RC_INVALID_SENSOR_NUMBER
+ * @userdata1 IPMI Sensor Number
+ * @userdata2 <unused>
+ * @devdesc The passed in sensor number is not valid.
+ * @custdesc The passed in sensor number is not valid.
+ */
+ l_errl = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ IPMI::MOD_IPMISENSOR_NAME,
+ IPMI::RC_INVALID_SENSOR_NUMBER,
+ i_sensorNumber,
+ 0,
+ false);
+ return l_errl;
+ }
+
+ bool l_rc = getIPMISensorInfo(i_sensorNumber,
+ nullptr,
+ nullptr,
+ &o_sensorName,
+ i_sensorTarget
+ );
+
+ if(!l_rc)
+ {
+
+ TRACFCOMP(g_trac_ipmi,
+ ERR_MRK"Did not find a sensor with number %X.",
+ i_sensorNumber);
+
+ /*@
+ * @errortype ERRL_SEV_UNRECOVERABLE
+ * @moduleid IPMI::MOD_IPMISENSOR_NAME
+ * @reasoncode IPMI::RC_SENSOR_NOT_FOUND
+ * @userdata1 IPMI Sensor Number
+ * @userdata2 <unused>
+ * @devdesc The sensor could not be found based upon
+ * the sensor number.
+ * @custdesc Unable to determine sensor information.
+ */
+ l_errl = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ IPMI::MOD_IPMISENSOR_NAME,
+ IPMI::RC_SENSOR_NOT_FOUND,
+ i_sensorNumber,
+ 0,
+ false);
+ }
+
+ return l_errl;
+}
+
+} //End namespace
+
diff --git a/src/usr/targeting/targplatutil.C b/src/usr/targeting/targplatutil.C
index a1b483473..5ecad55b9 100644
--- a/src/usr/targeting/targplatutil.C
+++ b/src/usr/targeting/targplatutil.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2013,2015 */
+/* Contributors Listed Below - COPYRIGHT 2013,2017 */
/* [+] International Business Machines Corp. */
/* */
/* */
OpenPOWER on IntegriCloud