This module has a common header that can be found in the
ti.ipc
package. Application code should include the common header file (not the
RTSC-generated one):
#include <ti/ipc/Ipc.h>
The RTSC module must be used in the application's RTSC configuration file
(.cfg):
Ipc = xdc.useModule('ti.sdo.ipc.Ipc');
Documentation for all runtime APIs, instance configuration parameters,
error codes macros and type definitions available to the application
integrator can be found in the
Doxygen documenation
for the IPC product. However, the documentation presented on this page
should be referred to for information specific to the RTSC module, such as
module configuration, Errors, and Asserts.
[
more ... ]
This module has a common header that can be found in the
ti.ipc
package. Application code should include the common header file (not the
RTSC-generated one):
#include <ti/ipc/Ipc.h>
The RTSC module must be used in the application's RTSC configuration file
(.cfg):
Ipc = xdc.useModule('ti.sdo.ipc.Ipc');
Documentation for all runtime APIs, instance configuration parameters,
error codes macros and type definitions available to the application
integrator can be found in the
Doxygen documenation
for the IPC product. However, the documentation presented on this page
should be referred to for information specific to the RTSC module, such as
module configuration, Errors, and Asserts.
The most common static configuration that is required of the Ipc module
is the
procSync configuration that affects the behavior of the
Ipc_start and Ipc_attach runtime APIs.
Additionally, certain subsystems of IPC (such as Notify and MessageQ) can
be disabled to save resources on a per-connection basis by configuring Ipc
using
setEntryMeta.
enum Ipc.ProcSync |
 |
Various configuration options for procSync
XDCscript usage |
meta-domain |
values of type Ipc.ProcSync
const Ipc.ProcSync_NONE;
// ProcSync_PAIR with no synchronization
const Ipc.ProcSync_PAIR;
// Ipc_start does not Ipc_attach
const Ipc.ProcSync_ALL;
// Ipc_start attach to all remote procs
typedef enum Ipc_ProcSync {
Ipc_ProcSync_NONE,
// ProcSync_PAIR with no synchronization
Ipc_ProcSync_PAIR,
// Ipc_start does not Ipc_attach
Ipc_ProcSync_ALL
// Ipc_start attach to all remote procs
} Ipc_ProcSync;
DETAILS
The values in this enum affect the behavior of the Ipc_start and
Ipc_attach runtime APIs.
ProcSync_ALL: Calling Ipc_start will also internally Ipc_attach to
each remote processor. The application should never call Ipc_attach.
This type of startup and synchronization should be used if all IPC
processors on a device start up at the same time and connections should
be established between every possible pair of processors.
ProcSync_PAIR (default): Calling Ipc_start will perform system-wide IPC
initialization required on all processor, but connections to remote
processors will not be established (i.e. Ipc_attach will never be
called). This configuration should be chosen if synchronization is
required and some/all these conditions are true:
- It is necessary to control when synchronization with each remote
processor occurs
- Useful work can be done while trying to synchronize with a remote
processor by yielding a thread after each attempt to Ipc_attach
to the processor.
- Connections to all remote processors are unnecessary and connections
should selectively be made to save memory
NOTE: A connection should be made to the owner of region 0 (usually the
processor with id = 0) before any connection to any other remote
processor can be made. For example, if there are three processors
configured with MultiProc, #1 should attach to #0 before it can attach
to #2.
ProcSync_NONE: This should be selected with caution. Ipc_start will
work exactly as it does with ProcSync_PAIR. However, Ipc_attach will
not synchronize with the remote processor. Callers of Ipc_attach are
bound by the same restrictions imposed by using ProcSync_PAIR.
Additionally, an Ipc_attach to a remote processor whose id is less than
our own has to occur *after* the corresponding remote processor has
called attach to the original processor. For example, processor #2
can call
only after processor #1 has called:
struct Ipc.Entry |
 |
