diff options
author | Mike Jones <mjjones@us.ibm.com> | 2013-08-26 14:36:36 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-09-12 13:28:54 -0500 |
commit | 7e14a67f70a873c3d6d3fe2640ce7cc84e6065c5 (patch) | |
tree | 5072771d23e14cde97cd1eee8f374c449d29fe6c /src/usr/hwpf/fapi | |
parent | 8c8662a2daf4a57ad704a6642f2f33d560fb8d01 (diff) | |
download | talos-hostboot-7e14a67f70a873c3d6d3fe2640ce7cc84e6065c5.tar.gz talos-hostboot-7e14a67f70a873c3d6d3fe2640ce7cc84e6065c5.zip |
HWPF: Calling out HW without a fapi::Target
Change-Id: Ic4601fac85fa465b91a1c9c67bf09c1344b11146
RTC: 69766
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/5919
Tested-by: Jenkins Server
Reviewed-by: Brian H. Horton <brianh@linux.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwpf/fapi')
-rw-r--r-- | src/usr/hwpf/fapi/fapiErrorInfo.C | 105 | ||||
-rwxr-xr-x | src/usr/hwpf/fapi/fapiParseErrorInfo.pl | 41 | ||||
-rw-r--r-- | src/usr/hwpf/fapi/fapiReturnCode.C | 43 |
3 files changed, 183 insertions, 6 deletions
diff --git a/src/usr/hwpf/fapi/fapiErrorInfo.C b/src/usr/hwpf/fapi/fapiErrorInfo.C index ce2107dfb..27f505383 100644 --- a/src/usr/hwpf/fapi/fapiErrorInfo.C +++ b/src/usr/hwpf/fapi/fapiErrorInfo.C @@ -41,6 +41,7 @@ * mjjones 03/22/2013 Support Procedure Callouts * mjjones 05/20/2013 Support Bus Callouts * mjjones 06/24/2013 Support Children CDGs + * mjjones 08/26/2013 Support HW Callouts */ #include <fapiErrorInfo.H> @@ -109,6 +110,38 @@ void ErrorInfoFfdc::operator delete(void * i_ptr) #endif //****************************************************************************** +// ErrorInfoHwCallout Constructor +//****************************************************************************** +ErrorInfoHwCallout::ErrorInfoHwCallout( + const HwCallouts::HwCallout i_hw, + const CalloutPriorities::CalloutPriority i_calloutPriority, + const Target & i_refTarget) +: iv_hw(i_hw), iv_calloutPriority(i_calloutPriority), iv_refTarget(i_refTarget) +{ + +} + +//****************************************************************************** +// ErrorInfoHwCallout new Operator Overload +//****************************************************************************** +#ifdef FAPI_CUSTOM_MALLOC +void * ErrorInfoHwCallout::operator new(size_t i_sz) +{ + return fapiMalloc(i_sz); +} +#endif + +//****************************************************************************** +// ErrorInfoProcedureCallout delete Operator Overload +//****************************************************************************** +#ifdef FAPI_CUSTOM_MALLOC +void ErrorInfoHwCallout::operator delete(void * i_ptr) +{ + fapiFree(i_ptr); +} +#endif + +//****************************************************************************** // ErrorInfoProcedureCallout Constructor //****************************************************************************** ErrorInfoProcedureCallout::ErrorInfoProcedureCallout( @@ -120,7 +153,27 @@ ErrorInfoProcedureCallout::ErrorInfoProcedureCallout( } //****************************************************************************** -// ErrorInfoProcedureCallout Constructor +// ErrorInfoProcedureCallout new Operator Overload +//****************************************************************************** +#ifdef FAPI_CUSTOM_MALLOC +void * ErrorInfoProcedureCallout::operator new(size_t i_sz) +{ + return fapiMalloc(i_sz); +} +#endif + +//****************************************************************************** +// ErrorInfoProcedureCallout delete Operator Overload +//****************************************************************************** +#ifdef FAPI_CUSTOM_MALLOC +void ErrorInfoProcedureCallout::operator delete(void * i_ptr) +{ + fapiFree(i_ptr); +} +#endif + +//****************************************************************************** +// ErrorInfoBusCallout Constructor //****************************************************************************** ErrorInfoBusCallout::ErrorInfoBusCallout( const Target & i_target1, @@ -132,20 +185,20 @@ ErrorInfoBusCallout::ErrorInfoBusCallout( } //****************************************************************************** -// ErrorInfoProcedureCallout new Operator Overload +// ErrorInfoBusCallout new Operator Overload //****************************************************************************** #ifdef FAPI_CUSTOM_MALLOC -void * ErrorInfoProcedureCallout::operator new(size_t i_sz) +void * ErrorInfoBusCallout::operator new(size_t i_sz) { return fapiMalloc(i_sz); } #endif //****************************************************************************** -// ErrorInfoProcedureCallout delete Operator Overload +// ErrorInfoBusCallout delete Operator Overload //****************************************************************************** #ifdef FAPI_CUSTOM_MALLOC -void ErrorInfoProcedureCallout::operator delete(void * i_ptr) +void ErrorInfoBusCallout::operator delete(void * i_ptr) { fapiFree(i_ptr); } @@ -202,6 +255,26 @@ ErrorInfoChildrenCDG::ErrorInfoChildrenCDG( } //****************************************************************************** +// ErrorInfoChildrenCDG new Operator Overload +//****************************************************************************** +#ifdef FAPI_CUSTOM_MALLOC +void * ErrorInfoChildrenCDG::operator new(size_t i_sz) +{ + return fapiMalloc(i_sz); +} +#endif + +//****************************************************************************** +// ErrorInfoCDG delete Operator Overload +//****************************************************************************** +#ifdef FAPI_CUSTOM_MALLOC +void ErrorInfoChildrenCDG::operator delete(void * i_ptr) +{ + fapiFree(i_ptr); +} +#endif + +//****************************************************************************** // ErrorInfo Destructor //****************************************************************************** ErrorInfo::~ErrorInfo() @@ -213,6 +286,13 @@ ErrorInfo::~ErrorInfo() (*l_itr) = NULL; } + for (ErrorInfoHwCalloutItr_t l_itr = iv_hwCallouts.begin(); + l_itr != iv_hwCallouts.end(); ++l_itr) + { + delete (*l_itr); + (*l_itr) = NULL; + } + for (ErrorInfo::ErrorInfoProcedureCalloutItr_t l_itr = iv_procedureCallouts.begin(); l_itr != iv_procedureCallouts.end(); ++l_itr) @@ -221,12 +301,27 @@ ErrorInfo::~ErrorInfo() (*l_itr) = NULL; } + for (ErrorInfo::ErrorInfoBusCalloutItr_t l_itr = + iv_busCallouts.begin(); + l_itr != iv_busCallouts.end(); ++l_itr) + { + delete (*l_itr); + (*l_itr) = NULL; + } + for (ErrorInfo::ErrorInfoCDGItr_t l_itr = iv_CDGs.begin(); l_itr != iv_CDGs.end(); ++l_itr) { delete (*l_itr); (*l_itr) = NULL; } + + for (ErrorInfo::ErrorInfoChildrenCDGItr_t l_itr = iv_childrenCDGs.begin(); + l_itr != iv_childrenCDGs.end(); ++l_itr) + { + delete (*l_itr); + (*l_itr) = NULL; + } } //****************************************************************************** diff --git a/src/usr/hwpf/fapi/fapiParseErrorInfo.pl b/src/usr/hwpf/fapi/fapiParseErrorInfo.pl index 395d50318..bcfb40a57 100755 --- a/src/usr/hwpf/fapi/fapiParseErrorInfo.pl +++ b/src/usr/hwpf/fapi/fapiParseErrorInfo.pl @@ -57,6 +57,7 @@ # mjjones 05/20/13 Support Bus Callouts # mjjones 06/24/13 Support Children CDGs # mjjones 08/20/13 Use constants for Reg FFDC collection +# mjjones 08/26/13 Support HW Callouts # # End Change Log ****************************************************** @@ -482,7 +483,45 @@ foreach my $argnum (1 .. $#ARGV) exit(1); } - if (exists $callout->{procedure}) + if (exists $callout->{hw}) + { + # HW Callout + if (! exists $callout->{hw}->{hwid}) + { + print ("fapiParseErrorInfo.pl ERROR. HW Callout hwid missing\n"); + exit(1); + } + + # Check that those HW callouts that need reference targets have them + if (($callout->{hw}->{hwid} eq "TOD_CLOCK") || + ($callout->{hw}->{hwid} eq "MEM_REF_CLOCK") || + ($callout->{hw}->{hwid} eq "PROC_REF_CLOCK") || + ($callout->{hw}->{hwid} eq "PCI_REF_CLOCK")) + { + if (! exists $callout->{hw}->{refTarget}) + { + print ("fapiParseErrorInfo.pl ERROR. Callout missing refTarget\n"); + exit(1); + } + } + + # Add an EI entry to eiEntryStr + $eiEntryStr .= " l_entries[$eiEntryCount].iv_type = fapi::ReturnCode::EI_TYPE_HW_CALLOUT; \\\n"; + $eiEntryStr .= " l_entries[$eiEntryCount].hw_callout.iv_hw = fapi::HwCallouts::$callout->{hw}->{hwid}; \\\n"; + $eiEntryStr .= " l_entries[$eiEntryCount].hw_callout.iv_calloutPriority = fapi::CalloutPriorities::$callout->{priority}; \\\n"; + if (exists $callout->{hw}->{refTarget}) + { + # Add the Targets to the objectlist if they don't already exist + my $objNum = addEntryToArray(\@eiObjects, $callout->{hw}->{refTarget}); + $eiEntryStr .= " l_entries[$eiEntryCount].hw_callout.iv_refObjIndex = $objNum; \\\n"; + } + else + { + $eiEntryStr .= " l_entries[$eiEntryCount].hw_callout.iv_refObjIndex = 0xff; \\\n"; + } + $eiEntryCount++; + } + elsif (exists $callout->{procedure}) { # Procedure Callout # Add an EI entry to eiEntryStr diff --git a/src/usr/hwpf/fapi/fapiReturnCode.C b/src/usr/hwpf/fapi/fapiReturnCode.C index 6d42b44f5..587020bee 100644 --- a/src/usr/hwpf/fapi/fapiReturnCode.C +++ b/src/usr/hwpf/fapi/fapiReturnCode.C @@ -51,6 +51,7 @@ * mjjones 03/22/2013 Support Procedure Callouts * mjjones 05/20/2013 Support Bus Callouts * mjjones 06/24/2013 Support Children CDGs + * mjjones 08/26/2013 Support HW Callouts */ #include <fapiReturnCode.H> @@ -282,6 +283,33 @@ void ReturnCode::addErrorInfo(const void * const * i_pObjects, addEIFfdc(l_ffdcId, l_pObject, l_size); } } + else if (l_type == EI_TYPE_HW_CALLOUT) + { + HwCallouts::HwCallout l_hw = static_cast<HwCallouts::HwCallout>( + i_pEntries[i].hw_callout.iv_hw); + CalloutPriorities::CalloutPriority l_pri = + static_cast<CalloutPriorities::CalloutPriority>( + i_pEntries[i].hw_callout.iv_calloutPriority); + + // A refIndex of 0xff indicates that there is no reference target + uint8_t l_refIndex = i_pEntries[i].hw_callout.iv_refObjIndex; + + if (l_refIndex != 0xff) + { + const Target * l_pRefTarget = static_cast<const Target *>( + i_pObjects[l_refIndex]); + FAPI_ERR("addErrorInfo: Adding hw callout with ref, hw: %d, pri: %d", + l_hw, l_pri); + addEIHwCallout(l_hw, l_pri, *l_pRefTarget); + } + else + { + Target l_emptyTarget; + FAPI_ERR("addErrorInfo: Adding hw callout with no ref, hw: %d, pri: %d", + l_hw, l_pri); + addEIHwCallout(l_hw, l_pri, l_emptyTarget); + } + } else if (l_type == EI_TYPE_PROCEDURE_CALLOUT) { ProcedureCallouts::ProcedureCallout l_proc = @@ -445,6 +473,21 @@ void ReturnCode::forgetData() } //****************************************************************************** +// addEIHwCallout function +//****************************************************************************** +void ReturnCode::addEIHwCallout( + const HwCallouts::HwCallout i_hw, + const CalloutPriorities::CalloutPriority i_priority, + const Target & i_refTarget) +{ + // Create an ErrorInfoHwCallout object and add it to the Error Information + ErrorInfoHwCallout * l_pCallout = new ErrorInfoHwCallout( + i_hw, i_priority, i_refTarget); + getCreateReturnCodeDataRef().getCreateErrorInfo(). + iv_hwCallouts.push_back(l_pCallout); +} + +//****************************************************************************** // addEIProcedureCallout function //****************************************************************************** void ReturnCode::addEIProcedureCallout( |