X-Git-Url: https://git.ti.com/gitweb?p=ipc%2Fipcdev.git;a=blobdiff_plain;f=linux%2Fsrc%2Fapi%2FIpc.c;h=46db4ae16507a9f3176753d6bba30e4b3a484979;hp=d91be3e2f3fd07fc0c83254147376de31195a608;hb=7610394a7901b753ea4f2ba938ce96a42964420b;hpb=64c138981ee7e4bf612d4aeaa8858c47f25d3a50 diff --git a/linux/src/api/Ipc.c b/linux/src/api/Ipc.c index d91be3e..46db4ae 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 @@ -58,6 +58,8 @@ #include <_MessageQ.h> #include <_NameServer.h> +MultiProc_Config _MultiProc_cfg; + static LAD_ClientHandle ladHandle; static void cleanup(int arg); @@ -70,9 +72,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 +88,38 @@ Int Ipc_start (Void) goto exit; } + /* Setup and get MultiProc configuration from LAD */ + MultiProc_getConfig(&mpCfg); + _MultiProc_cfg = 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 {