summaryrefslogtreecommitdiffstats
path: root/src/usr/fsi/plugins
diff options
context:
space:
mode:
authorDan Crowell <dcrowell@us.ibm.com>2013-10-01 18:03:20 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-10-17 12:38:03 -0500
commit64464ee7395a01b1266ce0a80bf8e50bbc549d66 (patch)
treec0aa5900b7b2af21bfe303890aa7b56c980097a4 /src/usr/fsi/plugins
parent98457fbc91fcd35f604a7916779e38e0e761d302 (diff)
downloadblackbird-hostboot-64464ee7395a01b1266ce0a80bf8e50bbc549d66.tar.gz
blackbird-hostboot-64464ee7395a01b1266ce0a80bf8e50bbc549d66.zip
FSI Error Handling
Change-Id: Ie4d9b8d96fd84b4b263466c7637e5e9ef2641f50 RTC: 35287 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/6442 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/fsi/plugins')
-rw-r--r--src/usr/fsi/plugins/FSI_COMP_ID_Parse.C27
-rw-r--r--src/usr/fsi/plugins/errludP_fsi.H206
-rw-r--r--src/usr/fsi/plugins/fsiUdParserFactory.H52
3 files changed, 285 insertions, 0 deletions
diff --git a/src/usr/fsi/plugins/FSI_COMP_ID_Parse.C b/src/usr/fsi/plugins/FSI_COMP_ID_Parse.C
new file mode 100644
index 000000000..be7809501
--- /dev/null
+++ b/src/usr/fsi/plugins/FSI_COMP_ID_Parse.C
@@ -0,0 +1,27 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/fsi/plugins/FSI_COMP_ID_Parse.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2013 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+#include "errludparser.H"
+#include "fsiUdParserFactory.H"
+
+ERRL_MAKE_UD_PARSER(FSI::UserDetailsParserFactory, hbfw::FSI_COMP_ID)
+
diff --git a/src/usr/fsi/plugins/errludP_fsi.H b/src/usr/fsi/plugins/errludP_fsi.H
new file mode 100644
index 000000000..d8f47f02f
--- /dev/null
+++ b/src/usr/fsi/plugins/errludP_fsi.H
@@ -0,0 +1,206 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/fsi/plugins/errludP_fsi.H $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2013 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+#ifndef ERRL_UDP_FSI_H
+#define ERRL_UDP_FSI_H
+
+/**
+ * @file errludP_fsi.H
+ *
+ * Defines the ErrlUserDetailsParser classes that parse FSI FFDC
+ */
+
+#include "errluserdetails.H"
+#include <string.h>
+
+/**
+ * Some macros to manipulate data types cleanly
+ */
+#define TO_UINT8(ptr) (*(reinterpret_cast<uint8_t*>(ptr)))
+#define TO_UINT16(ptr) (ntohs(*(reinterpret_cast<uint16_t*>(ptr))))
+#define TO_UINT32(ptr) (ntohl(*(reinterpret_cast<uint32_t*>(ptr))))
+#define TO_UINT64(ptr) (ntohll(*(reinterpret_cast<uint64_t*>(ptr))))
+
+namespace FSI
+{
+
+/**
+ * @class UdParserPresence
+ *
+ * Parses UdPresence
+ */
+class UdParserPresence : public ERRORLOG::ErrlUserDetailsParser
+{
+public:
+ /**
+ * @brief Constructor
+ */
+ UdParserPresence() {}
+
+ /**
+ * @brief Destructor
+ */
+ virtual ~UdParserPresence() {}
+
+ /**
+ * @brief Parses string user detail data from an error log
+ *
+ * @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
+ {
+ char* l_databuf = static_cast<char*>(i_pBuffer);
+ i_parser.PrintHeading("FSI Presence");
+
+ //***** Memory Layout *****
+ // 4 bytes : Slave HUID
+ // 4 bytes : Master HUID
+ // 1 byte : FSI_MASTER_TYPE
+ // 1 byte : port
+ // 1 byte : cascade
+ // 2 bytes : flags
+ // 4 bytes : linkid (node+proc+type+port)
+ // 2 bytes : Size of iv_slaves[]
+ // 8 bytes : slave enable Index
+ // X bytes : iv_slaves[]
+
+ i_parser.PrintNumber("Slave","%.8lX",TO_UINT32(l_databuf));
+ l_databuf += sizeof(uint32_t);
+ i_parser.PrintNumber("Master","%.8lX",TO_UINT32(l_databuf));
+ l_databuf += sizeof(uint32_t);
+ i_parser.PrintNumber("Type","%.2lX",TO_UINT8(l_databuf));
+ l_databuf += sizeof(uint8_t);
+ i_parser.PrintNumber("Port","%.2lX",TO_UINT8(l_databuf));
+ l_databuf += sizeof(uint8_t);
+ i_parser.PrintNumber("Cascade","%.2lX",TO_UINT8(l_databuf));
+ l_databuf += sizeof(uint8_t);
+ i_parser.PrintNumber("Flags","%.4lX",TO_UINT16(l_databuf));
+ l_databuf += sizeof(uint16_t);
+ size_t slave_size = TO_UINT16(l_databuf);
+ l_databuf += sizeof(uint16_t);
+ uint64_t index = TO_UINT64(l_databuf);
+ l_databuf += sizeof(uint64_t);
+ i_parser.PrintHeading("Detected Slaves");
+ char label[12];
+ for( size_t mport = 0; mport < slave_size; mport++ )
+ {
+ if( mport == index )
+ {
+ sprintf( label, " *Master%d*", mport );
+ }
+ else
+ {
+ sprintf( label, " Master%d", mport );
+ }
+
+ i_parser.PrintNumber(label,"%.2lX",TO_UINT8(l_databuf));
+ l_databuf += sizeof(uint8_t);
+ }
+
+
+ }
+
+private:
+ // Disabled
+ UdParserPresence(const UdParserPresence&);
+ UdParserPresence & operator=(const UdParserPresence&);
+};
+
+
+/**
+ * @class UdParserOperation
+ *
+ * Parses UdOperation
+ */
+class UdParserOperation : public ERRORLOG::ErrlUserDetailsParser
+{
+public:
+ /**
+ * @brief Constructor
+ */
+ UdParserOperation() {}
+
+ /**
+ * @brief Destructor
+ */
+ virtual ~UdParserOperation() {}
+
+ /**
+ * @brief Parses string user detail data from an error log
+ *
+ * @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
+ {
+ char* l_databuf = static_cast<char*>(i_pBuffer);
+
+ //***** Memory Layout *****
+ // 4 bytes : Target HUID
+ // 8 bytes : FSI Address
+ // 1 byte : 1=read, 0=write
+ uint32_t targ = TO_UINT32(l_databuf);
+ l_databuf += sizeof(uint32_t);
+ uint64_t addr = TO_UINT64(l_databuf);
+ l_databuf += sizeof(uint64_t);
+ uint8_t op = TO_UINT8(l_databuf);
+ l_databuf += sizeof(uint8_t);
+
+ if( op == 1 )
+ {
+ i_parser.PrintHeading("FSI Read");
+ }
+ else if( op == 0 )
+ {
+ i_parser.PrintHeading("FSI Write");
+ }
+ else
+ {
+ i_parser.PrintHeading("Unknown FSI Operation");
+ }
+
+ // Print out the memory addresses
+ i_parser.PrintNumber("Op Target","%.8lX",targ);
+ i_parser.PrintNumber("Address","%.8lX",(uint32_t)addr);//@todo: RTC:81826
+ }
+
+private:
+ // Disabled
+ UdParserOperation(const UdParserOperation&);
+ UdParserOperation & operator=(const UdParserOperation&);
+};
+
+
+}
+
+#endif
diff --git a/src/usr/fsi/plugins/fsiUdParserFactory.H b/src/usr/fsi/plugins/fsiUdParserFactory.H
new file mode 100644
index 000000000..989baed42
--- /dev/null
+++ b/src/usr/fsi/plugins/fsiUdParserFactory.H
@@ -0,0 +1,52 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/fsi/plugins/fsiUdParserFactory.H $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2013 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+#if !defined(_FSIUDPARSERFACTORY_H)
+#define _FSIUDPARSERFACTORY_H
+
+#include "errludparserfactory.H"
+#include "errludP_fsi.H"
+
+namespace FSI
+{
+ class UserDetailsParserFactory
+ : public ERRORLOG::ErrlUserDetailsParserFactory
+ {
+ public:
+ UserDetailsParserFactory()
+ {
+ registerParser<FSI::UdParserPresence>
+ (FSI_UDT_PRESENCE);
+ registerParser<FSI::UdParserOperation>
+ (FSI_UDT_OPERATION);
+ }
+
+ private:
+
+ UserDetailsParserFactory(const UserDetailsParserFactory &);
+ UserDetailsParserFactory & operator=
+ (const UserDetailsParserFactory &);
+ };
+};
+
+#endif
+
OpenPOWER on IntegriCloud