Struct used for configuration via setEntryMeta
XDCscript usage |
meta-domain |
var obj = new Ipc.Entry;
obj.remoteProcId = UInt16 ...
// Remote processor id
obj.setupNotify = Bool ...
// Whether to setup Notify
obj.setupMessageQ = Bool ...
// Whether to setup MessageQ
typedef struct Ipc_Entry {
UInt16 remoteProcId;
// Remote processor id
Bool setupNotify;
// Whether to setup Notify
Bool setupMessageQ;
// Whether to setup MessageQ
} Ipc_Entry;
DETAILS
This structure defines the fields that are to be configured
between the executing processor and a remote processor.
config Ipc.A_addrNotCacheAligned // module-wide |
 |
Error raised when an address is not cache-aligned
XDCscript usage |
meta-domain |
msg: "A_addrNotCacheAligned: Address is not cache aligned"
};
extern const Assert_Id Ipc_A_addrNotCacheAligned;
config Ipc.A_addrNotInSharedRegion // module-wide |
 |
Assert raised when an address lies outside all known shared regions
XDCscript usage |
meta-domain |
msg: "A_addrNotInSharedRegion: Address not in any shared region"
};
extern const Assert_Id Ipc_A_addrNotInSharedRegion;
config Ipc.A_internal // module-wide |
 |
Assert raised when an internal error is encountered
XDCscript usage |
meta-domain |
msg: "A_internal: An internal error has occurred"
};
config Ipc.A_invArgument // module-wide |
 |
Assert raised when an argument is invalid
XDCscript usage |
meta-domain |
msg: "A_invArgument: Invalid argument supplied"
};
config Ipc.A_invParam // module-wide |
 |
Assert raised when a parameter is invalid
XDCscript usage |
meta-domain |
msg: "A_invParam: Invalid configuration parameter supplied"
};
config Ipc.A_nullArgument // module-wide |
 |
Assert raised when a required argument is null
XDCscript usage |
meta-domain |
msg: "A_nullArgument: Required argument is null"
};
config Ipc.A_nullPointer // module-wide |
 |
Assert raised when a pointer is null
XDCscript usage |
meta-domain |
msg: "A_nullPointer: Pointer is null"
};
config Ipc.E_versionMismatch // module-wide |
 |
Error raised when a version mismatch occurs
XDCscript usage |
meta-domain |
msg: "E_versionMismatch: IPC Module version mismatch: creator: %d, opener: %d"
};
extern const Error_Id Ipc_E_versionMismatch;
DETAILS
Error raised in an open call because there is
a version mismatch between the opener and the creator
config Ipc.procSync // module-wide |
 |
Affects how Ipc_start and Ipc_attach behave
XDCscript usage |
meta-domain |
DETAILS
Refer to the documentation for the
ProcSync enum for
information about the various ProcSync options.
config Ipc.userFxn // module-wide |
 |
Attach and Detach hooks
XDCscript usage |
meta-domain |
metaonly config Ipc.common$ // module-wide |
 |
Common module configuration parameters
XDCscript usage |
meta-domain |
DETAILS
All modules have this configuration parameter. Its name
contains the '$' character to ensure it does not conflict with
configuration parameters declared by the module. This allows
new configuration parameters to be added in the future without
any chance of breaking existing modules.
metaonly config Ipc.hostProcId // module-wide |
 |
host processor identifier
XDCscript usage |
meta-domain |
metaonly config Ipc.sr0MemorySetup // module-wide |
 |
Shared memory is present or not for shared region 0 entry
XDCscript usage |
meta-domain |
Ipc.sr0MemorySetup = Bool undefined;
metaonly Ipc.setEntryMeta( ) // module-wide |
 |
Sets the properties for when one processors attaches to another
XDCscript usage |
meta-domain |
Ipc.
setEntryMeta(
Ipc.Entry entry )
returns Void
module-wide built-ins |
 |
// Get this module's unique id
Bool Ipc_Module_startupDone( );
// Test if this module has completed startup
// The heap from which this module allocates memory
Bool Ipc_Module_hasMask( );
// Test whether this module has a diagnostics mask
Bits16 Ipc_Module_getMask( );
// Returns the diagnostics mask for this module
Void Ipc_Module_setMask( Bits16 mask );
// Set the diagnostics mask for this module