summaryrefslogtreecommitdiffstats
path: root/src/usr/vpd/plugins/errludP_vpd.H
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/vpd/plugins/errludP_vpd.H')
-rw-r--r--src/usr/vpd/plugins/errludP_vpd.H123
1 files changed, 123 insertions, 0 deletions
diff --git a/src/usr/vpd/plugins/errludP_vpd.H b/src/usr/vpd/plugins/errludP_vpd.H
new file mode 100644
index 000000000..bc47d8436
--- /dev/null
+++ b/src/usr/vpd/plugins/errludP_vpd.H
@@ -0,0 +1,123 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/vpd/plugins/errludP_vpd.H $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2014 */
+/* */
+/* 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_VPD_H
+#define ERRL_UDP_VPD_H
+
+/**
+ * @file errludP_vpd.H
+ *
+ * Defines the ErrlUserDetailsParser classes that parse VPD 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 VPD
+{
+
+/**
+ * @class UdParserVpdParms
+ *
+ * Parses UdParserVpdParms
+ */
+class UdParserVpdParms : public ERRORLOG::ErrlUserDetailsParser
+{
+public:
+ /**
+ * @brief Constructor
+ */
+ UdParserVpdParms() {}
+
+ /**
+ * @brief Destructor
+ */
+ virtual ~UdParserVpdParms() {}
+
+ /**
+ * @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("VPD Parameters");
+
+ //***** Memory Layout *****
+ // 1 byte : Read / Not-Write
+ // 4 bytes : Target HUID
+ // 8 bytes : Length of In/Out Buffer
+ // 8 bytes : Record
+ // 8 bytes : Keyword
+
+ uint8_t op = TO_UINT8(l_databuf);
+ l_databuf += sizeof(uint8_t);
+ if( op == 1 )
+ {
+ i_parser.PrintHeading("VPD Read");
+ }
+ else if( op == 0 )
+ {
+ i_parser.PrintHeading("VPD Write");
+ }
+ else
+ {
+ i_parser.PrintHeading("Unknown VPD Operation");
+ }
+
+ i_parser.PrintNumber("Target","%.8lX",TO_UINT32(l_databuf));
+ l_databuf += sizeof(uint32_t);
+ i_parser.PrintNumber("Length of I/O Buffer","%.16lX",
+ TO_UINT64(l_databuf));
+ l_databuf += sizeof(uint64_t);
+ i_parser.PrintNumber("Record","%.16lX",TO_UINT64(l_databuf));
+ l_databuf += sizeof(uint64_t);
+ i_parser.PrintNumber("Keyword","%.16lX",TO_UINT64(l_databuf));
+ l_databuf += sizeof(uint64_t);
+
+ }
+
+private:
+ // Disabled
+ UdParserVpdParms(const UdParserVpdParms&);
+ UdParserVpdParms & operator=(const UdParserVpdParms&);
+};
+
+
+}
+
+#endif
OpenPOWER on IntegriCloud