diff options
-rw-r--r-- | src/include/usr/ipmi/ipmi_reasoncodes.H | 27 | ||||
-rw-r--r-- | src/include/usr/ipmi/ipmisensor.H | 19 | ||||
-rw-r--r-- | src/usr/errl/errlmanager_common.C | 23 | ||||
-rw-r--r-- | src/usr/hwas/hwasPlatCallout.C | 10 | ||||
-rw-r--r-- | src/usr/ipmi/ipmidcmi.C | 11 | ||||
-rw-r--r-- | src/usr/ipmi/ipmisensor.C | 249 | ||||
-rw-r--r-- | src/usr/targeting/common/xmltohb/attribute_types_hb.xml | 169 |
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> |