diff options
author | Mike Baiocchi <baiocchi@us.ibm.com> | 2014-01-09 08:13:06 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-01-15 16:35:08 -0600 |
commit | 728120d7abd9c4d7ebfca8b212a2bdc4a4f93b4e (patch) | |
tree | 7d535ef36a6c6bec6501aee0a0baad502b127927 /src/usr/i2c/plugins | |
parent | f2ebd48e3d24964ddaabbbc0c93a25ef843aae47 (diff) | |
download | talos-hostboot-728120d7abd9c4d7ebfca8b212a2bdc4a4f93b4e.tar.gz talos-hostboot-728120d7abd9c4d7ebfca8b212a2bdc4a4f93b4e.zip |
Add Callouts to I2C and VPD drivers
Callouts were added to I2C, EEPROM, MVPD and CVPD (via IPVPD code),
and SPD code.
Change-Id: Ibcb14ea3a228a5175b6faed06189286b0e0526bc
RTC: 69113
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/7966
Tested-by: Jenkins Server
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/i2c/plugins')
-rw-r--r-- | src/usr/i2c/plugins/EEPROM_COMP_ID_Parse.C | 27 | ||||
-rw-r--r-- | src/usr/i2c/plugins/I2C_COMP_ID_Parse.C | 27 | ||||
-rw-r--r-- | src/usr/i2c/plugins/errludP_i2c.H | 259 | ||||
-rw-r--r-- | src/usr/i2c/plugins/i2cUdParserFactory.H | 70 |
4 files changed, 383 insertions, 0 deletions
diff --git a/src/usr/i2c/plugins/EEPROM_COMP_ID_Parse.C b/src/usr/i2c/plugins/EEPROM_COMP_ID_Parse.C new file mode 100644 index 000000000..34d93b04a --- /dev/null +++ b/src/usr/i2c/plugins/EEPROM_COMP_ID_Parse.C @@ -0,0 +1,27 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/i2c/plugins/EEPROM_COMP_ID_Parse.C $ */ +/* */ +/* 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 */ +#include "errludparser.H" +#include "i2cUdParserFactory.H" + +ERRL_MAKE_UD_PARSER(EEPROM::UserDetailsParserFactory, hbfw::EEPROM_COMP_ID) + diff --git a/src/usr/i2c/plugins/I2C_COMP_ID_Parse.C b/src/usr/i2c/plugins/I2C_COMP_ID_Parse.C new file mode 100644 index 000000000..db0618393 --- /dev/null +++ b/src/usr/i2c/plugins/I2C_COMP_ID_Parse.C @@ -0,0 +1,27 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/i2c/plugins/I2C_COMP_ID_Parse.C $ */ +/* */ +/* 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 */ +#include "errludparser.H" +#include "i2cUdParserFactory.H" + +ERRL_MAKE_UD_PARSER(I2C::UserDetailsParserFactory, hbfw::I2C_COMP_ID) + diff --git a/src/usr/i2c/plugins/errludP_i2c.H b/src/usr/i2c/plugins/errludP_i2c.H new file mode 100644 index 000000000..1756c098e --- /dev/null +++ b/src/usr/i2c/plugins/errludP_i2c.H @@ -0,0 +1,259 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/i2c/plugins/errludP_i2c.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_I2C_H +#define ERRL_UDP_I2C_H + +/** + * @file errludP_i2c.H + * + * Defines the ErrlUserDetailsParser classes that parse I2C and EEPROM 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 I2C +{ + +/** + * @class UdParserI2CParms + * + * Parses UdI2CParms + */ +class UdParserI2CParms : public ERRORLOG::ErrlUserDetailsParser +{ +public: + /** + * @brief Constructor + */ + UdParserI2CParms() {} + + /** + * @brief Destructor + */ + virtual ~UdParserI2CParms() {} + + /** + * @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("I2C Parameters"); + + //***** Memory Layout ***** + // 1 byte : Op Type Description + // 1 byte : Op Type (DeviceFW::OperationType) + // 4 bytes : Target HUID + // 8 bytes : Length of In/Out Buffer + // 8 bytes : Access Type (DeviceFW::AccessType) + // 1 byte : Port + // 1 byte : Engine + // 8 bytes : Device Address + // 1 byte : Flag: skip_mode_setup; + // 1 byte : Flag: with_stop; + // 1 byte : Flag: read_not_write; + // 8 bytes : Bus Speed (kbits/sec) + // 2 bytes : Bit Rate Divisor + // 8 bytes : Timeout Interval + // 8 bytes : Timeout Count; + + uint8_t op = TO_UINT8(l_databuf); + l_databuf += sizeof(uint8_t); + + if( op == 0 ) + { + i_parser.PrintHeading("I2C Read"); + } + else if( op == 1 ) + { + i_parser.PrintHeading("I2C Write"); + } + else + { + i_parser.PrintHeading("Unknown I2C Operation"); + } + + i_parser.PrintNumber("Op Type Value","%.2lX",TO_UINT8(l_databuf)); + l_databuf += sizeof(uint8_t); + i_parser.PrintNumber("Target HUID","%.8lX",TO_UINT32(l_databuf)); + l_databuf += sizeof(uint32_t); + i_parser.PrintNumber("Length I/O Buff","%.16lX",TO_UINT64(l_databuf)); + l_databuf += sizeof(uint64_t); + i_parser.PrintNumber("Access Type","%.16lX",TO_UINT64(l_databuf)); + l_databuf += sizeof(uint64_t); + i_parser.PrintNumber("Port","%.2lX",TO_UINT8(l_databuf)); + l_databuf += sizeof(uint8_t); + i_parser.PrintNumber("Engine","%.2lX",TO_UINT8(l_databuf)); + l_databuf += sizeof(uint8_t); + i_parser.PrintNumber("Device Address","%.16lX",TO_UINT64(l_databuf)); + l_databuf += sizeof(uint64_t); + i_parser.PrintNumber("Flag: skip_mode_setup","%.2lX", + TO_UINT8(l_databuf)); + l_databuf += sizeof(uint8_t); + i_parser.PrintNumber("Flag: with_stop","%.2lX",TO_UINT8(l_databuf)); + l_databuf += sizeof(uint8_t); + i_parser.PrintNumber("Flag: read_not_write","%.2lX", + TO_UINT8(l_databuf)); + l_databuf += sizeof(uint8_t); + i_parser.PrintNumber("Bus Speed (kbits/sec)","%.16lX", + TO_UINT64(l_databuf)); + l_databuf += sizeof(uint64_t); + i_parser.PrintNumber("Bit Rate Divisor","%.4lX",TO_UINT16(l_databuf)); + l_databuf += sizeof(uint16_t); + i_parser.PrintNumber("Timeout Interval","%.16lX",TO_UINT64(l_databuf)); + l_databuf += sizeof(uint64_t); + i_parser.PrintNumber("Timeout Count","%.16lX",TO_UINT64(l_databuf)); + l_databuf += sizeof(uint64_t); + + } + +private: + // Disabled + UdParserI2CParms(const UdParserI2CParms&); + UdParserI2CParms & operator=(const UdParserI2CParms&); +}; + +} // end I2C namespace + +namespace EEPROM +{ + +/** + * @class UdParserEepromParms + * + * Parses UdEepromParms + */ +class UdParserEepromParms : public ERRORLOG::ErrlUserDetailsParser +{ +public: + /** + * @brief Constructor + */ + UdParserEepromParms() {} + + /** + * @brief Destructor + */ + virtual ~UdParserEepromParms() {} + + /** + * @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("EEPROM Parameters"); + + //***** Memory Layout ***** + // 1 byte : Op Type Description + // 1 byte : Op Type (DeviceFW::OperationType) + // 4 bytes : Target HUID + // 8 bytes : Length of In/Out Buffer + // 8 bytes : Chip + // 8 bytes : Offset + // 8 bytes : Port + // 8 bytes : Engine + // 8 bytes : Device Address + // 1 byte : Address Size + // 8 bytes : Write Page Size + // 8 bytes : Device Size (in KB) + // 8 bytes : Write Cycle Time + + uint8_t op = TO_UINT8(l_databuf); + l_databuf += sizeof(uint8_t); + + if( op == 0 ) + { + i_parser.PrintHeading("EEPROM Read"); + } + else if( op == 1 ) + { + i_parser.PrintHeading("EEPROM Write"); + } + else + { + i_parser.PrintHeading("Unknown EEPROM Operation"); + } + + i_parser.PrintNumber("Op Type Value","%.2lX",TO_UINT8(l_databuf)); + l_databuf += sizeof(uint8_t); + i_parser.PrintNumber("Target HUID","%.8lX",TO_UINT32(l_databuf)); + l_databuf += sizeof(uint32_t); + i_parser.PrintNumber("Length I/O Buff","%.16lX",TO_UINT64(l_databuf)); + l_databuf += sizeof(uint64_t); + i_parser.PrintNumber("Chip","%.16lX",TO_UINT64(l_databuf)); + l_databuf += sizeof(uint64_t); + i_parser.PrintNumber("Offset","%.16lX",TO_UINT64(l_databuf)); + l_databuf += sizeof(uint64_t); + i_parser.PrintNumber("Port","%.16lX",TO_UINT64(l_databuf)); + l_databuf += sizeof(uint64_t); + i_parser.PrintNumber("Engine","%.16lX",TO_UINT64(l_databuf)); + l_databuf += sizeof(uint64_t); + i_parser.PrintNumber("Device Address","%.16lX",TO_UINT64(l_databuf)); + l_databuf += sizeof(uint64_t); + i_parser.PrintNumber("Address Size","%.2lX",TO_UINT8(l_databuf)); + l_databuf += sizeof(uint8_t); + i_parser.PrintNumber("Write Page Size","%.16lX",TO_UINT64(l_databuf)); + l_databuf += sizeof(uint64_t); + i_parser.PrintNumber("Device Size (in KB)","%.16lX", + TO_UINT64(l_databuf)); + l_databuf += sizeof(uint64_t); + i_parser.PrintNumber("Write Cycle Time","%.16lX",TO_UINT64(l_databuf)); + l_databuf += sizeof(uint64_t); + + } + +private: + // Disabled + UdParserEepromParms(const UdParserEepromParms&); + UdParserEepromParms & operator=(const UdParserEepromParms&); +}; + +} // end EEPROM NAMESPACE + +#endif diff --git a/src/usr/i2c/plugins/i2cUdParserFactory.H b/src/usr/i2c/plugins/i2cUdParserFactory.H new file mode 100644 index 000000000..aacd401e8 --- /dev/null +++ b/src/usr/i2c/plugins/i2cUdParserFactory.H @@ -0,0 +1,70 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/i2c/plugins/i2cUdParserFactory.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 */ +#if !defined(_I2CUDPARSERFACTORY_H) +#define _I2CUDPARSERFACTORY_H + +#include "errludparserfactory.H" +#include "errludP_i2c.H" + +namespace I2C +{ + class UserDetailsParserFactory + : public ERRORLOG::ErrlUserDetailsParserFactory + { + public: + UserDetailsParserFactory() + { + registerParser<I2C::UdParserI2CParms> + (I2C_UDT_PARAMETERS); + } + + private: + + UserDetailsParserFactory(const UserDetailsParserFactory &); + UserDetailsParserFactory & operator= + (const UserDetailsParserFactory &); + }; +}; + +namespace EEPROM +{ + class UserDetailsParserFactory + : public ERRORLOG::ErrlUserDetailsParserFactory + { + public: + UserDetailsParserFactory() + { + registerParser<EEPROM::UdParserEepromParms> + (EEPROM_UDT_PARAMETERS); + } + + private: + + UserDetailsParserFactory(const UserDetailsParserFactory &); + UserDetailsParserFactory & operator= + (const UserDetailsParserFactory &); + }; +}; + +#endif + |