summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/include/usr/ipmi/ipmi_reasoncodes.H27
-rw-r--r--src/include/usr/ipmi/ipmisensor.H19
-rw-r--r--src/usr/errl/errlmanager_common.C23
-rw-r--r--src/usr/hwas/hwasPlatCallout.C10
-rw-r--r--src/usr/ipmi/ipmidcmi.C11
-rw-r--r--src/usr/ipmi/ipmisensor.C249
-rw-r--r--src/usr/targeting/common/xmltohb/attribute_types_hb.xml169
7 files changed, 250 insertions, 258 deletions
diff --git a/src/include/usr/ipmi/ipmi_reasoncodes.H b/src/include/usr/ipmi/ipmi_reasoncodes.H
index 8040f934b..351f28909 100644
--- a/src/include/usr/ipmi/ipmi_reasoncodes.H
+++ b/src/include/usr/ipmi/ipmi_reasoncodes.H
@@ -40,19 +40,20 @@ namespace IPMI
enum IPMIReasonCode
{
- RC_INVALID_QRESPONSE = IPMI_COMP_ID | 0x01,
- RC_INVALID_SENDRECV = IPMI_COMP_ID | 0x02,
- RC_INVALID_SEND = IPMI_COMP_ID | 0x03,
- RC_WAITER_NOT_FOUND = IPMI_COMP_ID | 0x04,
- RC_ASYNC_BAD_CC = IPMI_COMP_ID | 0x05,
- RC_INVALID_SENSOR_CMD = IPMI_COMP_ID | 0x06,
- RC_SENSOR_NOT_SETTABLE = IPMI_COMP_ID | 0x07,
- RC_EVENT_DATA_NOT_SETTABLE = IPMI_COMP_ID | 0x08,
- RC_SENSOR_NOT_PRESENT = IPMI_COMP_ID | 0x09,
- RC_SET_SENSOR_FAILURE = IPMI_COMP_ID | 0x0a,
- RC_READ_EVENT_FAILURE = IPMI_COMP_ID | 0x0b,
- RC_DCMI_CMD_FAILED = IPMI_COMP_ID | 0x0c,
- RC_SENSOR_READING_NOT_AVAIL = IPMI_COMP_ID | 0x0d,
+ RC_INVALID_QRESPONSE = IPMI_COMP_ID | 0x01,
+ RC_INVALID_SENDRECV = IPMI_COMP_ID | 0x02,
+ RC_INVALID_SEND = IPMI_COMP_ID | 0x03,
+ RC_WAITER_NOT_FOUND = IPMI_COMP_ID | 0x04,
+ RC_ASYNC_BAD_CC = IPMI_COMP_ID | 0x05,
+ RC_INVALID_SENSOR_CMD = IPMI_COMP_ID | 0x06,
+ RC_SENSOR_NOT_SETTABLE = IPMI_COMP_ID | 0x07,
+ RC_EVENT_DATA_NOT_SETTABLE = IPMI_COMP_ID | 0x08,
+ RC_SENSOR_NOT_PRESENT = IPMI_COMP_ID | 0x09,
+ RC_SET_SENSOR_FAILURE = IPMI_COMP_ID | 0x0a,
+ RC_READ_EVENT_FAILURE = IPMI_COMP_ID | 0x0b,
+ RC_DCMI_CMD_FAILED = IPMI_COMP_ID | 0x0c,
+ RC_SENSOR_READING_NOT_AVAIL = IPMI_COMP_ID | 0x0d,
+ RC_GET_SENSOR_TYPE_CMD_FAILED = IPMI_COMP_ID | 0x0e,
};
};
diff --git a/src/include/usr/ipmi/ipmisensor.H b/src/include/usr/ipmi/ipmisensor.H
index f65938c45..7b4e3fab2 100644
--- a/src/include/usr/ipmi/ipmisensor.H
+++ b/src/include/usr/ipmi/ipmisensor.H
@@ -45,6 +45,8 @@
namespace SENSOR
{
+ const uint8_t INVALID_TYPE = 0xFF;
+
/**
* @enum procStatusSensorOffsets
* Sensor specific completion codes, defined in IPMI Spec.
@@ -204,7 +206,7 @@ namespace SENSOR
* @par Detailed Description:
*/
SensorBase(TARGETING::SENSOR_NAME i_name,
- TARGETING::Target * i_target);
+ TARGETING::ConstTargetHandle_t i_target);
/**
* @brief Destructor for the base sensor object
@@ -290,7 +292,7 @@ namespace SENSOR
// return the sensor type and event reading data
- errlHndl_t getSensorType(uint32_t i_sensorNumber,
+ static errlHndl_t getSensorType(uint32_t i_sensorNumber,
uint8_t &o_sensorType,
uint8_t &o_eventReadingType );
@@ -333,7 +335,7 @@ namespace SENSOR
TARGETING::SENSOR_NAME iv_name;
// Target associated with this sensor.
- TARGETING::Target * iv_target;
+ TARGETING::ConstTargetHandle_t iv_target;
// data structure for the send sensor reading command.
setSensorReadingRequest * iv_msg;
@@ -574,7 +576,7 @@ namespace SENSOR
* each instance of the DIMM, CORE and Processor targets.
*
*/
- StatusSensor( TARGETING::Target * );
+ StatusSensor( TARGETING::ConstTargetHandle_t );
/**
* @brief Destructor for the StatusSensor
@@ -640,7 +642,7 @@ namespace SENSOR
* @param[in] i_pTarget
* Target associated with the fault sensor. Must not be NULL.
*/
- FaultSensor(TARGETING::Target* i_pTarget);
+ FaultSensor(TARGETING::ConstTargetHandle_t i_pTarget);
/**
* @brief Constructor for a fault sensor, used to differentiate
@@ -653,8 +655,9 @@ namespace SENSOR
* Type of non-instantiated target linked to the main target
* for which this sensor provides readings.
*/
- FaultSensor(TARGETING::Target* i_pTarget,
- TARGETING::TYPE i_associatedType = TARGETING::TYPE_NA);
+ FaultSensor(TARGETING::ConstTargetHandle_t i_pTarget,
+ TARGETING::ENTITY_ID i_associatedType =
+ TARGETING::ENTITY_ID_NA);
/**
* @brief Destructor for a fault sensor
@@ -771,7 +774,7 @@ namespace SENSOR
* sensor types, the "System Error" sensor number will be returned.
*
*/
- uint32_t getFaultSensorNumber(TARGETING::Target * i_pTarget );
+ uint32_t getFaultSensorNumber(TARGETING::ConstTargetHandle_t i_pTarget );
/**
diff --git a/src/usr/errl/errlmanager_common.C b/src/usr/errl/errlmanager_common.C
index aeec2fbd8..a64ed3beb 100644
--- a/src/usr/errl/errlmanager_common.C
+++ b/src/usr/errl/errlmanager_common.C
@@ -53,8 +53,8 @@ void ErrlManager::sendErrLogToBmc(errlHndl_t &io_err)
// look thru the errlog for any Callout UserDetail sections
// to determine the sensor information for the SEL
- uint8_t l_sensorNumber = SENSOR::INVALID_SENSOR;
- uint8_t l_sensorType = SENSOR::INVALID_SENSOR;
+ uint8_t l_sensorNumber = TARGETING::UTIL::INVALID_IPMI_SENSOR;
+ uint8_t l_sensorType = TARGETING::UTIL::INVALID_IPMI_SENSOR;
HWAS::callOutPriority l_priority = HWAS::SRCI_PRIORITY_NONE;
for(std::vector<ErrlUD*>::const_iterator
it = io_err->iv_SectionVector.begin();
@@ -92,13 +92,20 @@ void ErrlManager::sendErrLogToBmc(errlHndl_t &io_err)
}
} // for each SectionVector
-#if 0
-// TODO: RTC 119440
- if (l_sensorNumber != SENSOR::INVALID_SENSOR)
+ if (l_sensorNumber != TARGETING::UTIL::INVALID_IPMI_SENSOR)
{
- l_sensorType = SENSOR::getSensorType(l_sensorNumber);
+ uint8_t unused = 0;
+ errlHndl_t e =
+ SENSOR::SensorBase::getSensorType( l_sensorNumber,
+ l_sensorType, unused );
+ if( e )
+ {
+ TRACFCOMP(g_trac_errl, ERR_MRK"Failed to get sensor type for sensor %d",l_sensorNumber);
+ // since we are in the commit path, lets just delete this
+ // error and move on.
+ delete e;
+ }
}
-#endif
// flatten into buffer, truncate to max eSEL size
uint32_t l_pelSize = io_err->flattenedSize();
@@ -141,4 +148,4 @@ void ErrlManager::sendErrLogToBmc(errlHndl_t &io_err)
#endif
-} // end namespace \ No newline at end of file
+} // end namespace
diff --git a/src/usr/hwas/hwasPlatCallout.C b/src/usr/hwas/hwasPlatCallout.C
index 42df78b7d..0f15082a7 100644
--- a/src/usr/hwas/hwasPlatCallout.C
+++ b/src/usr/hwas/hwasPlatCallout.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2013,2014 */
+/* Contributors Listed Below - COPYRIGHT 2013,2015 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -203,18 +203,18 @@ errlHndl_t platHandleClockCallout(
TARGETING::TargetHandle_t pTarget = parentList[0];
// Get associated target
- TARGETING::ATTR_TYPE_type associatedType = TARGETING::TYPE_NA;
+ TARGETING::ENTITY_ID associatedType = TARGETING::ENTITY_ID_NA;
switch(i_clockType)
{
case TODCLK_TYPE:
- associatedType = TARGETING::TYPE_OSC;
+ associatedType = TARGETING::ENTITY_ID_TOD_CLOCK;
break;
case MEMCLK_TYPE:
case OSCREFCLK_TYPE:
- associatedType = TARGETING::TYPE_OSCREFCLK;
+ associatedType = TARGETING::ENTITY_ID_REF_CLOCK;
break;
case OSCPCICLK_TYPE:
- associatedType = TARGETING::TYPE_OSCPCICLK;
+ associatedType = TARGETING::ENTITY_ID_PCI_CLOCK;
break;
default:
assert(0,"Bug! Caller supplied illegal clock type. "
diff --git a/src/usr/ipmi/ipmidcmi.C b/src/usr/ipmi/ipmidcmi.C
index 6372cdf67..c32962fcc 100644
--- a/src/usr/ipmi/ipmidcmi.C
+++ b/src/usr/ipmi/ipmidcmi.C
@@ -89,6 +89,13 @@ namespace SENSOR
TRACFCOMP(g_trac_ipmi,"Power limit is %d watts",o_powerLimit);
TRACFCOMP(g_trac_ipmi,"Power limit is %s", ((cc) ? "not active": "active"));
+ // $TODO RTC:124093 de-rating factor for the power limit will
+ // be stored in a sensor, which is not defined currently so
+ // hardcode it at 90% efficency per power team suggestion
+
+ // derate the power limit to 90% of the input power
+ o_powerLimit = ( static_cast<uint32_t>(o_powerLimit) * 9 )/10;
+
// the completion code also tells us if the limit is active
if(l_cc == POWER_LIMIT_ACTIVE )
{
@@ -108,6 +115,10 @@ namespace SENSOR
* @userdata1 BMC IPMI Completion code.
* @devdesc Request to get power limit information
* failed
+ * @custdesc The DCMI command to retrieve the power limit
+ * data from the BMC has failed, the user
+ * defined power limit cannot be applied.
+ *
*/
l_err = new ERRORLOG::ErrlEntry(
diff --git a/src/usr/ipmi/ipmisensor.C b/src/usr/ipmi/ipmisensor.C
index 3c6a282ed..12faa9e6d 100644
--- a/src/usr/ipmi/ipmisensor.C
+++ b/src/usr/ipmi/ipmisensor.C
@@ -44,7 +44,7 @@ namespace SENSOR
// be used as the base for any additional sensors defined.
//
SensorBase::SensorBase( TARGETING::SENSOR_NAME i_name,
- TARGETING::Target * i_target)
+ const TARGETING::Target * i_target)
:iv_name(i_name) ,iv_target(i_target)
{
// allocate a new message structure to use with our sensors
@@ -392,12 +392,15 @@ namespace SENSOR
// return the sensor type and event reading data
errlHndl_t SensorBase::getSensorType(uint32_t i_sensorNumber,
- uint8_t &o_sensorType,
+ uint8_t &o_sensorType,
uint8_t &o_eventReadingType )
{
size_t len = 1;
+ o_sensorType = INVALID_TYPE;
+ o_eventReadingType = INVALID_TYPE;
+
// need to allocate some memory to hold the sensor number this will be
// deleted by the IPMI transport layer
uint8_t *l_data = new uint8_t[len];
@@ -411,22 +414,43 @@ namespace SENSOR
l_data);
// if we didn't get an error back from the BT interface,
- // process the CC to see if we need to create a PEL - sendrecv will
- // delete l_data if an error occurs
+ // process the CC to see if we need to create a PEL
if( l_err == NULL )
{
// check the completion code
- l_err = processCompletionCode( cc );
+ if( (cc!= IPMI::CC_OK) && (cc!=IPMI::CC_BADSENSOR) )
+ {
+ TRACFCOMP(g_trac_ipmi,"bad completion code from BMC=0x%x",cc);
+
+ /* @errorlog tag
+ * @errortype ERRL_SEV_INFORMATIONAL
+ * @moduleid IPMI::MOD_IPMISENSOR
+ * @reasoncode IPMI::RC_GET_SENSOR_TYPE_CMD_FAILED
+ * @userdata1 BMC IPMI Completion code.
+ * @devdesc Request to get sensor type form the bmc
+ * failed.
+ */
+ l_err = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_INFORMATIONAL,
+ IPMI::MOD_IPMISENSOR,
+ IPMI::RC_GET_SENSOR_TYPE_CMD_FAILED,
+ static_cast<uint64_t>(cc),0, true);
- // $TODO RTC:123045 - Remove when SDR is finalized
- if( l_err == NULL && (cc!=IPMI::CC_BADSENSOR) )
+ l_err->collectTrace(IPMI_COMP_NAME);
+
+
+ }
+ else
{
- // grab the type and reading code to pass back to the caller
- o_sensorType = l_data[0];
+ if( cc!=IPMI::CC_BADSENSOR )
+ {
+ // grab the type and reading code to pass back to the caller
+ o_sensorType = l_data[0];
- // high order bit is reserved
- o_eventReadingType = ( 0x7f & l_data[1]);
+ // high order bit is reserved
+ o_eventReadingType = ( 0x7f & l_data[1]);
+ }
}
delete[] l_data;
}
@@ -592,9 +616,11 @@ namespace SENSOR
//
// StatusSensor constructor - uses system DIMM/CORE/PROC target
//
- StatusSensor::StatusSensor( TARGETING::Target * i_target )
+ StatusSensor::StatusSensor( TARGETING::ConstTargetHandle_t i_target )
:SensorBase(TARGETING::SENSOR_NAME_STATE, i_target)
{
+ iv_functionalOffset = PROC_DISABLED;
+ iv_presentOffset = PROC_PRESENCE_DETECTED;
switch ( i_target->getAttr<TARGETING::ATTR_TYPE>() )
{
@@ -602,20 +628,27 @@ namespace SENSOR
{
iv_functionalOffset = MEMORY_DEVICE_DISABLED;
iv_presentOffset = MEM_DEVICE_PRESENCE_DETECTED;
+ iv_name = TARGETING::SENSOR_NAME_DIMM_STATE;
break;
}
-
- case TARGETING::TYPE_PROC:
- case TARGETING::TYPE_CORE:
+ case TARGETING::TYPE_MEMBUF:
{
- iv_functionalOffset = PROC_DISABLED;
- iv_presentOffset = PROC_PRESENCE_DETECTED;
+ iv_functionalOffset = MEMORY_DEVICE_DISABLED;
+ iv_presentOffset = MEM_DEVICE_PRESENCE_DETECTED;
+ iv_name = TARGETING::SENSOR_NAME_MEMBUF_STATE;
break;
}
+ case TARGETING::TYPE_PROC:
+ iv_name = TARGETING::SENSOR_NAME_PROC_STATE;
+ break;
+
+ case TARGETING::TYPE_CORE:
+ iv_name = TARGETING::SENSOR_NAME_CORE_STATE;
+ break;
default:
- iv_presentOffset = 0xFF;
- iv_functionalOffset = 0xFF;
+ assert(0, "No status sensor associated with target type 0x%x",
+ i_target->getAttr<TARGETING::ATTR_TYPE>());
break;
}
@@ -635,63 +668,57 @@ namespace SENSOR
{
errlHndl_t l_err = NULL;
- // if the offset isn't configured then the target does not have
- // one of these sensors.
- if( iv_functionalOffset != 0xFF && iv_presentOffset != 0xFF )
- {
-
- uint16_t func_mask = setMask( iv_functionalOffset );
- uint16_t pres_mask = setMask( iv_presentOffset );
- switch ( i_state )
- {
- case NOT_PRESENT:
- // turn off the present bit
- iv_msg->iv_deassertion_mask = pres_mask;
- // turn on the disabled bit
- iv_msg->iv_assertion_mask = func_mask;
- break;
+ uint16_t func_mask = setMask( iv_functionalOffset );
+ uint16_t pres_mask = setMask( iv_presentOffset );
- case PRESENT:
- // turn on the present bit
- iv_msg->iv_assertion_mask = pres_mask;
- break;
-
- case FUNCTIONAL:
- // turn off the disabled bit
- iv_msg->iv_deassertion_mask = func_mask;
- break;
+ switch ( i_state )
+ {
+ case NOT_PRESENT:
+ // turn off the present bit
+ iv_msg->iv_deassertion_mask = pres_mask;
+ // turn on the disabled bit
+ iv_msg->iv_assertion_mask = func_mask;
+ break;
- case PRESENT_FUNCTIONAL:
- // assert the present bit
- iv_msg->iv_assertion_mask = pres_mask;
- // turn off the disabled bit
- iv_msg->iv_deassertion_mask = func_mask;
- break;
+ case PRESENT:
+ // turn on the present bit
+ iv_msg->iv_assertion_mask = pres_mask;
+ break;
- case PRESENT_NONFUNCTIONAL:
- // assert the present bit
- iv_msg->iv_assertion_mask = pres_mask;
- // assert the disabled bit
- iv_msg->iv_assertion_mask |= func_mask;
- break;
+ case FUNCTIONAL:
+ // turn off the disabled bit
+ iv_msg->iv_deassertion_mask = func_mask;
+ break;
- case NON_FUNCTIONAL:
- // assert the disabled bit
- iv_msg->iv_assertion_mask = func_mask;
- break;
+ case PRESENT_FUNCTIONAL:
+ // assert the present bit
+ iv_msg->iv_assertion_mask = pres_mask;
+ // turn off the disabled bit
+ iv_msg->iv_deassertion_mask = func_mask;
+ break;
- default:
- // mark as not present
- iv_msg->iv_deassertion_mask = pres_mask;
- iv_msg->iv_assertion_mask = func_mask;
- break;
- }
+ case PRESENT_NONFUNCTIONAL:
+ // assert the present bit
+ iv_msg->iv_assertion_mask = pres_mask;
+ // assert the disabled bit
+ iv_msg->iv_assertion_mask |= func_mask;
+ break;
- l_err = writeSensorData();
+ case NON_FUNCTIONAL:
+ // assert the disabled bit
+ iv_msg->iv_assertion_mask = func_mask;
+ break;
+ default:
+ // mark as not present
+ iv_msg->iv_deassertion_mask = pres_mask;
+ iv_msg->iv_assertion_mask = func_mask;
+ break;
}
+ l_err = writeSensorData();
+
return l_err;
};
@@ -701,8 +728,8 @@ namespace SENSOR
//**************************************************************************
FaultSensor::FaultSensor(
- TARGETING::Target* i_pTarget)
- : SensorBase(TARGETING::SENSOR_NAME_FAULT, i_pTarget)
+ TARGETING::ConstTargetHandle_t i_pTarget)
+ : SensorBase(TARGETING::SENSOR_NAME_FAULT, i_pTarget)
{
}
@@ -711,12 +738,12 @@ namespace SENSOR
//**************************************************************************
FaultSensor::FaultSensor(
- TARGETING::Target* i_pTarget,
- const TARGETING::TYPE i_associatedType)
- : SensorBase(
- static_cast<TARGETING::SENSOR_NAME>(
- TARGETING::SENSOR_NAME_FAULT | i_associatedType),
- i_pTarget)
+ TARGETING::ConstTargetHandle_t i_pTarget,
+ const TARGETING::ENTITY_ID i_associatedType)
+ : SensorBase(
+ static_cast<TARGETING::SENSOR_NAME>(
+ TARGETING::SENSOR_NAME_FAULT | i_associatedType),
+ i_pTarget)
{
}
@@ -733,30 +760,28 @@ namespace SENSOR
//**************************************************************************
errlHndl_t FaultSensor::setStatus(
- const FAULT_STATE i_faultState)
+ const FAULT_STATE i_faultState)
{
errlHndl_t pError = NULL;
switch(i_faultState)
{
case FAULT_STATE_ASSERTED:
- iv_msg->iv_deassertion_mask = setMask(FAULT_DEASSERTED_OFFSET);
iv_msg->iv_assertion_mask = setMask(FAULT_ASSERTED_OFFSET);
break;
case FAULT_STATE_DEASSERTED:
iv_msg->iv_deassertion_mask = setMask(FAULT_ASSERTED_OFFSET);
- iv_msg->iv_assertion_mask = setMask(FAULT_DEASSERTED_OFFSET);
break;
default:
assert(0,"Caller passed unsupported fault state of 0x%X",
- i_faultState);
+ i_faultState);
}
pError = writeSensorData();
if(pError)
{
TRACFCOMP(g_trac_ipmi, ERR_MRK " "
- "Failed to write sensor data for sensor name 0x%X",
+ "Failed to write sensor data for sensor name 0x%X",
iv_name);
}
@@ -768,7 +793,8 @@ namespace SENSOR
//
//
OCCActiveSensor::OCCActiveSensor( TARGETING::Target * i_pTarget )
- :SensorBase(TARGETING::SENSOR_NAME_OCC_ACTIVE, i_pTarget )
+ :SensorBase(TARGETING::SENSOR_NAME_OCC_ACTIVE,
+ (TARGETING::ConstTargetHandle_t) i_pTarget )
{
};
@@ -978,8 +1004,8 @@ namespace SENSOR
(*ptr)[0], (*ptr)[1], TARGETING::get_huid(pTarget));
FaultSensor faultSensor(pTarget,
- static_cast<TARGETING::TYPE>(
- (*ptr)[0]));
+ static_cast<TARGETING::ENTITY_ID>(
+ getMinorType((*ptr)[0])));
errlHndl_t pError = faultSensor.setStatus(
FaultSensor::FAULT_STATE_DEASSERTED);
@@ -1012,8 +1038,9 @@ namespace SENSOR
};
// returns a sensor number based on input target type
- uint32_t getFaultSensorNumber( TARGETING::TargetHandle_t i_pTarget )
+ uint32_t getFaultSensorNumber( TARGETING::ConstTargetHandle_t i_pTarget )
{
+ TRACDCOMP(g_trac_ipmi,">>getFaultSensorNumber()");
TARGETING::TYPE l_type = i_pTarget->getAttr<TARGETING::ATTR_TYPE>();
@@ -1025,65 +1052,71 @@ namespace SENSOR
case TARGETING::TYPE_PROC:
case TARGETING::TYPE_CORE:
case TARGETING::TYPE_DIMM:
+ case TARGETING::TYPE_MEMBUF:
{
l_sensor_number = StatusSensor(i_pTarget).getSensorNumber();
break;
}
- case TARGETING::TYPE_OSC:
- case TARGETING::TYPE_OSCREFCLK:
- case TARGETING::TYPE_OSCPCICLK:
+ case TARGETING::TYPE_OCC:
{
- TARGETING::TargetHandleList parentList;
-
- // The clock fault sensors are associated with the NODE target
- (void)getParentAffinityTargets (
- parentList, i_pTarget, TARGETING::CLASS_ENC,
- TARGETING::TYPE_NODE, false);
-
- assert(parentList.size() == 1 );
+ // should return the processor associated with this OCC
+ TARGETING::ConstTargetHandle_t proc = getParentChip( i_pTarget);
- TARGETING::TargetHandle_t l_node = parentList[0];
+ // we should get the processor as the parent here
+ assert(i_pTarget,"OCC target failed to return parent proc");
- l_sensor_number =
- SENSOR::FaultSensor( l_node, l_type ).getSensorNumber();
+ l_sensor_number = getFaultSensorNumber( proc );
break;
}
-
default:
{
TARGETING::TargetHandle_t l_sys;
- // get the "system error sensor number" associated with the
+ // get the "system error" sensor number associated with the
// system target.
TARGETING::targetService().getTopLevelTarget(l_sys);
- l_sensor_number = SENSOR::FaultSensor(
- l_sys, TARGETING::TYPE_NA ).getSensorNumber();
+ l_sensor_number = TARGETING::UTIL::getSensorNumber(l_sys,
+ TARGETING::SENSOR_NAME_SYSTEM_EVENT );
break;
}
}
+
+ TRACDCOMP(g_trac_ipmi,"<<getFaultSensorNumber() returning sensor number %d,");
+
return l_sensor_number;
}
- // $TODO - RTC:123217 - modify code get info from attribute when available
// interface to retrieve the APSS channel sensor numbers.
errlHndl_t getAPSSChannelSensorNumbers(
const uint16_t (* &o_sensor_numbers)[16])
{
+ TARGETING::TargetHandle_t l_sys;
- // habanero only..
- static const uint16_t numbers[16] = { 161, 162, 163, 164,
- 165, 166, 167, 168,
- 169, 170, 171, 172,
- 173, 174, 175, 176};
+ // get the "system error" sensor number associated with the
+ // system target.
- o_sensor_numbers = &numbers;
+ TARGETING::targetService().getTopLevelTarget(l_sys);
+
+ static TARGETING::ATTR_ADC_CHANNEL_SENSOR_NUMBERS_type
+ apss_sensors;
+
+ if( l_sys->tryGetAttr<TARGETING::
+ ATTR_ADC_CHANNEL_SENSOR_NUMBERS>(apss_sensors) )
+ {
+ o_sensor_numbers = &apss_sensors;
+ }
+ else
+ {
+ // need that attribute or things dont work
+ assert(0,"Missing ADC_CHANNEL_SENSOR_NUMBERS attribute");
+ }
return NULL;
}
diff --git a/src/usr/targeting/common/xmltohb/attribute_types_hb.xml b/src/usr/targeting/common/xmltohb/attribute_types_hb.xml
index 4437a0a52..c118e717b 100644
--- a/src/usr/targeting/common/xmltohb/attribute_types_hb.xml
+++ b/src/usr/targeting/common/xmltohb/attribute_types_hb.xml
@@ -574,7 +574,7 @@
<id>ADC_CHANNEL_SENSOR_NUMBERS</id>
<description>ADC Channel IPMI sensor numbers. 16 channels.</description>
<simpleType>
- <uint8_t></uint8_t>
+ <uint16_t></uint16_t>
<array>16</array>
</simpleType>
<persistency>non-volatile</persistency>
@@ -897,172 +897,109 @@
<id>SENSOR_NAME</id>
<description>Enumeration indicating the IPMI sensor name, which will
be used by hostboot when determining the sensor number to return.
- The name is unique per hostboot sensor type, actual IPMI sensor
- types have been overloaded to map our needs. The sensor name consists
- of one byte of sensor type plus one byte of sub-type, to differentiate
- similar sensors under the same target</description>
- <enumerator>
- <name>TEMPERATURE</name>
- <value>0x0100</value>
- </enumerator>
+ he sensor name consists of one byte of sensor type plus one byte of
+ sub-type, to differentiate similar sensors under the same target.
+ Our implementaion uses the IPMI defined entity ID as the sub-type.
+ </description>
<enumerator>
- <name>VOLTAGE</name>
- <value>0x0200</value>
+ <name>PROC_TEMP</name>
+ <value>0x0103</value>
</enumerator>
<enumerator>
- <name>CURRENT</name>
- <value>0x0300</value>
+ <name>DIMM_TEMP</name>
+ <value>0x01C0</value>
</enumerator>
<enumerator>
- <name>INTRUSION</name>
- <value>0x0400</value>
+ <name>CORE_TEMP</name>
+ <value>0x01D0</value>
</enumerator>
<enumerator>
<name>STATE</name>
<value>0x0500</value>
</enumerator>
<enumerator>
- <name>POWER_UNIT</name>
- <value>0x0600</value>
- </enumerator>
- <enumerator>
- <name>OS_BOOT</name>
- <value>0x0700</value>
- </enumerator>
- <enumerator>
- <name>HOST_STATUS</name>
- <value>0x0800</value>
- </enumerator>
- <enumerator>
- <name>FW_BOOT_PROGRESS</name>
- <value>0x0900</value>
- </enumerator>
- <enumerator>
- <name>OCC_ACTIVE</name>
- <value>0x0A00</value>
- </enumerator>
- <enumerator>
- <name>SYSTEM_POWER_CAP</name>
- <value>0x0b00</value>
- </enumerator>
- <enumerator>
- <name>PCI_ACTIVE</name>
- <value>0x0c00</value>
- </enumerator>
- <enumerator>
- <name>BOOT_WATCHDOG</name>
- <value>0x0d00</value>
+ <name>MEMBUF_TEMP</name>
+ <value>0x01D1</value>
</enumerator>
<enumerator>
- <name>REBOOT_COUNT</name>
- <value>0x0e00</value>
- </enumerator>
- <enumerator>
- <name>FAULT</name>
- <value>0x1000</value>
+ <name>PROC_STATE</name>
+ <value>0x0703</value>
</enumerator>
<enumerator>
- <name>APSS_FAULT</name> <!-- APSS Fault -->
- <value>0x1010</value>
+ <name>CORE_STATE</name>
+ <value>0x07D0</value>
</enumerator>
<enumerator>
- <name>TOD_CLOCK_FAULT</name>
- <value>0x1017</value>
+ <name>DIMM_STATE</name>
+ <value>0x0C20</value>
</enumerator>
<enumerator>
- <name>REF_CLOCK_FAULT</name>
- <value>0x101A</value>
+ <name>MEMBUF_STATE</name>
+ <value>0x0CD1</value>
</enumerator>
<enumerator>
- <name>PCI_CLOCK_FAULT</name>
- <value>0x101B</value>
- </enumerator>
- <enumerator>
- <name>APSS_CHANNEL</name> <!-- Power sensors -->
- <value>0x1100</value> <!-- 16 channels -->
- </enumerator>
- <enumerator>
- <name>FREQUENCY</name> <!-- Power sensors -->
- <value>0xC100</value> <!-- 16 channels -->
- </enumerator>
-</enumerationType>
-
-<enumerationType>
- <id>SENSOR_TYPE</id>
- <description>Enumeration indicating the IPMI sensor type, these values
- are defined in the IPMI specification. These values will be used when
- sending sensor reading events to the BMC.</description>
- <enumerator>
- <name>NA</name>
- <value>0</value>
- </enumerator>
- <enumerator>
- <name>TEMPERATURE</name>
- <value>0x01</value>
+ <name>FW_BOOT_PROGRESS</name>
+ <value>0x0F22</value>
</enumerator>
<enumerator>
- <name>VOLTAGE</name>
- <value>0x02</value>
+ <name>SYSTEM_EVENT</name>
+ <value>0x1201</value>
</enumerator>
<enumerator>
- <name>CURRENT</name>
- <value>0x03</value>
- </enumerator>
- <enumerator>
- <name>PHYSICAL_SECURITY</name>
- <value>0x05</value>
+ <name>OS_BOOT</name>
+ <value>0x1F23</value>
</enumerator>
<enumerator>
- <name>PROCESSOR</name>
- <value>0x07</value>
+ <name>HOST_STATUS</name>
+ <value>0x2223</value>
</enumerator>
<enumerator>
- <name>MEMORY</name>
- <value>0x0c</value>
+ <name>OCC_ACTIVE</name>
+ <value>0x07D2</value>
</enumerator>
<enumerator>
- <name>POWER_UNIT</name>
- <value>0x09</value>
+ <name>CORE_FREQ</name>
+ <value>0xC1D0</value>
</enumerator>
<enumerator>
- <name>SYS_FW_PROGRESS</name>
- <value>0x0F</value>
+ <name>APSS_CHANNEL</name>
+ <value>0xC2D7</value>
</enumerator>
<enumerator>
- <name>SYS_EVENT</name>
- <value>0x12</value>
+ <name>PCI_ACTIVE</name>
+ <value>0xC423</value>
</enumerator>
<enumerator>
- <name>OS_BOOT</name>
- <value>0x1F</value>
+ <name>REBOOT_COUNT</name>
+ <value>0xC322</value>
</enumerator>
<enumerator>
- <name>APCI_POWER_STATE</name>
- <value>0x22</value>
+ <name>FAULT</name>
+ <value>0xC700</value>
</enumerator>
<enumerator>
- <name>FREQ</name>
- <value>0xC1</value>
+ <name>BACKPLANE_FAULT</name>
+ <value>0xC707</value>
</enumerator>
<enumerator>
- <name>POWER</name>
- <value>0xC2</value>
+ <name>REF_CLOCK_FAULT</name>
+ <value>0xC7D4</value>
</enumerator>
<enumerator>
- <name>BOOT_COUNT</name>
- <value>0xC3</value>
+ <name>PCI_CLOCK_FAULT</name>
+ <value>0xC7D5</value>
</enumerator>
<enumerator>
- <name>PCI_LINK_PRES</name>
- <value>0xC4</value>
+ <name>TOD_CLOCK_FAULT</name>
+ <value>0xC7D6</value>
</enumerator>
<enumerator>
- <name>PWR_LIMIT_ACTIVE</name>
- <value>0xC4</value>
+ <name>APSS_FAULT</name>
+ <value>0xC7D7</value>
</enumerator>
<enumerator>
- <name>FAULT</name>
- <value>0xC7</value>
+ <name>DERATING_FACTOR</name>
+ <value>0xC815</value>
</enumerator>
</enumerationType>
OpenPOWER on IntegriCloud