diff options
Diffstat (limited to 'src/include/usr/errl/errlsrc.H')
-rw-r--r-- | src/include/usr/errl/errlsrc.H | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/src/include/usr/errl/errlsrc.H b/src/include/usr/errl/errlsrc.H new file mode 100644 index 000000000..ab48a93d8 --- /dev/null +++ b/src/include/usr/errl/errlsrc.H @@ -0,0 +1,146 @@ +// IBM_PROLOG_BEGIN_TAG +// This is an automatically generated prolog. +// +// $Source: src/include/usr/errl/errlsrc.H $ +// +// IBM CONFIDENTIAL +// +// COPYRIGHT International Business Machines Corp. 2011 +// +// 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 other- +// wise divested of its trade secrets, irrespective of what has +// been deposited with the U.S. Copyright Office. +// +// Origin: 30 +// +// IBM_PROLOG_END +#ifndef ERRLSRC_H +#define ERRLSRC_H + +/** + * @file errlsrc.H + * + * @brief Manage the data that make up the 'PS' section in an + * error log PEL. PS stands for Primary System Reference Code, or SRC. + * Part of that data management is the flattening of data into PEL. + * +*/ + +#include <errl/errlsctn.H> +#include <errl/errlsctnhdr.H> + + +namespace ERRORLOG +{ + +class ErrlSrc : public ErrlSctn +{ + + // ErrlEntry may access private elements of this class. Data items that + // you would expect to be part of ErrlEntry are actually instance data + // in this class. + friend class ErrlEntry; + + +private: + + + enum constants + { + SLEN = 72, // section length w/o sizeof(ErrlSctnHdr) + SST = 1, // section type + VER = 1, // section version + SRCVER = 2, // SRC version (not section version) + WORDCOUNT = 9 // SRC word count + // CSS_VER = 8 // TODO unused, relates to iv_cssver[] + }; + + + /** + * @brief Constructor. Pass in items destined for the primary SRC + * section in the error log. + * + * @param[in] i_srcType SRC type + * @param[in] i_modId Module ID + * @param[in] i_reasonCode Reason code + * @param[in] i_user1 User data 1 + * @param[in] i_user2 User data 2 + * + */ + ErrlSrc( srcType_t i_srcType, + uint8_t i_modId, + uint16_t i_reasonCode, + uint64_t i_user1, + uint64_t i_user2 ); + + + /** @brief Destructor. */ + ~ErrlSrc(); + + + + /** + * @brief Disable copy constructor and assignment operator. + */ + ErrlSrc(const ErrlSrc& i_right); + ErrlSrc& operator=(const ErrlSrc& i_right); + + + + /** + * @brief Data export facility to flatten data to PEL. + * Exports the object into the 'PS' primary SRC PEL section. + * + * @param[out] o_pBuffer Pointer to buffer where flattened data will go. + * @param[in] i_cbBuffer Count of bytes in target buffer + * + */ + uint64_t flatten( void * o_pBuffer, const uint64_t i_cbBuffer ); + + /** + * @brief Data export size. Presently, Hostboot returns + * creates an 80-byte PS section: 72 bytes in the SRC + * and 8 bytes for the PEL section header. This is the + * amount of flat storage (in bytes) required to + * store the object. + * + * @return Size in bytes. + * + */ + uint64_t flatSize() const; + + + // Instance data + srcType_t iv_srcType; // SRC type, the ?? in SRC ??xxxxxx + uint8_t iv_modId; // module ID + uint16_t iv_reasonCode; // reason code + epubSubSystem_t iv_ssid; // subsystem type, the ?? in SRC xx??xxxx + uint64_t iv_user1; // user data 1 + uint64_t iv_user2; // user data 2 + + +}; + + +//************************************************************************** +// Hostboot PS SRC section generates minimal section with no additional +// words of data. +inline uint64_t ErrlSrc::flatSize() const +{ + // 72 bytes in SRC structure + 8 byte section header. + CPPASSERT( 80 == sizeof( pelSRCSection_t )); + return sizeof( pelSRCSection_t ); +} + + + +} // namespace + +#endif //ERRLSRC_H + |