]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - ipc/ipcdev.git/blobdiff - packages/ti/sdo/utils/MultiProc.xdc
SDOCM00115098 New MultiProc cdoc links for "See Also" are garbled
[ipc/ipcdev.git] / packages / ti / sdo / utils / MultiProc.xdc
index 109a6d006eac212c84b738fa8db0eeab42893441..c30fad62eb6d776976b12b7ae2f58e5e9c30bd00 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2012-2015 Texas Instruments Incorporated - http://www.ti.com
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -201,6 +201,70 @@ module MultiProc
      */
     config UInt16 numProcessors = 1;
 
+    /*!
+     *  ======== ProcAddrMode ========
+     *  Enumerate the Processor Addressing Modes
+     *
+     *  This enumeration defines the various processor addressing modes
+     *  which might impact the behavior and resource allocations of modules
+     *  that communicate with other processors in the system (i.e. IPC).
+     *
+     *  It is a way for the system integrator to control the internal
+     *  behavior and resource allocations of various module to suit the
+     *  needs of the program. However, it is at the discretion of each
+     *  module on how to respond to these processor addressing modes.
+     *
+     *  For example, the NameServer module reflects on this mode when
+     *  constructing its internal data structures. For the 'Global' mode,
+     *  it will allocate a resource for every processor in the system.
+     *  When using 'Cluster' mode, resources are only allocated for
+     *  processors in the cluster. A side-effect is that when using
+     *  Cluster mode, name queries cannot be addressed to processors
+     *  outside of the cluster.
+     *
+     *  Specify the addressing mode by setting the
+     *  {@link #procAddrMode MultiProc.procAddrMode} configuration
+     *  parameter.
+     *
+     *  @field(ProcAddrMode_Global) Every processor in the system must
+     *  be directly addressable. Usually, this requires a resource
+     *  allocation for each processor. This might require a dedicated
+     *  hardware resource and/or a memory allocation on behalf of every
+     *  processor in the sytem. For large systems, this might result in
+     *  significant memory requirements. Use with caution.
+     *
+     *  @field(ProcAddrMode_Cluster) Direct addressing is required
+     *  only for the processors in your cluster. Processors outside of
+     *  the cluster may share resources. This mode limits the per processor
+     *  resource allocations to just the processors within your cluster.
+     *  This address mode is typically used for large processor systems.
+     *
+     *  @see #procAddrMode
+     */
+    enum ProcAddrMode {
+        ProcAddrMode_Global,
+        ProcAddrMode_Cluster
+    };
+
+    /*!
+     *  ======== procAddrMode ========
+     *  Define which processor addressing mode is in operation
+     *
+     *  This configuration parameter is reflected upon by various system
+     *  components whose implementation is impacted by the processor
+     *  addressing mode currently in effect. It allows modules to optimize
+     *  their behavior and resource allocations for any given processor
+     *  address mode.
+     *
+     *  The MultiProc module has no specific behavior associated with
+     *  this configuration parameter. It is simply a convenient location
+     *  for such a configuration parameter as most processor aware
+     *  modules already depend on MultiProc.
+     *
+     *  @see #ProcAddrMode
+     */
+    config ProcAddrMode procAddrMode = MultiProc.ProcAddrMode_Global;
+
     /*! @_nodoc
      *  ======== getClusterId ========
      */
@@ -286,12 +350,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 */
     };
 }