summaryrefslogtreecommitdiffstats
path: root/src/usr/errl/runtime
diff options
context:
space:
mode:
authorDoug Gilbert <dgilbert@us.ibm.com>2013-09-18 16:15:48 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-10-17 11:26:14 -0500
commit25a68ad9643b83001dbe80120f854221e65e9585 (patch)
treee635de6c5c07e2f99a309256c8bcf69ca495034d /src/usr/errl/runtime
parent63245d62a4ffe99ad2eaf6b4f1a88862065ceedf (diff)
downloadblackbird-hostboot-25a68ad9643b83001dbe80120f854221e65e9585.tar.gz
blackbird-hostboot-25a68ad9643b83001dbe80120f854221e65e9585.zip
Hostboot runtime errl support
RTC: 79415 Change-Id: I2fd60b48046425692fb3921b46ac21b57e1dba96 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/6349 Tested-by: Jenkins Server Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/errl/runtime')
-rw-r--r--src/usr/errl/runtime/makefile39
-rw-r--r--src/usr/errl/runtime/rt_errlmanager.C283
-rw-r--r--src/usr/errl/runtime/test/makefile29
-rw-r--r--src/usr/errl/runtime/test/rt_errltest.H348
4 files changed, 699 insertions, 0 deletions
diff --git a/src/usr/errl/runtime/makefile b/src/usr/errl/runtime/makefile
new file mode 100644
index 000000000..dd47962ea
--- /dev/null
+++ b/src/usr/errl/runtime/makefile
@@ -0,0 +1,39 @@
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/usr/trace/runtime/makefile $
+#
+# IBM CONFIDENTIAL
+#
+# COPYRIGHT International Business Machines Corp. 2013
+#
+# p1
+#
+# Object Code Only (OCO) source materials
+# Licensed Internal Code Source Materials
+# IBM HostBoot Licensed Internal Code
+#
+# The source code for this program is not published or otherwise
+# divested of its trade secrets, irrespective of what has been
+# deposited with the U.S. Copyright Office.
+#
+# Origin: 30
+#
+# IBM_PROLOG_END_TAG
+HOSTBOOT_RUNTIME = 1
+ROOTPATH = ../../../..
+MODULE = errl_rt
+
+OBJS = errlentry.o rt_errlmanager.o errlsctn.o errlsctnhdr.o errlprvt.o errluh.o \
+ errlud.o errlsrc.o errluserdetails.o backtrace.o errludtarget.o \
+ errludstring.o errludbacktrace.o errludattribute.o \
+ errludcallout.o
+
+SUBDIRS = test.d
+
+VPATH += ..
+include $(ROOTPATH)/config.mk
+
+# to find errludattribute.[CH] and errludtarget.[CH] - they are generated
+# by src/usr/targeting/common/xmltohb/xmltohb.pl
+vpath %.C ${GENDIR}
diff --git a/src/usr/errl/runtime/rt_errlmanager.C b/src/usr/errl/runtime/rt_errlmanager.C
new file mode 100644
index 000000000..6fb120168
--- /dev/null
+++ b/src/usr/errl/runtime/rt_errlmanager.C
@@ -0,0 +1,283 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/errl/runtime/rt_errlmanager.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2013 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+/*****************************************************************************/
+// I n c l u d e s
+/*****************************************************************************/
+#include <errl/errlmanager.H>
+#include <trace/interface.H>
+#include <errl/errlentry.H>
+#include <sys/task.h>
+#include <stdlib.h>
+#include <string.h>
+#include <runtime/interface.h>
+#include <targeting/common/targetservice.H>
+
+namespace ERRORLOG
+{
+
+extern trace_desc_t* g_trac_errl;
+
+//////////////////////////////////////////////////////////////////////////////
+// Local functions
+//////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Override the HWAS processCallout function at runtime
+ * @param[in] io_errl Error log handle reference
+ * @param[in] i_pData Pointer to the callout bundle
+ * @param[in] i_Size size of the data in the callout bundle
+ * @param[in] i_DeferredOnly bool - true if ONLY check for defered deconfig
+ */
+bool rt_processCallout(errlHndl_t &io_errl,
+ uint8_t * i_pData,
+ uint64_t i_Size,
+ bool i_DeferredOnly);
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+ErrlManager::ErrlManager()
+ :
+ iv_currLogId(0),
+ iv_pStorage(NULL),
+ iv_hwasProcessCalloutFn(NULL),
+ iv_msgQ(NULL)
+{
+ TRACFCOMP( g_trac_errl, ENTER_MRK "ErrlManager::ErrlManager constructor" );
+
+
+ iv_hwasProcessCalloutFn = rt_processCallout;
+
+ TARGETING::Target * sys = NULL;
+ TARGETING::targetService().getTopLevelTarget( sys );
+
+ if(sys)
+ {
+ iv_currLogId = sys->getAttr<TARGETING::ATTR_HOSTSVC_PLID>();
+ }
+ else
+ {
+ iv_currLogId = 0x9fbad000;
+ TRACFCOMP( g_trac_errl, ERR_MRK"HOSTSVC_PLID not available" );
+ }
+
+ TRACFCOMP( g_trac_errl, EXIT_MRK "ErrlManager::ErrlManager constructor." );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+ErrlManager::~ErrlManager()
+{
+ TRACFCOMP( g_trac_errl, INFO_MRK"ErrlManager::ErrlManager destructor" );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// ErrlManager::msgQueueInit()
+///////////////////////////////////////////////////////////////////////////////
+void ErrlManager::msgQueueInit ( void )
+{
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// ErrlManager::startup()
+///////////////////////////////////////////////////////////////////////////////
+void * ErrlManager::startup ( void* i_self )
+{
+ return NULL;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+// ErrlManager::errlogMsgHndlr()
+///////////////////////////////////////////////////////////////////////////////
+void ErrlManager::errlogMsgHndlr ( void )
+{
+ // Not used in HB_RUNTIME
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+// ErrlManager::sendMboxMsg()
+///////////////////////////////////////////////////////////////////////////////
+void ErrlManager::sendMboxMsg ( errlHndl_t& io_err )
+{
+ TRACFCOMP( g_trac_errl, ENTER_MRK"ErrlManager::sendToHypervisor" );
+ do
+ {
+
+ uint32_t l_msgSize = io_err->flattenedSize();
+
+
+ void * temp_buff = malloc( l_msgSize );
+ io_err->flatten ( temp_buff, l_msgSize );
+
+ TRACDCOMP(g_trac_errl,
+ INFO_MRK"Send msg to FSP for errlogId [0x%08x]",
+ io_err->plid() );
+
+ if(g_hostInterfaces && g_hostInterfaces->sendErrorLog)
+ {
+ int rc = g_hostInterfaces->sendErrorLog(io_err->plid(),
+ l_msgSize,
+ temp_buff);
+
+ if(rc)
+ {
+ TRACFCOMP(g_trac_errl, ERR_MRK
+ "Failed sending error log to FSP. rc: %d. "
+ "plid: 0x%08x",
+ rc,
+ io_err->plid() );
+ }
+ }
+ else
+ {
+ TRACFCOMP(g_trac_errl, ERR_MRK
+ "Host interfaces not initialized, error log not sent. "
+ "plid: 0x%08x",
+ io_err->plid()
+ );
+ }
+
+ delete (uint8_t *)temp_buff;
+
+ } while (0);
+
+ TRACFCOMP( g_trac_errl, EXIT_MRK"sendToHypervisor()" );
+ return;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Handling commit error log.
+///////////////////////////////////////////////////////////////////////////////
+void ErrlManager::commitErrLog(errlHndl_t& io_err, compId_t i_committerComp )
+{
+
+ TRACDCOMP( g_trac_errl, ENTER_MRK"ErrlManager::commitErrLog" );
+ do
+ {
+ if (io_err == NULL)
+ {
+ // put out warning trace
+ TRACFCOMP(g_trac_errl, ERR_MRK "commitErrLog() - NULL pointer");
+ break;
+ }
+
+ TRACFCOMP(g_trac_errl, "commitErrLog() called by %.4X for plid=0x%X,"
+ "Reasoncode=%.4X", i_committerComp,
+ io_err->plid(), io_err->reasonCode() );
+
+ // Deferred callouts not allowed at runtime - this call will check,
+ // flag and change any that are found.
+ io_err->deferredDeconfigure();
+
+ TRACFCOMP( g_trac_errl, INFO_MRK
+ "Send an error log to hypervisor to commit. plid=0x%X",
+ io_err->plid() );
+
+ io_err->commit(i_committerComp);
+ sendMboxMsg(io_err);
+ io_err = NULL;
+
+ } while( 0 );
+
+ TRACDCOMP( g_trac_errl, EXIT_MRK"ErrlManager::commitErrLog" );
+
+ return;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// ErrlManager::saveErrLogEntry()
+///////////////////////////////////////////////////////////////////////////////
+void ErrlManager::saveErrLogEntry( errlHndl_t& io_err )
+{
+ return;
+}
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+// Atomically increment log id and return it.
+uint32_t ErrlManager::getUniqueErrId()
+{
+ return (__sync_add_and_fetch(&iv_currLogId, 1));
+}
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+void ErrlManager::setHwasProcessCalloutFn(HWAS::processCalloutFn i_fn)
+{
+ ERRORLOG::theErrlManager::instance().iv_hwasProcessCalloutFn = i_fn;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+// Global function (not a method on an object) to commit the error log.
+void errlCommit(errlHndl_t& io_err, compId_t i_committerComp )
+{
+ ERRORLOG::theErrlManager::instance().commitErrLog(io_err, i_committerComp );
+ return;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+// ErrlManager::sendErrlogToMessageQueue()
+///////////////////////////////////////////////////////////////////////////////
+void ErrlManager::sendErrlogToMessageQueue ( errlHndl_t& io_err,
+ compId_t i_committerComp )
+{
+ return;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// ErrlManager::errlogShutdown()
+///////////////////////////////////////////////////////////////////////////////
+void ErrlManager::errlogShutdown(void)
+{
+ return;
+}
+
+// Runtime processCallout
+bool rt_processCallout(errlHndl_t &io_errl,
+ uint8_t * i_pData,
+ uint64_t i_Size,
+ bool i_DeferredOnly)
+{
+ HWAS::callout_ud_t *pCalloutUD = (HWAS::callout_ud_t *)i_pData;
+ if(i_DeferredOnly)
+ {
+ if ((pCalloutUD->type == HWAS::HW_CALLOUT) &&
+ (pCalloutUD->deconfigState == HWAS::DELAYED_DECONFIG))
+ {
+ pCalloutUD->deconfigState = HWAS::NO_DECONFIG;
+
+ TRACFCOMP( g_trac_errl, ERR_MRK
+ "Runtime errorlog callout with DELAYED_DECONFIG not "
+ "allowed! Changed to NO_DECONFIG. plid: 0x%X",
+ io_errl->plid() );
+ }
+
+ }
+ return true;
+}
+
+} // End namespace
diff --git a/src/usr/errl/runtime/test/makefile b/src/usr/errl/runtime/test/makefile
new file mode 100644
index 000000000..4c78ecdbd
--- /dev/null
+++ b/src/usr/errl/runtime/test/makefile
@@ -0,0 +1,29 @@
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/usr/errl/runtime/test/makefile $
+#
+# IBM CONFIDENTIAL
+#
+# COPYRIGHT International Business Machines Corp. 2013
+#
+# p1
+#
+# Object Code Only (OCO) source materials
+# Licensed Internal Code Source Materials
+# IBM HostBoot Licensed Internal Code
+#
+# The source code for this program is not published or otherwise
+# divested of its trade secrets, irrespective of what has been
+# deposited with the U.S. Copyright Office.
+#
+# Origin: 30
+#
+# IBM_PROLOG_END_TAG
+HOSTBOOT_RUNTIME = 1
+ROOTPATH = ../../../../..
+
+MODULE = testerrl_rt
+TESTS = *.H
+
+include ${ROOTPATH}/config.mk
diff --git a/src/usr/errl/runtime/test/rt_errltest.H b/src/usr/errl/runtime/test/rt_errltest.H
new file mode 100644
index 000000000..dfb7ec9fb
--- /dev/null
+++ b/src/usr/errl/runtime/test/rt_errltest.H
@@ -0,0 +1,348 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/errl/test/errltest.H $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2011,2013 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+#ifndef __RT_ERRLTEST_H
+#define __RT_ERRLTEST_H
+
+/**
+ * @file errltest.H
+ *
+ * @brief Test case for Error Logging
+*/
+
+#include <cxxtest/TestSuite.H>
+#include <errl/errlmanager.H>
+#include <errl/errlentry.H>
+#include <errl/errlreasoncodes.H>
+#include <trace/trace.H>
+#include <hbotcompid.H>
+
+#include <errl/errludtarget.H>
+#include <targeting/common/target.H>
+#include <targeting/common/iterators/rangefilter.H>
+#include <targeting/common/predicates/predicates.H>
+#include <hwas/common/hwasCallout.H>
+#include <hwas/common/deconfigGard.H>
+
+#include "../../../trace/entry.H"
+
+#define TEST_SEVERITY ERRORLOG::ERRL_SEV_INFORMATIONAL
+
+
+#define TEST_USR_8BIT_1 0x80
+#define TEST_USR_8BIT_2 0x93
+
+#define TEST_USR_16BIT_1 0x8000
+#define TEST_USR_16BIT_2 0x9003
+
+#define TEST_USR_32BIT_1 0x80000001
+#define TEST_USR_32BIT_2 0x90000003
+
+#define TEST_USR_64BIT_1 0x8000000000000001
+#define TEST_USR_64BIT_2 0x9000000000000003
+
+
+
+class RT_ErrlTest: public CxxTest::TestSuite
+{
+public:
+
+
+ /**
+ * @brief Test error log creation
+ * - Create an error log
+ * - Verify data of created log
+ * - Commit an error log
+ * - Delete an error log
+ */
+ void testErrl1(void)
+ {
+ ERRORLOG::ErrlUD * pffdc;
+
+ // An example that shows how to use macros to stuff data into
+ // the two 64-bit user data parameters in the error log.
+ // l_userData1 = 16bit(0):l_bit8_1:l_bit8_2:l_32bit_1
+ uint8_t l_8bit_1 = TEST_USR_8BIT_1; // 0x80
+ uint8_t l_8bit_2 = TEST_USR_8BIT_2; // 0x93
+ uint32_t l_32bit_1 = TEST_USR_32BIT_1; // 0x80000001
+ uint64_t l_userData1 =
+ TWO_UINT32_TO_UINT64( TO_UINT32(TWO_UINT8_TO_UINT16(l_8bit_1, l_8bit_2)), l_32bit_1);
+ // yields 0x0000809380000001
+
+
+ // l_userData2 = l_16bit_1:l_16bit_2:l_32bit_2
+ uint16_t l_16bit_1 = TEST_USR_16BIT_1; // 0x8000
+ uint16_t l_16bit_2 = TEST_USR_16BIT_2; // 0x9003
+ uint32_t l_32bit_2 = TEST_USR_32BIT_2; // 0x90000003
+ uint64_t l_userData2 = TWO_UINT16_ONE_UINT32_TO_UINT64(l_16bit_1, l_16bit_2, l_32bit_2);
+ // yields 0x8000900390000003
+
+
+
+ do
+ {
+ /*@
+ * @errortype
+ * @reasoncode ERRORLOG::ERRL_TEST_REASON_CODE
+ * @severity ERRORLOG::ERRL_SEV_INFORMATIONAL
+ * @moduleid ERRORLOG::ERRL_RT_TEST_MOD_ID
+ * @devdesc Errl test. Error with non-decoded string
+ * and lots of trace buffers.
+ */
+
+ // Create an error log
+ errlHndl_t l_err = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_INFORMATIONAL,
+ ERRORLOG::ERRL_RT_TEST_MOD_ID,
+ ERRORLOG::ERRL_TEST_REASON_CODE,
+ l_userData1,
+ l_userData2);
+
+ // These addFFDC() calls return a pointer to class ERRORLOG::ErrlFFDC
+ // but errlffdc.H is not publicly includable to give me the definition
+ // for it. addFFDC() should return a Boolean indication of success.
+
+ // really short user data
+ const char * pch = "A";
+ pffdc = l_err->addFFDC( DEVFW_COMP_ID, pch, strlen( pch ), 0, 0);
+ if ( NULL == pffdc )
+ {
+ TS_FAIL("testErrl1: addFFDC() output NULL pointer");
+ break;
+ }
+
+ // Append data to something already added.
+ pch = " test-user-data-string";
+ l_err->appendToFFDC( pffdc, pch, strlen(pch) );
+
+ // Collect trace
+ // NOTE Trace buffers are not currently kept in Runtime
+ // - tests deleted
+
+ // Add null data.
+ pffdc = l_err->addFFDC( ERRL_COMP_ID, NULL, 0, 9, 10 );
+ if ( NULL != pffdc )
+ {
+ TS_FAIL("testErrl1: addFFDC() returned non null");
+ break;
+ }
+
+ // Verify log data
+ if (l_err->sev() != ERRORLOG::ERRL_SEV_INFORMATIONAL)
+ {
+ TS_FAIL("testErrl1: createErrlLog() returns incorrect severity!");
+ break;
+ }
+
+ if (l_err->reasonCode() != ERRORLOG::ERRL_TEST_REASON_CODE)
+ {
+ TS_FAIL("testErrl1: createErrlLog() returns incorrect reason code!");
+ break;
+ }
+
+ if (l_err->eventType() != ERRORLOG::ERRL_ETYPE_NOT_APPLICABLE)
+ {
+ TS_FAIL("testErrl1: createErrlLog() returns incorrect event type!");
+ break;
+ }
+
+ if (l_err->subSys() != ERRORLOG::EPUB_FIRMWARE_SUBSYS )
+ {
+ TS_FAIL("testErrl1: createErrlLog() returns incorrect sub system!");
+ break;
+ }
+
+ if (l_err->srcType() != ERRORLOG::SRC_ERR_INFO)
+ {
+ TS_FAIL("testErrl1: createErrlLog() returns incorrect SRC type!");
+ break;
+ }
+
+ if (l_err->termState() != ERRORLOG::TERM_STATE_UNKNOWN)
+ {
+ TS_FAIL("testErrl1: termState() returns incorrect term state!");
+ break;
+ }
+
+
+
+ // Commit error log with different component ID.
+ errlCommit(l_err, CXXTEST_COMP_ID);
+
+ // Make sure error log has been deleted by manager
+ if (l_err != NULL)
+ {
+ TS_FAIL("testErrl1: commitErrLog() did not delete error!");
+ break;
+ }
+
+ }
+ while(0);
+ }
+
+ /**
+ * @brief Test error log parameter settings
+ */
+ void testErrl2(void)
+ {
+ // An example that shows how to use macros to stuff data into
+ // the two 64-bit user data parameters in the error log.
+ // l_userData1 = l_bit32_1:l_bit32_2
+ uint32_t l_32bit_1 = TEST_USR_32BIT_1;
+ uint32_t l_32bit_2 = TEST_USR_32BIT_2;
+ uint64_t l_userData1 = TWO_UINT32_TO_UINT64(l_32bit_1, l_32bit_2);
+
+ // l_userData2 = 24bit(0):l_8bit_1:16bit(0):l_16bit_1
+ uint8_t l_8bit_1 = TEST_USR_8BIT_1;
+ uint16_t l_16bit_1 = TEST_USR_16BIT_1;
+ uint64_t l_userData2 =
+ TWO_UINT32_TO_UINT64(TO_UINT32(l_8bit_1), TO_UINT32(l_16bit_1));
+
+ // Create an error log
+ errlHndl_t l_err = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ ERRORLOG::ERRL_RT_TEST_MOD_ID,
+ ERRORLOG::ERRL_TEST_REASON_CODE,
+ l_userData1,
+ l_userData2);
+
+ // Set and verify log data
+ l_err->setSev(ERRORLOG::ERRL_SEV_UNKNOWN);
+ l_err->setEventType(ERRORLOG::ERRL_ETYPE_CAPACITY_UPGRADE);
+ l_err->setSubSys(ERRORLOG::EPUB_UNKNOWN);
+ l_err->setSrcType(ERRORLOG::SRC_ERR_INFO);
+ l_err->setTermState(ERRORLOG::TERM_STATE_NO_FLAGS);
+
+ if (l_err->sev() != ERRORLOG::ERRL_SEV_UNKNOWN)
+ {
+ TS_FAIL("testErrl2: setSev() fails!");
+ }
+ else if (l_err->eventType() != ERRORLOG::ERRL_ETYPE_CAPACITY_UPGRADE)
+ {
+ TS_FAIL("testErrl2: setEventType() fails!");
+ }
+ else if (l_err->subSys() != ERRORLOG::EPUB_UNKNOWN)
+ {
+ TS_FAIL("testErrl2: setSubSys() fails!");
+ }
+ else if (l_err->srcType() != ERRORLOG::SRC_ERR_INFO)
+ {
+ TS_FAIL("testErrl2: setSrcType() fails!");
+ }
+ else if (l_err->termState() != ERRORLOG::TERM_STATE_NO_FLAGS)
+ {
+ TS_FAIL("testErrl2: setTermState() fails!");
+ }
+
+ // Delete the log
+ delete l_err;
+ l_err = NULL;
+ }
+
+ /**
+ * @brief Test callouts
+ */
+ void testErrl3(void)
+ {
+ TS_TRACE( "test testErrl3");
+ do
+ {
+ // find some ex units that we can play with
+ TARGETING::Target * pSys;
+ TARGETING::targetService().getTopLevelTarget(pSys);
+
+ TARGETING::PredicateCTM predEx(TARGETING::CLASS_UNIT,
+ TARGETING::TYPE_EX);
+ TARGETING::PredicateHwas predFunctional;
+ predFunctional.poweredOn(true).present(true).functional(true);
+ TARGETING::PredicatePostfixExpr checkExpr;
+ checkExpr.push(&predEx).push(&predFunctional).And();
+ TARGETING::TargetHandleList pExList;
+ TARGETING::targetService().getAssociated( pExList, pSys,
+ TARGETING::TargetService::CHILD, TARGETING::TargetService::ALL,
+ &checkExpr );
+
+ if (pExList.empty())
+ {
+ TS_FAIL("testErrl3: empty pExList");
+ break;
+ }
+ TARGETING::TargetHandle_t pTarget = *pExList.begin();
+
+ // Create an error log
+ errlHndl_t errl = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ ERRORLOG::ERRL_RT_TEST_MOD_ID,
+ ERRORLOG::ERRL_TEST_REASON_CODE);
+
+ // test the different callout types
+ TS_TRACE("test callout target %.8X", TARGETING::get_huid(pTarget));
+ ERRORLOG::ErrlUserDetailsTarget(pTarget).addToLog(errl);
+
+ errl->addHwCallout(pTarget,
+ HWAS::SRCI_PRIORITY_LOW,
+ HWAS::DELAYED_DECONFIG,
+ HWAS::GARD_Fatal);
+
+ errl->addHwCallout(pTarget,
+ HWAS::SRCI_PRIORITY_MED,
+ HWAS::DELAYED_DECONFIG,
+ HWAS::GARD_NULL);
+
+ errl->addHwCallout(TARGETING::MASTER_PROCESSOR_CHIP_TARGET_SENTINEL,
+ HWAS::SRCI_PRIORITY_LOW,
+ HWAS::NO_DECONFIG,
+ HWAS::GARD_PHYP);
+
+ errl->addHwCallout(TARGETING::MASTER_PROCESSOR_CHIP_TARGET_SENTINEL,
+ HWAS::SRCI_PRIORITY_MED,
+ HWAS::DELAYED_DECONFIG,
+ HWAS::GARD_NULL);
+
+ errl->addProcedureCallout(
+ HWAS::EPUB_PRC_MEMORY_PLUGGING_ERROR,
+ HWAS::SRCI_PRIORITY_HIGH);
+
+ errl->addClockCallout(
+ pExList[0],
+ HWAS::TODCLK_TYPE,
+ HWAS::SRCI_PRIORITY_MED);
+
+ if (pExList.size() > 1)
+ {
+ errl->addBusCallout(
+ pExList[0],
+ pExList[1],
+ HWAS::A_BUS_TYPE,
+ HWAS::SRCI_PRIORITY_LOW);
+ }
+
+ errlCommit(errl, CXXTEST_COMP_ID);
+
+ TS_TRACE( "testErrl3 done");
+
+ }
+ while(0);
+ }
+};
+
+#endif
OpenPOWER on IntegriCloud