summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/fapi
diff options
context:
space:
mode:
authorMike Jones <mjjones@us.ibm.com>2013-08-26 14:36:36 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-09-12 13:28:54 -0500
commit7e14a67f70a873c3d6d3fe2640ce7cc84e6065c5 (patch)
tree5072771d23e14cde97cd1eee8f374c449d29fe6c /src/usr/hwpf/fapi
parent8c8662a2daf4a57ad704a6642f2f33d560fb8d01 (diff)
downloadtalos-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.C105
-rwxr-xr-xsrc/usr/hwpf/fapi/fapiParseErrorInfo.pl41
-rw-r--r--src/usr/hwpf/fapi/fapiReturnCode.C43
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(
OpenPOWER on IntegriCloud