diff options
author | Doug Gilbert <dgilbert@us.ibm.com> | 2013-11-15 12:45:52 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-01-10 18:06:54 -0600 |
commit | effa0e2c6eccb199caa6179a0618c75c6182aa4b (patch) | |
tree | cfbd0f070ad74eaf3a08f6f545de8fc633efc688 /src/usr/mbox/ipcSp.C | |
parent | 613d36e02e5ce4e5b69cbb02483e9fa352666ecd (diff) | |
download | talos-hostboot-effa0e2c6eccb199caa6179a0618c75c6182aa4b.tar.gz talos-hostboot-effa0e2c6eccb199caa6179a0618c75c6182aa4b.zip |
implement start_payload for multi-drawer
RTC: 71994
Change-Id: I422f349d5588731a5e7cfc504d96e497958d6b95
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/7426
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/mbox/ipcSp.C')
-rw-r--r-- | src/usr/mbox/ipcSp.C | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/usr/mbox/ipcSp.C b/src/usr/mbox/ipcSp.C index e0b2a3449..ac45be232 100644 --- a/src/usr/mbox/ipcSp.C +++ b/src/usr/mbox/ipcSp.C @@ -29,6 +29,12 @@ #include <errl/errlmanager.H> #include <mbox/mbox_reasoncodes.H> +namespace START_PAYLOAD +{ + extern errlHndl_t callShutdown ( uint64_t i_hbInstance, + bool i_masterInstance ); +}; + trace_desc_t* g_trac_ipc = NULL; TRAC_INIT(&g_trac_ipc, IPC_TRACE_NAME, KILOBYTE); @@ -118,6 +124,7 @@ void IpcSp::msgHandler() { errlCommit(err, IPC_COMP_ID); } + mod_loaded = false; } // Respond @@ -143,6 +150,51 @@ void IpcSp::msgHandler() errlCommit(err,IPC_COMP_ID); } break; + + case IPC_START_PAYLOAD: + + if ( !VFS::module_is_loaded( "libstart_payload.so" ) ) + { + err = VFS::module_load( "libstart_payload.so" ); + + if ( err ) + { + TRACFCOMP( g_trac_ipc, + "Could not load runtime module" ); + } + else + { + mod_loaded = true; + } + } + + if(!err) + { + // Function will not return unless error + err = START_PAYLOAD::callShutdown(msg->data[0],false); + } + + if(err) + { + errlCommit(err, IPC_COMP_ID); + } + + if(mod_loaded) + { + err = VFS::module_unload( "libstart_payload.so" ); + + if (err) + { + errlCommit(err, IPC_COMP_ID); + } + mod_loaded = false; + } + + msg_free(msg); + + break; + + default: TRACFCOMP( g_trac_ipc, @@ -181,6 +233,8 @@ void IpcSp::msgHandler() errlCommit(err, IPC_COMP_ID); + msg_free(msg); + break; } } |