diff options
Diffstat (limited to 'src/usr/hwpf')
-rw-r--r-- | src/usr/hwpf/fapi/fapiErrorInfo.C | 106 | ||||
-rw-r--r-- | src/usr/hwpf/fapi/fapiReturnCode.C | 46 | ||||
-rw-r--r-- | src/usr/hwpf/plat/fapiPlatHwpInvoker.C | 87 | ||||
-rw-r--r-- | src/usr/hwpf/test/fapiRcTest.C | 169 |
4 files changed, 195 insertions, 213 deletions
diff --git a/src/usr/hwpf/fapi/fapiErrorInfo.C b/src/usr/hwpf/fapi/fapiErrorInfo.C index 7bc25a058..f1d5d81a0 100644 --- a/src/usr/hwpf/fapi/fapiErrorInfo.C +++ b/src/usr/hwpf/fapi/fapiErrorInfo.C @@ -1,25 +1,26 @@ -// IBM_PROLOG_BEGIN_TAG -// This is an automatically generated prolog. -// -// $Source: src/usr/hwpf/fapi/fapiErrorInfo.C $ -// -// IBM CONFIDENTIAL -// -// COPYRIGHT International Business Machines Corp. 2011 -// -// 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 other- -// wise divested of its trade secrets, irrespective of what has -// been deposited with the U.S. Copyright Office. -// -// Origin: 30 -// -// IBM_PROLOG_END +/* IBM_PROLOG_BEGIN_TAG + * This is an automatically generated prolog. + * + * $Source: src/usr/hwpf/fapi/fapiErrorInfo.C $ + * + * IBM CONFIDENTIAL + * + * COPYRIGHT International Business Machines Corp. 2011-2012 + * + * 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 other- + * wise divested of its trade secrets, irrespective of what has + * been deposited with the U.S. Copyright Office. + * + * Origin: 30 + * + * IBM_PROLOG_END_TAG + */ /** * @file fapiErrorInfo.C * @@ -35,6 +36,8 @@ * mjjones 09/22/2011 Major updates * mjjones 03/16/2012 Add FfdcType. Remove copy * ctor and assignment operator + * mjjones 08/14/2012 Merge Callout/Deconfig/Gard + * structures into one */ #include <fapiErrorInfo.H> @@ -82,30 +85,11 @@ FfdcType ErrorInfoFfdc::getType() const } //****************************************************************************** -// ErrorInfoCallout Constructor -//****************************************************************************** -ErrorInfoCallout::ErrorInfoCallout(const Target & i_target, - const CalloutPriority i_priority) -: iv_target(i_target), - iv_priority(i_priority) -{ - -} - -//****************************************************************************** -// ErrorInfoDeconfig Constructor +// ErrorInfoCDG Constructor //****************************************************************************** -ErrorInfoDeconfig::ErrorInfoDeconfig(const Target & i_target) -: iv_target(i_target) -{ - -} - -//****************************************************************************** -// ErrorInfoGard Constructor -//****************************************************************************** -ErrorInfoGard::ErrorInfoGard(const Target & i_target) -: iv_target(i_target) +ErrorInfoCDG::ErrorInfoCDG(const Target & i_target) +: iv_target(i_target), iv_callout(false), iv_calloutPriority(PRI_LOW), + iv_deconfigure(false), iv_gard(false) { } @@ -122,26 +106,38 @@ ErrorInfo::~ErrorInfo() (*l_itr) = NULL; } - for (ErrorInfo::ErrorInfoCalloutItr_t l_itr = iv_callouts.begin(); - l_itr != iv_callouts.end(); ++l_itr) + for (ErrorInfo::ErrorInfoCDGItr_t l_itr = iv_CDGs.begin(); + l_itr != iv_CDGs.end(); ++l_itr) { delete (*l_itr); (*l_itr) = NULL; } +} - for (ErrorInfo::ErrorInfoDeconfigItr_t l_itr = iv_deconfigs.begin(); - l_itr != iv_deconfigs.end(); ++l_itr) +//****************************************************************************** +// ErrorInfo getCreateErrorInfoCDG +//****************************************************************************** +ErrorInfoCDG & ErrorInfo::getCreateErrorInfoCDG(const Target & i_target) +{ + ErrorInfoCDG * l_pInfo = NULL; + + for (ErrorInfo::ErrorInfoCDGCItr_t l_itr = iv_CDGs.begin(); + l_itr != iv_CDGs.end(); ++l_itr) { - delete (*l_itr); - (*l_itr) = NULL; + if ((*l_itr)->iv_target == i_target) + { + l_pInfo = (*l_itr); + break; + } } - for (ErrorInfo::ErrorInfoGardItr_t l_itr = iv_gards.begin(); - l_itr != iv_gards.end(); ++l_itr) + if (l_pInfo == NULL) { - delete (*l_itr); - (*l_itr) = NULL; + l_pInfo = new ErrorInfoCDG(i_target); + iv_CDGs.push_back(l_pInfo); } + + return *l_pInfo; } } diff --git a/src/usr/hwpf/fapi/fapiReturnCode.C b/src/usr/hwpf/fapi/fapiReturnCode.C index 8a141f519..08eca6c82 100644 --- a/src/usr/hwpf/fapi/fapiReturnCode.C +++ b/src/usr/hwpf/fapi/fapiReturnCode.C @@ -46,6 +46,7 @@ * mjjones 03/16/2012 Allow different PLAT errors * mjjones 05/02/2012 Only trace setEcmdError on err * mjjones 07/11/2012 Remove a trace + * mjjones 08/14/2012 Use new ErrorInfo structure */ #include <fapiReturnCode.H> @@ -197,8 +198,7 @@ void ReturnCode::setPlatError(void * i_pData, if (i_pData) { - ensureDataRefExists(); - iv_pDataRef->setPlatData(i_pData); + getCreateReturnCodeDataRef().setPlatData(i_pData); } } @@ -336,9 +336,9 @@ void ReturnCode::addEIFfdc(const void * i_pFfdc, const FfdcType i_type) { // Create a ErrorInfoFfdc object and add it to the Error Information - ensureDataRefExists(); ErrorInfoFfdc * l_pFfdc = new ErrorInfoFfdc(i_pFfdc, i_size, i_type); - iv_pDataRef->getCreateErrorInfo().iv_ffdcs.push_back(l_pFfdc); + getCreateReturnCodeDataRef().getCreateErrorInfo(). + iv_ffdcs.push_back(l_pFfdc); } @@ -377,14 +377,16 @@ ReturnCode::returnCodeCreator ReturnCode::getCreator() const } //****************************************************************************** -// ensureDataRefExists function +// getCreateReturnCodeDataRef function //****************************************************************************** -void ReturnCode::ensureDataRefExists() +ReturnCodeDataRef & ReturnCode::getCreateReturnCodeDataRef() { - if (!iv_pDataRef) + if (iv_pDataRef == NULL) { iv_pDataRef = new ReturnCodeDataRef(); } + + return *iv_pDataRef; } //****************************************************************************** @@ -411,10 +413,16 @@ void ReturnCode::forgetData() void ReturnCode::addEICallout(const Target & i_target, const CalloutPriority i_priority) { - // Create a ErrorInfoCallout object and add it to the Error Information - ensureDataRefExists(); - ErrorInfoCallout * l_pCallout = new ErrorInfoCallout(i_target, i_priority); - iv_pDataRef->getCreateErrorInfo().iv_callouts.push_back(l_pCallout); + // Get/Create a ErrorInfoCDG object for the target and update the callout + ErrorInfoCDG & l_errorInfoCdg = getCreateReturnCodeDataRef(). + getCreateErrorInfo().getCreateErrorInfoCDG(i_target); + l_errorInfoCdg.iv_callout = true; + + // If the same target is called out multiple times, use the highest priority + if (i_priority > l_errorInfoCdg.iv_calloutPriority) + { + l_errorInfoCdg.iv_calloutPriority = i_priority; + } } //****************************************************************************** @@ -422,10 +430,10 @@ void ReturnCode::addEICallout(const Target & i_target, //****************************************************************************** void ReturnCode::addEIDeconfigure(const Target & i_target) { - // Create a ErrorInfoDeconfig object and add it to the Error Information - ensureDataRefExists(); - ErrorInfoDeconfig * l_pDeconfig = new ErrorInfoDeconfig(i_target); - iv_pDataRef->getCreateErrorInfo().iv_deconfigs.push_back(l_pDeconfig); + // Get/Create a ErrorInfoCDG object for the target and update the deconfig + ErrorInfoCDG & l_errorInfoCdg = getCreateReturnCodeDataRef(). + getCreateErrorInfo().getCreateErrorInfoCDG(i_target); + l_errorInfoCdg.iv_deconfigure = true; } //****************************************************************************** @@ -433,10 +441,10 @@ void ReturnCode::addEIDeconfigure(const Target & i_target) //****************************************************************************** void ReturnCode::addEIGard(const Target & i_target) { - // Create a ErrorInfoGard object and add it to the Error Information - ensureDataRefExists(); - ErrorInfoGard * l_pGard = new ErrorInfoGard(i_target); - iv_pDataRef->getCreateErrorInfo().iv_gards.push_back(l_pGard); + // Get/Create a ErrorInfoCDG object for the target and update the GARD + ErrorInfoCDG & l_errorInfoCdg = getCreateReturnCodeDataRef(). + getCreateErrorInfo().getCreateErrorInfoCDG(i_target); + l_errorInfoCdg.iv_gard = true; } } diff --git a/src/usr/hwpf/plat/fapiPlatHwpInvoker.C b/src/usr/hwpf/plat/fapiPlatHwpInvoker.C index c35a90eec..b2d716797 100644 --- a/src/usr/hwpf/plat/fapiPlatHwpInvoker.C +++ b/src/usr/hwpf/plat/fapiPlatHwpInvoker.C @@ -74,59 +74,48 @@ void processEIFfdcs(const ErrorInfo & i_errInfo, } //****************************************************************************** -// processEICallouts -// Processes any Callout requests in the ReturnCode Error Information +// processEICDGs +// Processes any Callout/Deconfigure/GARD requests in the ReturnCode Error +// Information //****************************************************************************** -void processEICallouts(const ErrorInfo & i_errInfo, - errlHndl_t io_pError) +void processEICDGs(const ErrorInfo & i_errInfo, + errlHndl_t io_pError) { - // Iterate through the callout requestss, adding each to the error log - for (ErrorInfo::ErrorInfoCalloutCItr_t l_itr = - i_errInfo.iv_callouts.begin(); - l_itr != i_errInfo.iv_callouts.end(); ++l_itr) + // TODO: RTC issue 47147 + // Need to figure out how connections are called out. Assuming this is done + // by calling out Target pairs, then the HWAS::SRCI_PRIORITY will need to + // be a 'grouping' priority (MEDA/B/C) + + // Iterate through the CGD requests, adding each to the error log + for (ErrorInfo::ErrorInfoCDGCItr_t l_itr = i_errInfo.iv_CDGs.begin(); + l_itr != i_errInfo.iv_CDGs.end(); ++l_itr) { - // TODO Add callout to error log - // RTC 45800 - FAPI_ERR("processEICallouts: Adding target callout to errlog (TODO). Type: 0x%x. Pri: 0x%x", - (*l_itr)->iv_target.getType(), (*l_itr)->iv_priority); - } -} + TARGETING::Target * l_pTarget = + reinterpret_cast<TARGETING::Target*>((*l_itr)->iv_target.get()); -//****************************************************************************** -// processEIDeconfigs -// Processes any Deconfig requests in the ReturnCode Error Information -//****************************************************************************** -void processEIDeconfigs(const ErrorInfo & i_errInfo, - errlHndl_t io_pError) -{ - // Iterate through the deconfigure requests, deconfiguring each target - for (ErrorInfo::ErrorInfoDeconfigCItr_t l_itr = - i_errInfo.iv_deconfigs.begin(); - l_itr != i_errInfo.iv_deconfigs.end(); ++l_itr) - { - // TODO Deconfigure target - // RTC 45800 - FAPI_ERR("processEIDeconfigs: Deconfiguring target (TODO). Type: 0x%x", - (*l_itr)->iv_target.getType()); - } -} + HWAS::callOutPriority l_priority = HWAS::SRCI_PRIORITY_HIGH; + if ((*l_itr)->iv_calloutPriority == fapi::PRI_MEDIUM) + { + l_priority = HWAS::SRCI_PRIORITY_MED; + } + else if ((*l_itr)->iv_calloutPriority == fapi::PRI_LOW) + { + l_priority = HWAS::SRCI_PRIORITY_LOW; + } + HWAS::DeconfigEnum l_deconfig = HWAS::NO_DECONFIG; + if ((*l_itr)->iv_deconfigure) + { + l_deconfig = HWAS::DELAYED_DECONFIG; + } -//****************************************************************************** -// processEIGards -// Processes any Gard requests in the ReturnCode Error Information -//****************************************************************************** -void processEIGards(const ErrorInfo & i_errInfo, - errlHndl_t io_pError) -{ - // Iterate through gard requests, creating a GARD record for each target - for (ErrorInfo::ErrorInfoGardCItr_t l_itr = i_errInfo.iv_gards.begin(); - l_itr != i_errInfo.iv_gards.end(); ++l_itr) - { - // TODO Create GARD record for target - // RTC 45800 - FAPI_ERR("processEIGards: Garding target (TODO). Type: 0x%x", - (*l_itr)->iv_target.getType()); + HWAS::GARD_ErrorType l_gard = HWAS::GARD_NULL; + if ((*l_itr)->iv_gard) + { + l_gard = HWAS::GARD_Unrecoverable; + } + + io_pError->addHwCallout(l_pTarget, l_priority, l_deconfig, l_gard); } } @@ -179,9 +168,7 @@ errlHndl_t fapiRcToErrl(ReturnCode & io_rc) { // There is error information associated with the ReturnCode processEIFfdcs(*l_pErrorInfo, l_pError); - processEICallouts(*l_pErrorInfo, l_pError); - processEIDeconfigs(*l_pErrorInfo, l_pError); - processEIGards(*l_pErrorInfo, l_pError); + processEICDGs(*l_pErrorInfo, l_pError); } else { diff --git a/src/usr/hwpf/test/fapiRcTest.C b/src/usr/hwpf/test/fapiRcTest.C index c9c1281d5..182520caa 100644 --- a/src/usr/hwpf/test/fapiRcTest.C +++ b/src/usr/hwpf/test/fapiRcTest.C @@ -1,25 +1,26 @@ -// IBM_PROLOG_BEGIN_TAG -// This is an automatically generated prolog. -// -// $Source: src/usr/hwpf/test/fapiRcTest.C $ -// -// IBM CONFIDENTIAL -// -// COPYRIGHT International Business Machines Corp. 2011 -// -// 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 other- -// wise divested of its trade secrets, irrespective of what has -// been deposited with the U.S. Copyright Office. -// -// Origin: 30 -// -// IBM_PROLOG_END +/* IBM_PROLOG_BEGIN_TAG + * This is an automatically generated prolog. + * + * $Source: src/usr/hwpf/test/fapiRcTest.C $ + * + * IBM CONFIDENTIAL + * + * COPYRIGHT International Business Machines Corp. 2011-2012 + * + * 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 other- + * wise divested of its trade secrets, irrespective of what has + * been deposited with the U.S. Copyright Office. + * + * Origin: 30 + * + * IBM_PROLOG_END_TAG + */ /** * @file fapiTargetTest.C * @@ -34,6 +35,7 @@ * mjjones 07/26/2011 Added more tests * mjjones 09/23/2011 Updated test for ErrorInfo * mjjones 01/13/2012 Use new ReturnCode interfaces + * mjjones 08/14/2012 Use new ErrorInfo structures */ #include <fapi.H> @@ -662,57 +664,49 @@ uint32_t rcTest12() break; } - // Check the callout error information - if (l_pErrInfo->iv_callouts.size() != 1) + // Check the callout/deconfigure/gard error information + if (l_pErrInfo->iv_CDGs.size() != 1) { - FAPI_ERR("rcTest12. %d callouts", l_pErrInfo->iv_ffdcs.size()); + FAPI_ERR("rcTest12. %d CDGs", l_pErrInfo->iv_CDGs.size()); l_result = 5; break; } - if (l_pErrInfo->iv_callouts[0]->iv_target != l_target) + if (l_pErrInfo->iv_CDGs[0]->iv_target != l_target) { - FAPI_ERR("rcTest12. callout target mismatch"); + FAPI_ERR("rcTest12. CDG target mismatch"); l_result = 6; break; } - if (l_pErrInfo->iv_callouts[0]->iv_priority != PRI_MEDIUM) + if (l_pErrInfo->iv_CDGs[0]->iv_callout != true) { - FAPI_ERR("rcTest12. callout priority mismatch"); + FAPI_ERR("rcTest12. callout not set"); l_result = 7; break; } - // Check the deconfig error information - if (l_pErrInfo->iv_deconfigs.size() != 1) + if (l_pErrInfo->iv_CDGs[0]->iv_calloutPriority != PRI_MEDIUM) { - FAPI_ERR("rcTest12. %d deconfigs", l_pErrInfo->iv_deconfigs.size()); + FAPI_ERR("rcTest12. callout priority mismatch"); l_result = 8; break; } - if (l_pErrInfo->iv_deconfigs[0]->iv_target != l_target) + if (l_pErrInfo->iv_CDGs[0]->iv_deconfigure != true) { - FAPI_ERR("rcTest12. deconfig target mismatch"); + FAPI_ERR("rcTest12. deconfigure not set"); l_result = 9; break; } - // Check the GARD error information - if (l_pErrInfo->iv_gards.size() != 1) + if (l_pErrInfo->iv_CDGs[0]->iv_gard != true) { - FAPI_ERR("rcTest12. %d gards", l_pErrInfo->iv_gards.size()); + FAPI_ERR("rcTest12. GARD not set"); l_result = 10; break; } - if (l_pErrInfo->iv_gards[0]->iv_target != l_target) - { - FAPI_ERR("rcTest12. gard target mismatch"); - l_result = 11; - break; - } FAPI_INF("rcTest12. Success!"); } @@ -767,20 +761,27 @@ uint32_t rcTest13() break; } - if (l_pErrInfo->iv_gards.size() != 1) + if (l_pErrInfo->iv_CDGs.size() != 1) { - FAPI_ERR("rcTest13. %d gards", l_pErrInfo->iv_gards.size()); + FAPI_ERR("rcTest13. %d CDGs", l_pErrInfo->iv_CDGs.size()); l_result = 3; break; } - if (l_pErrInfo->iv_gards[0]->iv_target != l_target) + if (l_pErrInfo->iv_CDGs[0]->iv_target != l_target) { - FAPI_ERR("rcTest13. gard target mismatch"); + FAPI_ERR("rcTest13. CDG target mismatch"); l_result = 4; break; } + if (l_pErrInfo->iv_CDGs[0]->iv_gard != true) + { + FAPI_ERR("rcTest13. GARD not set"); + l_result = 5; + break; + } + // Ensure that getErrorInfo from l_rc2 returns the same pointer const ErrorInfo * l_pErrInfo2 = l_rc2.getErrorInfo(); @@ -845,20 +846,27 @@ uint32_t rcTest14() break; } - if (l_pErrInfo->iv_gards.size() != 1) + if (l_pErrInfo->iv_CDGs.size() != 1) { - FAPI_ERR("rcTest14. %d gards", l_pErrInfo->iv_gards.size()); + FAPI_ERR("rcTest14. %d CDGs", l_pErrInfo->iv_CDGs.size()); l_result = 3; break; } - if (l_pErrInfo->iv_gards[0]->iv_target != l_target) + if (l_pErrInfo->iv_CDGs[0]->iv_target != l_target) { - FAPI_ERR("rcTest14. gard target mismatch"); + FAPI_ERR("rcTest14. CDG target mismatch"); l_result = 4; break; } + if (l_pErrInfo->iv_CDGs[0]->iv_gard != true) + { + FAPI_ERR("rcTest14. GARD not set"); + l_result = 5; + break; + } + // Ensure that getErrorInfo from l_rc2 returns the same pointer const ErrorInfo * l_pErrInfo2 = l_rc2.getErrorInfo(); @@ -951,9 +959,8 @@ uint32_t rcTest16() {fapi::ReturnCode::EI_TYPE_CALLOUT, 3, fapi::PRI_LOW}, {fapi::ReturnCode::EI_TYPE_DECONF, 2}, {fapi::ReturnCode::EI_TYPE_DECONF, 3}, - {fapi::ReturnCode::EI_TYPE_GARD, 2}, - {fapi::ReturnCode::EI_TYPE_GARD, 3}}; - l_rc.addErrorInfo(l_objects, l_entries, 8); + {fapi::ReturnCode::EI_TYPE_GARD, 2}}; + l_rc.addErrorInfo(l_objects, l_entries, 7); do { @@ -1013,86 +1020,70 @@ uint32_t rcTest16() break; } - // Check the callout error information - if (l_pErrInfo->iv_callouts.size() != 2) + // Check the callout/deconfigure/GARD error information + if (l_pErrInfo->iv_CDGs.size() != 2) { - FAPI_ERR("rcTest16. %d callouts", l_pErrInfo->iv_ffdcs.size()); + FAPI_ERR("rcTest16. %d CDGs", l_pErrInfo->iv_CDGs.size()); l_result = 7; break; } - if (l_pErrInfo->iv_callouts[0]->iv_target != l_target) + if (l_pErrInfo->iv_CDGs[0]->iv_target != l_target) { - FAPI_ERR("rcTest16. callout[0] target mismatch"); + FAPI_ERR("rcTest16. CDG[0] target mismatch"); l_result = 8; break; } - if (l_pErrInfo->iv_callouts[0]->iv_priority != PRI_HIGH) + if (l_pErrInfo->iv_CDGs[0]->iv_calloutPriority != PRI_HIGH) { - FAPI_ERR("rcTest16. callout[0] priority mismatch"); + FAPI_ERR("rcTest16. CDG[0] callout priority mismatch"); l_result = 9; break; } - if (l_pErrInfo->iv_callouts[1]->iv_target != l_target2) + if (l_pErrInfo->iv_CDGs[0]->iv_deconfigure == false) { - FAPI_ERR("rcTest16. callout[1] target mismatch"); + FAPI_ERR("rcTest16. CDG[0] deconfigure not set"); l_result = 10; break; } - if (l_pErrInfo->iv_callouts[1]->iv_priority != PRI_LOW) + if (l_pErrInfo->iv_CDGs[0]->iv_gard == false) { - FAPI_ERR("rcTest16. callout[1] priority mismatch"); + FAPI_ERR("rcTest16. CDG[0] gard not set"); l_result = 11; break; } - // Check the deconfig error information - if (l_pErrInfo->iv_deconfigs.size() != 2) + if (l_pErrInfo->iv_CDGs[1]->iv_target != l_target2) { - FAPI_ERR("rcTest16. %d deconfigs", l_pErrInfo->iv_deconfigs.size()); + FAPI_ERR("rcTest16. CDG[1] target mismatch"); l_result = 12; break; } - if (l_pErrInfo->iv_deconfigs[0]->iv_target != l_target) + if (l_pErrInfo->iv_CDGs[1]->iv_calloutPriority != PRI_LOW) { - FAPI_ERR("rcTest16. deconfig[0] target mismatch"); + FAPI_ERR("rcTest16. CDG[1] callout priority mismatch"); l_result = 13; break; } - if (l_pErrInfo->iv_deconfigs[1]->iv_target != l_target2) + if (l_pErrInfo->iv_CDGs[1]->iv_deconfigure == false) { - FAPI_ERR("rcTest16. deconfig[1] target mismatch"); - l_result = 13; - break; - } - - // Check the GARD error information - if (l_pErrInfo->iv_gards.size() != 2) - { - FAPI_ERR("rcTest16. %d gards", l_pErrInfo->iv_gards.size()); + FAPI_ERR("rcTest16. CDG[1] deconfigure not set"); l_result = 14; break; } - if (l_pErrInfo->iv_gards[0]->iv_target != l_target) + if (l_pErrInfo->iv_CDGs[1]->iv_gard == true) { - FAPI_ERR("rcTest16. gard[0] target mismatch"); + FAPI_ERR("rcTest16. CDG[1] gard set"); l_result = 15; break; } - if (l_pErrInfo->iv_gards[1]->iv_target != l_target2) - { - FAPI_ERR("rcTest16. gard[1] target mismatch"); - l_result = 16; - break; - } - FAPI_INF("rcTest16. Success!"); } while(0); |