Move cluster processor list from config to module state
authorRamsey Harris <ramsey@ti.com>
Fri, 21 Nov 2014 22:13:16 +0000 (14:13 -0800)
committerRobert Tivy <rtivy@ti.com>
Wed, 26 Nov 2014 19:13:27 +0000 (11:13 -0800)
The list of processors in the cluster used to be defined at
configuration time. This prevents reusing a single executable
image on multiple processors (i.e. one image for all DSPs).
I moved this list into the MultiProc module state, so that it
could be defined in a reset hook when reusing a single image.

packages/ti/ipc/MultiProc.h
packages/ti/sdo/ipc/GateMP.c
packages/ti/sdo/ipc/ListMP.c
packages/ti/sdo/ipc/heaps/HeapBufMP.c
packages/ti/sdo/ipc/heaps/HeapMemMP.c
packages/ti/sdo/ipc/heaps/HeapMultiBufMP.c
packages/ti/sdo/utils/MultiProc.c
packages/ti/sdo/utils/MultiProc.xdc
packages/ti/sdo/utils/MultiProc.xs

index b32f954b88afd405a1911af552b6bd4ee570cd6d..17dc6a78b5b32a38be79aa7051718f4d2f1724f3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2014, Texas Instruments Incorporated
+ * Copyright (c) 2012-2014 Texas Instruments Incorporated - http://www.ti.com
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -158,7 +158,7 @@ extern "C" {
  * =============================================================================
  */
 
- /*!
+/*!
  *  @brief      Gets the base MultiProc id of the cluster
  *
  *  Retrieves the base MultiProc id for the cluster of processors.
@@ -169,6 +169,19 @@ extern "C" {
  */
 UInt16 MultiProc_getBaseIdOfCluster(Void);
 
+/*!
+ *  @brief      Return the list of processors in the cluster
+ *
+ *  Returns a list which contains the procIds of every processor in
+ *  the cluster. This is useful for functions which require a list
+ *  of procIds.
+ *
+ *  @return     List of processors Ids
+ *
+ *  @sa         MultiProc_getNumProcsInCluster
+ */
+UInt16 *MultiProc_getClusterProcList(Void);
+
 /*!
  *  @brief      Gets the MultiProc id
  *
index f8469ea6033ef902cddf54f3656adde5e126fa58..fe44d095299423bfcd1b4bd22361d315604ab904 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2014, Texas Instruments Incorporated
+ * Copyright (c) 2012-2014 Texas Instruments Incorporated - http://www.ti.com
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -259,7 +259,7 @@ Int GateMP_open(String name, GateMP_Handle *handlePtr)
      *  Search all processors.
      */
     status = NameServer_get((NameServer_Handle)GateMP_module->nameServer, name,
-            &nsValue, &len, ti_sdo_utils_MultiProc_procIdList);
+            &nsValue, &len, MultiProc_getClusterProcList());
 
     if (status < 0) {
         *handlePtr = NULL;
index d0b9e7b0432f5ea0b543fc12f40146bf0683d046..80bbafa820755fae69e01653715c82037d720090 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2012-2014 Texas Instruments Incorporated - http://www.ti.com
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -159,9 +159,7 @@ Int ListMP_open(String name, ListMP_Handle *handlePtr)
 
     /* Search NameServer */
     status = NameServer_getUInt32((NameServer_Handle)ListMP_module->nameServer,
-                                  name,
-                                  &sharedShmBase,
-                                  ti_sdo_utils_MultiProc_procIdList);
+            name, &sharedShmBase, MultiProc_getClusterProcList());
 
     if (status < 0) {
         /* Name was not found */
index 5ccdf0a379042a6070a003e318625d46d5b467ce..95af057cf070a037fd2d2efe7836b813b1d8fee1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2012-2014 Texas Instruments Incorporated - http://www.ti.com
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -259,11 +259,9 @@ Int HeapBufMP_open(String name,
     Assert_isTrue(name != NULL, ti_sdo_ipc_Ipc_A_invParam);
 
     /* Open by name */
-    status = NameServer_getUInt32((NameServer_Handle)
-                 HeapBufMP_module->nameServer,
-                 name,
-                 &sharedShmBase,
-                 ti_sdo_utils_MultiProc_procIdList);
+    status = NameServer_getUInt32(
+            (NameServer_Handle)HeapBufMP_module->nameServer, name,
+            &sharedShmBase, MultiProc_getClusterProcList());
 
     if (status < 0) {
         /* Name not found. */
index 2b693b863dc112b4a943fa9303b3952addfc235e..1da1518c4bca28fa8069e18d2c85cf098422747b 100644 (file)
@@ -222,7 +222,7 @@ Int HeapMemMP_open(String name, HeapMemMP_Handle *handlePtr)
     /* Open by name */
     status = NameServer_getUInt32(
             (NameServer_Handle)HeapMemMP_module->nameServer, name,
-            &sharedShmBase, ti_sdo_utils_MultiProc_procIdList);
+            &sharedShmBase, MultiProc_getClusterProcList());
 
     if (status < 0) {
         /* Name not found. */
index a0c5f5a410e19e18b12bd9283ad7b7451f01fc88..ad018464e1b74a3ed6289d61738988dec55e3e90 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2012-2014 Texas Instruments Incorporated - http://www.ti.com
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -299,7 +299,7 @@ Int HeapMultiBufMP_open(String name,
     /* Open by name */
     status = NameServer_getUInt32(
             (NameServer_Handle)HeapMultiBufMP_module->nameServer, name,
-            &sharedShmBase, ti_sdo_utils_MultiProc_procIdList);
+            &sharedShmBase, MultiProc_getClusterProcList());
 
     if (status < 0) {
         /* Name not found. */
index 17dbd5b4ec6e841be74100354631ea583e427e05..d6aceb5b54f458a5ad61effa3f4328cfcd751af0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2012-2014 Texas Instruments Incorporated - http://www.ti.com
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -45,6 +45,7 @@
 
 #ifdef __ti__
     #pragma FUNC_EXT_CALLED(MultiProc_getBaseIdOfCluster);
+    #pragma FUNC_EXT_CALLED(MultiProc_getClusterProcList);
     #pragma FUNC_EXT_CALLED(MultiProc_getId);
     #pragma FUNC_EXT_CALLED(MultiProc_getName);
     #pragma FUNC_EXT_CALLED(MultiProc_getNumProcessors);
@@ -67,6 +68,14 @@ UInt16 MultiProc_getBaseIdOfCluster()
     return (MultiProc_module->baseIdOfCluster);
 }
 
+/*
+ *  ======== MultiProc_getClusterProcList ========
+ */
+UInt16 *MultiProc_getClusterProcList()
+{
+    return (MultiProc_module->clusterProcList);
+}
+
 /*
  *  ======== MultiProc_getId ========
  */
index 109a6d006eac212c84b738fa8db0eeab42893441..d085933094861691f1b6b11e5b81f88b3ba94aaa 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2012-2014 Texas Instruments Incorporated - http://www.ti.com
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -286,12 +286,12 @@ module MultiProc
 
 internal:
 
-    /* list of processor id's in cluster */
-    config UInt16 procIdList[];
-
-    /* id is in Module_State to support the changing of it via setLocalId */
+    /*  Store these elements in the module state (instead of config) to
+     *  support boot-time assignment (for single image reuse).
+     */
     struct Module_State {
         UInt16 id;
         UInt16 baseIdOfCluster;
+        UInt16 clusterProcList[];       /* list of procIds in cluster */
     };
 }
index e041f1a71e767ba3f0a5595fabad80b908d37f0f..9b7afeddc79e64121e0603238297e0f4697c536e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2012-2014 Texas Instruments Incorporated - http://www.ti.com
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
+
 /*
  *  ======== MultiProc.xs ========
  *
  */
-
 var MultiProc = null;
 var BaseIdOfCluster = null;
 var NumProcessors = null;
@@ -126,12 +126,6 @@ function setConfig(name, nameList)
     NumProcessors = MultiProc.numProcessors;
     BaseIdOfCluster = MultiProc.baseIdOfCluster;
 
-    /* create the list of processor ids */
-    MultiProc.procIdList.length = MultiProc.numProcsInCluster;
-    for (var i = 0; i < MultiProc.numProcsInCluster; i++) {
-        MultiProc.procIdList[i] = i + MultiProc.baseIdOfCluster;
-    }
-
     if (nameList.length == 0) {
         /* Empty name array supplied */
         MultiProc.$logError("'nameList' cannot be empty", this);
@@ -228,10 +222,20 @@ function getIdMeta(name)
 /*
  *  ======== module$static$init ========
  */
-function module$static$init(mod, params)
+function module$static$init(state, mod)
 {
-    mod.id = params.id;
-    mod.baseIdOfCluster = params.baseIdOfCluster;
+    state.id = mod.id;
+    state.baseIdOfCluster = mod.baseIdOfCluster;
+
+    /* now that we know how big the cluster is, set the size of the array */
+    state.clusterProcList.length = mod.numProcsInCluster;
+
+    /* initialize the array if we know the actual procIds */
+    if (mod.baseIdOfCluster != MultiProc.INVALIDID) {
+        for (var i = 0; i < state.clusterProcList.length; i++) {
+            state.clusterProcList[i] = mod.baseIdOfCluster + i;
+        }
+    }
 }
 
 /*