summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/plat/fapiPlatHwpInvoker.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/hwpf/plat/fapiPlatHwpInvoker.C')
-rw-r--r--src/usr/hwpf/plat/fapiPlatHwpInvoker.C784
1 files changed, 0 insertions, 784 deletions
diff --git a/src/usr/hwpf/plat/fapiPlatHwpInvoker.C b/src/usr/hwpf/plat/fapiPlatHwpInvoker.C
deleted file mode 100644
index 09a2815df..000000000
--- a/src/usr/hwpf/plat/fapiPlatHwpInvoker.C
+++ /dev/null
@@ -1,784 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/plat/fapiPlatHwpInvoker.C $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2011,2015 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* You may obtain a copy of the License at */
-/* */
-/* http://www.apache.org/licenses/LICENSE-2.0 */
-/* */
-/* Unless required by applicable law or agreed to in writing, software */
-/* distributed under the License is distributed on an "AS IS" BASIS, */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
-/* implied. See the License for the specific language governing */
-/* permissions and limitations under the License. */
-/* */
-/* IBM_PROLOG_END_TAG */
-/**
- * @file fapiPlatHwpInvoker.C
- *
- * @brief Implements the fapiRcToErrl function.
- */
-
-#include <fapiTarget.H>
-#include <fapiReturnCode.H>
-#include <fapiSystemConfig.H>
-#include <fapiPlatTrace.H>
-#include <fapiErrorInfo.H>
-#include <isteps/hwpf_reasoncodes.H>
-#include <errl/errlentry.H>
-#include <targeting/common/utilFilter.H>
-
-namespace fapi
-{
-
-/**
- * @brief Translates a FAPI callout priority to an HWAS callout priority
- *
- * @param[i] i_fapiPri FAPI callout priority
- *
- * @return HWAS callout priority
- */
-HWAS::callOutPriority xlateCalloutPriority(
- const fapi::CalloutPriorities::CalloutPriority i_fapiPri)
-{
- // Use the CalloutPriority enum value as an index
- HWAS::callOutPriority l_priority = HWAS::SRCI_PRIORITY_HIGH;
- size_t l_index = i_fapiPri;
-
- const HWAS::callOutPriority HWAS_PRI[] = {HWAS::SRCI_PRIORITY_LOW,
- HWAS::SRCI_PRIORITY_MED,
- HWAS::SRCI_PRIORITY_HIGH};
-
- if (l_index < (sizeof(HWAS_PRI)/sizeof(HWAS::callOutPriority)))
- {
- l_priority = HWAS_PRI[l_index];
- }
- else
- {
- FAPI_ERR("fapi::xlateCalloutPriority: Unknown priority 0x%x, assuming HIGH",
- i_fapiPri);
- }
-
- return l_priority;
-}
-
-/**
- * @brief Translates a FAPI Clock HW callout to an HWAS clock callout
- *
- * @param[i] i_fapiClock FAPI Clock HW callout
- *
- * @return HWAS Clock HW callout
- */
-HWAS::clockTypeEnum xlateClockHwCallout(
- const fapi::HwCallouts::HwCallout i_fapiClock)
-{
- // Use the HwCallout enum value as an index
- HWAS::clockTypeEnum l_clock = HWAS::TODCLK_TYPE;
- size_t l_index = i_fapiClock;
-
- const HWAS::clockTypeEnum HWAS_CLOCK[] = {
- HWAS::TODCLK_TYPE,
- HWAS::MEMCLK_TYPE,
- HWAS::OSCREFCLK_TYPE,
- HWAS::OSCPCICLK_TYPE};
-
- if (l_index < (sizeof(HWAS_CLOCK)/sizeof(HWAS::clockTypeEnum)))
- {
- l_clock = HWAS_CLOCK[l_index];
- }
- else
- {
- FAPI_ERR("fapi::xlateClockHwCallout: Unknown clock 0x%x, assuming TOD",
- i_fapiClock);
- }
-
- return l_clock;
-}
-
-/**
- * @brief Translates a FAPI Part HW callout to an HWAS part callout
- *
- * @param[i] i_fapiPart FAPI part HW callout
- *
- * @return HWAS part HW callout
- */
-HWAS::partTypeEnum xlatePartHwCallout(
- const fapi::HwCallouts::HwCallout i_fapiPart)
-{
- // Use the HwCallout enum value as an index
- HWAS::partTypeEnum l_part;
-
- // clock xlate function above assumes indexes match
- // between 2 enums. seems better to do it explicitly
-
- switch (i_fapiPart)
- {
- case HwCallouts::FLASH_CONTROLLER_PART:
- l_part = HWAS::FLASH_CONTROLLER_PART_TYPE;
- break;
- case HwCallouts::PNOR_PART:
- l_part = HWAS::PNOR_PART_TYPE;
- break;
- case HwCallouts::SBE_SEEPROM_PART:
- l_part = HWAS::SBE_SEEPROM_PART_TYPE;
- break;
- case HwCallouts::VPD_PART:
- l_part = HWAS::VPD_PART_TYPE;
- break;
- case HwCallouts::LPC_SLAVE_PART:
- l_part = HWAS::LPC_SLAVE_PART_TYPE;
- break;
- case HwCallouts::GPIO_EXPANDER_PART:
- l_part = HWAS::GPIO_EXPANDER_PART_TYPE;
- break;
- case HwCallouts::SPIVID_SLAVE_PART:
- l_part = HWAS::SPIVID_SLAVE_PART_TYPE;
- break;
-
- default:
- FAPI_ERR("fapi::xlatePartHwCallout: Unknown part",
- i_fapiPart);
- l_part = HWAS::NO_PART_TYPE;
- }
-
- return l_part;
-}
-/**
- * @brief Translates a FAPI procedure callout to an HWAS procedure callout
- *
- * @param[i] i_fapiProc FAPI procedure callout
- *
- * @return HWAS procedure callout
- */
-HWAS::epubProcedureID xlateProcedureCallout(
- const fapi::ProcedureCallouts::ProcedureCallout i_fapiProc)
-{
- // Use the ProcedureCallout enum value as an index
- HWAS::epubProcedureID l_proc = HWAS::EPUB_PRC_HB_CODE;
- size_t l_index = i_fapiProc;
-
- const HWAS::epubProcedureID HWAS_PROC[] = {
- HWAS::EPUB_PRC_HB_CODE,
- HWAS::EPUB_PRC_LVL_SUPP,
- HWAS::EPUB_PRC_MEMORY_PLUGGING_ERROR,
- HWAS::EPUB_PRC_EIBUS_ERROR};
-
- if (l_index < (sizeof(HWAS_PROC)/sizeof(HWAS::epubProcedureID)))
- {
- l_proc = HWAS_PROC[l_index];
- }
- else
- {
- FAPI_ERR("fapi::xlateProcedureCallout: Unknown proc 0x%x, assuming CODE",
- i_fapiProc);
- }
-
- return l_proc;
-}
-
-/**
- * @brief Translates a FAPI target type to a Targeting target type
- *
- * @param[i] i_targetType FAPI target type
- * @param[o] o_class Targeting class
- * @param[o] o_type Targeting type
- */
-void xlateTargetType(const fapi::TargetType i_targetType,
- TARGETING::CLASS & o_class,
- TARGETING::TYPE & o_type)
-{
- switch (i_targetType)
- {
- case fapi::TARGET_TYPE_SYSTEM:
- o_class = TARGETING::CLASS_SYS;
- o_type = TARGETING::TYPE_SYS;
- break;
- case fapi::TARGET_TYPE_DIMM:
- o_class = TARGETING::CLASS_LOGICAL_CARD;
- o_type = TARGETING::TYPE_DIMM;
- break;
- case fapi::TARGET_TYPE_PROC_CHIP:
- o_class = TARGETING::CLASS_CHIP;
- o_type = TARGETING::TYPE_PROC;
- break;
- case fapi::TARGET_TYPE_MEMBUF_CHIP:
- o_class = TARGETING::CLASS_CHIP;
- o_type = TARGETING::TYPE_MEMBUF;
- break;
- case fapi::TARGET_TYPE_EX_CHIPLET:
- o_class = TARGETING::CLASS_UNIT;
- o_type = TARGETING::TYPE_EX;
- break;
- case fapi::TARGET_TYPE_MBA_CHIPLET:
- o_class = TARGETING::CLASS_UNIT;
- o_type = TARGETING::TYPE_MBA;
- break;
- case fapi::TARGET_TYPE_MCS_CHIPLET:
- o_class = TARGETING::CLASS_UNIT;
- o_type = TARGETING::TYPE_MCS;
- break;
- case fapi::TARGET_TYPE_XBUS_ENDPOINT:
- o_class = TARGETING::CLASS_UNIT;
- o_type = TARGETING::TYPE_XBUS;
- break;
- case fapi::TARGET_TYPE_ABUS_ENDPOINT:
- o_class = TARGETING::CLASS_UNIT;
- o_type = TARGETING::TYPE_ABUS;
- break;
- case fapi::TARGET_TYPE_L4:
- o_class = TARGETING::CLASS_UNIT;
- o_type = TARGETING::TYPE_L4;
- break;
- default:
- o_class = TARGETING::CLASS_NA;
- o_type = TARGETING::TYPE_NA;
- }
-}
-
-/**
- * @brief Processes any FFDC in the ReturnCode Error Information and adds them
- * to the error log
- *
- * @param[i] i_errInfo Reference to ReturnCode Error Information
- * @param[io] io_pError Errorlog Handle
- */
-void processEIFfdcs(const ErrorInfo & i_errInfo,
- errlHndl_t io_pError)
-{
- // Iterate through the FFDC sections, adding each to the error log
- uint32_t l_size = 0;
-
- for (ErrorInfo::ErrorInfoFfdcCItr_t l_itr = i_errInfo.iv_ffdcs.begin();
- l_itr != i_errInfo.iv_ffdcs.end(); ++l_itr)
- {
- const void * l_pFfdc = (*l_itr)->getData(l_size);
- uint32_t l_ffdcId = (*l_itr)->getFfdcId();
-
- // Add the FFDC ID as the first word, then the FFDC data
- FAPI_DBG("processEIFfdcs: Adding %d bytes of FFDC (id:0x%08x)", l_size,
- l_ffdcId);
- ERRORLOG::ErrlUD * l_pUD = io_pError->addFFDC(
- HWPF_COMP_ID, &l_ffdcId, sizeof(l_ffdcId), 1, HWPF_UDT_HWP_FFDC);
-
- if (l_pUD)
- {
- io_pError->appendToFFDC(l_pUD, l_pFfdc, l_size);
- }
- }
-}
-
-/**
- * @brief Processes any HW callouts requests in the ReturnCode Error
- * Information and adds them to the error log
- *
- * @param[i] i_errInfo Reference to ReturnCode Error Information
- * @param[io] io_pError Errorlog Handle
- */
-void processEIHwCallouts(const ErrorInfo & i_errInfo,
- errlHndl_t io_pError)
-{
- // Iterate through the HW callout requests, adding each to the error log
- for (ErrorInfo::ErrorInfoHwCalloutCItr_t l_itr =
- i_errInfo.iv_hwCallouts.begin();
- l_itr != i_errInfo.iv_hwCallouts.end(); ++l_itr)
- {
- HWAS::callOutPriority l_priority =
- xlateCalloutPriority((*l_itr)->iv_calloutPriority);
-
- HwCallouts::HwCallout l_hw = ((*l_itr)->iv_hw);
-
- TARGETING::Target * l_pRefTarget =
- reinterpret_cast<TARGETING::Target*>((*l_itr)->iv_refTarget.get());
-
- if ( ((l_hw == HwCallouts::TOD_CLOCK) ||
- (l_hw == HwCallouts::MEM_REF_CLOCK) ||
- (l_hw == HwCallouts::PROC_REF_CLOCK) ||
- (l_hw == HwCallouts::PCI_REF_CLOCK)) &&
- l_pRefTarget != NULL)
- {
- HWAS::clockTypeEnum l_clock =
- xlateClockHwCallout((*l_itr)->iv_hw);
-
- FAPI_ERR("processEIHwCallouts: Adding clock-callout"
- " (clock:%d, pri:%d)",
- l_clock, l_priority);
-
- //@fixme-RTC:127069-add native support to deconfig/gard clocks
- // Force PCI clocks to be deconfigured and garded
- if( l_hw == HwCallouts::PCI_REF_CLOCK )
- {
- io_pError->addClockCallout(l_pRefTarget,
- l_clock,
- l_priority,
- HWAS::DECONFIG,
- HWAS::GARD_Predictive);
- }
- else
- {
- io_pError->addClockCallout(l_pRefTarget, l_clock, l_priority);
- }
- }
- else if ( (l_hw == HwCallouts::FLASH_CONTROLLER_PART) ||
- (l_hw == HwCallouts::PNOR_PART) ||
- (l_hw == HwCallouts::SBE_SEEPROM_PART) ||
- (l_hw == HwCallouts::VPD_PART) ||
- (l_hw == HwCallouts::LPC_SLAVE_PART) ||
- (l_hw == HwCallouts::GPIO_EXPANDER_PART) ||
- (l_hw == HwCallouts::SPIVID_SLAVE_PART) )
- {
- HWAS::partTypeEnum l_part =
- xlatePartHwCallout((*l_itr)->iv_hw);
-
- FAPI_ERR("processEIHwCallouts: Adding part-callout"
- " (part:%d, pri:%d)",
- l_part, l_priority);
- io_pError->addPartCallout(l_pRefTarget, l_part, l_priority);
- }
- else
- {
- FAPI_ERR("processEIHwCallouts: Unsupported HW callout (%d)", l_hw);
- io_pError->addPartCallout(l_pRefTarget, HWAS::NO_PART_TYPE,
- l_priority);
- io_pError->addProcedureCallout( HWAS::EPUB_PRC_HB_CODE, l_priority);
- }
- }
-}
-
-/**
- * @brief Processes any Procedure callouts requests in the ReturnCode Error
- * Information and adds them to the error log
- *
- * @param[i] i_errInfo Reference to ReturnCode Error Information
- * @param[io] io_pError Errorlog Handle
- */
-void processEIProcCallouts(const ErrorInfo & i_errInfo,
- errlHndl_t io_pError)
-{
- // Iterate through the procedure callout requests, adding each to the error
- // log
- for (ErrorInfo::ErrorInfoProcedureCalloutCItr_t l_itr =
- i_errInfo.iv_procedureCallouts.begin();
- l_itr != i_errInfo.iv_procedureCallouts.end(); ++l_itr)
- {
- HWAS::epubProcedureID l_procedure =
- xlateProcedureCallout((*l_itr)->iv_procedure);
-
- HWAS::callOutPriority l_priority =
- xlateCalloutPriority((*l_itr)->iv_calloutPriority);
-
- FAPI_DBG("processEIProcCallouts: Adding proc-callout"
- " (proc:0x%02x, pri:%d)",
- l_procedure, l_priority);
- io_pError->addProcedureCallout(l_procedure, l_priority);
- }
-}
-
-/**
- * @brief Processes any Bus callouts requests in the ReturnCode Error
- * Information and adds them to the error log
- *
- * @param[i] i_errInfo Reference to ReturnCode Error Information
- * @param[io] io_pError Errorlog Handle
- */
-void processEIBusCallouts(const ErrorInfo & i_errInfo,
- errlHndl_t io_pError)
-{
- // Iterate through the bus callout requests, adding each to the error log
- for (ErrorInfo::ErrorInfoBusCalloutCItr_t l_itr =
- i_errInfo.iv_busCallouts.begin();
- l_itr != i_errInfo.iv_busCallouts.end(); ++l_itr)
- {
- TARGETING::Target * l_pTarget1 =
- reinterpret_cast<TARGETING::Target*>((*l_itr)->iv_target1.get());
-
- TARGETING::Target * l_pTarget2 =
- reinterpret_cast<TARGETING::Target*>((*l_itr)->iv_target2.get());
-
- HWAS::callOutPriority l_priority =
- xlateCalloutPriority((*l_itr)->iv_calloutPriority);
-
- bool l_busTypeValid = true;
- HWAS::busTypeEnum l_busType = HWAS::FSI_BUS_TYPE;
- TARGETING::TYPE l_type1 = l_pTarget1->getAttr<TARGETING::ATTR_TYPE>();
- TARGETING::TYPE l_type2 = l_pTarget2->getAttr<TARGETING::ATTR_TYPE>();
-
- if ( ((l_type1 == TARGETING::TYPE_MCS) &&
- (l_type2 == TARGETING::TYPE_MEMBUF)) ||
- ((l_type1 == TARGETING::TYPE_MEMBUF) &&
- (l_type2 == TARGETING::TYPE_MCS)) )
- {
- l_busType = HWAS::DMI_BUS_TYPE;
- }
- else if ((l_type1 == TARGETING::TYPE_ABUS) &&
- (l_type2 == TARGETING::TYPE_ABUS))
- {
- l_busType = HWAS::A_BUS_TYPE;
- }
- else if ((l_type1 == TARGETING::TYPE_XBUS) &&
- (l_type2 == TARGETING::TYPE_XBUS))
- {
- l_busType = HWAS::X_BUS_TYPE;
- }
- else
- {
- FAPI_ERR("processEIBusCallouts: Bus between target types not known (0x%08x:0x%08x)",
- l_type1, l_type2);
- l_busTypeValid = false;
- }
-
- if (l_busTypeValid)
- {
- FAPI_DBG("processEIBusCallouts: Adding bus-callout"
- " (bus:%d, pri:%d)",
- l_busType, l_priority);
- io_pError->addBusCallout(l_pTarget1, l_pTarget2, l_busType,
- l_priority);
- }
- }
-}
-
-/**
- * @brief Processes any Callout/Deconfigure/GARD requests in the ReturnCode Error
- * Information and adds them to the error log
- *
- * @param[i] i_errInfo Reference to ReturnCode Error Information
- * @param[io] io_pError Errorlog Handle
- */
-void processEICDGs(const ErrorInfo & i_errInfo,
- errlHndl_t io_pError)
-{
- // 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)
- {
- TARGETING::Target * l_pTarget =
- reinterpret_cast<TARGETING::Target*>((*l_itr)->iv_target.get());
-
- HWAS::callOutPriority l_priority =
- xlateCalloutPriority((*l_itr)->iv_calloutPriority);
-
- HWAS::DeconfigEnum l_deconfig = HWAS::NO_DECONFIG;
- if ((*l_itr)->iv_deconfigure)
- {
- l_deconfig = HWAS::DELAYED_DECONFIG;
- }
-
- HWAS::GARD_ErrorType l_gard = HWAS::GARD_NULL;
- if ((*l_itr)->iv_gard)
- {
- l_gard = HWAS::GARD_Unrecoverable;
- }
-
- FAPI_DBG("processEICDGs: Calling out target"
- " (huid:%.8x, pri:%d, deconf:%d, gard:%d)",
- TARGETING::get_huid(l_pTarget), l_priority, l_deconfig,
- l_gard);
- io_pError->addHwCallout(l_pTarget, l_priority, l_deconfig, l_gard);
- }
-}
-
-/**
- * @brief Returns child targets to Callout/Deconfigure/GARD
- *
- * @param[i] i_parentTarget FAPI Parent Target
- * @param[i] i_childType FAPI Child Type
- * @param[i] i_childPort Child Port Number
- * For DIMMs: MBA Port Number
- * Else unused
- * @param[i] i_childNum Child Number
- * For DIMMs: DIMM Socket Number
- * For Chips: Chip Position
- * For Chiplets: Chiplet Position
- */
-void getChildTargetsForCDG(const fapi::Target & i_parentTarget,
- const fapi::TargetType i_childType,
- const uint8_t i_childPort,
- const uint8_t i_childNum,
- TARGETING::TargetHandleList & o_childTargets)
-{
- o_childTargets.clear();
-
- do
- {
- // Get the parent TARGETING::Target
- TARGETING::Target * l_pTargParent =
- reinterpret_cast<TARGETING::Target *>(i_parentTarget.get());
-
- if (l_pTargParent == NULL)
- {
- FAPI_ERR("getChildTargetsForCDG: NULL Target pointer");
- break;
- }
-
- // Find if the child target type is a dimm, chip or chiplet
- bool l_childIsDimm = false;
- bool l_childIsChip = false;
- bool l_childIsChiplet = false;
-
- if (i_childType == fapi::TARGET_TYPE_DIMM)
- {
- l_childIsDimm = true;
- }
- else
- {
- l_childIsChip = fapi::Target::isChip(i_childType);
-
- if (!l_childIsChip)
- {
- l_childIsChiplet = fapi::Target::isChiplet(i_childType);
- }
- }
-
- // Translate the FAPI child target type into TARGETING Class/Type
- TARGETING::CLASS l_targChildClass = TARGETING::CLASS_NA;
- TARGETING::TYPE l_targChildType = TARGETING::TYPE_NA;
- xlateTargetType(i_childType, l_targChildClass, l_targChildType);
-
- if (l_targChildType == TARGETING::TYPE_NA)
- {
- FAPI_ERR("getChildTargetsForCDG: Could not xlate child type (0x%08x)",
- i_childType);
- break;
- }
-
- // Get the child targets
- TARGETING::TargetHandleList l_targChildList;
-
- if (fapi::Target::isPhysParentChild(i_parentTarget.getType(),
- i_childType))
- {
- // Child by containment
- TARGETING::getChildChiplets(l_targChildList, l_pTargParent,
- l_targChildType);
- FAPI_ERR("getChildTargetsForCDG: Got %d candidate children by containment",
- l_targChildList.size());
- }
- else
- {
- // Assumption is child by affinity
- TARGETING::getChildAffinityTargets(l_targChildList, l_pTargParent,
- l_targChildClass,
- l_targChildType);
- FAPI_ERR("getChildTargetsForCDG: Got %d candidate children by affinity",
- l_targChildList.size());
- }
-
- // Filter out child targets based on type and input port/number
- for (TARGETING::TargetHandleList::const_iterator
- l_itr = l_targChildList.begin();
- l_itr != l_targChildList.end(); ++l_itr)
- {
- if (l_childIsDimm)
- {
- // Match i_childPort and i_childNum
- if ( ((i_childPort == ErrorInfoChildrenCDG::ALL_CHILD_PORTS) ||
- (i_childPort ==
- (*l_itr)->getAttr<TARGETING::ATTR_MBA_PORT>()))
- &&
- ((i_childNum == ErrorInfoChildrenCDG::ALL_CHILD_NUMBERS) ||
- (i_childNum ==
- (*l_itr)->getAttr<TARGETING::ATTR_MBA_DIMM>())) )
- {
- o_childTargets.push_back(*l_itr);
- }
- }
- else if (l_childIsChip)
- {
- // Match i_childNum
- if ((i_childNum == ErrorInfoChildrenCDG::ALL_CHILD_NUMBERS) ||
- (i_childNum ==
- (*l_itr)->getAttr<TARGETING::ATTR_POSITION>()))
- {
- o_childTargets.push_back(*l_itr);
- }
- }
- else if (l_childIsChiplet)
- {
- // Match i_childNum
- if ((i_childNum == ErrorInfoChildrenCDG::ALL_CHILD_NUMBERS) ||
- (i_childNum ==
- (*l_itr)->getAttr<TARGETING::ATTR_CHIP_UNIT>()))
- {
- o_childTargets.push_back(*l_itr);
- }
- }
- else
- {
- // Do not match on anything
- o_childTargets.push_back(*l_itr);
- }
- }
- } while(0);
-}
-
-/**
- * @brief Processes any Children Callout/Deconfigure/GARD requests in the
- * ReturnCode Error Information and adds them to the error log
- *
- * @param[i] i_errInfo Reference to ReturnCode Error Information
- * @param[io] io_pError Errorlog Handle
- */
-void processEIChildrenCDGs(const ErrorInfo & i_errInfo,
- errlHndl_t io_pError)
-{
- // Iterate through the Child CGD requests, adding each to the error log
- for (ErrorInfo::ErrorInfoChildrenCDGCItr_t l_itr =
- i_errInfo.iv_childrenCDGs.begin();
- l_itr != i_errInfo.iv_childrenCDGs.end(); ++l_itr)
- {
- HWAS::callOutPriority l_priority =
- xlateCalloutPriority((*l_itr)->iv_calloutPriority);
-
- HWAS::DeconfigEnum l_deconfig = HWAS::NO_DECONFIG;
- if ((*l_itr)->iv_deconfigure)
- {
- l_deconfig = HWAS::DELAYED_DECONFIG;
- }
-
- HWAS::GARD_ErrorType l_gard = HWAS::GARD_NULL;
- if ((*l_itr)->iv_gard)
- {
- l_gard = HWAS::GARD_Unrecoverable;
- }
-
- // Get a list of children to callout
- TARGETING::TargetHandleList l_children;
- getChildTargetsForCDG((*l_itr)->iv_parent,
- (*l_itr)->iv_childType,
- (*l_itr)->iv_childPort,
- (*l_itr)->iv_childNumber,
- l_children);
-
- // Callout/Deconfigure/GARD each child as appropriate
- for (TARGETING::TargetHandleList::const_iterator
- l_itr = l_children.begin();
- l_itr != l_children.end(); ++l_itr)
- {
- FAPI_DBG("processEIChildrenCDGs: Calling out target"
- " (huid:%.8x, pri:%d, deconf:%d, gard:%d)",
- TARGETING::get_huid(*l_itr), l_priority, l_deconfig,
- l_gard);
- io_pError->addHwCallout(*l_itr, l_priority, l_deconfig, l_gard);
- }
- }
-}
-
-//******************************************************************************
-// fapiRcToErrl function. Converts a fapi::ReturnCode to an error log
-//******************************************************************************
-errlHndl_t fapiRcToErrl(ReturnCode & io_rc,
- ERRORLOG::errlSeverity_t i_sev)
-{
- errlHndl_t l_pError = NULL;
-
- if (io_rc)
- {
- // ReturnCode contains an error. Find out which component of the HWPF
- // created the error
- ReturnCode::returnCodeCreator l_creator = io_rc.getCreator();
-
- if (l_creator == ReturnCode::CREATOR_PLAT)
- {
- // PLAT error. Release the errlHndl_t
- FAPI_ERR("fapiRcToErrl: PLAT error: 0x%08x",
- static_cast<uint32_t>(io_rc));
- l_pError = reinterpret_cast<errlHndl_t> (io_rc.releasePlatData());
- }
- else if (l_creator == ReturnCode::CREATOR_HWP)
- {
- // HWP Error. Create an error log
- uint32_t l_rcValue = static_cast<uint32_t>(io_rc);
- FAPI_ERR("fapiRcToErrl: HWP error: 0x%08x", l_rcValue);
-
- /*@
- * @errortype
- * @moduleid MOD_HWP_RC_TO_ERRL
- * @reasoncode RC_HWP_GENERATED_ERROR
- * @userdata1 RC value from HWP
- * @userdata2 <unused>
- * @devdesc HW Procedure generated error. See User Data.
- * @custdesc Error initializing processor/memory subsystem
- * during boot. See FRU list for repair actions
- */
- l_pError = new ERRORLOG::ErrlEntry(i_sev,
- MOD_HWP_RC_TO_ERRL,
- RC_HWP_GENERATED_ERROR,
- TO_UINT64(l_rcValue));
-
- // Add the rcValue as FFDC. This will explain what the error was
- l_pError->addFFDC(HWPF_COMP_ID, &l_rcValue, sizeof(l_rcValue), 1,
- HWPF_UDT_HWP_RCVALUE);
-
- // Get the Error Information Pointer
- const ErrorInfo * l_pErrorInfo = io_rc.getErrorInfo();
-
- if (l_pErrorInfo)
- {
- // There is error information associated with the ReturnCode
- processEIFfdcs(*l_pErrorInfo, l_pError);
- processEIProcCallouts(*l_pErrorInfo, l_pError);
- processEIBusCallouts(*l_pErrorInfo, l_pError);
- processEICDGs(*l_pErrorInfo, l_pError);
- processEIChildrenCDGs(*l_pErrorInfo, l_pError);
- processEIHwCallouts(*l_pErrorInfo, l_pError);
- }
- else
- {
- FAPI_ERR("fapiRcToErrl: No Error Information");
- }
- }
- else
- {
- // FAPI error. Create an error log
- FAPI_ERR("fapiRcToErrl: FAPI error: 0x%08x",
- static_cast<uint32_t>(io_rc));
-
- // The errlog reason code is the HWPF compID and the rcValue LSB
- uint32_t l_rcValue = static_cast<uint32_t>(io_rc);
- uint16_t l_reasonCode = l_rcValue;
- l_reasonCode &= 0xff;
- l_reasonCode |= HWPF_COMP_ID;
-
- // HostBoot errlog tags for FAPI errors are in hwpfReasonCodes.H
- l_pError = new ERRORLOG::ErrlEntry(i_sev,
- MOD_FAPI_RC_TO_ERRL,
- l_reasonCode);
-
- // FAPI may have added Error Information.
- // Get the Error Information Pointer
- const ErrorInfo * l_pErrorInfo = io_rc.getErrorInfo();
-
- if (l_pErrorInfo)
- {
- processEIFfdcs(*l_pErrorInfo, l_pError);
- processEIProcCallouts(*l_pErrorInfo, l_pError);
- processEIBusCallouts(*l_pErrorInfo, l_pError);
- processEICDGs(*l_pErrorInfo, l_pError);
- processEIChildrenCDGs(*l_pErrorInfo, l_pError);
- processEIHwCallouts(*l_pErrorInfo, l_pError);
- }
- }
-
- // Set the ReturnCode to success, this will delete any ErrorInfo or PLAT
- // DATA associated with the ReturnCode
- io_rc = FAPI_RC_SUCCESS;
-
- // add the fapi traces to the elog
- l_pError->collectTrace(FAPI_TRACE_NAME, 256 );
- l_pError->collectTrace(FAPI_IMP_TRACE_NAME, 384 );
- l_pError->collectTrace(FAPI_SCAN_TRACE_NAME, 256 );
- }
-
- return l_pError;
-}
-
-} // End namespace
OpenPOWER on IntegriCloud