diff options
Diffstat (limited to 'src/usr/initservice/istepdispatcher')
-rw-r--r-- | src/usr/initservice/istepdispatcher/istep_mbox_msgs.H | 6 | ||||
-rw-r--r-- | src/usr/initservice/istepdispatcher/istepdispatcher.C | 52 | ||||
-rw-r--r-- | src/usr/initservice/istepdispatcher/istepdispatcher.H | 9 |
3 files changed, 66 insertions, 1 deletions
diff --git a/src/usr/initservice/istepdispatcher/istep_mbox_msgs.H b/src/usr/initservice/istepdispatcher/istep_mbox_msgs.H index c7b97e25b..e6ad9263e 100644 --- a/src/usr/initservice/istepdispatcher/istep_mbox_msgs.H +++ b/src/usr/initservice/istepdispatcher/istep_mbox_msgs.H @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -44,6 +44,7 @@ enum { HWSVR_MSG_SUCCESS = 0x00, HWSVR_INVALID_MESSAGE = 0x01, + HWSVR_MSG_ERROR = 0x02, }; // ------------------------------------------------------------------ @@ -57,6 +58,7 @@ enum HWSVR_SYNC_POINT = 0x10, HWSVR_IPL_PROGRESS_CODE = 0x11, HWSVR_DO_IOVALID_PROCESSING = 0xC1, + HWSVR_COALESCE_HOST = 0xC2, HWSVR_DO_SHUTDOWN = 0x12 }; @@ -79,6 +81,8 @@ enum HWSVR_IPL_PROGRESS_CODE, SHUTDOWN = MBOX::FIRST_UNSECURE_MSG | HWSVR_DO_SHUTDOWN, + COALESCE_HOST = MBOX::FIRST_UNSECURE_MSG | + HWSVR_COALESCE_HOST, }; diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.C b/src/usr/initservice/istepdispatcher/istepdispatcher.C index 14416487d..e76fdc331 100644 --- a/src/usr/initservice/istepdispatcher/istepdispatcher.C +++ b/src/usr/initservice/istepdispatcher/istepdispatcher.C @@ -750,6 +750,7 @@ void IStepDispatcher::msgHndlr() { msg_t * pMsg = NULL; pMsg = msg_wait(iv_msgQ); + errlHndl_t l_errLog = NULL; switch(pMsg->type) { @@ -773,6 +774,26 @@ void IStepDispatcher::msgHndlr() TRACFCOMP(g_trac_initsvc, ERR_MRK"msgHndlr: Ignoring IStep msg in non-IStep mode!"); } break; + case COALESCE_HOST: + TRACFCOMP(g_trac_initsvc, INFO_MRK"msgHndlr: COALESCE_HOST"); + l_errLog = handleCoalesceHostMsg(); + if (l_errLog) + { + errlCommit(l_errLog, INITSVC_COMP_ID); + + // Send the message back as a response + pMsg->data[0] = HWSVR_MSG_ERROR; + } + else + { + pMsg->data[0] = HWSVR_MSG_SUCCESS; + } + + msg_respond(iv_msgQ, pMsg); + pMsg = NULL; + + break; + case SHUTDOWN: // Shutdown requested from Fsp TRACFCOMP(g_trac_initsvc, INFO_MRK"msgHndlr: SHUTDOWN"); @@ -1381,4 +1402,35 @@ void IStepDispatcher::getIstepInfo ( uint8_t & o_iStep, mutex_unlock( &iv_mutex ); } +// ---------------------------------------------------------------------------- +// IStepDispatcher::handleCoalesceHostMsg() +// ---------------------------------------------------------------------------- +errlHndl_t IStepDispatcher::handleCoalesceHostMsg() +{ + TRACFCOMP(g_trac_initsvc, ENTER_MRK"IStepDispatcher::handleCoalesceHostMsg"); + + // Ensure the library is loaded + errlHndl_t err = VFS::module_load("libestablish_system_smp.so"); + + if (err) + { + TRACFCOMP(g_trac_initsvc, "handleCoalesceHostMsg: Error loading module, PLID = 0x%x", + err->plid()); + } + else + { + err = ESTABLISH_SYSTEM_SMP::call_host_coalesce_host(); + if (err) + { + TRACFCOMP(g_trac_initsvc, "handleCoalesceHostMsg: Error with " + "call_host_coalese_host function LID = 0x%x", + err->plid()); + } + } + + TRACFCOMP( g_trac_initsvc, EXIT_MRK"IStepDispatcher::handleCoalesceHostMsg"); + + return err; +} + } // namespace diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.H b/src/usr/initservice/istepdispatcher/istepdispatcher.H index 64daf15d5..c3382fe3b 100644 --- a/src/usr/initservice/istepdispatcher/istepdispatcher.H +++ b/src/usr/initservice/istepdispatcher/istepdispatcher.H @@ -247,6 +247,15 @@ private: void handleProcFabIovalidMsg(msg_t * & io_pMsg); /** + * @brief Handles the CoalesceHost message. + * + * Executes the processing required for the host_coalesce_host istep + * + * @return errlHndl_t - the error log generated + */ + errlHndl_t handleCoalesceHostMsg(); + + /** * @brief Handles an IStepRequest message * * Executes the requested IStep and returns result in response message |