Linux: Removed circular dependencies from ipc libs
[ipc/ipcdev.git] / linux / src / api / Ipc.c
index d91be3e2f3fd07fc0c83254147376de31195a608..214c6264612627943c5e500607488ba11093372d 100644 (file)
@@ -44,9 +44,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <signal.h>
-#include <Std.h>
 
 /* Common IPC headers: */
+#include <ti/ipc/Std.h>
 #include <ti/ipc/Ipc.h>
 #include <ti/ipc/NameServer.h>
 
@@ -55,6 +55,7 @@
 
 /* IPC startup/shutdown stuff: */
 #include <ti/ipc/MultiProc.h>
+#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 {