diff options
| author | Doug Gilbert <dgilbert@us.ibm.com> | 2013-09-18 16:15:48 -0500 |
|---|---|---|
| committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-10-17 11:26:14 -0500 |
| commit | 25a68ad9643b83001dbe80120f854221e65e9585 (patch) | |
| tree | e635de6c5c07e2f99a309256c8bcf69ca495034d /src/usr/errl/runtime | |
| parent | 63245d62a4ffe99ad2eaf6b4f1a88862065ceedf (diff) | |
| download | blackbird-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/makefile | 39 | ||||
| -rw-r--r-- | src/usr/errl/runtime/rt_errlmanager.C | 283 | ||||
| -rw-r--r-- | src/usr/errl/runtime/test/makefile | 29 | ||||
| -rw-r--r-- | src/usr/errl/runtime/test/rt_errltest.H | 348 |
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 |

