SDOCM00115768 Incorrect check for invalid pointer in Ipc_detach
When checking for invalid pointers in 'struct Reserved', use
SharedRegion_INVALIDSRPTR instead of implicit check for NULL.
When checking for invalid pointers in 'struct Reserved', use
SharedRegion_INVALIDSRPTR instead of implicit check for NULL.
Android: Refactored Makefiles into a single Android.mk file
All Android makefiles were refactored into a single file. This results
in the object files being placed correctly in the modules output directory
structure. This also addresses build issue related to shared sources.
All Android makefiles were refactored into a single file. This results
in the object files being placed correctly in the modules output directory
structure. This also addresses build issue related to shared sources.
SDOCM00115769 Ipc_attach should not call Task_setPri
Remove the calls to change task priority. Only the application
has the privilege to do this. In addition, example ex46_graph
calls Ipc_attach from the idle task, were it is illegal to
change the task priority.
Remove the calls to change task priority. Only the application
has the privilege to do this. In addition, example ex46_graph
calls Ipc_attach from the idle task, were it is illegal to
change the task priority.
Android: Added new files for Ipc_attach phase
Due to refactoring, a needed Ipc_getConfig function was added to LAD.
Also removed unnecessary dependency to libtiipc.
Due to refactoring, a needed Ipc_getConfig function was added to LAD.
Also removed unnecessary dependency to libtiipc.
Android: Added a definition for EFD_SEMAPHORE
A define of EFD_SEMAPHORE was added to the local files since Android bionic
headers don't currently define it.
A define of EFD_SEMAPHORE was added to the local files since Android bionic
headers don't currently define it.
Add capability to specify specific Watchdog timer for Deh
Previous to this change the user was basically stuck using the GPTimer
that was hardcoded to their device (although they could change the
timer by changing the device's timer settings, which was cumbersome).
The user can now specify a particular GPTimer by setting it in the .cfg
file. For DRA7XX's IPU2, the Watchdog timers (one for each SMP core)
can be set with:
Watchdog.timerIds.length = 2;
Watchdog.timerIds[0] = "GPTimer9";
Watchdog.timerIds[1] = "GPTimer4";
Each supported device has default GPTimer settings appropriate to that
device (the snippet above actually assigns the current defaults for
Vayu, so it is actually a no-op).
The "GPTimer<n>" specification encapsulates timer settings such as
intNum and eventId. Many GPTimer specifications in Watchdog.xs have
-1 in these fields if they don't have a hardcoded wirings for them, yet
they can still be used if the user explicitly defines the value in the
.cfg file and somehow sets up the hardware to generate that intNum or
eventId (e.g., through the crossbar on Vayu).
Previous to this change the user was basically stuck using the GPTimer
that was hardcoded to their device (although they could change the
timer by changing the device's timer settings, which was cumbersome).
The user can now specify a particular GPTimer by setting it in the .cfg
file. For DRA7XX's IPU2, the Watchdog timers (one for each SMP core)
can be set with:
Watchdog.timerIds.length = 2;
Watchdog.timerIds[0] = "GPTimer9";
Watchdog.timerIds[1] = "GPTimer4";
Each supported device has default GPTimer settings appropriate to that
device (the snippet above actually assigns the current defaults for
Vayu, so it is actually a no-op).
The "GPTimer<n>" specification encapsulates timer settings such as
intNum and eventId. Many GPTimer specifications in Watchdog.xs have
-1 in these fields if they don't have a hardcoded wirings for them, yet
they can still be used if the user explicitly defines the value in the
.cfg file and somehow sets up the hardware to generate that intNum or
eventId (e.g., through the crossbar on Vayu).
SDOCM00115098 New MultiProc cdoc links for "See Also" are garbled
Fix syntax for using the @see markup XDCspec documentation tag.
Also fixed similar usage in Build module.
Fix syntax for using the @see markup XDCspec documentation tag.
Also fixed similar usage in Build module.
SDOCM00115428 Incorrect return status from NameServer_delete
Fix incorrect union references in both LAD command loop and
client API unmarshal code. Verified all references to 'status'.
Fix incorrect union references in both LAD command loop and
client API unmarshal code. Verified all references to 'status'.
SDOCM00115373 NameServer local get methods are missing on Linux
Add enum entries for missing API methods. Add union members
in the command object only, reuse existing union members in
the response object. Add API stub calls in LAD command loop.
No logging in LAD command loop because some transports use this
method for each message (would generate too many log events).
Add enum entries for missing API methods. Add union members
in the command object only, reuse existing union members in
the response object. Add API stub calls in LAD command loop.
No logging in LAD command loop because some transports use this
method for each message (would generate too many log events).
SDOCM00115434 NameServer_delete in LAD daemon leaks memory
Remove invalid assertion that name list must be empty. This
is not true and instance might still be in use by another
client (object is reference counted). Add while loop to delete
each entry on the name list. Destroy the object's gate (was not
being done). Remove macro to destruct a list object (not needed).
Remove invalid assertion that name list must be empty. This
is not true and instance might still be in use by another
client (object is reference counted). Add while loop to delete
each entry on the name list. Destroy the object's gate (was not
being done). Remove macro to destruct a list object (not needed).
Ignore cluster members which are not running
To maintain backwards compatibility, return success when Ipc_attach
fails if the Ipc module is configured with Ipc_ProcSync_ALL.
To maintain backwards compatibility, return success when Ipc_attach
fails if the Ipc module is configured with Ipc_ProcSync_ALL.
Remove DSP2 from invalid list and improve error handling for non-existing core
This commit removes DSP2 from the invalid processor list, and improves
error handling in case the IPC driver is asked to load DSP2
when it does not exist (e.g. on J6 Eco)
Signed-off-by: VW <vwan@ti.com>
This commit removes DSP2 from the invalid processor list, and improves
error handling in case the IPC driver is asked to load DSP2
when it does not exist (e.g. on J6 Eco)
Signed-off-by: VW <vwan@ti.com>
Support a seperate address translation table for DSP2
Updated to the DSP proc module (VayuDSPProc.c) to
support 2 seperate Address translation tables for DSP1 and DSP2.
Cleaned-up version of the original commit from Praveen Rao.
Signed-off-by: VW <vwan@ti.com>
Updated to the DSP proc module (VayuDSPProc.c) to
support 2 seperate Address translation tables for DSP1 and DSP2.
Cleaned-up version of the original commit from Praveen Rao.
Signed-off-by: VW <vwan@ti.com>
Add support to load DSP2 and communicate with it.
Cleaned-up version of original commit from Praveen Rao.
Signed-off-by: VW <vwan@ti.com>
Cleaned-up version of original commit from Praveen Rao.
Signed-off-by: VW <vwan@ti.com>
Combine .gitignore from ipc3x_dev into the global .gitignore file
Signed-off-by: VW <vwan@ti.com>
Signed-off-by: VW <vwan@ti.com>
Fix build warning regarding strict aliasing when building QNX IPC in Windows
Signed-off-by: VW <vwan@ti.com>
Signed-off-by: VW <vwan@ti.com>
Initialize apiStatus field in all NameServer devctl calls
Upon the return from Nameserver's internal devctl calls, the apiStatus field
in the returned CmdArgs structure for some APIs (NameServer_create,
NameServer_add, NameServer_addUInt32, NameServer_Params_init) is left
uninitialized. This commit ensures that the field is correctly set, so that
sporadic failures do not occur due to the uninitialized apiStatus field being
negative.
This addresses SDOCM00115294/SDOCM00115308/SDOCM00115309/SDOCM00115310.
Signed-off-by: VW <vwan@ti.com>
Upon the return from Nameserver's internal devctl calls, the apiStatus field
in the returned CmdArgs structure for some APIs (NameServer_create,
NameServer_add, NameServer_addUInt32, NameServer_Params_init) is left
uninitialized. This commit ensures that the field is correctly set, so that
sporadic failures do not occur due to the uninitialized apiStatus field being
negative.
This addresses SDOCM00115294/SDOCM00115308/SDOCM00115309/SDOCM00115310.
Signed-off-by: VW <vwan@ti.com>
Generated makefile for previous commit (Ipc attach)
Add Ipc attach phase to Linux implementation
Refactor the Ipc startup code to separate work done during
setup and during attach. Previous attach mode always assumed
Ipc_ProcSync_ALL, so all work was always done during startup
phase. Add new Ipc config file to LAD for specifying attach
mode. Add new NameServer and TransportRpmsg attach API.
Significant rework of the TransportRpmsg module.
Refactor the Ipc startup code to separate work done during
setup and during attach. Previous attach mode always assumed
Ipc_ProcSync_ALL, so all work was always done during startup
phase. Add new Ipc config file to LAD for specifying attach
mode. Add new NameServer and TransportRpmsg attach API.
Significant rework of the TransportRpmsg module.
Remove MAX #define from Linux Std.h
The MAX() macro that is #defined in Std.h for Linux can either conflict
or be a duplicate of other MAX() macro definitions. GCC's glibc defines
MAX in sys/param.h, and code builds will either warn abour or error on
a duplicate or conflicting definition.
Remove the usage of MAX completely to avoid this. Use a locally-defined,
differently-named macro in C file if appropriate.
The MAX() macro that is #defined in Std.h for Linux can either conflict
or be a duplicate of other MAX() macro definitions. GCC's glibc defines
MAX in sys/param.h, and code builds will either warn abour or error on
a duplicate or conflicting definition.
Remove the usage of MAX completely to avoid this. Use a locally-defined,
differently-named macro in C file if appropriate.
Correct the argument name in MessageQ_openQueueId
Replace the incorrect remoteProcId argument with procId in the
doxygen description. Fix macro spelling error. Minor word smithing.
Replace the incorrect remoteProcId argument with procId in the
doxygen description. Fix macro spelling error. Minor word smithing.
Fix doxygen comment (@Returns -> @return)
Turn TiIpcFxns.h into a public header for QNX
This commit makes TiIpcFxns.h into a public header that is exported
to the target filesystem during 'make install'.
This is in reference to enhancement SDOCM00115106.
Signed-off-by: VW <vwan@ti.com>
This commit makes TiIpcFxns.h into a public header that is exported
to the target filesystem during 'make install'.
This is in reference to enhancement SDOCM00115106.
Signed-off-by: VW <vwan@ti.com>
SDOCM00115143 Improper timeout handling in MessageQ_get (Linux)
Split the given timeout value into seconds and microseconds.
Add these to the current time of day. Check for rollover on
the microseconds.
Split the given timeout value into seconds and microseconds.
Add these to the current time of day. Check for rollover on
the microseconds.
SDOCM00114745 Ipc_transportConfig has race window
Regardless of the Ipc module reference count, any subsequent
caller to Ipc_transportConfig must use the same factory as
the first caller. Otherwise, it is an error.
Regardless of the Ipc module reference count, any subsequent
caller to Ipc_transportConfig must use the same factory as
the first caller. Otherwise, it is an error.
Add $(JOBS) to XDC command definition, intended set to -j by user
Increase default value ProcMgr_MAX_MEMORY_REGIONS in QNX
This commit increases the default value of ProcMgr_MAX_MEMORY_REGIONS to
match what we used to support in SysLink 2 (SDOCM00115108), so that real
applications that require many ProcMgr address mappings do not easily
run into this limit.
Signed-off-by: VW <vwan@ti.com>
This commit increases the default value of ProcMgr_MAX_MEMORY_REGIONS to
match what we used to support in SysLink 2 (SDOCM00115108), so that real
applications that require many ProcMgr address mappings do not easily
run into this limit.
Signed-off-by: VW <vwan@ti.com>
Revert MessageQCopy_MAXMQS back to original value in QNX
In a previous commit, we had to increase MessageQCopy_MAXMQS to accommodate for
a base reserved queue port value of 2048. However, this has since been moved
to 0x80, so we no longer need to support high queue port values.
Signed-off-by: VW <vwan@ti.com>
In a previous commit, we had to increase MessageQCopy_MAXMQS to accommodate for
a base reserved queue port value of 2048. However, this has since been moved
to 0x80, so we no longer need to support high queue port values.
Signed-off-by: VW <vwan@ti.com>
9 years agoSDOCM00115110 GateMP_open crashes on Keystone 2 3.35 ipc-3.35-next 3.35.01.06_eng 3.35.01.07
SDOCM00115110 GateMP_open crashes on Keystone 2
NameServer_get takes an array of procIds. The last element in the
array must be MultiProc_INVALIDID (the array size is not known).
However, several places in IPC call this function and pass an array
which does not have the last entry marker. NameServer_get had a check
to stop iterating when the number of processors in the cluster had
been reached. I removed this check. I'm now restoring this check.
NameServer_get takes an array of procIds. The last element in the
array must be MultiProc_INVALIDID (the array size is not known).
However, several places in IPC call this function and pass an array
which does not have the last entry marker. NameServer_get had a check
to stop iterating when the number of processors in the cluster had
been reached. I removed this check. I'm now restoring this check.
Merge branch '3.30' into ipc-next
Avoid changing the entry point on cores not loaded by remoteproc
This commit prevents the template packages/ti/ipc/remoteproc/linkcmd.xdt
from changing the entry point on cores that are not loaded by remoteproc,
such as on a Tomahawk.
Signed-off-by: VW <vwan@ti.com>
This commit prevents the template packages/ti/ipc/remoteproc/linkcmd.xdt
from changing the entry point on cores that are not loaded by remoteproc,
such as on a Tomahawk.
Signed-off-by: VW <vwan@ti.com>
Fix incorrect generation of --diags option usage
A --diags option is being thrown to suppress a warning about an entry
point other than _c_int00, but it was being thrown even when the -e
entry point option was not used. Changed to throw the --diags only
when we throw the -e.
A --diags option is being thrown to suppress a warning about an entry
point other than _c_int00, but it was being thrown even when the -e
entry point option was not used. Changed to throw the --diags only
when we throw the -e.
Add new IpcMgr.h header file to package release
Added header file to release because it is not a generated file.
Added header file to release because it is not a generated file.
Reduced MessageQ port offset from 0x800 to 0x80
The larger port offset was causing a failure in the Linux driver
(rpmsg_proto I think) which caused a back-to-back run of any IPC
application to fail. RPMessage has a maximum reserved port of 100.
Message queue port numbers will still be above the reserved ports.
The larger port offset was causing a failure in the Linux driver
(rpmsg_proto I think) which caused a back-to-back run of any IPC
application to fail. RPMessage has a maximum reserved port of 100.
Message queue port numbers will still be above the reserved ports.
Remove code references to non-SMP mode on DRA7xx/Vayu QNX
Some cleanup to help address SDOCM00108142, since we do not support non-SMP
mode on IPUs in QNX.
Signed-off-by: VW <vwan@ti.com>
Some cleanup to help address SDOCM00108142, since we do not support non-SMP
mode on IPUs in QNX.
Signed-off-by: VW <vwan@ti.com>
SDOCM00114985 Macro to extract destination address from header
Modified the existing MessageQ_getDstQueue macro to extract both
the destination queue index and procId from the message header.
It was calling MultiProc_self to acquire the destination procId,
but this only works when invoked on the actual destination processor.
Modified the existing MessageQ_getDstQueue macro to extract both
the destination queue index and procId from the message header.
It was calling MultiProc_self to acquire the destination procId,
but this only works when invoked on the actual destination processor.
SDOCM00114354 IPC Manager needs a public header file
Added header file IpcMgr.h. The module is meta-only, so there is
no generated header file which might collide with this one. Added
two functions typically called by the application: rpmsgStartup,
and ipcStartup. Omitted callIpcStart because this is only used from
config script, not application source file.
Added header file IpcMgr.h. The module is meta-only, so there is
no generated header file which might collide with this one. Added
two functions typically called by the application: rpmsgStartup,
and ipcStartup. Omitted callIpcStart because this is only used from
config script, not application source file.
Rename IPC_DEBUG_TRACE_LEVEL to IPC_DEBUG_SLOG_LEVEL
This commit renames the environment variable IPC_DEBUG_TRACE_LEVEL to
IPC_DEBUG_SLOG_LEVEL in QNX.
Signed-off-by: VW <vwan@ti.com>
This commit renames the environment variable IPC_DEBUG_TRACE_LEVEL to
IPC_DEBUG_SLOG_LEVEL in QNX.
Signed-off-by: VW <vwan@ti.com>
SDOCM00114964 Processor data array size should match cluster size
Added new config param: MultiProc.procAddrMode. This is used to
specify which processors require dedicated resources. This config
param is used by MessageQ and NameServer to control the size of
resource arrays. When using ProcAddrMode_Cluster, the resource array
size matches the number of members in the cluster. Modified
TransportRpmsgSetup and TransportShmNotify to always use the cluster
size because that is the only mode they support. These changes are
needed to minimize memory usage in large processor systems.
Added new config param: MultiProc.procAddrMode. This is used to
specify which processors require dedicated resources. This config
param is used by MessageQ and NameServer to control the size of
resource arrays. When using ProcAddrMode_Cluster, the resource array
size matches the number of members in the cluster. Modified
TransportRpmsgSetup and TransportShmNotify to always use the cluster
size because that is the only mode they support. These changes are
needed to minimize memory usage in large processor systems.
Add support for IPC_DEBUG in QNX
This commit adds support to allow end users to more easily see the trace from
IPC's user libraries. Tracing is enabled via an environment variable
(IPC_DEBUG). Setting IPC_DEBUG=1 enables 'some' trace, setting IPC_DEBUG to 2
(or 3) enables more.
Signed-off-by: VW <vwan@ti.com>
This commit adds support to allow end users to more easily see the trace from
IPC's user libraries. Tracing is enabled via an environment variable
(IPC_DEBUG). Setting IPC_DEBUG=1 enables 'some' trace, setting IPC_DEBUG to 2
(or 3) enables more.
Signed-off-by: VW <vwan@ti.com>
Add reserved queue support for QNX
This commit adds support for reserved queues on QNX (SDOCM00114908).
Signed-off-by: VW <vwan@ti.com>
This commit adds support for reserved queues on QNX (SDOCM00114908).
Signed-off-by: VW <vwan@ti.com>
Re-work MessageQ_put to eliminate transport recursion
On Linux, when delivering an inbound message sent from another process
on the same processor, the logic in MessageQ_put caused a transport
infinite recursion. In other words, the message was given back to the
transport instead of being delivered to the queue. The new logic is to
attempt the local message deliver first; if it fails, then give it to
the transport for delivery instead of failing back to the caller.
On Linux, when delivering an inbound message sent from another process
on the same processor, the logic in MessageQ_put caused a transport
infinite recursion. In other words, the message was given back to the
transport instead of being delivered to the queue. The new logic is to
attempt the local message deliver first; if it fails, then give it to
the transport for delivery instead of failing back to the caller.
SDOCM00114478 Incorrect thread safety in MessageQ_setup (Linux)
Statically initialize the mutex object; removed the dynamic init
call. Protect the entire MessageQ_setup function inside the gate.
Added gate protection to MessageQ_destroy. Decrement the reference
count (this was missing).
Statically initialize the mutex object; removed the dynamic init
call. Protect the entire MessageQ_setup function inside the gate.
Added gate protection to MessageQ_destroy. Decrement the reference
count (this was missing).
Add autoconf generated file
Signed-off-by: VW <vwan@ti.com>
Signed-off-by: VW <vwan@ti.com>
Simplify configuration of maximum name length in NameServer
This commit cleans up how the maximum name length is configured in NameServer.
Now the user only needs to configure it during instance creation, and to
configure it at the remote level in
packages/ti/ipc/namesrv/_NameServerRemoteRpmsg.h.
When a name passed to the NameServer remote exceeds the length it can support,
it now returns NameServer_E_NAMETOOLONG.
The NameServerApp is updated to test for long names that exceed the
maximum length.
This commit addresses SDOCM00111686.
Signed-off-by: VW <vwan@ti.com>
This commit cleans up how the maximum name length is configured in NameServer.
Now the user only needs to configure it during instance creation, and to
configure it at the remote level in
packages/ti/ipc/namesrv/_NameServerRemoteRpmsg.h.
When a name passed to the NameServer remote exceeds the length it can support,
it now returns NameServer_E_NAMETOOLONG.
The NameServerApp is updated to test for long names that exceed the
maximum length.
This commit addresses SDOCM00111686.
Signed-off-by: VW <vwan@ti.com>
SDOCM00103540 Incorrect number of hardware spin locks on DRA7XX
Set the number of hardware spin locks to 256 in spinlockDelegate.
Set the number of hardware spin locks to 256 in spinlockDelegate.
Set default reserved messages queues to zero
The default value for reserved message queues in the LAD
configuration should be zero. I accidentally checked-in
my test copy. This commit corrects that mistake.
The default value for reserved message queues in the LAD
configuration should be zero. I accidentally checked-in
my test copy. This commit corrects that mistake.
Specify Address Family for RPMessage in products.mak
We use the Linux kernel version to make a guess at the value
of AF_RPMSG. However, depending on the kernel configuration,
this guess could be wrong. In this case, you must specify the
AF_RPMSG value directly. This had been done in ipc-linux.mak,
but this was too obscure. So, I moved it to products.mak.
We use the Linux kernel version to make a guess at the value
of AF_RPMSG. However, depending on the kernel configuration,
this guess could be wrong. In this case, you must specify the
AF_RPMSG value directly. This had been done in ipc-linux.mak,
but this was too obscure. So, I moved it to products.mak.
Android: Update to LADs makefile after cfg file move
LAD config files were moved into a cfg folder. Updated the Android.mk
file to reflect the move and included the addition of a MessageQCfg.c
file.
LAD config files were moved into a cfg folder. Updated the Android.mk
file to reflect the move and included the addition of a MessageQCfg.c
file.
Added comment to explain hazards of enabling debug trace
SocketFxns.c is used by both LAD and TransportRpmsg. When debug
trace is enabled in LAD, it can cause data corruption. I explain
this in the comment and provide advice.
SocketFxns.c is used by both LAD and TransportRpmsg. When debug
trace is enabled in LAD, it can cause data corruption. I explain
this in the comment and provide advice.
Generated makefile to follow up the previous commit.
SDOCM00114730 Reserved message queues on Linux/Keystone II
Added numReservedEntries to MessageQ_Config structure; defines
how many queues to reserve. Moved all LAD config files into cfg
folder to separate configuration data from implementation code.
Added MessageQCfg.c file so users could specify MessageQ config
(such as reserved queues). New concept of queue port number: this
is computed by adding an offset to the queue index. Needed to
avoid collisions with port numbers reserved by services (such as
RPMessage, NameServer). Queue port number is embedded in queueId
and used to address messages. New macro MessageQ_getQueueIndex to
extract queue index from QID. Implemented MessageQ_openQueueId on
Linux. Added port number management to ti.sdo.ipc.MessageQ module.
LAD daemon: removed slot zero reservation for NameServer; added
queue index logic to manage reserved queues; use port number in
queueId construction; reference new MessageQ_cfg object.
TransportRpmsg: replaced queue index references with queue port.
Added numReservedEntries to MessageQ_Config structure; defines
how many queues to reserve. Moved all LAD config files into cfg
folder to separate configuration data from implementation code.
Added MessageQCfg.c file so users could specify MessageQ config
(such as reserved queues). New concept of queue port number: this
is computed by adding an offset to the queue index. Needed to
avoid collisions with port numbers reserved by services (such as
RPMessage, NameServer). Queue port number is embedded in queueId
and used to address messages. New macro MessageQ_getQueueIndex to
extract queue index from QID. Implemented MessageQ_openQueueId on
Linux. Added port number management to ti.sdo.ipc.MessageQ module.
LAD daemon: removed slot zero reservation for NameServer; added
queue index logic to manage reserved queues; use port number in
queueId construction; reference new MessageQ_cfg object.
TransportRpmsg: replaced queue index references with queue port.
Fix build warnings from rpmsg-rpc-stress test in QNX
Signed-off-by: VW <vwan@ti.com>
Signed-off-by: VW <vwan@ti.com>
Clean up exported contents in QNX
This commit modifies 'make install' to export only tests that we run. It also
puts all tests into the 'tests' subdirectory and builds them all in debug and
release modes for consistency.
Signed-off-by: VW <vwan@ti.com>
This commit modifies 'make install' to export only tests that we run. It also
puts all tests into the 'tests' subdirectory and builds them all in debug and
release modes for consistency.
Signed-off-by: VW <vwan@ti.com>
Generated script and makefiles to follow up the previous commit.
Added AF_RPMSG to products.mak to improve ease-of-use
When you don't have access to your Linux kernel source, or you
need to override the Address Family (AF) configuration, you can
now define the AF for RPMSG in your products.mak file. Relaxed
the requirement to specify KERNEL_INSTALL_DIR for TCI6638. Fixed
up the include path to put the kernel include folder ahead of our
IPC linux/include folder.
When you don't have access to your Linux kernel source, or you
need to override the Address Family (AF) configuration, you can
now define the AF for RPMSG in your products.mak file. Relaxed
the requirement to specify KERNEL_INSTALL_DIR for TCI6638. Fixed
up the include path to put the kernel include folder ahead of our
IPC linux/include folder.
Eliminate build warnings in QNX build
This commit eliminates all build warnings in the QNX IPC build process.
It addresses SDOCM00113501.
Signed-off-by: VW <vwan@ti.com>
This commit eliminates all build warnings in the QNX IPC build process.
It addresses SDOCM00113501.
Signed-off-by: VW <vwan@ti.com>
Reduce QNX build output verbosity
This commit reduces the build output verbosity, and allows it to be configured
in the qnx/quiet.mk file.
This helps address SDOCM00113501.
Signed-off-by: VW <vwan@ti.com>
This commit reduces the build output verbosity, and allows it to be configured
in the qnx/quiet.mk file.
This helps address SDOCM00113501.
Signed-off-by: VW <vwan@ti.com>
Rework MessageQ_put to prioritize transport if given
In MessageQ_put, use secondary transport (if given) regardless
of destination queue. For processor local deliver, verify that
destination queue is process local, otherwise give error. Changed
secondary transport array to base interface type. Added interface
casting as needed.
In MessageQ_put, use secondary transport (if given) regardless
of destination queue. For processor local deliver, verify that
destination queue is process local, otherwise give error. Changed
secondary transport array to base interface type. Added interface
casting as needed.
Fixed run-time configuration of cluster baseId
New method to encapsulate the run-time configuration of IPC
cluster baseId: Ipc_clusterConfig. Call this method from a
startup first function after setting the cluster baseId. Set
Ipc.entry array with valid procId when cluster baseId is known,
otherwise set to INVALIDID. Set MultiProc.clusterProcList array
as above.
New method to encapsulate the run-time configuration of IPC
cluster baseId: Ipc_clusterConfig. Call this method from a
startup first function after setting the cluster baseId. Set
Ipc.entry array with valid procId when cluster baseId is known,
otherwise set to INVALIDID. Set MultiProc.clusterProcList array
as above.
New method for run-time configuration of cluster baseId
Added MultiProc_setBaseIdOfCluster(). Only supported on SYS/BIOS.
This method should be called from a startup first function.
Added MultiProc_setBaseIdOfCluster(). Only supported on SYS/BIOS.
This method should be called from a startup first function.
Linux: Added option to set base cluster id in LAD
An option (-b) has been added to LAD to set the cluster's base id when
launching LAD.
An option (-b) has been added to LAD to set the cluster's base id when
launching LAD.
SDOCM00114696 Add method to return address of shared region entry
Added method to return the address of the in-memory shared region
entry structure; SharedRegion_getEntryPtr. Use this method from
a pre-startup hook function to configure the entry.
Added method to return the address of the in-memory shared region
entry structure; SharedRegion_getEntryPtr. Use this method from
a pre-startup hook function to configure the entry.
SDOCM00114392 Interrupt module on tci6638 does not support clusters
Added segmentSize to MultiProcSetup to define the number of
processors on the device. Needed for sending interrupts to
processors in a different cluster but still on the local device.
Added cluster awareness. Added cluster support to the tci6638
package. Cleaned up Log_print statements. Replaced interface
IInterrupt references with Interrupt module references.
Added segmentSize to MultiProcSetup to define the number of
processors on the device. Needed for sending interrupts to
processors in a different cluster but still on the local device.
Added cluster awareness. Added cluster support to the tci6638
package. Cleaned up Log_print statements. Replaced interface
IInterrupt references with Interrupt module references.
Fixed QNX build error due to transport header file changes
Updated the location of the transport header files to match
what is expected by MessageQ.h.
Updated the location of the transport header files to match
what is expected by MessageQ.h.
Add IPC cluster support to socket utility functions
The socket connect and bind functions need to map procId
to clusterId in order to correctly index into the rprocList[]
and assign the correct vproc_id.
The socket connect and bind functions need to map procId
to clusterId in order to correctly index into the rprocList[]
and assign the correct vproc_id.
Generated makefiles to follow up on the previous commit.
Add missing transport header files to Linux install command
Added new transport interface header files to top-level install
goal. Promoted Std.h to top-level install goal. Also added
TransportRpmsg.h because application needs to call the create
method. Moved location of interface files and transport files to
respective folders under ti/ipc for better name recognition.
Added new transport interface header files to top-level install
goal. Promoted Std.h to top-level install goal. Also added
TransportRpmsg.h because application needs to call the create
method. Moved location of interface files and transport files to
respective folders under ti/ipc for better name recognition.
Remove references to SysLink in QNX code base
This commit removes all references to "SysLink" in the QNX IPC code base, with
the exception that it preserves the file and directory names. The decision was
made to preserve the path names to avoid breaking any existing apps that may
be including headers and/or libraries based on the existing directory
structure, and to ease git history lookup going forward.
Note that this does introduce a break in the naming of internal features such
as SYSLINK_DEBUG and SYSLINK_DEBUG_TRACE_LEVEL.
This helps address SDOCM00108142.
Signed-off-by: VW <vwan@ti.com>
This commit removes all references to "SysLink" in the QNX IPC code base, with
the exception that it preserves the file and directory names. The decision was
made to preserve the path names to avoid breaking any existing apps that may
be including headers and/or libraries based on the existing directory
structure, and to ease git history lookup going forward.
Note that this does introduce a break in the naming of internal features such
as SYSLINK_DEBUG and SYSLINK_DEBUG_TRACE_LEVEL.
This helps address SDOCM00108142.
Signed-off-by: VW <vwan@ti.com>
Android: GateMP uses mmap64 calls to map inUse array
Android's Lollipop filesystem (64-bit) has an issue with mmap() calls.
The offset (off_t type) is incorrectly casted and sign extended.
Using mmap64() and off64_t type explicitly on Android to avoid the issue.
Android's Lollipop filesystem (64-bit) has an issue with mmap() calls.
The offset (off_t type) is incorrectly casted and sign extended.
Using mmap64() and off64_t type explicitly on Android to avoid the issue.
Change max threads to 25 in both MessageQMulti app and documentation in QNX
This helps address SDOCM00104833.
Signed-off-by: VW <vwan@ti.com>
This helps address SDOCM00104833.
Signed-off-by: VW <vwan@ti.com>
docs: Remove BIOS-only comment from GateMP
GateMP is now supported on HLOS's (for some devices), so remove the
errant note that it's only supported on SYS/BIOS.
Signed-off-by: Chris Ring <cring@ti.com>
GateMP is now supported on HLOS's (for some devices), so remove the
errant note that it's only supported on SYS/BIOS.
Signed-off-by: Chris Ring <cring@ti.com>
Update QNX IPC loader to RIDL 2.1.0
This commit updates the loader in QNX IPC to the latest codebase in RIDL 2.1.0,
which can be found at https://gforge.ti.com/gf/project/ridl_oss. It also brings
in any relevant differences between SysLink 2 and RIDL 2.0.
This addresses SDOCM00101007.
Signed-off-by: VW <vwan@ti.com>
This commit updates the loader in QNX IPC to the latest codebase in RIDL 2.1.0,
which can be found at https://gforge.ti.com/gf/project/ridl_oss. It also brings
in any relevant differences between SysLink 2 and RIDL 2.0.
This addresses SDOCM00101007.
Signed-off-by: VW <vwan@ti.com>
Move 'ret' declaration inside XDC %if to avoid 'unused' warning
Generated new autoreconf makefile
These are the new generated autoreconf makefiles from the previous
commit which modified two makefiles.
These are the new generated autoreconf makefiles from the previous
commit which modified two makefiles.
Android: Added makefile to build transportrpmsg library
Added an Android.mak file to build newly separated transportRpmsg library.
Updated the corresponding host-side test examples to link with the library.
Added an Android.mak file to build newly separated transportRpmsg library.
Updated the corresponding host-side test examples to link with the library.
Added transport factory to remove circular dependency
There was a circular dependency between the ipc and transport
libraries. To break this circle, moved the transport create
method into a factory. Ipc invokes the factory methods through
a function table configured with a new Ipc_transportConfig
method called by the application. Renamed transport library to
follow our naming conventions: libtitransportrpmsg.
There was a circular dependency between the ipc and transport
libraries. To break this circle, moved the transport create
method into a factory. Ipc invokes the factory methods through
a function table configured with a new Ipc_transportConfig
method called by the application. Renamed transport library to
follow our naming conventions: libtitransportrpmsg.
SDOCM00114391 IPC cluster support is missing on Linux
Added cluster support on IPC Linux implementation. Added two new
fields to the MultiProc_Config structure: numProcsInCluster, and
baseIdOfCluster. Updated all LAD config files with new fields.
Made changes to iterate over processors in cluster instead of
iterating over all processors in the system. Mapped procId to
clusterId as needed. Added LOG3 macro to LAD.
Added new cluster fields to MultiProc config struct
Linux and QNX share the same MultiProc API implementation
but different MultiProc configuration definitions. I needed
to add the new cluster fields to the QNX config struct. This
does not add cluster support to QNX.
Added cluster support on IPC Linux implementation. Added two new
fields to the MultiProc_Config structure: numProcsInCluster, and
baseIdOfCluster. Updated all LAD config files with new fields.
Made changes to iterate over processors in cluster instead of
iterating over all processors in the system. Mapped procId to
clusterId as needed. Added LOG3 macro to LAD.
Added new cluster fields to MultiProc config struct
Linux and QNX share the same MultiProc API implementation
but different MultiProc configuration definitions. I needed
to add the new cluster fields to the QNX config struct. This
does not add cluster support to QNX.
Code formatting. Broke long lines into short ones.
SDOCM00114518 MessageQ_setMsgPri overwrites entire flags field
The macro was simply assigning the new message priority to the
flags field in the message header. Fixed macro to read, clear,
then update only the priority bits of the flags field ([1:0]).
The macro was simply assigning the new message priority to the
flags field in the message header. Fixed macro to read, clear,
then update only the priority bits of the flags field ([1:0]).
Removed registerTransportId from MessageQ.xdc file
The new register/unregister transport ID functions were in the
MessageQ XDC spec file. This caused them to be defined using the
long name (i.e. package prefix). They are intended to be called
by clients using the short name (like MessageQ_put).
The new register/unregister transport ID functions were in the
MessageQ XDC spec file. This caused them to be defined using the
long name (i.e. package prefix). They are intended to be called
by clients using the short name (like MessageQ_put).
SDOCM114476 Ipc_start is not thread safe (Linux)
Added a Posix mutex and a reference count to serialize the Ipc_start
and Ipc_stop methods. Added a module object to hold the mutex and
reference count.
Added a Posix mutex and a reference count to serialize the Ipc_start
and Ipc_stop methods. Added a module object to hold the mutex and
reference count.
Instance converter methods need to be inline functions.
Added missing copyright notice. Added comments. The instance
converter methods are defined in the header file. Need to be
declared as inline methods to avoid multiple implementation
link error.
Added missing copyright notice. Added comments. The instance
converter methods are defined in the header file. Need to be
declared as inline methods to avoid multiple implementation
link error.
Fix GateMP to allow SR0's physical address to be different from its virtual
This commit fixes GateMP host-support (when host is running an HLOS) to allow
SR0's physical address to be a different value from its virtual address on the
slave core, by performing a virtual to physical address translation on the
addresses of the inUse arrays prior to stashing them into a NameServer entry
on the slave.
This addresses CQ SDOCM00113149.
Signed-off-by: VW <vwan@ti.com>
This commit fixes GateMP host-support (when host is running an HLOS) to allow
SR0's physical address to be a different value from its virtual address on the
slave core, by performing a virtual to physical address translation on the
addresses of the inUse arrays prior to stashing them into a NameServer entry
on the slave.
This addresses CQ SDOCM00113149.
Signed-off-by: VW <vwan@ti.com>
vring initialization in QNX is incorrectly clearing address 0
This commit fixes the vring initialization code to clear the vring as opposed
to physical address 0.
This addresses SDOCM00114409.
Signed-off-by: VW <vwan@ti.com>
This commit fixes the vring initialization code to clear the vring as opposed
to physical address 0.
This addresses SDOCM00114409.
Signed-off-by: VW <vwan@ti.com>
SDOCM00114390 Incorrect procId in NameServer_get used by lad daemon
Fixed call to NameServer_getRemote; pass in procId array element
instead of loop index value.
Fixed call to NameServer_getRemote; pass in procId array element
instead of loop index value.
Rename ipc-trace paths to /dev/ipc-trace/<core name> in QNX
Renaming the trace paths to match the convention adopted by /dev/ipc-file
and /dev/ipc-state, so that MultiProc id is not required to be known ahead
of time.
Note that this introduces a break in compatibility for anyone who's been
relying on the path name /dev/ipc-trace#.
This addresses SDOCM00113638.
Signed-off-by: VW <vwan@ti.com>
Renaming the trace paths to match the convention adopted by /dev/ipc-file
and /dev/ipc-state, so that MultiProc id is not required to be known ahead
of time.
Note that this introduces a break in compatibility for anyone who's been
relying on the path name /dev/ipc-trace#.
This addresses SDOCM00113638.
Signed-off-by: VW <vwan@ti.com>
Make MessageQCopy_send less noisy in QNX
This patch downgrades a common error message from MessageQCopy_send to an
info message of GT_2CLASS. The message was appearing even during normal
operation when a slave is not attached.
This addresses SDOCM00106179.
Signed-off-by: VW <vwan@ti.com>
This patch downgrades a common error message from MessageQCopy_send to an
info message of GT_2CLASS. The message was appearing even during normal
operation when a slave is not attached.
This addresses SDOCM00106179.
Signed-off-by: VW <vwan@ti.com>
Fix bad Assert_isTrue (fixes SDOCM00114152)
The Assert_isTrue expression was just wrong, opposite of what it needs
to be.
The Assert_isTrue expression was just wrong, opposite of what it needs
to be.
Removed unused implementation of MessageQ_Params_init
The implementation of MessageQ_Params_init is now a static inline
in the header file. Need to remove this unused implementation in
MessageQ_daemon.c (fixed multiple definition compiler error).
The implementation of MessageQ_Params_init is now a static inline
in the header file. Need to remove this unused implementation in
MessageQ_daemon.c (fixed multiple definition compiler error).
Merge remote-tracking branch 'origin/3.23' into ipc-3.30-next
SDOCM00113609 Add version support for MessageQ_Params structure
Added a version field to the params structure; used internally
to track the structure definition changes. MessageQ_Params_init
is now a static inline function which embeds the current version
in the call site. Added new MessageQ_Params_init__S function to
initialize the given params structure. Updated MessageQ_create
to be version aware. Fixed uninitialized params structure in
the MessageQ instance object.
Added a version field to the params structure; used internally
to track the structure definition changes. MessageQ_Params_init
is now a static inline function which embeds the current version
in the call site. Added new MessageQ_Params_init__S function to
initialize the given params structure. Updated MessageQ_create
to be version aware. Fixed uninitialized params structure in
the MessageQ instance object.
SDOCM00114108 IPC custom build failure with XDCtools core product
When building with the XDCtools core product, the IPC custom build
was not finding the target header files. Build include path based
on package path, not from explicit repository names. This will
ensure correct include path as new repositories are added to or
removed from the package path.
When building with the XDCtools core product, the IPC custom build
was not finding the target header files. Build include path based
on package path, not from explicit repository names. This will
ensure correct include path as new repositories are added to or
removed from the package path.
9 years agoMessages received multiple times in QNX when IPU2 + DSP1/IPU1 are active 3.23 ipc-3.23-next 3.23.02.04
Messages received multiple times in QNX when IPU2 + DSP1/IPU1 are active
This commit fixes a race condition in QNX where IPU2 is exchanging messages
with host while DSP1 or IPU1 is doing the same. It adds protection in
VirtQueue_addAvailBuf and VirtQueue_getUsedBuf to prevent
a VirtQueue from being accessed concurrently by multiple interrupt handlers,
which has the potential of corrupting the buffer indexing and thus
resulting in some messages to be returned multiple times.
This addresses SDOCM00114194.
Signed-off-by: VW <vwan@ti.com>
This commit fixes a race condition in QNX where IPU2 is exchanging messages
with host while DSP1 or IPU1 is doing the same. It adds protection in
VirtQueue_addAvailBuf and VirtQueue_getUsedBuf to prevent
a VirtQueue from being accessed concurrently by multiple interrupt handlers,
which has the potential of corrupting the buffer indexing and thus
resulting in some messages to be returned multiple times.
This addresses SDOCM00114194.
Signed-off-by: VW <vwan@ti.com>
Remove VRING_USED_F_NO_NOTIFY flag in VirtQueue_kick and add barriers on QNX
This commit removes usage of VRING_USED_F_NO_NOTIFY flag in VirtQueue_kick on
QNX. This causes an interrupt to be sent for every buffer.
Also, barriers are added where appropriate to prevent any race condition due
to the Cortex-A15 weak memory model.
This addresses SDOCM00114151.
Signed-off-by: VW <vwan@ti.com>
This commit removes usage of VRING_USED_F_NO_NOTIFY flag in VirtQueue_kick on
QNX. This causes an interrupt to be sent for every buffer.
Also, barriers are added where appropriate to prevent any race condition due
to the Cortex-A15 weak memory model.
This addresses SDOCM00114151.
Signed-off-by: VW <vwan@ti.com>
Added function hook for the MessageQ_put method
New feature where you can register a function hook to be called
near the beginning of the MessageQ_put method. New type definition
for the hook function. Runtime API to register the hook function.
Also added a configuration parameter so you can register your hook
function in the application configuration script.
New feature where you can register a function hook to be called
near the beginning of the MessageQ_put method. New type definition
for the hook function. Runtime API to register the hook function.
Also added a configuration parameter so you can register your hook
function in the application configuration script.
SDOCM00114110 IPC custom build failure, part 2
Updates from code review comments. Build include path based
on package path, not from explicit repository names. This will
ensure correct include path as new repositories are added to
the package path.
Updates from code review comments. Build include path based
on package path, not from explicit repository names. This will
ensure correct include path as new repositories are added to
the package path.
Add MessageQ interface header files to QNX include area
Even though QNX doesn't implement the new MessageQTransport interface,
it is including a common header (packages/ti/ipc/MessageQ.h) that does
reference the new interfaces.
Even though QNX doesn't implement the new MessageQTransport interface,
it is including a common header (packages/ti/ipc/MessageQ.h) that does
reference the new interfaces.
Initial MessageQ transport implementation
Multiple transport interface support for ti.sdo.ipc.MessageQ
Added new ITransport base class interface. New INetworkTransport
interface. MessageQ is now able to register multiple transport
instances. Dummy network transport to work around RTSC bug.
Added new ITransport base class interface. New INetworkTransport
interface. MessageQ is now able to register multiple transport
instances. Dummy network transport to work around RTSC bug.