diff options
Diffstat (limited to 'src/usr/hwas/plugins')
-rw-r--r-- | src/usr/hwas/plugins/HWAS_COMP_ID_Parse.C | 28 | ||||
-rw-r--r-- | src/usr/hwas/plugins/errludParser_pgData.H | 189 | ||||
-rw-r--r-- | src/usr/hwas/plugins/hwasUdParserFactory.H | 53 |
3 files changed, 270 insertions, 0 deletions
diff --git a/src/usr/hwas/plugins/HWAS_COMP_ID_Parse.C b/src/usr/hwas/plugins/HWAS_COMP_ID_Parse.C new file mode 100644 index 000000000..704413f57 --- /dev/null +++ b/src/usr/hwas/plugins/HWAS_COMP_ID_Parse.C @@ -0,0 +1,28 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/hwas/plugins/HWAS_COMP_ID_Parse.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2018 */ +/* [+] 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 "errludparser.H" +#include "hwasUdParserFactory.H" + +ERRL_MAKE_UD_PARSER(HWAS::UserDetailsParserFactory, hbfw::HWAS_COMP_ID) diff --git a/src/usr/hwas/plugins/errludParser_pgData.H b/src/usr/hwas/plugins/errludParser_pgData.H new file mode 100644 index 000000000..c2c66a054 --- /dev/null +++ b/src/usr/hwas/plugins/errludParser_pgData.H @@ -0,0 +1,189 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/hwas/plugins/errludParser_pgData.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2018 */ +/* [+] 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 */ +#ifndef ERRLUDPARSER_PGDATA_H +#define ERRLUDPARSER_PGDATA_H + +#include "errluserdetails.H" +#include <targeting/common/utilFilter.H> +#include "../hwas/common/vpdConstants.H" +#include "../hwas/common/hwas_reasoncodes.H" + +namespace HWAS +{ + class UdParserPartialGoodIssue : public ERRORLOG::ErrlUserDetailsParser + { + public: + + UdParserPartialGoodIssue() + { + } + + ~UdParserPartialGoodIssue() + { + } + + /** + * @brief Parses user detail data from an error log + * + * Parses the supplied user detail data and outputs info to i_parser. + * + * @param i_version Version of the data + * + * @param i_parse ErrlUsrParser object for outputting + * information + * + * @param i_pBuffer Pointer to buffer containing detail data + * + * @param i_buflen Length of the buffer + * + */ + virtual void parse(errlver_t i_version, + ErrlUsrParser& i_parser, + void * i_pBuffer, + const uint32_t i_buflen) const + { + if (i_version < HWAS_UDT_VERSION_1) + { + i_parser.PrintHeading("HWAS PG FFDC: Unknown Version"); + } + else + { + i_parser.PrintHeading("HWAS PG FFDC"); + + // Get the correct all good values for the chip from the buffer. + const uint16_t* pData = + reinterpret_cast<const uint16_t*>(i_pBuffer); + + uint16_t l_xbus = ERRORLOG::NTH_UINT16(pData); + + ++pData; + + uint16_t l_obus = ERRORLOG::NTH_UINT16(pData); + + ++pData; + + // Buffer with all good data. All of the following constants are + // defined within vpdConstants.H + const uint16_t pgDataAllGood[VPD_CP00_PG_DATA_ENTRIES] = + {static_cast<uint16_t>(VPD_CP00_PG_FSI_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_PERVASIVE_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_N0_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_N1_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_N2_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_N3_GOOD), + l_xbus, + static_cast<uint16_t>(VPD_CP00_PG_MCxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_MCxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_OBUS_GOOD), + l_obus, + l_obus, + static_cast<uint16_t>(VPD_CP00_PG_OBUS_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_PCIx_GOOD[0]), + static_cast<uint16_t>(VPD_CP00_PG_PCIx_GOOD[1]), + static_cast<uint16_t>(VPD_CP00_PG_PCIx_GOOD[2]), + static_cast<uint16_t>(VPD_CP00_PG_EPx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_EPx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_EPx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_EPx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_EPx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_EPx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_RESERVED_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_RESERVED_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_RESERVED_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_RESERVED_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_RESERVED_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_RESERVED_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_RESERVED_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_RESERVED_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_RESERVED_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_RESERVED_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_ECxx_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_RESERVED_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_RESERVED_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_RESERVED_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_RESERVED_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_RESERVED_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_RESERVED_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_RESERVED_GOOD), + static_cast<uint16_t>(VPD_CP00_PG_RESERVED_GOOD)}; + + const int OUTPUT_STRING_LENGTH = 38; + const int LABEL_STRING_LENGTH = 4; + char l_outputString[OUTPUT_STRING_LENGTH]={0}, + l_labelString[LABEL_STRING_LENGTH]={0}; + + for (size_t i = 0; i < VPD_CP00_PG_DATA_ENTRIES; ++i) + { + uint16_t pgValue = ERRORLOG::NTH_UINT16(pData + i); + + sprintf(l_outputString, + "pgData[%d] = 0x%04x; expected 0x%04x", + i, pgValue, pgDataAllGood[i]); + + sprintf(l_labelString, + "%s", + (pgDataAllGood[i] & pgValue == pgDataAllGood[i]) + ? "" : "Bad"); + + i_parser.PrintString(l_labelString, l_outputString); + + } + } + } + + private: + // Parser isn't compiled with c++11 in all environments, and + // therefore "delete" of unused interfaces (like below) is not + // supported, nor are functions with move semantics + // Disable compiler provided default functions + UdParserPartialGoodIssue(const UdParserPartialGoodIssue&); + UdParserPartialGoodIssue& operator=(const UdParserPartialGoodIssue&); + }; +} + +#endif diff --git a/src/usr/hwas/plugins/hwasUdParserFactory.H b/src/usr/hwas/plugins/hwasUdParserFactory.H new file mode 100644 index 000000000..e92feb3a0 --- /dev/null +++ b/src/usr/hwas/plugins/hwasUdParserFactory.H @@ -0,0 +1,53 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/hwas/plugins/hwasUdParserFactory.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2018 */ +/* [+] 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 */ +#ifndef HWAS_UD_PARSER_FACTORY_H +#define HWAS_UD_PARSER_FACTORY_H + +#include "errludparserfactory.H" +#include "errludParser_pgData.H" +#include "../hwas/common/hwas_reasoncodes.H" + +namespace HWAS +{ + class UserDetailsParserFactory : + public ERRORLOG::ErrlUserDetailsParserFactory + { + public: + UserDetailsParserFactory() + { + registerParser<UdParserPartialGoodIssue> + (HWAS_UDT_PARTIAL_GOOD_DATA); + } + private: + // Parser isn't compiled with c++11 in all environments, and + // therefore "delete" of unused interfaces (like below) is not + // supported, nor are functions with move semantics + // Disable compiler provided default functions + UserDetailsParserFactory(const UserDetailsParserFactory &); + UserDetailsParserFactory& operator=(const UserDetailsParserFactory &); + }; +} + +#endif |