diff options
Diffstat (limited to 'sbe/sbefw/plugins/sbeUserDataParser.C')
-rw-r--r-- | sbe/sbefw/plugins/sbeUserDataParser.C | 293 |
1 files changed, 0 insertions, 293 deletions
diff --git a/sbe/sbefw/plugins/sbeUserDataParser.C b/sbe/sbefw/plugins/sbeUserDataParser.C deleted file mode 100644 index 64fca9f1..00000000 --- a/sbe/sbefw/plugins/sbeUserDataParser.C +++ /dev/null @@ -1,293 +0,0 @@ -/* IBM_PROLOG_BEGIN_TAG */ -/* This is an automatically generated prolog. */ -/* */ -/* $Source: sbe/sbefw/plugins/sbeUserDataParser.C $ */ -/* */ -/* OpenPOWER sbe Project */ -/* */ -/* Contributors Listed Below - COPYRIGHT 2016 */ -/* [+] 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 */ -#include <sys/stat.h> -#include <errno.h> - -#include <cstdlib> -#include <cstring> -#include <sstream> - -#include <utilfile.H> -#include <utilmem.H> - -#include "sbeFFDCType.H" - -#define SBE_TEMP_DUMP_FILE "/tmp/trace_dump.bin" -#define SBE_TRACE_BIN "/tmp/sbe_trace.bin" -#define PPE2FSP_TOOL "ppe2fsp" -#define P9_XIP_TOOL "p9_xip_tool" -#define SBE_TRACE_CMD "fsp-trace -s" -#define SBE_TRACE_HEADLINE "SBE Traces" -#define SBE_ATTR_DUMP_HEADLINE "SBE Attributes Dump" -#define P9_XIP_ATTR_CMD "-ifs attrdump" -#define SBE_STRING_FILE "sbeStringFile" -#define SBE_SEEPROM_BIN "sbe_seeprom.bin" - -#define SBE_PARSER_MAX_LOCAL_BUFFER 8192 - -#define SBE_PARSER_PRINT_DELIMITER {std::cout << \ -"*****************************************************************************"\ -<< std::endl;} -#define SBE_PARSER_PRINT_HEADING(x) { SBE_PARSER_PRINT_DELIMITER \ -std::cout << \ -" "x<< std::endl;\ -SBE_PARSER_PRINT_DELIMITER } - -std::string findSbeFile(const char *name) -{ -#ifdef CONTEXT_x86_nfp - //TODO via RTC:157433 - std::string tmp = getenv("bb"); - tmp += "obj/x86.nfp/sbei/sbfw/img/"; - std::string file = tmp + name; - - struct stat l_stat; - if(stat(file.c_str(), &l_stat) < 0) - { - //Can't find the file - } - - return file; -#endif -#ifdef CONTEXT_ppc - std::string tmp = getenv("PATH"); - tmp += ":/nfs:/maint"; - - char *path = strdup(tmp.c_str()); - char *dir = NULL; - - std::string file; - - struct stat l_stat; - - for(dir = strtok( path, ":" ); dir; dir = strtok(NULL, ":")) - { - file = file + dir + "/" + name; - - if(stat(file.c_str(), &l_stat) < 0) - { - // String file not found, go to next one - file.clear(); - } - else - { - // update where trexStringFile is - break; - } - } - - free(path); - path = NULL; //sm05c - - return file; -#endif -} - -void sbeParserSysCall(const char *cmd) -{ - FILE *stream; - char buffer[256]; - - stream = popen(cmd, "r" ); - if(stream) - { - while(!feof(stream)) - { - if(fgets(buffer, 256, stream) != NULL) - { - std::cout << buffer; - } - } - } - else - { - std::cout << "command failed :[" << cmd << "]" << std::endl; - std::cout << "errno [" << errno << "]" << std::endl; - } -} - -int parseSbeFFDC(ErrlUsrParser & i_parser, const void * i_pBuffer, - const uint32_t i_buflen) -{ - int l_rc = 0; - uint32_t fapiRc = 0; - sbeFFDCDataHeader_t l_pData = {0}; - char l_buffer[SBE_PARSER_MAX_LOCAL_BUFFER] = {0}; - char *l_pBuffer = (char*)i_pBuffer; - uint32_t l_buflen = i_buflen; - - do - { - if(i_pBuffer == NULL) - { - l_rc = -1; - break; - } - //seek l_mem to the binary blob of FFDC package - UtilMem l_mem(const_cast<void*>(i_pBuffer),i_buflen); - - // The data is a buffer of SBE FFDC data - i_parser.PrintHeading("SBE FFDC Parser"); - - if(l_buflen < sizeof(fapiRc)) - { - i_parser.PrintHexDump(l_pBuffer, l_buflen); - break; - } - l_buflen -= sizeof(fapiRc); - l_pBuffer += sizeof(fapiRc); - l_mem >> fapiRc; - i_parser.PrintNumber("FAPI RC ", "0x%08X", fapiRc); - - if(l_buflen < sizeof(l_pData)) - { - i_parser.PrintHexDump(l_pBuffer, l_buflen); - break; - } - l_buflen -= sizeof(l_pData); - l_pBuffer += sizeof(l_pData); - l_mem >> l_pData; - - i_parser.PrintNumber("Primary Status ", "0x%04X", - (uint16_t)l_pData.primaryStatus); - i_parser.PrintNumber("Secondary Status ", "0x%04X", - (uint16_t)l_pData.secondaryStatus); - - //loop through the number of fields configured - uint32_t l_dumpFields = l_pData.dumpFields.get(); - while(l_dumpFields && !l_rc) - { - if(l_dumpFields & 0x0001) - { - if(l_buflen < sizeof(uint32_t)) - { - //Complete this loop and let the tools print as much data - //as possible but break from next loop - l_rc = -1; - } - sbeFFDCUserDataIdentifier_t l_ffdcUserDataId = {0}; - l_buflen -= sizeof(uint32_t); //l_ffdcUserDataId - l_pBuffer += sizeof(uint32_t); //l_ffdcUserDataId - - l_mem >> l_ffdcUserDataId; - - // TODO via RTC:158462 continue even for attribute dump - // Need to extend p9_xip_tool for partial attr dump handling - if((l_buflen < l_ffdcUserDataId.fieldLen) && - (l_ffdcUserDataId.fieldId != SBE_FFDC_TRACE_DUMP)) - { - i_parser.PrintHexDump(l_pBuffer, l_buflen); - break; - } - - l_buflen -= l_ffdcUserDataId.fieldLen; - l_pBuffer += l_ffdcUserDataId.fieldLen; - - l_mem.read(l_buffer, l_ffdcUserDataId.fieldLen); - std::ostringstream l_strFile; - //Generate temp dump file name - l_strFile << SBE_TEMP_DUMP_FILE; - - //Write dump into the temporary file - UtilFile l_fileObj(l_strFile.str().c_str()); - errlHndl_t l_errlHndl = l_fileObj.open("w"); - if ( l_errlHndl ) - { - std::cerr << "Error opening " - << l_strFile.str() << std::endl; - l_errlHndl->commit(HWSV_COMP_ID, ERRL_ACTION_REPORT); - delete l_errlHndl; - l_errlHndl = NULL; - i_parser.PrintHexDump(l_buffer, l_ffdcUserDataId.fieldLen); - return -1; - } - else - { - l_fileObj.write( l_buffer, l_ffdcUserDataId.fieldLen); - l_fileObj.Close(); - } - - //Specific handling - if(l_ffdcUserDataId.fieldId == SBE_FFDC_ATTR_DUMP) - { - SBE_PARSER_PRINT_HEADING(SBE_ATTR_DUMP_HEADLINE) - //command - std::ostringstream l_strCmd1; - // p9_xip_tool <sbe seeprom bin file> - // -ifs attrdump <attr dump file> 2>&1 - l_strCmd1 << findSbeFile(P9_XIP_TOOL) - << " " - << findSbeFile(SBE_SEEPROM_BIN) - << " " - << P9_XIP_ATTR_CMD - << " " - << l_strFile.str().c_str() - << " " - << "2>&1"; - - //Call out the command - sbeParserSysCall( l_strCmd1.str().c_str() ); - } - else if(l_ffdcUserDataId.fieldId == SBE_FFDC_TRACE_DUMP) - { - SBE_PARSER_PRINT_HEADING(SBE_TRACE_HEADLINE) - //command - std::ostringstream l_strCmd1, l_strCmd2; - // ppe2fsp <trace dump file> <trace bin file> 2>&1 - l_strCmd1 << findSbeFile(PPE2FSP_TOOL) - << " " - << l_strFile.str().c_str() - << " " - << SBE_TRACE_BIN - << " " - << "2>&1"; - - // fsp-trace -s <sbe string file> <trace bin file> 2>&1 - l_strCmd2 << SBE_TRACE_CMD - << " " - << findSbeFile(SBE_STRING_FILE) - << " " - << SBE_TRACE_BIN - << " " - << "2>&1"; - - //Call out the commands - sbeParserSysCall( l_strCmd1.str().c_str() ); - sbeParserSysCall( l_strCmd2.str().c_str() ); - } - - //Delete the temp file - l_fileObj.Remove(); - } - l_dumpFields >>= 1; - if(l_rc != 0) - { - break; - } - } - } while(false); - - return l_rc; -} |