summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/include/usr/ipmi/ipmi_reasoncodes.H3
-rw-r--r--src/include/usr/ipmi/ipmisensor.H15
-rw-r--r--src/usr/ipmi/ipmisensor.C39
3 files changed, 55 insertions, 2 deletions
diff --git a/src/include/usr/ipmi/ipmi_reasoncodes.H b/src/include/usr/ipmi/ipmi_reasoncodes.H
index e0d01146f..1717619e5 100644
--- a/src/include/usr/ipmi/ipmi_reasoncodes.H
+++ b/src/include/usr/ipmi/ipmi_reasoncodes.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2014,2015 */
+/* Contributors Listed Below - COPYRIGHT 2014,2016 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -37,6 +37,7 @@ namespace IPMI
MOD_IPMIDCMI = 0x04, // IPMI::sensor
MOD_IPMIRT = 0x05, // rt IPMI::send/IPMI::sendrecv
MOD_IPMISRV_POSTEVENT = 0x06, // IpmiRP::postEvent
+ MOD_IPMI_PROG_SENSOR = 0x07, // IPMI::FirmwareProgressSensor
};
enum IPMIReasonCode
diff --git a/src/include/usr/ipmi/ipmisensor.H b/src/include/usr/ipmi/ipmisensor.H
index 9f57d4ded..f82a3aaf1 100644
--- a/src/include/usr/ipmi/ipmisensor.H
+++ b/src/include/usr/ipmi/ipmisensor.H
@@ -376,7 +376,7 @@ namespace SENSOR
* @return Errorlog handle
*
*/
- errlHndl_t sendSetSensorReading(
+ virtual errlHndl_t sendSetSensorReading(
setSensorReadingRequest * i_data);
/**
@@ -495,6 +495,19 @@ namespace SENSOR
errlHndl_t setBootProgressPhase(
INITSERVICE::firmwareProgressPhase i_phase);
+
+ /**
+ *
+ * @brief Synchronous implementation of sendSetSensor Reading used for
+ * avoiding a race condition.
+ *
+ * @param[in] i_data - the ipmi message data
+ *
+ * @return Errorlog handle
+ */
+ errlHndl_t sendSetSensorReading(
+ setSensorReadingRequest * i_data );
+
private:
// @enum firmwareProgressOfsets
//
diff --git a/src/usr/ipmi/ipmisensor.C b/src/usr/ipmi/ipmisensor.C
index 4aa1c9f4b..d4eb6560f 100644
--- a/src/usr/ipmi/ipmisensor.C
+++ b/src/usr/ipmi/ipmisensor.C
@@ -540,6 +540,45 @@ namespace SENSOR
};
//
+ // sendSetSensorReading
+ //
+ errlHndl_t FirmwareProgressSensor::sendSetSensorReading(
+ setSensorReadingRequest * i_data )
+ {
+ size_t l_len = sizeof( setSensorReadingRequest );
+ IPMI::completion_code cc = IPMI::CC_UNKBAD;
+
+ //i_data will hold the response when this returns
+ errlHndl_t l_err = sendrecv(IPMI::set_sensor_reading(),
+ cc,
+ l_len,
+ (uint8_t*&)i_data );
+ // If no error, check completion code
+ if( (l_err == NULL) && (cc != IPMI::CC_OK) )
+ {
+ TRACFCOMP(g_trac_ipmi, "bad completion code from BMC=0x%x",cc);
+
+ /*@
+ * @errortype ERRL_SEV_INFORMATIONAL
+ * @moduleid IPMI::MOD_IPMI_PROG_SENSOR
+ * @reasoncode IPMI::RC_SET_SENSOR_FAILURE
+ * @userdata1 BMC IPMI Completion code.
+ * @devdesc Request to set the firmware progress
+ * sensor failed.
+ */
+ l_err = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_INFORMATIONAL,
+ IPMI::MOD_IPMI_PROG_SENSOR,
+ IPMI::RC_SET_SENSOR_FAILURE,
+ static_cast<uint64_t>(cc),
+ 0,
+ true );
+ l_err->collectTrace(IPMI_COMP_NAME);
+ }
+ return l_err;
+ }
+
+ //
// RebootCountSensor constructor - uses system target
//
RebootCountSensor::RebootCountSensor()
OpenPOWER on IntegriCloud