X-Git-Url: https://git.ti.com/gitweb?p=ipc%2Fipcdev.git;a=blobdiff_plain;f=linux%2Fsrc%2Fapi%2FIpc.c;h=214c6264612627943c5e500607488ba11093372d;hp=d91be3e2f3fd07fc0c83254147376de31195a608;hb=bebbebbd6c294f81ca89bad9131d5f93e187c3c7;hpb=376401715437cbe5cec72cfd06ffb67e8e19c070 diff --git a/linux/src/api/Ipc.c b/linux/src/api/Ipc.c index d91be3e..214c626 100644 --- a/linux/src/api/Ipc.c +++ b/linux/src/api/Ipc.c @@ -44,9 +44,9 @@ #include #include #include -#include /* Common IPC headers: */ +#include #include #include @@ -55,6 +55,7 @@ /* IPC startup/shutdown stuff: */ #include +#include <_MultiProc.h> #include <_MessageQ.h> #include <_NameServer.h> @@ -70,9 +71,11 @@ static void cleanup(int arg); Int Ipc_start (Void) { MessageQ_Config msgqCfg; - Int32 status = Ipc_S_SUCCESS; + MultiProc_Config mpCfg; + Int32 status; LAD_Status ladStatus; UInt16 rprocId; + Int32 attachedAny = 0; /* Catch ctrl-C, and cleanup: */ (void) signal(SIGINT, cleanup); @@ -84,25 +87,41 @@ Int Ipc_start (Void) goto exit; } + /* + * Get MultiProc configuration from LAD and initialize local MultiProc + * config structure. + */ + MultiProc_getConfig(&mpCfg); + _MultiProc_initCfg(&mpCfg); + status = NameServer_setup(); if (status >= 0) { MessageQ_getConfig(&msgqCfg); MessageQ_setup(&msgqCfg); /* Now attach to all remote processors, assuming they are up. */ - for (rprocId = 0; - (rprocId < MultiProc_getNumProcessors()) && (status >= 0); - rprocId++) { - if (0 == rprocId) { - /* Skip host, which should always be 0th entry. */ - continue; - } - status = MessageQ_attach (rprocId, NULL); - if (status < 0) { - printf("Ipc_start: MessageQ_attach(%d) failed: %d\n", - rprocId, status); - status = Ipc_E_FAIL; - } + for (rprocId = 0; rprocId < MultiProc_getNumProcessors(); rprocId++) { + if (0 == rprocId) { + /* Skip host, which should always be 0th entry. */ + continue; + } + status = MessageQ_attach(rprocId, NULL); + if (status == MessageQ_E_RESOURCE) { + continue; + } + if (status < 0) { + printf("Ipc_start: MessageQ_attach(%d) failed: %d\n", + rprocId, status); + status = Ipc_E_FAIL; + + break; + } + else { + attachedAny = 1; + } + } + if (attachedAny) { + status = Ipc_S_SUCCESS; } } else {