summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr')
-rwxr-xr-xsrc/usr/hwpf/fapi/fapiParseErrorInfo.pl64
1 files changed, 61 insertions, 3 deletions
diff --git a/src/usr/hwpf/fapi/fapiParseErrorInfo.pl b/src/usr/hwpf/fapi/fapiParseErrorInfo.pl
index 1b30df0c3..d6ff26259 100755
--- a/src/usr/hwpf/fapi/fapiParseErrorInfo.pl
+++ b/src/usr/hwpf/fapi/fapiParseErrorInfo.pl
@@ -51,6 +51,7 @@
# mjjones 09/19/12 Generate FFDC ID enumeration
# Generate fapiCollectRegFfdc.C file
# mjjones 10/23/12 Minor fix for Cronus compile failure
+# mjjones 11/09/12 Generate fapiSetSbeError.H
#
# End Change Log ******************************************************
@@ -90,6 +91,7 @@ if ($numArgs < 2)
print (" - fapiHwpErrorInfo.H. Error information (used by FAPI_SET_HWP_ERROR\n");
print (" when a HWP generates an error)\n");
print (" - fapiCollectRegFfdc.C. Function to collect register FFDC\n");
+ print (" - fapiSetSbeError.H. Macro to create an SBE error\n");
exit(1);
}
@@ -244,6 +246,11 @@ $crFile .= "/";
$crFile .= "fapiCollectRegFfdc.C";
open(CRFILE, ">", $crFile);
+my $sbFile = $ARGV[0];
+$sbFile .= "/";
+$sbFile .= "fapiSetSbeError.H";
+open(SBFILE, ">", $sbFile);
+
#------------------------------------------------------------------------------
# Print start of file information to fapiHwpErrorInfo.H
#------------------------------------------------------------------------------
@@ -286,6 +293,38 @@ print CRFILE " switch (i_ffdcId)\n";
print CRFILE " {\n";
#------------------------------------------------------------------------------
+# Print start of file information to fapiSetSbeError.H
+#------------------------------------------------------------------------------
+print SBFILE "// fapiSetSbeError.H\n";
+print SBFILE "// This file is generated by perl script fapiParseErrorInfo.pl\n\n";
+print SBFILE "// When SBE code creates an error, it produces an error value\n";
+print SBFILE "// that matches a value in the HwpReturnCode enum in\n";
+print SBFILE "// fapiHwpReturnCodes.H. The SBE uses the __ASSEMBLER__\n";
+print SBFILE "// primitives in fapiHwpReturnCodes.H to do this. The function\n";
+print SBFILE "// that extracts the error value from the SBE needs to call\n";
+print SBFILE "// FAPI_SET_HWP_ERROR to create the error and get all the\n";
+print SBFILE "// actions in the error XML file performed, but that macro can\n";
+print SBFILE "// only be called with the enumerator, not the value. This\n";
+print SBFILE "// FAPI_SET_SBE_ERROR macro can be called instead, it calls\n";
+print SBFILE "// FAPI_SET_HWP_ERROR with the correct error enumerator.\n";
+print SBFILE "// Errors containing <sbeError/> in their XML are supported\n";
+print SBFILE "// in this macro.\n\n";
+print SBFILE "// Note that it is expected that this macro will be called\n";
+print SBFILE "// in one place (the function that extracts the error from\n";
+print SBFILE "// the SBE), if this changes and it is called in multiple\n";
+print SBFILE "// places then the macro could be turned into a function to\n";
+print SBFILE "// avoid the code size increase of expanding the macro in\n";
+print SBFILE "// multiple places. The function approach is slightly more\n";
+print SBFILE "// complicated, there is an extra C file and the function\n";
+print SBFILE "// must take a parameter for the generic chip ID in the error\n";
+print SBFILE "// XML.\n\n";
+print SBFILE "#ifndef FAPISETSBEERROR_H_\n";
+print SBFILE "#define FAPISETSBEERROR_H_\n\n";
+print SBFILE "#define FAPI_SET_SBE_ERROR(RC, ERRVAL)\\\n";
+print SBFILE "switch (ERRVAL)\\\n";
+print SBFILE "{\\\n";
+
+#------------------------------------------------------------------------------
# For each XML file
#------------------------------------------------------------------------------
foreach my $argnum (1 .. $#ARGV)
@@ -330,6 +369,16 @@ foreach my $argnum (1 .. $#ARGV)
setErrorEnumValue($err->{rc});
#----------------------------------------------------------------------
+ # If this is an SBE error, add it to fapiSetSbeError.H
+ #----------------------------------------------------------------------
+ if (exists $err->{sbeError})
+ {
+ print SBFILE " case fapi::$err->{rc}:\\\n";
+ print SBFILE " FAPI_SET_HWP_ERROR(RC, $err->{rc});\\\n";
+ print SBFILE " break;\\\n";
+ }
+
+ #----------------------------------------------------------------------
# Print the CALL_FUNCS_TO_COLLECT_FFDC macro to fapiHwpErrorInfo.H
#----------------------------------------------------------------------
print EIFILE "#define $err->{rc}_CALL_FUNCS_TO_COLLECT_FFDC(RC) ";
@@ -362,7 +411,7 @@ foreach my $argnum (1 .. $#ARGV)
{
#------------------------------------------------------------------
# Check that expected fields are present
- #----------------------------------------------------------------------
+ #------------------------------------------------------------------
if (! exists $collectRegisterFfdc->{id})
{
print ("fapiParseErrorInfo.pl ERROR. id missing from collectRegisterFfdc\n");
@@ -671,16 +720,25 @@ foreach my $key (keys %ffdcNameToValueHash)
print EIFILE "};\n\n";
print EIFILE "}\n\n";
-
#------------------------------------------------------------------------------
# Print end of file information to fapiHwpErrorInfo.H
#------------------------------------------------------------------------------
print EIFILE "\n\n#endif\n";
#------------------------------------------------------------------------------
+# Print end of file information to fapiSetSbeError.H
+#------------------------------------------------------------------------------
+print SBFILE " default:\\\n";
+print SBFILE " RC.setFapiError(fapi::FAPI_RC_UNRECOGNIZED_SBE_ERROR);\\\n";
+print SBFILE " RC.addEIFfdc(0, &ERRVAL, sizeof(ERRVAL));\\\n";
+print SBFILE " break;\\\n";
+print SBFILE "}\n\n";
+print SBFILE "#endif\n";
+
+#------------------------------------------------------------------------------
# Close output files
#------------------------------------------------------------------------------
close(RCFILE);
close(EIFILE);
close(CRFILE);
-
+close(SBFILE);
OpenPOWER on IntegriCloud