diff options
author | Doug Gilbert <dgilbert@us.ibm.com> | 2012-06-14 15:23:25 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2012-07-09 13:41:04 -0500 |
commit | 434253f2763c99351a8c790f43704cca816ba442 (patch) | |
tree | 699483556d5c47a7cb21f87a721ce88ce3d1312b /src/include | |
parent | e4a23b3b4b8a7906852a39f7fef202f04f374ce6 (diff) | |
download | talos-hostboot-434253f2763c99351a8c790f43704cca816ba442.tar.gz talos-hostboot-434253f2763c99351a8c790f43704cca816ba442.zip |
Mailbox additional error handling for Hardware errors and Invalid messages
RTC: 37990
Change-Id: I8378845ed412490a3bd214ac5198ea1fc9f19664
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/1221
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/include')
-rw-r--r-- | src/include/errno.h | 46 | ||||
-rw-r--r-- | src/include/sys/msg.h | 54 | ||||
-rw-r--r-- | src/include/sys/vfs.h | 46 | ||||
-rw-r--r-- | src/include/usr/mbox/mboxUdParser.H | 151 | ||||
-rw-r--r-- | src/include/usr/mbox/mboxUdParserFactory.H | 54 | ||||
-rw-r--r-- | src/include/usr/mbox/mbox_queues.H | 2 | ||||
-rw-r--r-- | src/include/usr/mbox/mbox_reasoncodes.H | 57 |
7 files changed, 320 insertions, 90 deletions
diff --git a/src/include/errno.h b/src/include/errno.h index 79eb30bbf..020366357 100644 --- a/src/include/errno.h +++ b/src/include/errno.h @@ -1,30 +1,32 @@ -// IBM_PROLOG_BEGIN_TAG -// This is an automatically generated prolog. -// -// $Source: src/include/errno.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 +/* IBM_PROLOG_BEGIN_TAG + * This is an automatically generated prolog. + * + * $Source: src/include/errno.h $ + * + * IBM CONFIDENTIAL + * + * COPYRIGHT International Business Machines Corp. 2011-2012 + * + * 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_TAG + */ #ifndef _ERRNO_H #define _ERRNO_H #define ENOENT 2 // No such file or directory #define EIO 5 // I/O error +#define ENXIO 6 // No such device or address #define ENOEXEC 8 // Exec format error #define EBADF 9 // Bad file descriptor #define EAGAIN 11 // Try again diff --git a/src/include/sys/msg.h b/src/include/sys/msg.h index 4bbf0b265..129d0c36b 100644 --- a/src/include/sys/msg.h +++ b/src/include/sys/msg.h @@ -1,25 +1,26 @@ -// IBM_PROLOG_BEGIN_TAG -// This is an automatically generated prolog. -// -// $Source: src/include/sys/msg.h $ -// -// IBM CONFIDENTIAL -// -// COPYRIGHT International Business Machines Corp. 2010 - 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 +/* IBM_PROLOG_BEGIN_TAG + * This is an automatically generated prolog. + * + * $Source: src/include/sys/msg.h $ + * + * IBM CONFIDENTIAL + * + * COPYRIGHT International Business Machines Corp. 2010-2012 + * + * 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_TAG + */ #ifndef __SYS_MSG_H #define __SYS_MSG_H @@ -144,6 +145,15 @@ void msg_q_destroy( msg_q_t q ); */ int msg_q_register(msg_q_t q, const char* name); +/** @fn msg_q_remove + * @brief Remove a message queue from the registry + * + * @param[in] name - name of the message queue + * + * @return 0 on success or -ENXIO if queue not found. + */ +int msg_q_remove(const char * name); + /** @fn msg_q_resolve * @brief Given the name of a message queue, return the handle to it. diff --git a/src/include/sys/vfs.h b/src/include/sys/vfs.h index 3094a1707..254a10350 100644 --- a/src/include/sys/vfs.h +++ b/src/include/sys/vfs.h @@ -1,25 +1,26 @@ -// IBM_PROLOG_BEGIN_TAG -// This is an automatically generated prolog. -// -// $Source: src/include/sys/vfs.h $ -// -// IBM CONFIDENTIAL -// -// COPYRIGHT International Business Machines Corp. 2010 - 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 +/* IBM_PROLOG_BEGIN_TAG + * This is an automatically generated prolog. + * + * $Source: src/include/sys/vfs.h $ + * + * IBM CONFIDENTIAL + * + * COPYRIGHT International Business Machines Corp. 2010-2012 + * + * 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_TAG + */ #ifndef __SYS_VFS_H #define __SYS_VFS_H @@ -67,6 +68,7 @@ extern const char* VFS_ROOT_MSG_VFS; enum VfsMessages { VFS_MSG_REGISTER_MSGQ, //!< Message to VFS_ROOT to register a message queue + VFS_MSG_REMOVE_MSGQ, //!< Message to VFS_ROOT to remove a message queue VFS_MSG_RESOLVE_MSGQ, //!< Message to VFS_ROOT to find a message queue VFS_MSG_EXEC, //!< Message to VFS_ROOT execute a module VFS_MSG_LOAD, //!< Message to vfsrp to load a module diff --git a/src/include/usr/mbox/mboxUdParser.H b/src/include/usr/mbox/mboxUdParser.H new file mode 100644 index 000000000..384c2077e --- /dev/null +++ b/src/include/usr/mbox/mboxUdParser.H @@ -0,0 +1,151 @@ +/* IBM_PROLOG_BEGIN_TAG + * This is an automatically generated prolog. + * + * $Source: src/include/usr/mbox/mboxUdParser.H $ + * + * IBM CONFIDENTIAL + * + * COPYRIGHT International Business Machines Corp. 2012 + * + * 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_TAG + */ +#if !defined(_MBOXUDPARSER) +#define _MBOXUDPARSER + +#include <errl/errluserdetails.H> +#include <errl/errludparser.H> +#include <util/align.H> +#include <mbox/mbox_reasoncodes.H> + +namespace MBOX +{ +#if defined(PARSER) + + /** + * Parses mbox message user detail in an error log + */ + class UserDetailsParserMboxMsg : public ERRORLOG::ErrlUserDetailsParser + { + public: + + /** + * Constructor + */ + UserDetailsParserMboxMsg() {} + + /** + * Destructor + */ + virtual ~UserDetailsParserMboxMsg() {} + + /** + * Parses a mbox msg in an error log. + * + * @param[in] i_version Version of the data + * @param[in] i_parse ErrlUsrParser object for the output info + * @param[in] i_pBuffer Pointer to the buffer containing detail data + * @param[in] 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 + { + uint32_t * b32 = static_cast<uint32_t *>(i_pBuffer); + uint64_t * b64 = static_cast<uint64_t *>(b32 + 4); + + uint32_t msg_id = ntohl(*b32); + uint32_t msg_q_id = ntohl(*(b32+1)); + uint32_t msg_type = ntohl(*(b32+2)); + uint32_t msg_flag = ntohl(*(b32+3)); + uint64_t msg_dta0 = ntohll(*(b64)); + uint64_t msg_dta1 = ntohll(*(b64+1)); + uint64_t msg_extd = ntohll(*(b64+2)); + + i_parser.PrintNumber("MBOX message id: 0x%08x",msg_id); + i_parser.PrintNumber("MBOX queue id: 0x%08x",msg_q_id); + i_parser.PrintNumber("MBOX message type: 0x%08x",msg_type); + if(msg_flag & 0x80000000) + { + i_parser.PrintString("MBOX mesage is synchronous"); + } + else + { + i_parser.PrintString("MBOX message is asynchronous"); + } + + i_parser.PrintNumber("MBOX data[0]: 0x%016lx",msg_dta0); + i_parser.PrintNumber("MBOX data[1]: 0x%016lx",msg_dta1); + i_parser.PrintNumber("MBOX Extra data pointer: 0x%016lx",msg_extd); + + + if(msg_extd != 0 && i_buflen > 40) + { + i_parser.PrintString("MBOX extra data:"); + + uint8_t * b08 = static_cast<uint8_t *>(b64 + 3); + size_t len = i_buflen - 40; + + i_parser.PrintHexDump(b08,len); + + } + } + }; + +#else + class UserDetailsMboxMsg : public ERRORLOG::ErrlUserDetails + { + public: + + UserDetailsMboxMsg(uint64_t * i_mbox_msg, + size_t i_msg_byte_size, + uint64_t * i_extra_data = NULL, + size_t i_data_byte_size = 0) + { + iv_CompId = HBMBOX_COMP_ID; + iv_Version = 1; + iv_SubSection = MBOX_UDT_MBOXMSG_DATA; + iv_merge = false; + + if(i_extra_data == NULL) + { + i_data_byte_size = 0; + } + + size_t msg_size = ALIGN_8(i_msg_byte_size); + size_t dta_size = ALIGN_8(i_data_byte_size); + + uint64_t * buffer = + reinterpret_cast<uint64_t*>(reallocUsrBuf(msg_size+dta_size)); + + msg_size /= 8; + dta_size /= 8; + for(size_t i = 0; i < msg_size; ++i) + { + buffer[i] = i_mbox_msg[i]; + } + for(size_t i = 0; i < dta_size; ++i) + { + buffer[msg_size+i] = i_extra_data[i]; + } + } + + ~UserDetailsMboxMsg() {} + + }; + +#endif +}; +#endif diff --git a/src/include/usr/mbox/mboxUdParserFactory.H b/src/include/usr/mbox/mboxUdParserFactory.H new file mode 100644 index 000000000..a857e5522 --- /dev/null +++ b/src/include/usr/mbox/mboxUdParserFactory.H @@ -0,0 +1,54 @@ +/* IBM_PROLOG_BEGIN_TAG + * This is an automatically generated prolog. + * + * $Source: src/include/usr/mbox/mboxUdParserFactory.H $ + * + * IBM CONFIDENTIAL + * + * COPYRIGHT International Business Machines Corp. 2012 + * + * 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_TAG + */ +#if !defined(_MBOXUDPARSERFACTORY_H) +#define _MBOXUDPARSERFACTORY_H + +#if defined(PARSER) + +#include <mbox/mboxUdParser.H> +#include <mbox/mbox_reasoncodes.H> +#include <errl/errludparserfactory.H> + +namespace mbox +{ + class UserDetailsParserFactory + : public ERRORLOG::ErrlUserDetailsParserFactory + { + public: + UserDetailsParserFactory() + { + registerParser<MBOX::UserDetailsParserMboxMsg> + (MBOX_UDT_MBOXMSG_DATA); + } + + private: + + UserDetailsParserFactory(const UserDetailsParserFactory &); + UserDetailsParserFactory & operator= + (const UserDetailsParserFactory &); + }; +}; + +#endif +#endif diff --git a/src/include/usr/mbox/mbox_queues.H b/src/include/usr/mbox/mbox_queues.H index bd11f09a0..6c7134061 100644 --- a/src/include/usr/mbox/mbox_queues.H +++ b/src/include/usr/mbox/mbox_queues.H @@ -48,7 +48,7 @@ namespace MBOX // FSP mailboxes FSP_FIRST_MSGQ = 0x80000000, - FSP_MAILBOX_MSGQ = FSP_FIRST_MSGQ, + FSP_MAILBOX_MSGQ, FSP_PROGRESS_CODES_MSGQ, FSP_TRACE_MSGQ, FSP_ERRL_MSGQ, diff --git a/src/include/usr/mbox/mbox_reasoncodes.H b/src/include/usr/mbox/mbox_reasoncodes.H index 46d0b4738..ca298aad7 100644 --- a/src/include/usr/mbox/mbox_reasoncodes.H +++ b/src/include/usr/mbox/mbox_reasoncodes.H @@ -1,25 +1,26 @@ -// IBM_PROLOG_BEGIN_TAG -// This is an automatically generated prolog. -// -// $Source: src/include/usr/mbox/mbox_reasoncodes.H $ -// -// IBM CONFIDENTIAL -// -// COPYRIGHT International Business Machines Corp. 2012 -// -// 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 +/* IBM_PROLOG_BEGIN_TAG + * This is an automatically generated prolog. + * + * $Source: src/include/usr/mbox/mbox_reasoncodes.H $ + * + * IBM CONFIDENTIAL + * + * COPYRIGHT International Business Machines Corp. 2012 + * + * 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_TAG + */ #ifndef __MBOX_REASONCODES_H #define __MBOX_REASONCODES_H @@ -39,6 +40,7 @@ namespace MBOX MOD_MBOXSRV_FSP_MSG = 0x07, // MailboxSp::handle_hbmbox_msg MOD_MBOXSRV_SENDMSG = 0x08, // MailboxSp::send_msg MOD_MBOXSRV_INIT = 0x09, // MailboxSp::_init + MOD_MBOXSRC_UNCLAIMED = 0x0A, // MailboxSp::handleUnclaimed }; enum MBOXReasonCode @@ -60,6 +62,15 @@ namespace MBOX RC_KERNEL_REG_FAILED = HBMBOX_COMP_ID | 0x0F, RC_MAILBOX_DISABLED = HBMBOX_COMP_ID | 0x10, }; -}; + + /** + * Defins for MBOX error og user detail data sections + */ + enum mboxUserDetailDataSubsection + { + MBOX_UDT_MBOXMSG_DATA = 1, + }; + +}; #endif |