From cf8e670f8a54e8eaac7778c927188594045a6e04 Mon Sep 17 00:00:00 2001 From: "Richard J. Knight" Date: Mon, 25 Sep 2017 21:07:45 -0500 Subject: Update set_sbe_error macro exceeds line length -Undate macro to call a function for each RC value instead of inlining of all FFDC collection -Update parseErrorInfo.pl script to generate a new file which contains functions for use in new macro layout Change-Id: I40a02fef07b3618b137a8e0c2bfa10c9756da600 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/46719 Tested-by: FSP CI Jenkins Tested-by: Jenkins Server Tested-by: HWSV CI Tested-by: PPE CI Tested-by: Hostboot CI Reviewed-by: ARAVIND T. NAIR Reviewed-by: Sachin Gupta Reviewed-by: Jennifer A. Stofer Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/46722 Tested-by: Jenkins OP Build CI Reviewed-by: Daniel M. Crowell --- src/import/hwpf/fapi2/include/fapi2.H | 3 +- src/import/hwpf/fapi2/tools/parseErrorInfo.mk | 1 + src/import/hwpf/fapi2/tools/parseErrorInfo.pl | 73 ++++++++++++++++++++------- 3 files changed, 56 insertions(+), 21 deletions(-) (limited to 'src/import') diff --git a/src/import/hwpf/fapi2/include/fapi2.H b/src/import/hwpf/fapi2/include/fapi2.H index 4f0bb6f96..0f455c485 100644 --- a/src/import/hwpf/fapi2/include/fapi2.H +++ b/src/import/hwpf/fapi2/include/fapi2.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015,2016 */ +/* Contributors Listed Below - COPYRIGHT 2015,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -39,7 +39,6 @@ // In turn includes the needed generated headers (hwp_ffd_classes, etc.) #include -#include // Generated file #include #include diff --git a/src/import/hwpf/fapi2/tools/parseErrorInfo.mk b/src/import/hwpf/fapi2/tools/parseErrorInfo.mk index 1c130e6e9..a44bd2b38 100644 --- a/src/import/hwpf/fapi2/tools/parseErrorInfo.mk +++ b/src/import/hwpf/fapi2/tools/parseErrorInfo.mk @@ -35,6 +35,7 @@ TARGETS += hwp_return_codes.H TARGETS += hwp_error_info.H TARGETS += hwp_ffdc_classes.H TARGETS += set_sbe_error.H +TARGETS += set_sbe_error_funcs.H TARGETS += collect_reg_ffdc_regs.C CLEAN_TARGETS += $(GENPATH)/hwp_return_codes.H diff --git a/src/import/hwpf/fapi2/tools/parseErrorInfo.pl b/src/import/hwpf/fapi2/tools/parseErrorInfo.pl index aac1c4ecc..4a4e22c6d 100755 --- a/src/import/hwpf/fapi2/tools/parseErrorInfo.pl +++ b/src/import/hwpf/fapi2/tools/parseErrorInfo.pl @@ -303,7 +303,7 @@ sub addFfdcMethod $method_body .= " fapi2::getErrorInfoFfdcSize(i_value);\n return *this;\n }\n\n"; $methods->{$key}{member} = "$ffdc_type $ffdc_uc;"; $methods->{$objectNumber}{localvar} = - "$ffdc_type $ffdc_uc = getFfdcData(FFDC_BUFFER[$objectNumber],invalid_data);"; + "$ffdc_type $ffdc_uc = fapi2::getFfdcData(i_ebuf[$objectNumber],invalid_data);"; $methods->{$objectNumber}{assignment_string} = "l_obj.$ffdc_uc = $ffdc_uc;"; } else @@ -336,7 +336,7 @@ sub addFfdcMethod $method_body .= " }\n\n"; $methods->{$key}{member} = "$ffdc_type $ffdc_uc;"; $methods->{$objectNumber}{localvar} = - "$buffer_ffdc_type $ffdc_uc = getFfdcData(FFDC_BUFFER[$objectNumber],invalid_data);"; + "$buffer_ffdc_type $ffdc_uc = fapi2::getFfdcData(i_ebuf[$objectNumber],invalid_data);"; $methods->{$objectNumber}{assignment_string} = "l_obj.$ffdc_uc = $ffdc_uc;"; } @@ -373,7 +373,7 @@ sub addFfdcMethod $methods->{$key}{member} = "$ffdc_type $ffdc_uc;"; $methods->{$objectNumber}{localvar} = - "$ffdc_type $ffdc_uc = getFfdcData(FFDC_BUFFER[$objectNumber],invalid_data);"; + "$ffdc_type $ffdc_uc = fapi2::getFfdcData(i_ebuf[$objectNumber],invalid_data);"; $methods->{$objectNumber}{assignment_string} = "l_obj.$ffdc_uc=$ffdc_uc;"; } elsif ( $type eq $scom_addr_type ) @@ -394,7 +394,7 @@ sub addFfdcMethod $method_body .= " return *this;}\n\n"; $methods->{$key}{member} = "$type $ffdc_uc;"; $methods->{$objectNumber}{localvar} = - "$type $ffdc_uc = getFfdcData(FFDC_BUFFER[$objectNumber],invalid_data);"; + "$type $ffdc_uc = fapi2::getFfdcData(i_ebuf[$objectNumber],invalid_data);"; $methods->{$objectNumber}{assignment_string} = "l_obj.$ffdc_uc = $ffdc_uc;"; } else @@ -447,6 +447,11 @@ $sbFile .= "/"; $sbFile .= "set_sbe_error.H"; open( SBFILE, ">", $sbFile ); +my $sbFuncFile = $arg_output_dir; +$sbFuncFile .= "/"; +$sbFuncFile .= "set_sbe_error_funcs.H"; +open( SBFUNFILE, ">", $sbFuncFile ); + #------------------------------------------------------------------------------ # Print start of file information to hwp_error_info.H #------------------------------------------------------------------------------ @@ -458,7 +463,6 @@ print EIFILE "#include \n"; print EIFILE "#include \n"; print EIFILE "#include \n"; print EIFILE "#include \n"; -print EIFILE "#include \n"; print EIFILE "/**\n"; print EIFILE " * \@brief Error Information macros and HwpFfdcId enumeration\n"; print EIFILE " *\/\n"; @@ -551,12 +555,26 @@ print SBFILE "// must take a parameter for the generic chip ID in the error\n"; print SBFILE "// XML.\n\n"; print SBFILE "#ifndef FAPI2_SETSBEERROR_H_\n"; print SBFILE "#define FAPI2_SETSBEERROR_H_\n\n"; +print SBFILE "#include \n\n"; print SBFILE "#define FAPI_SET_SBE_ERROR(RC,ERRVAL,FFDC_BUFFER,SBE_INSTANCE)\\\n"; print SBFILE "{\\\n"; print SBFILE "bool invalid_data = false;\\\n"; print SBFILE "switch (ERRVAL)\\\n"; print SBFILE "{\\\n"; +print SBFUNFILE "#ifndef FAPI2_SETSBEERRORFUNCS_H_\n"; +print SBFUNFILE "#define FAPI2_SETSBEERRORFUNCS_H_\n\n"; +print SBFUNFILE "#include \n\n"; +print SBFUNFILE "#include \n\n"; +print SBFUNFILE "#include \n\n"; + +#print SBFUNFILE "namespace fapi2 {\n\n"; +# used to convert each HwpReturnCode into a unique tupe +print SBFUNFILE "template\n"; +print SBFUNFILE "struct hwpRcToType {\n"; +print SBFUNFILE " enum { value = T };\n"; +print SBFUNFILE "};\n"; + #------------------------------------------------------------------------------ # For each XML file #------------------------------------------------------------------------------ @@ -1400,14 +1418,14 @@ foreach my $argnum ( 0 .. $#ARGV ) if ( ( exists $methods{$objCount}{object} ) ) { - $objectStr .= " $methods{$objCount}{object} \\\n"; + $objectStr .= " $methods{$objCount}{object}\n"; } if ( ( exists $methods{$objCount}{localvar} ) ) { - $objectStr .= " $methods{$objCount}{localvar} \\\n"; - $objectStr .= " $methods{$objCount}{assignment_string} \\\n"; + $objectStr .= " $methods{$objCount}{localvar}\n"; + $objectStr .= " $methods{$objCount}{assignment_string}\n"; } } } @@ -1427,10 +1445,10 @@ foreach my $argnum ( 0 .. $#ARGV ) if ( exists $errors->{sbeTarget} && ( $arg_local_ffdc eq undef ) ) { $objectStr .= " fapi2::Target$errors->{sbeTarget}" - . " = fapi2::getTarget(SBE_INSTANCE); \\\n"; - $objectStr .= " l_obj.$errors->{sbeTarget}.ptr() = &$errors->{sbeTarget}; \\\n"; + . " = fapi2::getTarget(proc_instance); \n"; + $objectStr .= " l_obj.$errors->{sbeTarget}.ptr() = &$errors->{sbeTarget};\n"; $objectStr .= - " l_obj.$errors->{sbeTarget}.size() = fapi2::getErrorInfoFfdcSize($errors->{sbeTarget}); \\\n"; + " l_obj.$errors->{sbeTarget}.size() = fapi2::getErrorInfoFfdcSize($errors->{sbeTarget});\n"; } $eiObjectStr .= "};"; @@ -1609,18 +1627,31 @@ foreach my $argnum ( 0 .. $#ARGV ) if ( exists $err->{sbeError} ) { print SBFILE " case fapi2::$err->{rc}: \\\n"; - print SBFILE " { \\\n fapi2::$class_name l_obj("; - print SBFILE "fapi2::FAPI2_ERRL_SEV_UNRECOVERABLE,RC);\\\n"; + print SBFILE " { \\\n"; + print SBFILE " invalid_data = setSbeError(hwpRcToType{rc}>(),\\\n"; + print SBFILE " RC,FFDC_BUFFER,SBE_INSTANCE);\\\n"; + + print SBFILE " break;\\\n }\\\n"; + + # update the sbe set error functions file with the new template function + # create a unique overloaded function for the return code value + print SBFUNFILE "inline bool setSbeError(hwpRcToType{rc}>,fapi2::ReturnCode&i_rc,\n"; + print SBFUNFILE " fapi2::sbeFfdc_t* i_ebuf,uint8_t proc_instance)\n"; + print SBFUNFILE " {\n bool invalid_data = false;\n"; + print SBFUNFILE " fapi2::$class_name l_obj("; + print SBFUNFILE "fapi2::FAPI2_ERRL_SEV_UNRECOVERABLE,i_rc);\n"; if ( !( $objectStr eq undef ) ) { - print SBFILE "$objectStr"; + print SBFUNFILE "$objectStr"; } - print SBFILE " if(!invalid_data) \\\n"; - print SBFILE " { \\\n"; - print SBFILE " l_obj.execute(); \\\n"; - print SBFILE " } \\\n"; - print SBFILE " break; \\\n } \\\n"; + print SBFUNFILE " if(!invalid_data)\n"; + print SBFUNFILE " {\n"; + print SBFUNFILE " l_obj.execute();\n"; + print SBFUNFILE " }\n"; + print SBFUNFILE " return invalid_data;\n"; + print SBFUNFILE " }\n"; + } } #for each hwpError tag @@ -1775,6 +1806,9 @@ print SBFILE "}\\\n"; print SBFILE "}\n\n"; print SBFILE "#endif\n"; +#print SBFUNFILE "}\n"; +print SBFUNFILE "#endif\n"; + #------------------------------------------------------------------------------ # Close output files #------------------------------------------------------------------------------ @@ -1783,3 +1817,4 @@ close(EIFILE); close(ECFILE); close(CRFILE); close(SBFILE); +close(SBFUNFILE); -- cgit v1.2.1