Merge remote-tracking branch 'vincent/3.00.00.11_eng' into tmp
authorChris Ring <cring@ti.com>
Tue, 5 Mar 2013 23:48:40 +0000 (15:48 -0800)
committerChris Ring <cring@ti.com>
Tue, 5 Mar 2013 23:48:40 +0000 (15:48 -0800)
157 files changed:
.gitignore
AUTHORS [deleted file]
COPYING [deleted file]
ChangeLog [deleted file]
INSTALL [deleted file]
Makefile.am
Makefile.in
NEWS [deleted file]
README [deleted file]
aclocal.m4
configure
configure.ac
ipc-bios.bld
linux/build-aux/config.guess [moved from config.guess with 100% similarity]
linux/build-aux/config.sub [moved from config.sub with 100% similarity]
linux/build-aux/depcomp [moved from depcomp with 100% similarity]
linux/build-aux/install-sh [moved from install-sh with 100% similarity]
linux/build-aux/ltmain.sh [moved from ltmain.sh with 100% similarity]
linux/build-aux/missing [moved from missing with 100% similarity]
linux/etc/Makefile.am
linux/etc/Makefile.in
linux/src/api/Makefile.am
linux/src/api/Makefile.in
linux/src/daemon/Makefile.am
linux/src/daemon/Makefile.in
linux/src/family/Makefile.am
linux/src/family/Makefile.in
linux/src/tests/Makefile.am
linux/src/tests/Makefile.in
linux/src/tests/ping_rpmsg.c [new file with mode: 0644]
linux/src/utils/Makefile.am
linux/src/utils/Makefile.in
packages/ti/configs/omap54xx/Dsp.cfg [new file with mode: 0644]
packages/ti/configs/omap54xx/DspAmmu.cfg [new file with mode: 0644]
packages/ti/configs/omap54xx/IpcCommon.cfg.xs [new file with mode: 0644]
packages/ti/configs/omap54xx/IpuAmmu.cfg [new file with mode: 0644]
packages/ti/configs/omap54xx/IpuCore0.cfg [new file with mode: 0644]
packages/ti/configs/omap54xx/IpuCore1.cfg [new file with mode: 0644]
packages/ti/configs/omap54xx/IpuSmp.cfg [new file with mode: 0644]
packages/ti/configs/omap54xx/package.bld [new file with mode: 0644]
packages/ti/configs/omap54xx/package.xdc [new file with mode: 0644]
packages/ti/grcm/RcmClient.c [new file with mode: 0644]
packages/ti/grcm/RcmClient.h [new file with mode: 0644]
packages/ti/grcm/RcmClient.xdc [new file with mode: 0644]
packages/ti/grcm/RcmClient.xs [new file with mode: 0644]
packages/ti/grcm/RcmServer.c [new file with mode: 0644]
packages/ti/grcm/RcmServer.h [new file with mode: 0644]
packages/ti/grcm/RcmServer.xdc [new file with mode: 0644]
packages/ti/grcm/RcmServer.xs [new file with mode: 0644]
packages/ti/grcm/RcmTypes.h [new file with mode: 0644]
packages/ti/grcm/RcmUtils.c [new file with mode: 0644]
packages/ti/grcm/Settings.xdc [new file with mode: 0644]
packages/ti/grcm/Settings.xs [new file with mode: 0644]
packages/ti/grcm/doxygen.txt [new file with mode: 0644]
packages/ti/grcm/link.xdt [new file with mode: 0644]
packages/ti/grcm/package.bld [new file with mode: 0644]
packages/ti/grcm/package.xdc [new file with mode: 0644]
packages/ti/grcm/package.xs [new file with mode: 0644]
packages/ti/grcm/prologue.mak [new file with mode: 0644]
packages/ti/ipc/family/omap54xx/InterruptDsp.c [new file with mode: 0644]
packages/ti/ipc/family/omap54xx/InterruptDsp.h [new file with mode: 0644]
packages/ti/ipc/family/omap54xx/InterruptIpu.c [new file with mode: 0644]
packages/ti/ipc/family/omap54xx/InterruptIpu.h [new file with mode: 0644]
packages/ti/ipc/family/omap54xx/InterruptProxy.h [new file with mode: 0644]
packages/ti/ipc/family/omap54xx/OffloadM3.c [new file with mode: 0644]
packages/ti/ipc/family/omap54xx/VirtQueue.c [new file with mode: 0644]
packages/ti/ipc/family/omap54xx/VirtQueue.h [new file with mode: 0644]
packages/ti/ipc/family/omap54xx/package.bld [new file with mode: 0644]
packages/ti/ipc/family/omap54xx/package.xdc [new file with mode: 0644]
packages/ti/ipc/family/omap54xx/package.xs [new file with mode: 0644]
packages/ti/ipc/family/omapl138/VirtQueue.c
packages/ti/ipc/family/omapl138/VirtQueue.xdc
packages/ti/ipc/family/omapl138/VirtQueue.xs
packages/ti/ipc/family/tci6614/VirtQueue.c
packages/ti/ipc/family/tci6614/VirtQueue.xdc
packages/ti/ipc/family/tci6614/VirtQueue.xs
packages/ti/ipc/family/tci6638/VirtQueue.c
packages/ti/ipc/family/tci6638/VirtQueue.xdc
packages/ti/ipc/family/tci6638/VirtQueue.xs
packages/ti/ipc/ipcmgr/IpcMgr.c
packages/ti/ipc/namesrv/NameServerRemoteRpmsg.c
packages/ti/ipc/namesrv/_NameServerRemoteRpmsg.h
packages/ti/ipc/remoteproc/Resource.xdt
packages/ti/ipc/remoteproc/rsc_table_omap5_dsp.h [new file with mode: 0644]
packages/ti/ipc/remoteproc/rsc_table_omap5_ipu.h [new file with mode: 0644]
packages/ti/ipc/remoteproc/rsc_types.h
packages/ti/ipc/rpmsg/MessageQCopy.c [new file with mode: 0644]
packages/ti/ipc/rpmsg/MessageQCopy.h [new file with mode: 0644]
packages/ti/ipc/rpmsg/NameMap.c [new file with mode: 0644]
packages/ti/ipc/rpmsg/NameMap.h [new file with mode: 0644]
packages/ti/ipc/rpmsg/Rpmsg.h
packages/ti/ipc/rpmsg/_MessageQCopy.h [new file with mode: 0644]
packages/ti/ipc/rpmsg/_VirtQueue.h [new file with mode: 0644]
packages/ti/ipc/rpmsg/package.bld
packages/ti/ipc/rpmsg/package.xdc
packages/ti/ipc/rpmsg/package.xs [new file with mode: 0644]
packages/ti/ipc/tests/messageq_common.cfg.xs
packages/ti/ipc/tests/package.bld
packages/ti/ipc/tests/package.xdc
packages/ti/ipc/tests/ping_rpmsg.c [new file with mode: 0644]
packages/ti/ipc/tests/ping_rpmsg.cfg [new file with mode: 0644]
packages/ti/ipc/tests/ping_rpmsg_common.cfg.xs [new file with mode: 0644]
packages/ti/ipc/tests/ping_tasks.c [new file with mode: 0644]
packages/ti/ipc/tests/rpmsg_transport.cfg
packages/ti/ipc/tests/test_omx.c [new file with mode: 0644]
packages/ti/ipc/tests/test_omx_ipu_omap5.cfg [new file with mode: 0644]
packages/ti/ipc/transports/TransportVirtio.c
packages/ti/ipc/transports/TransportVirtio.xdc
packages/ti/ipc/transports/TransportVirtio.xs
packages/ti/ipc/transports/TransportVirtioSetup.c
packages/ti/ipc/transports/TransportVirtioSetup.xdc
packages/ti/ipc/transports/_TransportVirtio.h
packages/ti/ipc/transports/package.bld
packages/ti/platform/omap54xx/core0/Platform.xdc [new file with mode: 0644]
packages/ti/platform/omap54xx/core0/Platform.xs [new file with mode: 0644]
packages/ti/platform/omap54xx/core0/package.bld [new file with mode: 0644]
packages/ti/platform/omap54xx/core0/package.xdc [new file with mode: 0644]
packages/ti/platform/omap54xx/core1/Platform.xdc [new file with mode: 0644]
packages/ti/platform/omap54xx/core1/Platform.xs [new file with mode: 0644]
packages/ti/platform/omap54xx/core1/package.bld [new file with mode: 0644]
packages/ti/platform/omap54xx/core1/package.xdc [new file with mode: 0644]
packages/ti/platform/omap54xx/dsp/Platform.xdc [new file with mode: 0644]
packages/ti/platform/omap54xx/dsp/Platform.xs [new file with mode: 0644]
packages/ti/platform/omap54xx/dsp/package.bld [new file with mode: 0644]
packages/ti/platform/omap54xx/dsp/package.xdc [new file with mode: 0644]
packages/ti/platform/omap54xx/ipu/Platform.xdc [new file with mode: 0644]
packages/ti/platform/omap54xx/ipu/Platform.xs [new file with mode: 0644]
packages/ti/platform/omap54xx/ipu/package.bld [new file with mode: 0644]
packages/ti/platform/omap54xx/ipu/package.xdc [new file with mode: 0644]
packages/ti/pm/IpcPower.c [new file with mode: 0644]
packages/ti/pm/IpcPower.h [new file with mode: 0644]
packages/ti/pm/IpcPowerDsp.c [new file with mode: 0644]
packages/ti/pm/_IpcPower.h [new file with mode: 0644]
packages/ti/pm/package.bld [new file with mode: 0644]
packages/ti/pm/package.xdc [new file with mode: 0644]
packages/ti/pm/package.xs [new file with mode: 0644]
packages/ti/sdo/utils/Build.xs
packages/ti/srvmgr/ServiceMgr.c [new file with mode: 0644]
packages/ti/srvmgr/ServiceMgr.h [new file with mode: 0644]
packages/ti/srvmgr/omx/OmxSrvMgr.c [new file with mode: 0644]
packages/ti/srvmgr/omx/OmxSrvMgr.xdc [new file with mode: 0644]
packages/ti/srvmgr/omx/OmxSrvMgr.xs [new file with mode: 0644]
packages/ti/srvmgr/omx/package.bld [new file with mode: 0644]
packages/ti/srvmgr/omx/package.xdc [new file with mode: 0644]
packages/ti/srvmgr/omx/package.xs [new file with mode: 0644]
packages/ti/srvmgr/omx_packet.h [new file with mode: 0644]
packages/ti/srvmgr/package.bld [new file with mode: 0644]
packages/ti/srvmgr/package.xdc [new file with mode: 0644]
packages/ti/srvmgr/package.xs [new file with mode: 0644]
packages/ti/srvmgr/rpmsg_omx.h [new file with mode: 0644]
packages/ti/trace/SysMin.c [new file with mode: 0644]
packages/ti/trace/SysMin.xdc [new file with mode: 0644]
packages/ti/trace/SysMin.xdt [new file with mode: 0644]
packages/ti/trace/SysMin.xs [new file with mode: 0644]
packages/ti/trace/package.bld [new file with mode: 0644]
packages/ti/trace/package.xdc [new file with mode: 0644]
packages/ti/trace/package.xs [new file with mode: 0644]

index 995bae27a45cb86170b88cc99431d979939026a2..8276cb843abff690867a726fbb7ed42c2ec64654 100644 (file)
@@ -25,6 +25,10 @@ packages/ti/ipc/namesrv/NameServerRemoteRpmsg.h
 packages/ti/ipc/remoteproc/Resource.h
 packages/ti/ipc/transports/TransportVirtio.h
 packages/ti/ipc/transports/TransportVirtioSetup.h
+packages/ti/trace/SysMin.h
+packages/ti/resources/IpcMemory.h
+packages/ti/srvmgr/omx/OmxSrvMgr.h
+*.tar.gz
 
 # Linux stuff
 /autom4te.cache
@@ -35,6 +39,7 @@ packages/ti/ipc/transports/TransportVirtioSetup.h
 /Makefile
 /linux/etc/Makefile
 /linux/src/*/Makefile
+/linux/src/*/Makefile.in
 /linux/src/*/*.lo
 /linux/src/*/*.la
 /linux/src/*/.libs
@@ -45,3 +50,4 @@ packages/ti/ipc/transports/TransportVirtioSetup.h
 /linux/src/tests/MessageQMulti_*
 /linux/src/tests/NameServerApp_*
 /linux/src/tests/nano_test_*
+/linux/src/tests/ping_rpmsg
diff --git a/AUTHORS b/AUTHORS
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/COPYING b/COPYING
deleted file mode 100644 (file)
index 623b625..0000000
--- a/COPYING
+++ /dev/null
@@ -1,340 +0,0 @@
-                   GNU GENERAL PUBLIC LICENSE
-                      Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-\f
-                   GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-\f
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-\f
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-\f
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                           NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-\f
-           How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year  name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/INSTALL b/INSTALL
deleted file mode 100644 (file)
index 23e5f25..0000000
--- a/INSTALL
+++ /dev/null
@@ -1,236 +0,0 @@
-Installation Instructions
-*************************
-
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
-Software Foundation, Inc.
-
-This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
-
-Basic Installation
-==================
-
-These are generic installation instructions.
-
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
-   It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring.  (Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.)
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
-   The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'.  You only need
-`configure.ac' if you want to change it or regenerate `configure' using
-a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.  If you're
-     using `csh' on an old version of System V, you might need to type
-     `sh ./configure' instead to prevent `csh' from trying to execute
-     `configure' itself.
-
-     Running `configure' takes awhile.  While running, it prints some
-     messages telling which features it is checking for.
-
-  2. Type `make' to compile the package.
-
-  3. Optionally, type `make check' to run any self-tests that come with
-     the package.
-
-  4. Type `make install' to install the programs and any data files and
-     documentation.
-
-  5. You can remove the program binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
-     a different kind of computer), type `make distclean'.  There is
-     also a `make maintainer-clean' target, but that is intended mainly
-     for the package's developers.  If you use it, you may have to get
-     all sorts of other programs in order to regenerate files that came
-     with the distribution.
-
-Compilers and Options
-=====================
-
-Some systems require unusual options for compilation or linking that the
-`configure' script does not know about.  Run `./configure --help' for
-details on some of the pertinent environment variables.
-
-   You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment.  Here
-is an example:
-
-     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
-
-   *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
-You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory.  To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'.  `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
-   If you have to use a `make' that does not support the `VPATH'
-variable, you have to compile the package for one architecture at a
-time in the source code directory.  After you have installed the
-package for one architecture, use `make distclean' before reconfiguring
-for another architecture.
-
-Installation Names
-==================
-
-By default, `make install' installs the package's commands under
-`/usr/local/bin', include files under `/usr/local/include', etc.  You
-can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX'.
-
-   You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files.  If you
-pass the option `--exec-prefix=PREFIX' to `configure', the package uses
-PREFIX as the prefix for installing programs and libraries.
-Documentation and other data files still use the regular prefix.
-
-   In addition, if you use an unusual directory layout you can give
-options like `--bindir=DIR' to specify different values for particular
-kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
-   If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
-Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System).  The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
-   For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
-There may be some features `configure' cannot figure out automatically,
-but needs to determine by the type of machine the package will run on.
-Usually, assuming the package is built to be run on the _same_
-architectures, `configure' can figure that out, but if it prints a
-message saying it cannot guess the machine type, give it the
-`--build=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
-     CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
-     OS KERNEL-OS
-
-   See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
-   If you are _building_ compiler tools for cross-compiling, you should
-use the option `--target=TYPE' to select the type of system they will
-produce code for.
-
-   If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
-
-Sharing Defaults
-================
-
-If you want to set default values for `configure' scripts to share, you
-can create a site shell script called `config.site' that gives default
-values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists.  Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
-Variables not defined in a site shell script can be set in the
-environment passed to `configure'.  However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost.  In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'.  For example:
-
-     ./configure CC=/usr/local2/bin/gcc
-
-causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script).  Here is a another example:
-
-     /bin/bash ./configure CONFIG_SHELL=/bin/bash
-
-Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
-configuration-related scripts to be executed by `/bin/bash'.
-
-`configure' Invocation
-======================
-
-`configure' recognizes the following options to control how it operates.
-
-`--help'
-`-h'
-     Print a summary of the options to `configure', and exit.
-
-`--version'
-`-V'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`--cache-file=FILE'
-     Enable the cache: use and save the results of the tests in FILE,
-     traditionally `config.cache'.  FILE defaults to `/dev/null' to
-     disable caching.
-
-`--config-cache'
-`-C'
-     Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
-     messages will still be shown).
-
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
-
-`configure' also accepts some other, not widely useful, options.  Run
-`configure --help' for more details.
-
index 70aae160fe929087b30117e407bfd33b8f05c170..c739049453985aa88f92c7c52a2287e5db08be72 100644 (file)
@@ -1,5 +1,39 @@
+##
+##  Copyright (c) 2013, Texas Instruments Incorporated
+##
+##  Redistribution and use in source and binary forms, with or without
+##  modification, are permitted provided that the following conditions
+##  are met:
+##
+##  *  Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##
+##  *  Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in the
+##     documentation and/or other materials provided with the distribution.
+##
+##  *  Neither the name of Texas Instruments Incorporated nor the names of
+##     its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+##  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+##  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+##  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+##  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+##  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+##  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+##  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+##  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+##  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+##
+##  ======== Makefile.am ========
+##
+
 # the subdirectories of the project to go into
-SUBDIRS =  linux/etc linux/src/utils linux/src/api linux/src/family linux/src/daemon linux/src/tests
+SUBDIRS =  linux/etc linux/src/utils linux/src/api linux/src/family \
+        linux/src/daemon linux/src/tests
 
 # hook to remove libtools library extention files (.la)
 install-exec-hook:
index 244953ecf730e3c2d031e199fa772eae35ded8d2..b6f61451f2c84867c4ea619e8f9d91e2c277e3ab 100644 (file)
@@ -36,10 +36,12 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-DIST_COMMON = README $(am__configure_deps) $(ipcinclude_HEADERS) \
+DIST_COMMON = $(am__configure_deps) $(ipcinclude_HEADERS) \
        $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-       $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
-       config.guess config.sub depcomp install-sh ltmain.sh missing
+       $(top_srcdir)/configure linux/build-aux/config.guess \
+       linux/build-aux/config.sub linux/build-aux/depcomp \
+       linux/build-aux/install-sh linux/build-aux/ltmain.sh \
+       linux/build-aux/missing
 subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
@@ -122,6 +124,9 @@ LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
 OBJEXT = @OBJEXT@
 OMAP4430_FALSE = @OMAP4430_FALSE@
@@ -189,7 +194,9 @@ sysconfdir = @sysconfdir@
 target_alias = @target_alias@
 
 # the subdirectories of the project to go into
-SUBDIRS = linux/etc linux/src/utils linux/src/api linux/src/family linux/src/daemon linux/src/tests
+SUBDIRS = linux/etc linux/src/utils linux/src/api linux/src/family \
+        linux/src/daemon linux/src/tests
+
 
 # where to install common headers on the system
 ipcincludedir = $(includedir)/ti/ipc
@@ -204,19 +211,19 @@ all: all-recursive
 .SUFFIXES:
 am--refresh:
        @:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
-             echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
-             cd $(srcdir) && $(AUTOMAKE) --gnu  \
+             echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
+             cd $(srcdir) && $(AUTOMAKE) --foreign  \
                && exit 0; \
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  Makefile'; \
        cd $(top_srcdir) && \
-         $(AUTOMAKE) --gnu  Makefile
+         $(AUTOMAKE) --foreign  Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
@@ -231,9 +238,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        $(SHELL) ./config.status --recheck
 
-$(top_srcdir)/configure:  $(am__configure_deps)
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
        cd $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
        cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
 
 mostlyclean-libtool:
@@ -398,7 +405,7 @@ distclean-tags:
 distdir: $(DISTFILES)
        $(am__remove_distdir)
        mkdir $(distdir)
-       $(mkdir_p) $(distdir)/packages/ti/ipc
+       $(mkdir_p) $(distdir)/linux/build-aux $(distdir)/packages/ti/ipc
        @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
        topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
        list='$(DISTFILES)'; for file in $$list; do \
diff --git a/NEWS b/NEWS
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/README b/README
deleted file mode 100644 (file)
index e69de29..0000000
index 4723f850086f6d866b433cb8d675c5f9985d04a2..c6b83dae620f453eff109d72b180b3a18307599f 100644 (file)
@@ -6866,6 +6866,35 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
+# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+AC_DEFUN([AM_MAINTAINER_MODE],
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+  dnl maintainer-mode is disabled by default
+  AC_ARG_ENABLE(maintainer-mode,
+[  --enable-maintainer-mode  enable make rules and dependencies not useful
+                         (and sometimes confusing) to the casual installer],
+      USE_MAINTAINER_MODE=$enableval,
+      USE_MAINTAINER_MODE=no)
+  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+  AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
+  MAINT=$MAINTAINER_MODE_TRUE
+  AC_SUBST(MAINT)dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
 # Check to see how 'make' treats includes.                 -*- Autoconf -*-
 
 # Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
index d934787b8e45950243655498f92d7b37a833bce3..bb17639287ab80ab1ffeb96f418c61bc9c353560 100755 (executable)
--- a/configure
+++ b/configure
@@ -423,6 +423,7 @@ PACKAGE_VERSION='3.0.0'
 PACKAGE_STRING='TI IPC 3.0.0'
 PACKAGE_BUGREPORT=''
 
+ac_unique_file="packages/ti/ipc/MessageQ.h"
 # Factoring default headers for most tests.
 ac_includes_default="\
 #include <stdio.h>
@@ -460,8 +461,7 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
-ac_unique_file="packages/ti/ipc/MessageQ.h"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP LIBTOOL AM_CFLAGS AM_LDFLAGS PLATFORM CMEM_INSTALL_DIR OMAPL138_TRUE OMAPL138_FALSE OMAP4430_TRUE OMAP4430_FALSE TCI6614_TRUE TCI6614_FALSE TCI6638_TRUE TCI6638_FALSE CMEM_TRUE CMEM_FALSE LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP LIBTOOL AM_CFLAGS AM_LDFLAGS PLATFORM CMEM_INSTALL_DIR OMAPL138_TRUE OMAPL138_FALSE OMAP4430_TRUE OMAP4430_FALSE TCI6614_TRUE TCI6614_FALSE TCI6638_TRUE TCI6638_FALSE CMEM_TRUE CMEM_FALSE LIBOBJS LTLIBOBJS'
 ac_subst_files=''
 
 # Initialize some variables set by options.
@@ -1023,6 +1023,8 @@ if test -n "$ac_init_help"; then
 Optional Features:
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-maintainer-mode  enable make rules and dependencies not useful
+                         (and sometimes confusing) to the casual installer
   --enable-shared[=PKGS]
                           build shared libraries [default=yes]
   --enable-static[=PKGS]
@@ -1507,10 +1509,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
-# Initilize automake
-am__api_version="1.9"
+# Check common src files to ensure integrity of the package
+
+
+# Set auxiliary build tools directory
 ac_aux_dir=
-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+for ac_dir in linux/build-aux $srcdir/linux/build-aux; do
   if test -f $ac_dir/install-sh; then
     ac_aux_dir=$ac_dir
     ac_install_sh="$ac_aux_dir/install-sh -c"
@@ -1526,14 +1530,17 @@ for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
   fi
 done
 if test -z "$ac_aux_dir"; then
-  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in linux/build-aux $srcdir/linux/build-aux" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in linux/build-aux $srcdir/linux/build-aux" >&2;}
    { (exit 1); exit 1; }; }
 fi
 ac_config_guess="$SHELL $ac_aux_dir/config.guess"
 ac_config_sub="$SHELL $ac_aux_dir/config.sub"
 ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
 
+
+# Initilize automake
+am__api_version="1.9"
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
 # incompatible versions:
@@ -1946,6 +1953,32 @@ am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
 
 
 
+# Disabling maintainer mode to prevent rebuild of configure script
+echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
+    # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+  enableval="$enable_maintainer_mode"
+  USE_MAINTAINER_MODE=$enableval
+else
+  USE_MAINTAINER_MODE=no
+fi;
+  echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
+
+
+if test $USE_MAINTAINER_MODE = yes; then
+  MAINTAINER_MODE_TRUE=
+  MAINTAINER_MODE_FALSE='#'
+else
+  MAINTAINER_MODE_TRUE='#'
+  MAINTAINER_MODE_FALSE=
+fi
+
+  MAINT=$MAINTAINER_MODE_TRUE
+
+
+
 # Initalize libtool but disable fortran check
 # Check whether --enable-shared or --disable-shared was given.
 if test "${enable_shared+set}" = set; then
@@ -3671,7 +3704,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 3674 "configure"' > conftest.$ac_ext
+  echo '#line 3707 "configure"' > conftest.$ac_ext
   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -6096,11 +6129,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:6099: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:6132: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:6103: \$? = $ac_status" >&5
+   echo "$as_me:6136: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -6364,11 +6397,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:6367: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:6400: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:6371: \$? = $ac_status" >&5
+   echo "$as_me:6404: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -6468,11 +6501,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:6471: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:6504: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:6475: \$? = $ac_status" >&5
+   echo "$as_me:6508: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -8813,7 +8846,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 8816 "configure"
+#line 8849 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -8913,7 +8946,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 8916 "configure"
+#line 8949 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11253,11 +11286,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:11256: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:11289: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:11260: \$? = $ac_status" >&5
+   echo "$as_me:11293: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -11357,11 +11390,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:11360: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:11393: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:11364: \$? = $ac_status" >&5
+   echo "$as_me:11397: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -12664,11 +12697,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:12667: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:12700: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:12671: \$? = $ac_status" >&5
+   echo "$as_me:12704: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -12932,11 +12965,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:12935: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:12968: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:12939: \$? = $ac_status" >&5
+   echo "$as_me:12972: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -13036,11 +13069,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13039: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13072: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13043: \$? = $ac_status" >&5
+   echo "$as_me:13076: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -15699,9 +15732,6 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool'
 
 
 
-# Check common src files to ensure integrity of the package
-
-
 # Checks for programs.
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -16965,6 +16995,13 @@ LIBOBJS=$ac_libobjs
 LTLIBOBJS=$ac_ltlibobjs
 
 
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
   { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
 Usually this means the macro was only invoked conditionally." >&5
@@ -17581,6 +17618,9 @@ s,@am__leading_dot@,$am__leading_dot,;t t
 s,@AMTAR@,$AMTAR,;t t
 s,@am__tar@,$am__tar,;t t
 s,@am__untar@,$am__untar,;t t
+s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
+s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
+s,@MAINT@,$MAINT,;t t
 s,@build@,$build,;t t
 s,@build_cpu@,$build_cpu,;t t
 s,@build_vendor@,$build_vendor,;t t
index 33000b628c66f50d0d45d2a8d2825b2c07529d0c..c2034bd44dc6e8191fa9cfec37a5bddc8b51a71b 100644 (file)
@@ -1,19 +1,58 @@
+#
+#   Copyright (c) 2013, Texas Instruments Incorporated
+#
+#   Redistribution and use in source and binary forms, with or without
+#   modification, are permitted provided that the following conditions
+#   are met:
+#
+#   *  Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#
+#   *  Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in the
+#      documentation and/or other materials provided with the distribution.
+#
+#   *  Neither the name of Texas Instruments Incorporated nor the names of
+#      its contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+#   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+#   THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+#   PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+#   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+#   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+#   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+#   OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+#   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+#   OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+#   EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# ======== configure.ac ========
+#
+
 # Process this file with autoconf to produce a configure script.
 AC_PREREQ(2.59)
 
 # Initilize autoconf
 AC_INIT(TI IPC, 3.0.0, ) 
 
+# Check common src files to ensure integrity of the package
+AC_CONFIG_SRCDIR([packages/ti/ipc/MessageQ.h])
+
+# Set auxiliary build tools directory
+AC_CONFIG_AUX_DIR([linux/build-aux])
+
 # Initilize automake
-AM_INIT_AUTOMAKE
+AM_INIT_AUTOMAKE([foreign])
+
+# Disabling maintainer mode to prevent rebuild of configure script
+AM_MAINTAINER_MODE([disable])
 
 # Initalize libtool but disable fortran check
 define([AC_LIBTOOL_LANG_F77_CONFIG], [:])dnl
 AC_PROG_LIBTOOL(gcc)
 
-# Check common src files to ensure integrity of the package
-AC_CONFIG_SRCDIR([packages/ti/ipc/MessageQ.h])
-
 # Checks for programs.
 AC_PROG_CC(gcc)
 AC_PROG_INSTALL
index caf9a9cd2d7e5de08e1192fd822b962f3ff3cd81..362e7a570e895fc2f57a7d61e74a33247cde1ef7 100644 (file)
@@ -63,6 +63,9 @@
  *     Build       an alias for xdc.om.xdc.bld.BuildEnvironment
  */
 
+/* for M3-devices only (OMAP5), build using the SMP-enabled platform */
+var build_smp = "1";
+
 /* Common ccopts suffix used for all C6x targets */
 var c6xOpts = " -mi10 -mo -pdr -pden -pds=238 -pds=880 -pds1110 -g ";
 
@@ -85,7 +88,7 @@ var ccOpts = {
 
     "ti.targets.elf.C64P"             : c6xOpts,
     "ti.targets.elf.C64P_big_endian"  : c6xOpts,
-    "ti.targets.elf.C64T"             : c6xOpts,
+    "ti.targets.elf.C64T"             : " -mi10 -mo -pds=71",
     "ti.targets.elf.C66"              : c6xOpts,
     "ti.targets.elf.C66_big_endian"   : c6xOpts,
     "ti.targets.elf.C674"             : c6xOpts,
@@ -93,7 +96,7 @@ var ccOpts = {
     "ti.targets.arm.elf.Arm9"         : " -ms -g ",
     "ti.targets.arm.elf.A8F"          : " -ms -g ",
     "ti.targets.arm.elf.A8Fnv"        : " -ms -g ",
-    "ti.targets.arm.elf.M3"           : " -ms -g ",
+    "ti.targets.arm.elf.M3"           : " --embed_inline_assembly -ms -pds=71",
     "ti.targets.arm.elf.M4"           : " -ms -g ",
     "ti.targets.arm.elf.M4F"          : " -ms -g ",
 
@@ -128,18 +131,49 @@ for (arg = 0; arg < arguments.length; arg++) {
     target.rootDir = rootDir;
     target.ccOpts.suffix += ccOpts[targetName];
 
-    /* Add appropriate platforms to build for based on target name */    
+    /* Add appropriate platforms to build for based on target name */
     if (targetName.match(/elf\.C674/)) {
         target.platforms = [ "ti.platforms.evmOMAPL138:DSP" ];
     }
 
     if (targetName.match(/elf\.C66/)) {
+        target.lnkOpts.suffix += " -cr";
         target.platforms = [ 
             "ti.platforms.simKepler"
             //"ti.platforms.evm6614:DSP"
         ];
     }
 
+    if (targetName.match(/elf\.C64T/)) {
+        target.lnkOpts.prefix += " -e=ti_sysbios_family_c64p_Hwi0";
+        /* NOTE: These platforms (from omapzoom) are local, custom: */
+        target.platforms = [
+                    //"ti.platform.omap4430.dsp",
+                    "ti.platform.omap54xx.dsp",
+                ];
+    }
+
+    if (targetName.match(/elf\.M3/)) {
+        target.lnkOpts.prefix += " --retain=.resource_table";
+        target.lnkOpts.prefix += " --cinit_compression=off";
+        /* NOTE: These platforms (from omapzoom) are local, custom: */
+        /* Set default platform and list of all interested platforms for M3 */
+        if (build_smp == null || build_smp == "0") {
+            /* Helps boot times, plus unmasks issues w/ uninit'd vars */
+            target.lnkOpts.prefix +=  " --zero_init=off";
+            target.platforms = [
+                        //"ti.platform.omap4430.core0",
+                        "ti.platform.omap54xx.core0",
+                   ];
+        }
+        else {
+            target.platforms =  [
+                        //"ti.platform.omap4430.ipu",
+                        "ti.platform.omap54xx.ipu",
+                   ];
+        }
+    }
+
     Build.targets.$add(target);
 }
 
similarity index 100%
rename from config.guess
rename to linux/build-aux/config.guess
similarity index 100%
rename from config.sub
rename to linux/build-aux/config.sub
similarity index 100%
rename from depcomp
rename to linux/build-aux/depcomp
similarity index 100%
rename from install-sh
rename to linux/build-aux/install-sh
similarity index 100%
rename from ltmain.sh
rename to linux/build-aux/ltmain.sh
similarity index 100%
rename from missing
rename to linux/build-aux/missing
index e571adcba0eccff387f6044bd6e30625535fc1a9..700ce9746cb29adc39e56e92de772e7c916b425f 100644 (file)
@@ -1,4 +1,35 @@
-# etc/Makefile.am
+##
+##  Copyright (c) 2012-2013, Texas Instruments Incorporated
+##
+##  Redistribution and use in source and binary forms, with or without
+##  modification, are permitted provided that the following conditions
+##  are met:
+##
+##  *  Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##
+##  *  Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in the
+##     documentation and/or other materials provided with the distribution.
+##
+##  *  Neither the name of Texas Instruments Incorporated nor the names of
+##     its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+##  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+##  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+##  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+##  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+##  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+##  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+##  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+##  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+##  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+##
+## ======== etc/Makefile.am ========
+##
 
 ###############################################################################
 
index 451c040ed2ebe9151aebe426c045319c92586870..b397cd907380f4bea3f9d0a93ac9198c7b0bbe5c 100644 (file)
@@ -14,8 +14,6 @@
 
 @SET_MAKE@
 
-# etc/Makefile.am
-
 ###############################################################################
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
@@ -92,6 +90,9 @@ LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
 OBJEXT = @OBJEXT@
 OMAP4430_FALSE = @OMAP4430_FALSE@
@@ -168,7 +169,7 @@ EXTRA_DIST = \
 all: all-am
 
 .SUFFIXES:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
@@ -177,9 +178,9 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  linux/etc/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  linux/etc/Makefile'; \
        cd $(top_srcdir) && \
-         $(AUTOMAKE) --gnu  linux/etc/Makefile
+         $(AUTOMAKE) --foreign  linux/etc/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
@@ -193,9 +194,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
-$(top_srcdir)/configure:  $(am__configure_deps)
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
 mostlyclean-libtool:
index a16e9b3e1dc8a402a4127bad4c781c3ceb788982..f9ad0f9c97a274ce5b52089fba42d5eaa698c603 100644 (file)
@@ -1,7 +1,39 @@
-# src/api/Makefile.am
+##
+##  Copyright (c) 2013, Texas Instruments Incorporated
+##
+##  Redistribution and use in source and binary forms, with or without
+##  modification, are permitted provided that the following conditions
+##  are met:
+##
+##  *  Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##
+##  *  Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in the
+##     documentation and/or other materials provided with the distribution.
+##
+##  *  Neither the name of Texas Instruments Incorporated nor the names of
+##     its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+##  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+##  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+##  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+##  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+##  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+##  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+##  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+##  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+##  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+##
+## ======== src/api/Makefile.am ========
+##
 
 # additional include paths necessary to compile the library
-AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/packages -D_GNU_SOURCE -Wall @AM_CFLAGS@
+AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/packages \
+        -D_GNU_SOURCE -Wall @AM_CFLAGS@
 
 ###############################################################################
 # THE LIBRARIES TO BUILD
index bcc0762f85486017a6587295480213e6d6baa076..70d818b6af56c5cc07b5de28a28b3f9df2c9268a 100644 (file)
@@ -14,8 +14,6 @@
 
 @SET_MAKE@
 
-# src/api/Makefile.am
-
 
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
@@ -63,7 +61,7 @@ am_libtiipc_la_OBJECTS = $(am__objects_1) MessageQ.lo NameServer.lo \
        SysLink.lo
 libtiipc_la_OBJECTS = $(am_libtiipc_la_OBJECTS)
 DEFAULT_INCLUDES = -I. -I$(srcdir)
-depcomp = $(SHELL) $(top_srcdir)/depcomp
+depcomp = $(SHELL) $(top_srcdir)/linux/build-aux/depcomp
 am__depfiles_maybe = depfiles
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -86,7 +84,9 @@ AMDEP_TRUE = @AMDEP_TRUE@
 AMTAR = @AMTAR@
 
 # additional include paths necessary to compile the library
-AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/packages -D_GNU_SOURCE -Wall @AM_CFLAGS@
+AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/packages \
+        -D_GNU_SOURCE -Wall @AM_CFLAGS@
+
 AM_LDFLAGS = @AM_LDFLAGS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
@@ -124,6 +124,9 @@ LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
 OBJEXT = @OBJEXT@
 OMAP4430_FALSE = @OMAP4430_FALSE@
@@ -230,7 +233,7 @@ all: all-am
 
 .SUFFIXES:
 .SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
@@ -239,9 +242,9 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  linux/src/api/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  linux/src/api/Makefile'; \
        cd $(top_srcdir) && \
-         $(AUTOMAKE) --gnu  linux/src/api/Makefile
+         $(AUTOMAKE) --foreign  linux/src/api/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
@@ -255,9 +258,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
-$(top_srcdir)/configure:  $(am__configure_deps)
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 install-libLTLIBRARIES: $(lib_LTLIBRARIES)
        @$(NORMAL_INSTALL)
index 10348ac24e00bef4d38d77fc6c1865438c2afab7..f7ba3a353623a7d79ee2adf95b1c1e8be3fe74b9 100644 (file)
@@ -1,7 +1,39 @@
-# linux/src/daemon/Makefile.am
+##
+##  Copyright (c) 2013, Texas Instruments Incorporated
+##
+##  Redistribution and use in source and binary forms, with or without
+##  modification, are permitted provided that the following conditions
+##  are met:
+##
+##  *  Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##
+##  *  Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in the
+##     documentation and/or other materials provided with the distribution.
+##
+##  *  Neither the name of Texas Instruments Incorporated nor the names of
+##     its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+##  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+##  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+##  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+##  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+##  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+##  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+##  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+##  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+##  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+##
+## ======== src/daemon/Makefile.am ========
+##
 
 # additional include paths necessary to compile the program
-AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/packages -D_GNU_SOURCE -Wall @AM_CFLAGS@
+AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/packages \
+        -D_GNU_SOURCE -Wall @AM_CFLAGS@
 
 ###############################################################################
 # THE PROGRAMS TO BUILD
@@ -51,16 +83,21 @@ lad_omapl138_SOURCES = $(common_sources)
 lad_tci6614_SOURCES = $(common_sources)
 lad_tci6638_SOURCES = $(common_sources)
 
-common_libraries = -lpthread $(top_builddir)/linux/src/api/libtiipc.la $(top_builddir)/linux/src/utils/libtiipcutils.la
+common_libraries = -lpthread $(top_builddir)/linux/src/api/libtiipc.la \
+                $(top_builddir)/linux/src/utils/libtiipcutils.la
 
 # the additional libraries needed to link program
 lad_omap4430_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la \
+                $(AM_LDFLAGS)
 lad_omapl138_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la \
+                $(AM_LDFLAGS)
 lad_tci6614_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la \
+                $(AM_LDFLAGS)
 lad_tci6638_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la \
+                $(AM_LDFLAGS)
 
 ###############################################################################
index 45992beb7a1379afa9eb915a20b59d46620c4d39..466d6cdf3572e529e78cbfddc80a741e9c026cd1 100644 (file)
@@ -14,8 +14,6 @@
 
 @SET_MAKE@
 
-# linux/src/daemon/Makefile.am
-
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 VPATH = @srcdir@
@@ -90,7 +88,7 @@ lad_tci6638_DEPENDENCIES = $(am__DEPENDENCIES_1) \
        $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la \
        $(am__DEPENDENCIES_2)
 DEFAULT_INCLUDES = -I. -I$(srcdir)
-depcomp = $(SHELL) $(top_srcdir)/depcomp
+depcomp = $(SHELL) $(top_srcdir)/linux/build-aux/depcomp
 am__depfiles_maybe = depfiles
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -113,7 +111,9 @@ AMDEP_TRUE = @AMDEP_TRUE@
 AMTAR = @AMTAR@
 
 # additional include paths necessary to compile the program
-AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/packages -D_GNU_SOURCE -Wall @AM_CFLAGS@
+AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/packages \
+        -D_GNU_SOURCE -Wall @AM_CFLAGS@
+
 AM_LDFLAGS = @AM_LDFLAGS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
@@ -151,6 +151,9 @@ LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
 OBJEXT = @OBJEXT@
 OMAP4430_FALSE = @OMAP4430_FALSE@
@@ -239,26 +242,32 @@ lad_omap4430_SOURCES = $(common_sources)
 lad_omapl138_SOURCES = $(common_sources)
 lad_tci6614_SOURCES = $(common_sources)
 lad_tci6638_SOURCES = $(common_sources)
-common_libraries = -lpthread $(top_builddir)/linux/src/api/libtiipc.la $(top_builddir)/linux/src/utils/libtiipcutils.la
+common_libraries = -lpthread $(top_builddir)/linux/src/api/libtiipc.la \
+                $(top_builddir)/linux/src/utils/libtiipcutils.la
+
 
 # the additional libraries needed to link program
 lad_omap4430_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la \
+                $(AM_LDFLAGS)
 
 lad_omapl138_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la \
+                $(AM_LDFLAGS)
 
 lad_tci6614_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la \
+                $(AM_LDFLAGS)
 
 lad_tci6638_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la \
+                $(AM_LDFLAGS)
 
 all: all-am
 
 .SUFFIXES:
 .SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
@@ -267,9 +276,9 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  linux/src/daemon/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  linux/src/daemon/Makefile'; \
        cd $(top_srcdir) && \
-         $(AUTOMAKE) --gnu  linux/src/daemon/Makefile
+         $(AUTOMAKE) --foreign  linux/src/daemon/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
@@ -283,9 +292,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
-$(top_srcdir)/configure:  $(am__configure_deps)
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 install-binPROGRAMS: $(bin_PROGRAMS)
        @$(NORMAL_INSTALL)
index ecc02979b6d7f906d63e4ffddc6619c453e37374..8152b60a428f35d4467a624b370b406ebfd64473 100644 (file)
@@ -1,4 +1,35 @@
-# src/family/Makefile.am
+##
+##  Copyright (c) 2013, Texas Instruments Incorporated
+##
+##  Redistribution and use in source and binary forms, with or without
+##  modification, are permitted provided that the following conditions
+##  are met:
+##
+##  *  Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##
+##  *  Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in the
+##     documentation and/or other materials provided with the distribution.
+##
+##  *  Neither the name of Texas Instruments Incorporated nor the names of
+##     its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+##  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+##  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+##  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+##  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+##  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+##  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+##  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+##  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+##  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+##
+## ======== src/family/Makefile.am ========
+##
 
 # additional include paths necessary to compile the library
 AM_CFLAGS = -I$(top_srcdir)/linux/include -D_GNU_SOURCE -Wall @AM_CFLAGS@
index 3933064ebc19a09c5d24583eab904d7cb718f3ce..7d607e06be5fcfe675921cf723be942a869277d2 100644 (file)
@@ -14,8 +14,6 @@
 
 @SET_MAKE@
 
-# src/family/Makefile.am
-
 
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
@@ -108,7 +106,7 @@ libtiipccfg_tci6638_la_OBJECTS = $(am_libtiipccfg_tci6638_la_OBJECTS)
 @OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_TRUE@am_libtiipccfg_tci6638_la_rpath = -rpath \
 @OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_TRUE@  $(libdir)
 DEFAULT_INCLUDES = -I. -I$(srcdir)
-depcomp = $(SHELL) $(top_srcdir)/depcomp
+depcomp = $(SHELL) $(top_srcdir)/linux/build-aux/depcomp
 am__depfiles_maybe = depfiles
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -181,6 +179,9 @@ LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
 OBJEXT = @OBJEXT@
 OMAP4430_FALSE = @OMAP4430_FALSE@
@@ -308,7 +309,7 @@ all: all-am
 
 .SUFFIXES:
 .SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
@@ -317,9 +318,9 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  linux/src/family/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  linux/src/family/Makefile'; \
        cd $(top_srcdir) && \
-         $(AUTOMAKE) --gnu  linux/src/family/Makefile
+         $(AUTOMAKE) --foreign  linux/src/family/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
@@ -333,9 +334,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
-$(top_srcdir)/configure:  $(am__configure_deps)
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 install-libLTLIBRARIES: $(lib_LTLIBRARIES)
        @$(NORMAL_INSTALL)
index 9d259087b3abd60d008491603828fc1bea5b3c0c..b4ddc709327be5ce5bd5ca3c00d15b37b052f5ed 100644 (file)
@@ -1,42 +1,74 @@
-# src/test/Makefile.am
+##
+##  Copyright (c) 2013, Texas Instruments Incorporated
+##
+##  Redistribution and use in source and binary forms, with or without
+##  modification, are permitted provided that the following conditions
+##  are met:
+##
+##  *  Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##
+##  *  Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in the
+##     documentation and/or other materials provided with the distribution.
+##
+##  *  Neither the name of Texas Instruments Incorporated nor the names of
+##     its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+##  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+##  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+##  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+##  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+##  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+##  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+##  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+##  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+##  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+##
+## ======== src/test/Makefile.am ========
+##
 
 # additional include paths necessary to compile the program
-AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/packages -I$(CMEM_INSTALL_DIR)/packages -D_GNU_SOURCE -Wall @AM_CFLAGS@
+AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/packages  \
+        -I$(CMEM_INSTALL_DIR)/packages -D_GNU_SOURCE -Wall @AM_CFLAGS@
 
 ###############################################################################
 # THE PROGRAMS TO BUILD
 ###############################################################################
 
 # the program to build (the names of the final binaries)
-bin_PROGRAMS =
+bin_PROGRAMS = ping_rpmsg
 
 if OMAP4430
-  bin_PROGRAMS += MessageQApp_omap4430 MessageQBench_omap4430 MessageQMulti_omap4430 \
-                    NameServerApp_omap4430
+  bin_PROGRAMS += MessageQApp_omap4430 MessageQBench_omap4430 \
+                MessageQMulti_omap4430 NameServerApp_omap4430
 else
 if OMAPL138
-  bin_PROGRAMS += MessageQApp_omapl138 MessageQBench_omapl138 MessageQMulti_omapl138 \
-                    NameServerApp_omapl138
+  bin_PROGRAMS += MessageQApp_omapl138 MessageQBench_omapl138 \
+                MessageQMulti_omapl138 NameServerApp_omapl138
 if CMEM
   bin_PROGRAMS += nano_test_omapl138
 endif
 else
 if TCI6614
-  bin_PROGRAMS += MessageQApp_tci6614 MessageQBench_tci6614 MessageQMulti_tci6614 \
-                    NameServerApp_tci6614
+  bin_PROGRAMS += MessageQApp_tci6614 MessageQBench_tci6614 \
+                MessageQMulti_tci6614 NameServerApp_tci6614
 else
 if TCI6638
-  bin_PROGRAMS += MessageQApp_tci6638 MessageQBench_tci6638 MessageQMulti_tci6638 \
-                    NameServerApp_tci6638
+  bin_PROGRAMS += MessageQApp_tci6638 MessageQBench_tci6638 \
+                MessageQMulti_tci6638 NameServerApp_tci6638
 else
-  bin_PROGRAMS += MessageQApp_omap4430 MessageQBench_omap4430 MessageQMulti_omap4430 \
-                  NameServerApp_omap4430 \
-                  MessageQApp_omapl138 MessageQBench_omapl138 MessageQMulti_omapl138 \
-                  NameServerApp_omapl138 \
-                  MessageQApp_tci6614 MessageQBench_tci6614 MessageQMulti_tci6614 \
-                  NameServerApp_tci6614 \
-                  MessageQApp_tci6638 MessageQBench_tci6638 MessageQMulti_tci6638 \
-                  NameServerApp_tci6638
+  bin_PROGRAMS += MessageQApp_omap4430 MessageQBench_omap4430 \
+                MessageQMulti_omap4430 NameServerApp_omap4430 \
+                MessageQApp_omapl138 MessageQBench_omapl138 \
+                MessageQMulti_omapl138 NameServerApp_omapl138 \
+                MessageQApp_tci6614 MessageQBench_tci6614 \
+                MessageQMulti_tci6614 NameServerApp_tci6614 \
+                MessageQApp_tci6638 MessageQBench_tci6638 \
+                MessageQMulti_tci6638 NameServerApp_tci6638
 if CMEM
   bin_PROGRAMS += nano_test_omapl138
 endif
@@ -57,6 +89,9 @@ nameServer_common_sources = \
                 $(top_srcdir)/packages/ti/ipc/NameServer.h \
                 NameServerApp.c
 
+# list of sources for the 'ping_rpmsg' binary
+ping_rpmsg_SOURCES = ping_rpmsg.c
+
 # list of sources for the 'MessageQApp' binary
 MessageQApp_omap4430_SOURCES = $(common_sources) MessageQApp.c
 MessageQApp_omapl138_SOURCES = $(common_sources) MessageQApp.c
@@ -87,45 +122,64 @@ nano_test_omapl138_SOURCES = $(common_sources) nano_test.c
 common_libraries = -lpthread $(top_builddir)/linux/src/api/libtiipc.la \
                 $(top_builddir)/linux/src/utils/libtiipcutils.la
 
+# the additional libraries to link ping_rpmsg
+ping_rpmsg_LDADD = -lrt
+
 # the additional libraries needed to link MessageQApp
 MessageQApp_omap4430_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la \
+                $(AM_LDFLAGS)
 MessageQApp_omapl138_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la \
+                $(AM_LDFLAGS)
 MessageQApp_tci6614_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la \
+                $(AM_LDFLAGS)
 MessageQApp_tci6638_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la \
+                $(AM_LDFLAGS)
 
 # the additional libraries needed to link MessageQBench
 MessageQBench_omap4430_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la -lrt $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la -lrt \
+                $(AM_LDFLAGS)
 MessageQBench_omapl138_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la -lrt $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la -lrt \
+                $(AM_LDFLAGS)
 MessageQBench_tci6614_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la -lrt $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la -lrt \
+                $(AM_LDFLAGS)
 MessageQBench_tci6638_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la -lrt $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la -lrt \
+                $(AM_LDFLAGS)
 
 # the additional libraries needed to link MessageQMulti
 MessageQMulti_omap4430_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la \
+                $(AM_LDFLAGS)
 MessageQMulti_omapl138_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la \
+                $(AM_LDFLAGS)
 MessageQMulti_tci6614_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la \
+                $(AM_LDFLAGS)
 MessageQMulti_tci6638_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la \
+                $(AM_LDFLAGS)
 
 # the additional libraries needed to link NameServerApp
 NameServerApp_omap4430_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la \
+                $(AM_LDFLAGS)
 NameServerApp_omapl138_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la \
+                $(AM_LDFLAGS)
 NameServerApp_tci6614_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la \
+                $(AM_LDFLAGS)
 NameServerApp_tci6638_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la \
+                $(AM_LDFLAGS)
 
 # the additional libraries needed to link nano_test
 nano_test_omapl138_LDADD = $(common_libraries) \
index 0449c21ac2c12bc07d20f0b7125fc429d59a605c..0bb1a51dfc0b8c5277692689f9528a759bd28dff 100644 (file)
@@ -14,8 +14,6 @@
 
 @SET_MAKE@
 
-# src/test/Makefile.am
-
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 VPATH = @srcdir@
@@ -41,27 +39,27 @@ host_triplet = @host@
 bin_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
        $(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6) \
        $(am__EXEEXT_7)
-@OMAP4430_TRUE@am__append_1 = MessageQApp_omap4430 MessageQBench_omap4430 MessageQMulti_omap4430 \
-@OMAP4430_TRUE@                    NameServerApp_omap4430
+@OMAP4430_TRUE@am__append_1 = MessageQApp_omap4430 MessageQBench_omap4430 \
+@OMAP4430_TRUE@                MessageQMulti_omap4430 NameServerApp_omap4430
 
-@OMAP4430_FALSE@@OMAPL138_TRUE@am__append_2 = MessageQApp_omapl138 MessageQBench_omapl138 MessageQMulti_omapl138 \
-@OMAP4430_FALSE@@OMAPL138_TRUE@                    NameServerApp_omapl138
+@OMAP4430_FALSE@@OMAPL138_TRUE@am__append_2 = MessageQApp_omapl138 MessageQBench_omapl138 \
+@OMAP4430_FALSE@@OMAPL138_TRUE@                MessageQMulti_omapl138 NameServerApp_omapl138
 
 @CMEM_TRUE@@OMAP4430_FALSE@@OMAPL138_TRUE@am__append_3 = nano_test_omapl138
-@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_TRUE@am__append_4 = MessageQApp_tci6614 MessageQBench_tci6614 MessageQMulti_tci6614 \
-@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_TRUE@                    NameServerApp_tci6614
+@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_TRUE@am__append_4 = MessageQApp_tci6614 MessageQBench_tci6614 \
+@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_TRUE@                MessageQMulti_tci6614 NameServerApp_tci6614
 
-@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_TRUE@am__append_5 = MessageQApp_tci6638 MessageQBench_tci6638 MessageQMulti_tci6638 \
-@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_TRUE@                    NameServerApp_tci6638
+@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_TRUE@am__append_5 = MessageQApp_tci6638 MessageQBench_tci6638 \
+@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_TRUE@                MessageQMulti_tci6638 NameServerApp_tci6638
 
-@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_FALSE@am__append_6 = MessageQApp_omap4430 MessageQBench_omap4430 MessageQMulti_omap4430 \
-@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_FALSE@                  NameServerApp_omap4430 \
-@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_FALSE@                  MessageQApp_omapl138 MessageQBench_omapl138 MessageQMulti_omapl138 \
-@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_FALSE@                  NameServerApp_omapl138 \
-@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_FALSE@                  MessageQApp_tci6614 MessageQBench_tci6614 MessageQMulti_tci6614 \
-@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_FALSE@                  NameServerApp_tci6614 \
-@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_FALSE@                  MessageQApp_tci6638 MessageQBench_tci6638 MessageQMulti_tci6638 \
-@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_FALSE@                  NameServerApp_tci6638
+@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_FALSE@am__append_6 = MessageQApp_omap4430 MessageQBench_omap4430 \
+@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_FALSE@                MessageQMulti_omap4430 NameServerApp_omap4430 \
+@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_FALSE@                MessageQApp_omapl138 MessageQBench_omapl138 \
+@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_FALSE@                MessageQMulti_omapl138 NameServerApp_omapl138 \
+@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_FALSE@                MessageQApp_tci6614 MessageQBench_tci6614 \
+@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_FALSE@                MessageQMulti_tci6614 NameServerApp_tci6614 \
+@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_FALSE@                MessageQApp_tci6638 MessageQBench_tci6638 \
+@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_FALSE@                MessageQMulti_tci6638 NameServerApp_tci6638
 
 @CMEM_TRUE@@OMAP4430_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_FALSE@am__append_7 = nano_test_omapl138
 subdir = linux/src/tests
@@ -214,7 +212,7 @@ nano_test_omapl138_DEPENDENCIES = $(am__DEPENDENCIES_1) \
        $(CMEM_INSTALL_DIR)/packages/ti/sdo/linuxutils/cmem/lib/cmem.a470MV \
        $(am__DEPENDENCIES_2)
 DEFAULT_INCLUDES = -I. -I$(srcdir)
-depcomp = $(SHELL) $(top_srcdir)/depcomp
+depcomp = $(SHELL) $(top_srcdir)/linux/build-aux/depcomp
 am__depfiles_maybe = depfiles
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -263,7 +261,9 @@ AMDEP_TRUE = @AMDEP_TRUE@
 AMTAR = @AMTAR@
 
 # additional include paths necessary to compile the program
-AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/packages -I$(CMEM_INSTALL_DIR)/packages -D_GNU_SOURCE -Wall @AM_CFLAGS@
+AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/packages  \
+        -I$(CMEM_INSTALL_DIR)/packages -D_GNU_SOURCE -Wall @AM_CFLAGS@
+
 AM_LDFLAGS = @AM_LDFLAGS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
@@ -301,6 +301,9 @@ LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
 OBJEXT = @OBJEXT@
 OMAP4430_FALSE = @OMAP4430_FALSE@
@@ -411,58 +414,74 @@ common_libraries = -lpthread $(top_builddir)/linux/src/api/libtiipc.la \
 
 # the additional libraries needed to link MessageQApp
 MessageQApp_omap4430_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la \
+                $(AM_LDFLAGS)
 
 MessageQApp_omapl138_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la \
+                $(AM_LDFLAGS)
 
 MessageQApp_tci6614_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la \
+                $(AM_LDFLAGS)
 
 MessageQApp_tci6638_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la \
+                $(AM_LDFLAGS)
 
 
 # the additional libraries needed to link MessageQBench
 MessageQBench_omap4430_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la -lrt $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la -lrt \
+                $(AM_LDFLAGS)
 
 MessageQBench_omapl138_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la -lrt $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la -lrt \
+                $(AM_LDFLAGS)
 
 MessageQBench_tci6614_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la -lrt $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la -lrt \
+                $(AM_LDFLAGS)
 
 MessageQBench_tci6638_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la -lrt $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la -lrt \
+                $(AM_LDFLAGS)
 
 
 # the additional libraries needed to link MessageQMulti
 MessageQMulti_omap4430_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la \
+                $(AM_LDFLAGS)
 
 MessageQMulti_omapl138_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la \
+                $(AM_LDFLAGS)
 
 MessageQMulti_tci6614_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la \
+                $(AM_LDFLAGS)
 
 MessageQMulti_tci6638_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la \
+                $(AM_LDFLAGS)
 
 
 # the additional libraries needed to link NameServerApp
 NameServerApp_omap4430_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la \
+                $(AM_LDFLAGS)
 
 NameServerApp_omapl138_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_omapl138.la \
+                $(AM_LDFLAGS)
 
 NameServerApp_tci6614_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6614.la \
+                $(AM_LDFLAGS)
 
 NameServerApp_tci6638_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la $(AM_LDFLAGS)
+                $(top_builddir)/linux/src/family/libtiipccfg_tci6638.la \
+                $(AM_LDFLAGS)
 
 
 # the additional libraries needed to link nano_test
@@ -475,7 +494,7 @@ all: all-am
 
 .SUFFIXES:
 .SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
@@ -484,9 +503,9 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  linux/src/tests/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  linux/src/tests/Makefile'; \
        cd $(top_srcdir) && \
-         $(AUTOMAKE) --gnu  linux/src/tests/Makefile
+         $(AUTOMAKE) --foreign  linux/src/tests/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
@@ -500,9 +519,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
-$(top_srcdir)/configure:  $(am__configure_deps)
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 install-binPROGRAMS: $(bin_PROGRAMS)
        @$(NORMAL_INSTALL)
diff --git a/linux/src/tests/ping_rpmsg.c b/linux/src/tests/ping_rpmsg.c
new file mode 100644 (file)
index 0000000..3383930
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+ * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/*
+ *  ======== ping_rpmsg.c ========
+ *
+ *  Works with the ping_rpmsg BIOS sample over the rpmsg-proto socket.
+ */
+
+#include <sys/select.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <time.h>
+
+/* SysLink Socket Protocol Family */
+#include <net/rpmsg.h>
+
+#define CORE0 (0)  /* This should be MultiProc_getId("CORE0") - 1 */
+
+#define NUMLOOPS 100
+
+long diff(struct timespec start, struct timespec end)
+{
+    struct timespec temp;
+
+    if ((end.tv_nsec - start.tv_nsec) < 0) {
+        temp.tv_sec = end.tv_sec - start.tv_sec-1;
+        temp.tv_nsec = 1000000000UL + end.tv_nsec - start.tv_nsec;
+    } else {
+        temp.tv_sec = end.tv_sec - start.tv_sec;
+        temp.tv_nsec = end.tv_nsec - start.tv_nsec;
+    }
+
+    return (temp.tv_sec * 1000000UL + temp.tv_nsec / 1000);
+}
+
+int main(void)
+{
+    int sock, err;
+    struct sockaddr_rpmsg src_addr, dst_addr;
+    socklen_t len;
+    const char *msg = "Ping!";
+    char buf[512];
+    struct timespec   start,end;
+    long              elapsed=0,delta;
+    int i;
+
+    /* create an RPMSG socket */
+    /* QNX PORTING NOTE:  call fd = open("/dev/????", ...); */
+    sock = socket(AF_RPMSG, SOCK_SEQPACKET, 0);
+    if (sock < 0) {
+        printf("socket failed: %s (%d)\n", strerror(errno), errno);
+        return -1;
+    }
+
+    /* connect to remote service */
+    memset(&dst_addr, 0, sizeof(dst_addr));
+    dst_addr.family = AF_RPMSG;
+    dst_addr.vproc_id = CORE0;
+    dst_addr.addr = 51; // use 51 for ping_tasks;
+    //dst_addr.addr = 61; // use 61 for messageQ transport;
+
+    printf("Connecting to address 0x%x on vprocId %d\n",
+            dst_addr.addr, dst_addr.vproc_id);
+
+    len = sizeof(struct sockaddr_rpmsg);
+    /* QNX PORTING NOTE:  call ioctl(fd, CONNECT_IOTL, *args)*/
+    err = connect(sock, (struct sockaddr *)&dst_addr, len);
+    if (err < 0) {
+        printf("connect failed: %s (%d)\n", strerror(errno), errno);
+        return -1;
+    }
+
+    /* let's see what local address we got */
+    /* QNX PORTING NOTE:  call ioctl(fd, GETLOCALENDPOINT_IOTL, *args)*/
+    err = getsockname(sock, (struct sockaddr *)&src_addr, &len);
+    if (err < 0) {
+        printf("getpeername failed: %s (%d)\n", strerror(errno), errno);
+        return -1;
+    }
+
+    printf("Our address: socket family: %d, proc id = %d, addr = %d\n",
+                 src_addr.family, src_addr.vproc_id, src_addr.addr);
+
+    printf("Sending \"%s\" in a loop.\n", msg);
+
+    for (i = 0; i < NUMLOOPS; i++) {
+        clock_gettime(CLOCK_REALTIME, &start);
+
+        /* QNX PORTING NOTE:  call write(fd, msg,len); */
+        err = send(sock, msg, strlen(msg) + 1, 0);
+        if (err < 0) {
+            printf("sendto failed: %s (%d)\n", strerror(errno), errno);
+            return -1;
+        }
+
+        memset(&src_addr, 0, sizeof(src_addr));
+
+        len = sizeof(src_addr);
+
+        /* QNX PORTING NOTE:  len = read(fd, buf, len); */
+        err = recvfrom(sock, buf, sizeof(buf), 0,
+                       (struct sockaddr *)&src_addr, &len);
+
+        if (err < 0) {
+            printf("recvfrom failed: %s (%d)\n", strerror(errno), errno);
+            return -1;
+        }
+        if (len != sizeof(src_addr)) {
+            printf("recvfrom: got bad addr len (%d)\n", len);
+            return -1;
+        }
+
+        clock_gettime(CLOCK_REALTIME, &end);
+        delta = diff(start,end);
+        elapsed += delta;
+
+        printf("%d: Received msg: %s, from: %d\n", i, buf, src_addr.addr);
+
+        /*
+        printf ("Message time: %ld usecs\n", delta);
+        printf("Received a msg from address 0x%x on processor %d\n",
+                           src_addr.addr, src_addr.vproc_id);
+        printf("Message content: \"%s\".\n", buf);
+        */
+    }
+    printf ("Avg time: %ld usecs over %d iterations\n", elapsed / i, i);
+
+    /* QNX PORTING NOTE:  close(fd); */
+    close(sock);
+
+    return 0;
+}
index 1d096394c86ec616bb41cbe2026505b37b835aee..8a576fb754bc80360920b8ea0beb9f4b7169095f 100644 (file)
@@ -1,7 +1,39 @@
-# src/utils/Makefile.am
+##
+##  Copyright (c) 2013, Texas Instruments Incorporated
+##
+##  Redistribution and use in source and binary forms, with or without
+##  modification, are permitted provided that the following conditions
+##  are met:
+##
+##  *  Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##
+##  *  Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in the
+##     documentation and/or other materials provided with the distribution.
+##
+##  *  Neither the name of Texas Instruments Incorporated nor the names of
+##     its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+##  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+##  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+##  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+##  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+##  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+##  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+##  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+##  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+##  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+##
+## ======== src/utils/Makefile.am ========
+##
 
 # additional include paths necessary to compile the library
-AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/packages -D_GNU_SOURCE -Wall @AM_CFLAGS@
+AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/packages \
+        -D_GNU_SOURCE -Wall @AM_CFLAGS@
 
 ###############################################################################
 # THE LIBRARIES TO BUILD
index 6408e75b1b7c02d4c0cba2c24721f104293bb4a0..9f25f91a5cd2c2fc29cc8c7082ed45e2d0f9d4a0 100644 (file)
@@ -14,8 +14,6 @@
 
 @SET_MAKE@
 
-# src/utils/Makefile.am
-
 
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
@@ -64,7 +62,7 @@ am_libtiipcutils_la_OBJECTS = $(am__objects_1) LAD_client.lo \
        MultiProc.lo SocketFxns.lo
 libtiipcutils_la_OBJECTS = $(am_libtiipcutils_la_OBJECTS)
 DEFAULT_INCLUDES = -I. -I$(srcdir)
-depcomp = $(SHELL) $(top_srcdir)/depcomp
+depcomp = $(SHELL) $(top_srcdir)/linux/build-aux/depcomp
 am__depfiles_maybe = depfiles
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -87,7 +85,9 @@ AMDEP_TRUE = @AMDEP_TRUE@
 AMTAR = @AMTAR@
 
 # additional include paths necessary to compile the library
-AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/packages -D_GNU_SOURCE -Wall @AM_CFLAGS@
+AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/packages \
+        -D_GNU_SOURCE -Wall @AM_CFLAGS@
+
 AM_LDFLAGS = @AM_LDFLAGS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
@@ -125,6 +125,9 @@ LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
 OBJEXT = @OBJEXT@
 OMAP4430_FALSE = @OMAP4430_FALSE@
@@ -225,7 +228,7 @@ all: all-am
 
 .SUFFIXES:
 .SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
@@ -234,9 +237,9 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  linux/src/utils/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  linux/src/utils/Makefile'; \
        cd $(top_srcdir) && \
-         $(AUTOMAKE) --gnu  linux/src/utils/Makefile
+         $(AUTOMAKE) --foreign  linux/src/utils/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
@@ -250,9 +253,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
-$(top_srcdir)/configure:  $(am__configure_deps)
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 install-libLTLIBRARIES: $(lib_LTLIBRARIES)
        @$(NORMAL_INSTALL)
diff --git a/packages/ti/configs/omap54xx/Dsp.cfg b/packages/ti/configs/omap54xx/Dsp.cfg
new file mode 100644 (file)
index 0000000..5ceef3e
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+ * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * The SysMin is used here instead of StdMin, as trace buffer address is
+ * required for Linux trace debug driver, plus provides better performance.
+ */
+var System      = xdc.useModule('xdc.runtime.System');
+var SysMin      = xdc.useModule('ti.trace.SysMin');
+System.SupportProxy = SysMin;
+SysMin.bufSize  = 0x8000;
+
+/* Define default memory heap properties */
+var Memory      = xdc.useModule('xdc.runtime.Memory');
+Memory.defaultHeapSize = 0x20000;
+
+/* Modules used in the virtqueue/MessageQCopy/ServiceMgr libraries: */
+var Semaphore   = xdc.useModule('ti.sysbios.knl.Semaphore');
+var BIOS        = xdc.useModule('ti.sysbios.BIOS');
+
+/* Reduces code size, by only pulling in modules explicitly referenced: */
+//BIOS.libType    = BIOS.LibType_Custom;
+
+/* Use LibType_Debug option for now to avoid linking error due to bug in BIOS */
+BIOS.libType    = BIOS.LibType_Debug;
+
+xdc.loadPackage('ti.ipc.rpmsg');
+
+/* TBD: Not yet taken in from omapzoom:
+xdc.loadPackage('ti.srvmgr');
+xdc.useModule('ti.srvmgr.omx.OmxSrvMgr');
+xdc.loadPackage('ti.resmgr');
+*/
+
+/* Enable Memory Translation module that operates on the BIOS Resource Table */
+var IpcMemory = xdc.useModule('ti.resources.IpcMemory');
+IpcMemory.loadSegment = "EXT_CODE"
+
+/* HwSpinlock Module */
+xdc.loadPackage('ti.gates.hwspinlock');
+
+/* Modules used in Power Management */
+xdc.loadPackage('ti.pm');
+var Power = xdc.useModule('ti.sysbios.family.c64p.tesla.Power');
+Power.loadSegment = "PM_DATA";
+
+/* Idle function that periodically flushes the unicache */
+var Idle = xdc.useModule('ti.sysbios.knl.Idle');
+
+//TBD: Idle.addFunc('&ti_deh_Deh_idleBegin'); /* Must be placed before pwr mgmt */
+Idle.addFunc('&IpcPower_idle');        /* IpcPower_idle must be at the end */
+
+var HeapBuf   = xdc.useModule('ti.sysbios.heaps.HeapBuf');
+var List      = xdc.useModule('ti.sdo.utils.List');
+
+/* ti.grcm Configuration */
+/* TBD:
+var rcmSettings = xdc.useModule('ti.grcm.Settings');
+rcmSettings.ipc = rcmSettings.IpcSupport_ti_sdo_ipc;
+xdc.useModule('ti.grcm.RcmServer');
+*/
+xdc.useModule('ti.sysbios.xdcruntime.GateThreadSupport');
+var GateSwi   = xdc.useModule('ti.sysbios.gates.GateSwi');
+
+var Task          = xdc.useModule('ti.sysbios.knl.Task');
+Task.common$.namedInstance = true;
+
+var Assert = xdc.useModule('xdc.runtime.Assert');
+var Defaults = xdc.useModule('xdc.runtime.Defaults');
+var Diags = xdc.useModule('xdc.runtime.Diags');
+var LoggerSys = xdc.useModule('xdc.runtime.LoggerSys');
+var LoggerSysParams = new LoggerSys.Params();
+
+/* Enable Logger: */
+Defaults.common$.logger = LoggerSys.create(LoggerSysParams);
+
+/* Enable runtime Diags_setMask() for non-XDC spec'd modules: */
+var Text = xdc.useModule('xdc.runtime.Text');
+Text.isLoaded = true;
+var Registry = xdc.useModule('xdc.runtime.Registry');
+Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
+Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
+Registry.common$.diags_LIFECYCLE = Diags.RUNTIME_OFF;
+Registry.common$.diags_STATUS = Diags.RUNTIME_OFF;
+Diags.setMaskEnabled = true;
+
+var Main = xdc.useModule('xdc.runtime.Main');
+Main.common$.diags_ASSERT = Diags.ALWAYS_ON;
+Main.common$.diags_INTERNAL = Diags.ALWAYS_ON;
+
+var Hwi = xdc.useModule('ti.sysbios.family.c64p.Hwi');
+//TBD: var Deh = xdc.useModule('ti.deh.Deh');
+Hwi.enableException = true;
+
+/* -------------------------------- DSP ----------------------------------*/
+var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
+MultiProc.setConfig("DSP", ["HOST", "CORE0", "CORE1", "DSP"]);
+
+/* --------------------------- TICK --------------------------------------*/
+var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+Clock.tickSource = Clock.TickSource_USER;
+/* Configure BIOS clock source as GPTimer5 */
+Clock.timerId = 0;
+
+var Timer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer');
+
+/* Skip the Timer frequency verification check. Need to remove this later */
+Timer.checkFrequency = false;
+
+/* Match this to the SYS_CLK frequency sourcing the dmTimers.
+ * Not needed once the SYS/BIOS family settings is updated. */
+Timer.intFreq.hi = 0;
+Timer.intFreq.lo = 19200000;
+
+var timerParams = new Timer.Params();
+timerParams.period = Clock.tickPeriod;
+timerParams.periodType = Timer.PeriodType_MICROSECS;
+/* Switch off Software Reset to make the below settings effective */
+timerParams.tiocpCfg.softreset = 0x0;
+/* Smart-idle wake-up-capable mode */
+timerParams.tiocpCfg.idlemode = 0x3;
+/* Wake-up generation for Overflow */
+timerParams.twer.ovf_wup_ena = 0x1;
+Timer.create(Clock.timerId, Clock.doTick, timerParams);
+
+Program.sectMap[".tracebuf"] = "TRACE_BUF";
+Program.sectMap[".errorbuf"] = "EXC_DATA";
+
+/* Version module */
+xdc.useModule('ti.utils.Version');
diff --git a/packages/ti/configs/omap54xx/DspAmmu.cfg b/packages/ti/configs/omap54xx/DspAmmu.cfg
new file mode 100644 (file)
index 0000000..cac4038
--- /dev/null
@@ -0,0 +1,238 @@
+/*
+ * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ *  ======== DspAmmu.cfg ========
+ *
+ *  An example configuration script used by DSP sample applications.
+ */
+
+/* -------------------------------- Cache ----------------------------------*/
+var Cache = xdc.useModule('ti.sysbios.hal.unicache.Cache');
+Cache.enableCache = true;
+
+if (Cache.enableCache) {
+    Cache.ocpL1.wrap = 1;
+    Cache.ocpL1.wrbuffer = 1;
+    Cache.ocpL1.prefetch = 0;
+
+    Cache.ocpL2.wrap = 1;
+    Cache.ocpL2.wrbuffer = 1;
+    Cache.ocpL2.prefetch = 0;
+
+    print("DSP Unicache = ON");
+}
+else {
+    print("DSP Unicache = OFF");
+}
+
+/* -------------------------------- AMMU -----------------------------------*/
+var AMMU = xdc.useModule('ti.sysbios.hal.ammu.AMMU');
+
+/*********************** Small Pages *************************/
+/* Work-around for bug in BIOS 6.33.06.50 */
+AMMU.smallPages[1].pageEnabled = AMMU.Enable_YES;
+AMMU.smallPages[1].logicalAddress = 0x01c30000;
+AMMU.smallPages[1].translationEnabled = AMMU.Enable_NO;
+AMMU.smallPages[1].size = AMMU.Small_4K;
+AMMU.smallPages[1].L1_cacheable = AMMU.CachePolicy_NON_CACHEABLE;
+AMMU.smallPages[1].L2_cacheable = AMMU.CachePolicy_NON_CACHEABLE;
+
+/*********************** Medium Pages *************************/
+/* config medium page[0] to map 1MB VA 0x01d00000 to 0x01dFFFFF */
+/* ABE NC region */
+AMMU.mediumPages[0].pageEnabled = AMMU.Enable_YES;
+AMMU.mediumPages[0].logicalAddress = 0x01d00000;
+AMMU.mediumPages[0].size = AMMU.Medium_1M;
+AMMU.mediumPages[0].L1_cacheable = AMMU.CachePolicy_NON_CACHEABLE;
+AMMU.mediumPages[0].L1_posted = AMMU.PostedPolicy_NON_POSTED;
+AMMU.mediumPages[0].L1_allocate = AMMU.AllocatePolicy_NON_ALLOCATE;
+AMMU.mediumPages[0].L1_writePolicy = AMMU.WritePolicy_WRITE_THROUGH;
+AMMU.mediumPages[0].L2_cacheable = AMMU.CachePolicy_NON_CACHEABLE;
+AMMU.mediumPages[0].L2_posted = AMMU.PostedPolicy_NON_POSTED;
+AMMU.mediumPages[0].L2_allocate = AMMU.AllocatePolicy_NON_ALLOCATE;
+AMMU.mediumPages[0].L2_writePolicy = AMMU.WritePolicy_WRITE_THROUGH;
+
+/* config medium page[1] to map 1MB VA 0x01e00000 to 0x01eFFFFF */
+/* IVA-HD (accelerator memories, NC region) */
+AMMU.mediumPages[1].pageEnabled = AMMU.Enable_YES;
+AMMU.mediumPages[1].logicalAddress = 0x01e00000;
+AMMU.mediumPages[1].size = AMMU.Medium_1M;
+AMMU.mediumPages[1].L1_cacheable = AMMU.CachePolicy_NON_CACHEABLE;
+AMMU.mediumPages[1].L1_posted = AMMU.PostedPolicy_NON_POSTED;
+AMMU.mediumPages[1].L1_allocate = AMMU.AllocatePolicy_NON_ALLOCATE;
+AMMU.mediumPages[1].L1_writePolicy = AMMU.WritePolicy_WRITE_BACK;
+AMMU.mediumPages[1].L2_cacheable = AMMU.CachePolicy_NON_CACHEABLE;
+AMMU.mediumPages[1].L2_posted = AMMU.PostedPolicy_NON_POSTED;
+AMMU.mediumPages[1].L2_allocate = AMMU.AllocatePolicy_NON_ALLOCATE;
+AMMU.mediumPages[1].L2_writePolicy = AMMU.WritePolicy_WRITE_BACK;
+
+/* config medium page[2] to map 128kB VA 0x10800000 to 0x1081FFFF */
+/* SL2->L1 */
+AMMU.mediumPages[2].pageEnabled = AMMU.Enable_YES;
+AMMU.mediumPages[2].logicalAddress = 0x10800000;
+AMMU.mediumPages[2].size = AMMU.Medium_128K;
+AMMU.mediumPages[2].L1_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.mediumPages[2].L1_posted = AMMU.PostedPolicy_POSTED;
+AMMU.mediumPages[3].L2_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.mediumPages[2].L1_writePolicy = AMMU.WritePolicy_WRITE_BACK;
+AMMU.mediumPages[2].L2_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.mediumPages[2].L2_posted = AMMU.PostedPolicy_POSTED;
+AMMU.mediumPages[2].L2_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.mediumPages[2].L2_writePolicy = AMMU.WritePolicy_WRITE_BACK;
+
+/* config medium page[3] to map 128kB VA 0x10820000 to 0x1083FFFF  */
+/* SL2->L2 */
+AMMU.mediumPages[3].pageEnabled = AMMU.Enable_YES;
+AMMU.mediumPages[3].logicalAddress = 0x10820000;
+AMMU.mediumPages[3].size = AMMU.Medium_128K;
+AMMU.mediumPages[3].L1_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.mediumPages[3].L1_posted = AMMU.PostedPolicy_POSTED;
+AMMU.mediumPages[3].L1_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.mediumPages[3].L1_writePolicy = AMMU.WritePolicy_WRITE_BACK;
+AMMU.mediumPages[3].L2_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.mediumPages[3].L2_posted = AMMU.PostedPolicy_POSTED;
+AMMU.mediumPages[3].L2_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.mediumPages[3].L2_writePolicy = AMMU.WritePolicy_WRITE_BACK;
+
+/* config medium page[4] to map 1MB VA 0x10900000 to 0x109FFFFF */
+/* SL2 Locked Region */
+AMMU.mediumPages[4].pageEnabled = AMMU.Enable_YES;
+AMMU.mediumPages[4].logicalAddress = 0x10900000;
+AMMU.mediumPages[4].size = AMMU.Medium_1M;
+AMMU.mediumPages[4].L1_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.mediumPages[4].L1_posted = AMMU.PostedPolicy_POSTED;
+AMMU.mediumPages[4].L1_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.mediumPages[4].L1_writePolicy = AMMU.WritePolicy_WRITE_THROUGH;
+AMMU.mediumPages[4].L2_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.mediumPages[4].L2_posted = AMMU.PostedPolicy_POSTED;
+AMMU.mediumPages[4].L2_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.mediumPages[4].L2_writePolicy = AMMU.WritePolicy_WRITE_BACK;
+
+/* config medium page[5] to map 1MB VA 0x10d00000 to 0x10dFFFFF */
+/* ABE */
+AMMU.mediumPages[5].pageEnabled = AMMU.Enable_YES;
+AMMU.mediumPages[5].logicalAddress = 0x10d00000;
+AMMU.mediumPages[5].size = AMMU.Medium_1M;
+AMMU.mediumPages[5].L1_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.mediumPages[5].L1_posted = AMMU.PostedPolicy_POSTED;
+AMMU.mediumPages[5].L1_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.mediumPages[5].L1_writePolicy = AMMU.WritePolicy_WRITE_BACK;
+AMMU.mediumPages[5].L2_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.mediumPages[5].L2_posted = AMMU.PostedPolicy_POSTED;
+AMMU.mediumPages[5].L2_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.mediumPages[5].L2_writePolicy = AMMU.WritePolicy_WRITE_BACK;
+
+/* config medium page[6] to map 1MB VA 0x10e00000 to 0x10eFFFFF */
+/* ABE Locked Region */
+AMMU.mediumPages[6].pageEnabled = AMMU.Enable_YES;
+AMMU.mediumPages[6].logicalAddress = 0x10e00000;
+AMMU.mediumPages[6].size = AMMU.Medium_1M;
+AMMU.mediumPages[6].L1_cacheable = AMMU.CachePolicy_NON_CACHEABLE;
+AMMU.mediumPages[6].L1_posted = AMMU.PostedPolicy_NON_POSTED;
+AMMU.mediumPages[6].L1_allocate = AMMU.AllocatePolicy_NON_ALLOCATE;
+AMMU.mediumPages[6].L1_writePolicy = AMMU.WritePolicy_WRITE_THROUGH;
+AMMU.mediumPages[6].L2_cacheable = AMMU.CachePolicy_NON_CACHEABLE;
+AMMU.mediumPages[6].L2_posted = AMMU.PostedPolicy_NON_POSTED;
+AMMU.mediumPages[6].L2_allocate = AMMU.AllocatePolicy_NON_ALLOCATE;
+AMMU.mediumPages[6].L2_writePolicy = AMMU.WritePolicy_WRITE_THROUGH;
+
+/*********************** Large Pages *************************/
+/* Instruction Code: Large page  (512M); cacheable, posted */
+/* config large page[0] to map 512MB VA 0x20000000 to L3 0x3FFFFFFF */
+AMMU.largePages[0].pageEnabled = AMMU.Enable_YES;
+AMMU.largePages[0].logicalAddress = 0x20000000;
+AMMU.largePages[0].size = AMMU.Large_512M;
+AMMU.largePages[0].L1_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.largePages[0].L1_posted = AMMU.PostedPolicy_POSTED;
+AMMU.largePages[0].L1_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.largePages[0].L1_writePolicy = AMMU.WritePolicy_WRITE_THROUGH;
+AMMU.largePages[0].L2_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.largePages[0].L2_posted = AMMU.PostedPolicy_POSTED;
+AMMU.largePages[0].L2_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.largePages[0].L2_writePolicy = AMMU.WritePolicy_WRITE_THROUGH;
+
+/* Peripheral regions: Large Page (512M); non-cacheable, posted */
+/* config large page[1] to map 512MB VA 0x40000000 to L3 0x5FFFFFFF */
+AMMU.largePages[1].pageEnabled = AMMU.Enable_YES;
+AMMU.largePages[1].logicalAddress = 0x40000000;
+AMMU.largePages[1].size = AMMU.Large_512M;
+AMMU.largePages[1].L1_cacheable = AMMU.CachePolicy_NON_CACHEABLE;
+AMMU.largePages[1].L1_posted = AMMU.PostedPolicy_POSTED;
+AMMU.largePages[1].L1_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.largePages[1].L1_writePolicy = AMMU.WritePolicy_WRITE_THROUGH;
+AMMU.largePages[1].L2_cacheable = AMMU.CachePolicy_NON_CACHEABLE;
+AMMU.largePages[1].L2_posted = AMMU.PostedPolicy_POSTED;
+AMMU.largePages[1].L2_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.largePages[1].L2_writePolicy = AMMU.WritePolicy_WRITE_THROUGH;
+
+/* TILER region: Large Page (512M); cacheable, posted */
+/* config large page[2] to map 512MB VA 0x60000000 to L3 0x7FFFFFFF */
+AMMU.largePages[2].pageEnabled = AMMU.Enable_YES;
+AMMU.largePages[2].logicalAddress = 0x60000000;
+AMMU.largePages[2].size = AMMU.Large_512M;
+AMMU.largePages[2].L1_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.largePages[2].L1_posted = AMMU.PostedPolicy_POSTED;
+AMMU.largePages[2].L1_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.largePages[2].L1_writePolicy = AMMU.WritePolicy_WRITE_THROUGH;
+AMMU.largePages[2].L2_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.largePages[2].L2_posted = AMMU.PostedPolicy_POSTED;
+AMMU.largePages[2].L2_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.largePages[2].L2_writePolicy = AMMU.WritePolicy_WRITE_THROUGH;
+
+/* Private and Heap Data regions: Large page (512M); cacheable, posted */
+/* config large page[2] to map 512MB VA 0x80000000 to L3 0x9FFFFFFF */
+AMMU.largePages[3].pageEnabled = AMMU.Enable_YES;
+AMMU.largePages[3].logicalAddress = 0x80000000;
+AMMU.largePages[3].size = AMMU.Large_512M;
+AMMU.largePages[3].L1_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.largePages[3].L1_posted = AMMU.PostedPolicy_POSTED;
+AMMU.largePages[3].L1_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.largePages[3].L1_writePolicy = AMMU.WritePolicy_WRITE_THROUGH;
+AMMU.largePages[3].L2_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.largePages[3].L2_posted = AMMU.PostedPolicy_POSTED;
+AMMU.largePages[3].L2_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.largePages[3].L2_writePolicy = AMMU.WritePolicy_WRITE_THROUGH;
+
+/* IPC region: Large Page (512M); non-cacheable, posted */
+/* config large page[3] to map 512MB VA 0xA0000000 to L3 0xBFFFFFFF */
+AMMU.largePages[4].pageEnabled = AMMU.Enable_YES;
+AMMU.largePages[4].logicalAddress = 0xA0000000;
+AMMU.largePages[4].size = AMMU.Large_512M;
+AMMU.largePages[4].L1_cacheable = AMMU.CachePolicy_NON_CACHEABLE;
+AMMU.largePages[4].L1_posted = AMMU.PostedPolicy_POSTED;
+AMMU.largePages[4].L1_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.largePages[4].L1_writePolicy = AMMU.WritePolicy_WRITE_THROUGH;
+AMMU.largePages[4].L2_cacheable = AMMU.CachePolicy_NON_CACHEABLE;
+AMMU.largePages[4].L2_posted = AMMU.PostedPolicy_POSTED;
+AMMU.largePages[4].L2_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.largePages[4].L2_writePolicy = AMMU.WritePolicy_WRITE_THROUGH;
diff --git a/packages/ti/configs/omap54xx/IpcCommon.cfg.xs b/packages/ti/configs/omap54xx/IpcCommon.cfg.xs
new file mode 100644 (file)
index 0000000..afbc64f
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ *  The SysMin used here vs StdMin, as trace buffer address is required for
+ *  Linux trace debug driver, plus provides better performance.
+ */
+var System      = xdc.useModule('xdc.runtime.System');
+var SysMin      = xdc.useModule('ti.trace.SysMin');
+System.SupportProxy = SysMin;
+SysMin.bufSize  = 0x8000;
+
+/* Define default memory heap properties */
+var Memory      = xdc.useModule('xdc.runtime.Memory');
+Memory.defaultHeapSize = 0x20000;
+
+/* Modules used in the virtqueue/MessageQCopy/ServiceMgr libraries: */
+var Semaphore   = xdc.useModule('ti.sysbios.knl.Semaphore');
+var BIOS        = xdc.useModule('ti.sysbios.BIOS');
+
+/* Reduces code size, by only pulling in modules explicitly referenced: */
+BIOS.libType    = BIOS.LibType_Custom;
+
+xdc.loadPackage('ti.ipc.rpmsg');
+xdc.loadPackage('ti.ipc.family.omap54xx');
+
+/* TBD:
+xdc.loadPackage('ti.srvmgr');
+xdc.useModule('ti.srvmgr.omx.OmxSrvMgr');
+xdc.loadPackage('ti.resmgr');
+*/
+
+/* Enable Memory Translation module that operates on the BIOS Resource Table */
+var Resource = xdc.useModule('ti.ipc.remoteproc.Resource');
+
+var HeapBuf   = xdc.useModule('ti.sysbios.heaps.HeapBuf');
+var List      = xdc.useModule('ti.sdo.utils.List');
+
+/* ti.grcm Configuration */
+/* TBD:
+var rcmSettings = xdc.useModule('ti.grcm.Settings');
+rcmSettings.ipc = rcmSettings.IpcSupport_ti_sdo_ipc;
+xdc.useModule('ti.grcm.RcmServer');
+*/
+xdc.useModule('ti.sysbios.xdcruntime.GateThreadSupport');
+var GateSwi   = xdc.useModule('ti.sysbios.gates.GateSwi');
+
+var Task          = xdc.useModule('ti.sysbios.knl.Task');
+Task.common$.namedInstance = true;
+
+var Assert = xdc.useModule('xdc.runtime.Assert');
+var Defaults = xdc.useModule('xdc.runtime.Defaults');
+var Diags = xdc.useModule('xdc.runtime.Diags');
+var LoggerSys = xdc.useModule('xdc.runtime.LoggerSys');
+var LoggerSysParams = new LoggerSys.Params();
+
+/* Enable Logger: */
+Defaults.common$.logger = LoggerSys.create(LoggerSysParams);
+
+/* Enable runtime Diags_setMask() for non-XDC spec'd modules: */
+var Text = xdc.useModule('xdc.runtime.Text');
+Text.isLoaded = true;
+var Registry = xdc.useModule('xdc.runtime.Registry');
+Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
+Registry.common$.diags_USER1 = Diags.ALWAYS_ON;
+Registry.common$.diags_INFO  = Diags.ALWAYS_ON;
+Registry.common$.diags_LIFECYCLE = Diags.ALWAYS_ON;
+Registry.common$.diags_STATUS = Diags.ALWAYS_ON;
+Diags.setMaskEnabled = true;
+
+var Main = xdc.useModule('xdc.runtime.Main');
+Main.common$.diags_ASSERT = Diags.ALWAYS_ON;
+Main.common$.diags_INTERNAL = Diags.ALWAYS_ON;
+
+var Hwi = xdc.useModule('ti.sysbios.family.arm.m3.Hwi');
+//TBD: var Deh = xdc.useModule('ti.deh.Deh');
+Hwi.enableException = true;
+Hwi.nvicCCR.DIV_0_TRP = 1;
+
+/* Include stack debug helper */
+/* TBD:
+var StackDbg = xdc.useModule('ti.trace.StackDbg');
+*/
+
+var dmTimer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer');
+/* dmTimer 0 mapped to GPT3 */
+dmTimer.timerSettings[0].baseAddr = 0xA8034000;
+/* dmTimer 1 mapped to GPT4 */
+dmTimer.timerSettings[1].baseAddr = 0xA8036000;
+/* dmTimer 2 mapped to GPT9 */
+dmTimer.timerSettings[2].baseAddr = 0xA803E000;
+/* dmTimer 3 mapped to GPT11 */
+dmTimer.timerSettings[3].baseAddr = 0xA8088000;
+
+/* Skip the Timer frequency verification check. Need to remove this later */
+dmTimer.checkFrequency = false;
+
+/* Match this to the SYS_CLK frequency sourcing the dmTimers.
+ * Not needed once the SYS/BIOS family settings is updated. */
+dmTimer.intFreq.hi = 0;
+dmTimer.intFreq.lo = 19200000;
+
+/* Override the internal sysTick timer with dmTimer for Bios Timer */
+var halTimer = xdc.useModule('ti.sysbios.hal.Timer');
+halTimer.TimerProxy = dmTimer;
+
+/* Version module */
+/* ???
+xdc.useModule('ti.utils.Version');
+*/
diff --git a/packages/ti/configs/omap54xx/IpuAmmu.cfg b/packages/ti/configs/omap54xx/IpuAmmu.cfg
new file mode 100644 (file)
index 0000000..c753c4c
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* -------------------------------- Cache ----------------------------------*/
+var Cache = xdc.useModule('ti.sysbios.hal.unicache.Cache');
+Cache.enableCache = true;
+
+/* -------------------------------- AMMU -----------------------------------*/
+var AMMU = xdc.useModule('ti.sysbios.hal.ammu.AMMU');
+/*********************** Small Pages *************************/
+/* smallPages[0] & smallPages[1] are auto-programmed by h/w */
+
+/* Overwrite smallPage[1] so that 16K is covered. H/w reset value configures
+ * only 4K */
+AMMU.smallPages[1].pageEnabled = AMMU.Enable_YES;
+AMMU.smallPages[1].logicalAddress = 0x40000000;
+AMMU.smallPages[1].translatedAddress = 0x55080000;
+AMMU.smallPages[1].translationEnabled = AMMU.Enable_YES;
+AMMU.smallPages[1].size = AMMU.Small_16K;
+
+/* L2RAM: 64K mapped using 4 smallPages(16K); cacheable; translated */
+/* config small page[2] to map 16K VA 0x20000000 to PA 0x55020000  */
+AMMU.smallPages[2].pageEnabled = AMMU.Enable_YES;
+AMMU.smallPages[2].logicalAddress = 0x20000000;
+AMMU.smallPages[2].translatedAddress = 0x55020000;
+AMMU.smallPages[2].translationEnabled = AMMU.Enable_YES;
+AMMU.smallPages[2].L1_writePolicy = AMMU.WritePolicy_WRITE_BACK;
+AMMU.smallPages[2].L1_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.smallPages[2].L1_posted = AMMU.PostedPolicy_POSTED;
+AMMU.smallPages[2].L1_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.smallPages[2].size = AMMU.Small_16K;
+
+/* config small page[3] to map 16K VA 0x20004000 to PA 0x55024000 */
+AMMU.smallPages[3].pageEnabled = AMMU.Enable_YES;
+AMMU.smallPages[3].logicalAddress = 0x20004000;
+AMMU.smallPages[3].translatedAddress = 0x55024000;
+AMMU.smallPages[3].translationEnabled = AMMU.Enable_YES;
+AMMU.smallPages[3].L1_writePolicy = AMMU.WritePolicy_WRITE_BACK;
+AMMU.smallPages[3].L1_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.smallPages[3].L1_posted = AMMU.PostedPolicy_POSTED;
+AMMU.smallPages[3].L1_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.smallPages[3].size = AMMU.Small_16K;
+
+/* config small page[4] to map 16K VA 0x20008000 to PA 0x55028000 */
+AMMU.smallPages[4].pageEnabled = AMMU.Enable_YES;
+AMMU.smallPages[4].logicalAddress = 0x20008000;
+AMMU.smallPages[4].translatedAddress = 0x55028000;
+AMMU.smallPages[4].translationEnabled = AMMU.Enable_YES;
+AMMU.smallPages[4].L1_writePolicy = AMMU.WritePolicy_WRITE_BACK;
+AMMU.smallPages[4].L1_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.smallPages[4].L1_posted = AMMU.PostedPolicy_POSTED;
+AMMU.smallPages[4].L1_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.smallPages[4].size = AMMU.Small_16K;
+
+/* config small page[5] to map 16K VA 0x2000C000 to PA 0x5502C000 */
+AMMU.smallPages[5].pageEnabled = AMMU.Enable_YES;
+AMMU.smallPages[5].logicalAddress = 0x2000C000;
+AMMU.smallPages[5].translatedAddress = 0x5502C000;
+AMMU.smallPages[5].translationEnabled = AMMU.Enable_YES;
+AMMU.smallPages[5].L1_writePolicy = AMMU.WritePolicy_WRITE_BACK;
+AMMU.smallPages[5].L1_allocate = AMMU.AllocatePolicy_ALLOCATE;
+AMMU.smallPages[5].L1_posted = AMMU.PostedPolicy_POSTED;
+AMMU.smallPages[5].L1_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.smallPages[5].size = AMMU.Small_16K;
+
+/* ISS: Use 4 small pages(3 4K and 1 16K) for various ISP registers; non-cacheable; translated */
+/* config small page[6] to map 16K VA 0x50000000 to PA 0x55040000 */
+/* non cacheable by default */
+AMMU.smallPages[6].pageEnabled = AMMU.Enable_YES;
+AMMU.smallPages[6].logicalAddress = 0x50000000;
+AMMU.smallPages[6].translatedAddress = 0x55040000;
+AMMU.smallPages[6].translationEnabled = AMMU.Enable_YES;
+AMMU.smallPages[6].size = AMMU.Small_16K;
+
+/* config small page[7] to map 4K VA 0x50010000 to PA 0x55050000 */
+/* non cacheable by default */
+AMMU.smallPages[7].pageEnabled = AMMU.Enable_YES;
+AMMU.smallPages[7].logicalAddress = 0x50010000;
+AMMU.smallPages[7].translatedAddress = 0x55050000;
+AMMU.smallPages[7].translationEnabled = AMMU.Enable_YES;
+AMMU.smallPages[7].size = AMMU.Small_4K;
+
+/* config small page[8] to map 4K VA 0x50011000 to PA 0x55051000 */
+/* non cacheable by default */
+AMMU.smallPages[8].pageEnabled = AMMU.Enable_YES;
+AMMU.smallPages[8].logicalAddress = 0x50011000;
+AMMU.smallPages[8].translatedAddress = 0x55051000;
+AMMU.smallPages[8].translationEnabled = AMMU.Enable_YES;
+AMMU.smallPages[8].size = AMMU.Small_4K;
+
+/* config small page[9] to map 4K VA 0x50020000 to PA 0x55060000 */
+/* non cacheable by default */
+AMMU.smallPages[9].pageEnabled = AMMU.Enable_YES;
+AMMU.smallPages[9].logicalAddress = 0x50020000;
+AMMU.smallPages[9].translatedAddress = 0x55060000;
+AMMU.smallPages[9].translationEnabled = AMMU.Enable_YES;
+AMMU.smallPages[9].size = AMMU.Small_4K;
+
+
+/*********************** Medium Pages *************************/
+/* ISS: The entire ISS register space using a medium page (256K); cacheable; translated */
+/* config medium page[0] to map 256K VA 0x50000000 to PA 0x55040000 */
+/* Make it L1 cacheable */
+AMMU.mediumPages[0].pageEnabled = AMMU.Enable_YES;
+AMMU.mediumPages[0].logicalAddress = 0x50000000;
+AMMU.mediumPages[0].translatedAddress = 0x55040000;
+AMMU.mediumPages[0].translationEnabled = AMMU.Enable_YES;
+AMMU.mediumPages[0].size = AMMU.Medium_256K;
+AMMU.mediumPages[0].L1_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.mediumPages[0].L1_posted = AMMU.PostedPolicy_POSTED;
+
+
+/*********************** Large Pages *************************/
+/* Instruction Code: Large page  (512M); cacheable */
+/* config large page[0] to map 512MB VA 0x0 to L3 0x0 */
+AMMU.largePages[0].pageEnabled = AMMU.Enable_YES;
+AMMU.largePages[0].logicalAddress = 0x0;
+AMMU.largePages[0].translationEnabled = AMMU.Enable_NO;
+AMMU.largePages[0].size = AMMU.Large_512M;
+AMMU.largePages[0].L1_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.largePages[0].L1_posted = AMMU.PostedPolicy_POSTED;
+
+/* TILER & DMM regions: Large page (512M); cacheable */
+/* config large page[1] to map 512MB VA 0x60000000 to L3 0x60000000 */
+AMMU.largePages[1].pageEnabled = AMMU.Enable_YES;
+AMMU.largePages[1].logicalAddress = 0x60000000;
+AMMU.largePages[1].translationEnabled = AMMU.Enable_NO;
+AMMU.largePages[1].size = AMMU.Large_512M;
+AMMU.largePages[1].L1_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.largePages[1].L1_posted = AMMU.PostedPolicy_POSTED;
+
+/* Private, Shared and IPC Data regions: Large page (512M); cacheable */
+/* config large page[2] to map 512MB VA 0x80000000 to L3 0x80000000 */
+AMMU.largePages[2].pageEnabled = AMMU.Enable_YES;
+AMMU.largePages[2].logicalAddress = 0x80000000;
+AMMU.largePages[2].translationEnabled = AMMU.Enable_NO;
+AMMU.largePages[2].size = AMMU.Large_512M;
+AMMU.largePages[2].L1_cacheable = AMMU.CachePolicy_CACHEABLE;
+AMMU.largePages[2].L1_posted = AMMU.PostedPolicy_POSTED;
+
+/* Peripheral regions: Large Page (512M); non-cacheable, non-posted */
+/* config large page[3] to map 512MB VA 0xA0000000 to L3 0xA0000000 */
+AMMU.largePages[3].pageEnabled = AMMU.Enable_YES;
+AMMU.largePages[3].logicalAddress = 0xA0000000;
+AMMU.largePages[3].translationEnabled = AMMU.Enable_NO;
+AMMU.largePages[3].size = AMMU.Large_512M;
+AMMU.largePages[3].L1_cacheable = AMMU.CachePolicy_NON_CACHEABLE;
diff --git a/packages/ti/configs/omap54xx/IpuCore0.cfg b/packages/ti/configs/omap54xx/IpuCore0.cfg
new file mode 100644 (file)
index 0000000..242e992
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* -------------------------------- CORE0 ----------------------------------*/
+var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
+MultiProc.setConfig("CORE0", ["HOST", "CORE0", "CORE1", "DSP"]);
+
+/* Required to run BIOS on SysM3 (core 0) */
+var Core = xdc.useModule('ti.sysbios.family.arm.ducati.Core');
+Core.id = 0;
+
+/* ----------------------------- TICK ---------------------------------------*/
+var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+Clock.tickSource = Clock.TickSource_USER;
+/* Configure GPTimer3 as BIOS clock source */
+Clock.timerId = 0;
+
+var Timer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer');
+var timerParams = new Timer.Params();
+timerParams.period = Clock.tickPeriod;
+timerParams.periodType = Timer.PeriodType_MICROSECS;
+/* Smart-idle wake-up-capable mode */
+timerParams.tiocpCfg.idlemode = 0x3;
+/* Wake-up generation for Overflow */
+timerParams.twer.ovf_wup_ena = 0x1;
+Timer.create(Clock.timerId, Clock.doTick, timerParams);
+
+/* Modules used in Power Management */
+xdc.loadPackage('ti.pm');
+var Power = xdc.useModule('ti.sysbios.family.arm.ducati.omap4430.Power');
+Power.loadSegment = "PM_DATA";
+
+/* Idle functions - PM functions should be last */
+var Idle = xdc.useModule('ti.sysbios.knl.Idle');
+Idle.addFunc('&VirtQueue_cacheWb');    /* Function to flush unicache in idle */
+Idle.addFunc('&ti_deh_Deh_idleBegin'); /* Watchdog detect idle function */
+Idle.addFunc('&IpcPower_idle');        /* IpcPower_idle must be at the end */
+
+/*
+ * These lines coerce BIOS into creating a unique interrupt vector table for
+ * each core. Core 0's interrupt vector table is placed at 0x400, Core 1's
+ * is placed at 0x800.
+ *
+ * Additionally, because both sections (.vecs AND .resetVecs) are placed at
+ * the same address, BIOS will NOT generate a vector table that gets placed
+ * at location 0.
+ *
+ * A common vector table that gets placed at address 0 is being inserted into
+ * the load image by the script that combines the two M3 programs into a
+ * single load image.
+ */
+Program.sectMap[".resetVecs"].loadAddress = (Core.id + 1) * 0x400;
+Program.sectMap[".vecs"].loadAddress      = (Core.id + 1) * 0x400;
+
+Program.sectMap[".tracebuf"] = "TRACE_BUF";
+Program.sectMap[".errorbuf"] = "EXC_DATA";
+
+/*
+ * Add support for offloading algorithms.
+ * The section is placed at an unused address in the common segment.
+ */
+Program.sectMap[".interm3offload"] = new Program.SectionSpec();
+Program.sectMap[".interm3offload"].loadAddress = 0x2000;
diff --git a/packages/ti/configs/omap54xx/IpuCore1.cfg b/packages/ti/configs/omap54xx/IpuCore1.cfg
new file mode 100644 (file)
index 0000000..77a1f11
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* -------------------------------- CORE1 ----------------------------------*/
+var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
+MultiProc.setConfig("CORE1", ["HOST", "CORE0", "CORE1", "DSP"]);
+
+/* Required to run BIOS on AppM3 (core 1) */
+var Core = xdc.useModule('ti.sysbios.family.arm.ducati.Core');
+Core.id = 1;
+
+/* ----------------------------- TICK ---------------------------------------*/
+var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+Clock.tickSource = Clock.TickSource_USER;
+/* Configure GPTimer4 as BIOS clock source */
+Clock.timerId = 1;
+
+var Timer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer');
+var timerParams = new Timer.Params();
+timerParams.period = Clock.tickPeriod;
+timerParams.periodType = Timer.PeriodType_MICROSECS;
+/* Smart-idle wake-up-capable mode */
+timerParams.tiocpCfg.idlemode = 0x3;
+/* Wake-up generation for Overflow */
+timerParams.twer.ovf_wup_ena = 0x1;
+Timer.create(Clock.timerId, Clock.doTick, timerParams);
+
+/* Modules used in Power Management */
+xdc.loadPackage('ti.pm');
+var Power = xdc.useModule('ti.sysbios.family.arm.ducati.omap4430.Power');
+Power.loadSegment = "PM_DATA";
+
+/* Idle functions - PM functions should be last */
+var Idle = xdc.useModule('ti.sysbios.knl.Idle');
+Idle.addFunc('&VirtQueue_cacheWb');    /* Function to flush unicache in idle */
+Idle.addFunc('&ti_deh_Deh_idleBegin'); /* Watchdog detect idle function */
+Idle.addFunc('&IpcPower_idle');        /* IpcPower_idle must be at the end */
+
+/*
+ * These lines coerce BIOS into creating a unique interrupt vector table for
+ * each core. Core 0's interrupt vector table is placed at 0x400, Core 1's
+ * is placed at 0x800.
+ *
+ * Additionally, because both sections (.vecs AND .resetVecs) are placed at
+ * the same address, BIOS will NOT generate a vector table that gets placed
+ * at location 0.
+ *
+ * A common vector table that gets placed at address 0 is being inserted into
+ * the load image by the script that combines the two M3 programs into a
+ * single load image.
+ */
+Program.sectMap[".resetVecs"].loadAddress = (Core.id + 1) * 0x400;
+Program.sectMap[".vecs"].loadAddress      = (Core.id + 1) * 0x400;
+
+Program.sectMap[".tracebuf"] = "TRACE_BUF";
+Program.sectMap[".errorbuf"] = "EXC_DATA";
+
+/*
+ * Add support for offloading algorithms.
+ * The section is placed at an unused address in the common segment.
+ */
+Program.sectMap[".interm3offload"] = new Program.SectionSpec();
+Program.sectMap[".interm3offload"].loadAddress = 0x2000;
diff --git a/packages/ti/configs/omap54xx/IpuSmp.cfg b/packages/ti/configs/omap54xx/IpuSmp.cfg
new file mode 100644 (file)
index 0000000..0f6a4de
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Configure BIOS for SMP-mode */
+var BIOS = xdc.useModule('ti.sysbios.BIOS');
+BIOS.smpEnabled = true;
+
+/* -------------------------------- CORE0 ----------------------------------*/
+var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
+MultiProc.setConfig("CORE0", ["HOST", "CORE0", "CORE1", "DSP"]);
+
+/* ----------------------------- TICK ---------------------------------------*/
+var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+Clock.tickSource = Clock.TickSource_USER;
+/* Configure GPTimer3 as BIOS clock source */
+Clock.timerId = 0;
+
+var Timer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer');
+var timerParams = new Timer.Params();
+timerParams.period = Clock.tickPeriod;
+timerParams.periodType = Timer.PeriodType_MICROSECS;
+/* Smart-idle wake-up-capable mode */
+timerParams.tiocpCfg.idlemode = 0x3;
+/* Wake-up generation for Overflow */
+timerParams.twer.ovf_wup_ena = 0x1;
+Timer.create(Clock.timerId, Clock.doTick, timerParams);
+
+/* Modules used in Power Management */
+xdc.loadPackage('ti.pm');
+var Power = xdc.useModule('ti.sysbios.family.arm.ducati.smp.Power');
+Power.loadSegment = "PM_DATA";
+
+/* Idle functions - PM functions should be last */
+var Idle = xdc.useModule('ti.sysbios.knl.Idle');
+/* Function to flush unicache in each core */
+Idle.addCoreFunc('&VirtQueue_cacheWb', 0);
+Idle.addCoreFunc('&VirtQueue_cacheWb', 1);
+
+/* Watchdog detection functions in each core */
+/* TBD: DEH not taken from omapzoom yet:
+Idle.addCoreFunc('&ti_deh_Deh_idleBegin', 0);
+Idle.addCoreFunc('&ti_deh_Deh_idleBegin', 1);
+*/
+
+/* Idle Power Management functions for each core */
+Idle.addCoreFunc('&IpcPower_idle', 0);
+Idle.addCoreFunc('&IpcPower_idle', 1);
+
+Program.sectMap[".tracebuf"] = "TRACE_BUF";
+Program.sectMap[".errorbuf"] = "EXC_DATA";
diff --git a/packages/ti/configs/omap54xx/package.bld b/packages/ti/configs/omap54xx/package.bld
new file mode 100644 (file)
index 0000000..f6f6754
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/*!
+ * File generated by platform wizard.
+ *
+ */
+
+Pkg.attrs.exportAll = true;
diff --git a/packages/ti/configs/omap54xx/package.xdc b/packages/ti/configs/omap54xx/package.xdc
new file mode 100644 (file)
index 0000000..3bc1fcd
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/*
+ *  ======== package.xdc ========
+ *
+ */
+
+/*!
+ *  ======== ti.configs.omap54xx ========
+ *  Common config files.
+ *
+ */
+
+package ti.configs.omap54xx [1,0,0] {
+}
diff --git a/packages/ti/grcm/RcmClient.c b/packages/ti/grcm/RcmClient.c
new file mode 100644 (file)
index 0000000..1b38969
--- /dev/null
@@ -0,0 +1,1663 @@
+/*
+ * Copyright (c) 2011-2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ *  ======== RcmClient.c ========
+ */
+
+/* this define must precede inclusion of any xdc header file */
+#define Registry_CURDESC ti_rcm_RcmClient__Desc
+#define MODULE_NAME "ti.rcm.RcmClient"
+
+#define xdc_runtime_Memory__nolocalnames  /* short name clashes with SysLink */
+
+/* rtsc header files */
+#include <xdc/std.h>
+#include <xdc/runtime/Assert.h>
+#include <xdc/runtime/Diags.h>
+#include <xdc/runtime/Error.h>
+#include <xdc/runtime/IHeap.h>
+#include <xdc/runtime/Log.h>
+#include <xdc/runtime/Memory.h>
+#include <xdc/runtime/Registry.h>
+#include <xdc/runtime/Startup.h>
+#include <xdc/runtime/knl/GateThread.h>
+#include <xdc/runtime/knl/Semaphore.h>
+#include <xdc/runtime/knl/SemThread.h>
+#include <xdc/runtime/knl/SyncSemThread.h>
+#include <xdc/runtime/knl/ISemaphore.h>
+
+/* package header files */
+#include <ti/ipc/MessageQ.h>
+
+#if defined(RCM_ti_ipc)
+#include <ti/sdo/utils/List.h>
+
+#elif defined(RCM_ti_syslink)
+#include <ti/syslink/utils/List.h>
+
+#else
+    #error "undefined ipc binding"
+#endif
+
+/* local header files */
+#include <ti/rcm/RcmServer.h>
+#include "RcmTypes.h"
+#include "RcmClient.h"
+
+/* recipient list element structure */
+typedef struct {
+    List_Elem elem;
+    UInt16 msgId;
+    RcmClient_Message *msg;
+    SemThread_Struct event;
+} Recipient;
+
+typedef struct RcmClient_Object_tag {
+    GateThread_Struct   gate;           // instance gate
+    MessageQ_Handle     msgQue;         // message queue
+    MessageQ_Handle     errorMsgQue;    // error message queue
+    UInt16              heapId;         // heap used for message allocation
+    Ptr                 sync;           // synchronizer for message queue
+    UInt32              serverMsgQ;     // server message queue
+    Bool                cbNotify;       // callback notification
+    UInt16              msgId;          // last used message id
+    ISemaphore_Handle   mbxLock;        // mailbox lock
+    ISemaphore_Handle   queueLock;      // message queue lock
+    List_Handle         recipients;     // list of waiting recipients
+    List_Handle         newMail;        // list of undelivered messages
+} RcmClient_Object;
+
+typedef struct RcmClient_Module_tag {
+    String              name;
+    Bits16              id;
+    Bits16              diagsMask;
+    IHeap_Handle        heap;
+} RcmClient_Module;
+
+/* private functions */
+static
+UInt16 RcmClient_genMsgId_P(
+        RcmClient_Object *      obj
+    );
+
+static inline
+RcmClient_Packet *RcmClient_getPacketAddr_P(
+        RcmClient_Message *     msg
+    );
+
+static inline
+RcmClient_Packet *getPacketAddrMsgqMsg(
+        MessageQ_Msg            msg
+    );
+
+static inline
+RcmClient_Packet *getPacketAddrElem(
+        List_Elem *             elem
+    );
+
+static Int RcmClient_getReturnMsg_P(
+        RcmClient_Object *      obj,
+        const UInt16            msgId,
+        RcmClient_Message **    returnMsg
+    );
+
+static
+Int RcmClient_Instance_init(
+        RcmClient_Object *              obj,
+        String                          server,
+        const RcmClient_Params *        params
+    );
+
+static
+Int RcmClient_Instance_finalize(
+        RcmClient_Object *      obj
+    );
+
+
+#define RcmClient_Module_heap() (RcmClient_Mod.heap)
+
+/* static objects */
+static Int curInit = 0;
+
+static RcmClient_Module RcmClient_Mod = {
+    "ti.rcm.RcmClient",     /* name */
+    (Bits16)0,                  /* id */
+    (Bits16)0,                  /* diagsMask */
+    (IHeap_Handle)NULL          /* heap */
+};
+
+/* module diags mask */
+Registry_Desc Registry_CURDESC;
+
+
+/*
+ *  ======== RcmClient_init ========
+ *
+ *  This function *must* be serialized by the caller
+ */
+Void RcmClient_init(Void)
+{
+    Registry_Result result;
+
+
+    if (curInit++ != 0) {
+        return; /* module already initialized */
+    }
+
+    /* register with xdc.runtime to get a diags mask */
+    result = Registry_addModule(&Registry_CURDESC, MODULE_NAME);
+    Assert_isTrue(result == Registry_SUCCESS, (Assert_Id)NULL);
+
+    /* the size of object and struct must be the same */
+    Assert_isTrue(sizeof(RcmClient_Object) == sizeof(RcmClient_Struct), NULL);
+}
+
+
+/*
+ *  ======== RcmClient_exit ========
+ *
+ *  This function *must* be serialized by the caller
+ */
+Void RcmClient_exit(Void)
+{
+//  Registry_Result result;
+
+
+    if (--curInit != 0) {
+        return; /* module still in use */
+    }
+
+    /* unregister from xdc.runtime */
+//  result = Registry_removeModule(MODULE_NAME);
+//  Assert_isTrue(result == Registry_SUCCESS, (Assert_Id)NULL);
+}
+
+
+/*
+ *  ======== RcmClient_Params_init ========
+ */
+Void RcmClient_Params_init(RcmClient_Params *params)
+{
+    params->heapId = RcmClient_INVALIDHEAPID;
+    params->callbackNotification = FALSE;
+}
+
+
+/*
+ *  ======== RcmClient_create ========
+ */
+#define FXNN "RcmClient_create"
+Int RcmClient_create(String server, const RcmClient_Params *params,
+        RcmClient_Handle *handle)
+{
+    RcmClient_Object *obj;
+    Error_Block eb;
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print1(Diags_ENTRY, "--> %s: ()", (IArg)FXNN);
+
+    /* initialize the error block */
+    Error_init(&eb);
+    *handle = (RcmClient_Handle)NULL;
+
+    /* TODO: add check that params was initialized correctly */
+
+    /* allocate the object */
+    obj = (RcmClient_Handle)xdc_runtime_Memory_calloc(RcmClient_Module_heap(),
+        sizeof(RcmClient_Object), sizeof(Int), &eb);
+
+    if (NULL == obj) {
+        Log_error2(FXNN": out of memory: heap=0x%x, size=%u",
+            (IArg)RcmClient_Module_heap(), sizeof(RcmClient_Object));
+        status = RcmClient_E_NOMEMORY;
+        goto leave;
+    }
+
+    Log_print1(Diags_LIFECYCLE, FXNN": instance create: 0x%x", (IArg)obj);
+
+    /* object-specific initialization */
+    status = RcmClient_Instance_init(obj, server, params);
+
+    if (status < 0) {
+        RcmClient_Instance_finalize(obj);
+        xdc_runtime_Memory_free(RcmClient_Module_heap(),
+            (Ptr)obj, sizeof(RcmClient_Object));
+        goto leave;
+    }
+
+    /* success, return opaque pointer */
+    *handle = (RcmClient_Handle)obj;
+
+
+leave:
+    Log_print2(Diags_EXIT, "<-- %s: %d", (IArg)FXNN, (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_construct ========
+ */
+#define FXNN "RcmClient_construct"
+Int RcmClient_construct(RcmClient_Struct *structPtr, String server,
+    const RcmClient_Params *params)
+{
+    RcmClient_Object *obj = (RcmClient_Object*)structPtr;
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print1(Diags_ENTRY, "--> %s: ()", (IArg)FXNN);
+
+    /* TODO: add check that params was initialized correctly */
+
+    Log_print1(Diags_LIFECYCLE, FXNN": instance construct: 0x%x", (IArg)obj);
+
+    /* ensure the constructed object is zeroed */
+    _memset((Void *)obj, 0, sizeof(RcmClient_Object));
+
+    /* object-specific initialization */
+    status = RcmClient_Instance_init(obj, server, params);
+
+    if (status < 0) {
+        RcmClient_Instance_finalize(obj);
+        goto leave;
+    }
+
+
+leave:
+    Log_print2(Diags_EXIT, "<-- %s: %d", (IArg)FXNN, (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_Instance_init ========
+ */
+#define FXNN "RcmClient_Instance_init"
+Int RcmClient_Instance_init(RcmClient_Object *obj, String server,
+        const RcmClient_Params *params)
+{
+    Error_Block eb;
+    MessageQ_Params mqParams;
+    SyncSemThread_Params syncParams;
+    SemThread_Params semParams;
+    SemThread_Handle semHndl;
+    List_Params listP;
+    Int rval;
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print2(Diags_ENTRY, "--> %s: (obj=0x%x)", (IArg)FXNN, (IArg)obj);
+
+    /* must initialize error block */
+    Error_init(&eb);
+
+    /* initialize instance data */
+    obj->msgId = 0xFFFF;
+    obj->sync = NULL;
+    obj->serverMsgQ = MessageQ_INVALIDMESSAGEQ;
+    obj->msgQue = NULL;
+    obj->errorMsgQue = NULL;
+    obj->mbxLock = NULL;
+    obj->queueLock = NULL;
+    obj->recipients = NULL;
+    obj->newMail = NULL;
+
+    /* create the instance gate */
+    GateThread_construct(&obj->gate, NULL, &eb);
+
+    if (Error_check(&eb)) {
+        Log_error0(FXNN": could not create gate object");
+        status = RcmClient_E_FAIL;
+        goto leave;
+    }
+
+    /* create a synchronizer for the message queue */
+    SyncSemThread_Params_init(&syncParams);
+    obj->sync = SyncSemThread_create(&syncParams, &eb);
+
+    if (Error_check(&eb)) {
+        status = RcmClient_E_FAIL;
+        goto leave;
+    }
+
+    /* create the message queue for return messages */
+    MessageQ_Params_init(&mqParams);
+    obj->msgQue = MessageQ_create(NULL, &mqParams);
+
+    if (obj->msgQue == NULL) {
+        Log_error0(FXNN": could not create return message queue");
+        status = RcmClient_E_MSGQCREATEFAILED;
+        goto leave;
+    }
+
+    /* create the message queue for error messages */
+    MessageQ_Params_init(&mqParams);
+    obj->errorMsgQue = MessageQ_create(NULL, &mqParams);
+
+    if (NULL == obj->errorMsgQue) {
+        Log_error0(FXNN": could not create error message queue");
+        status = RcmClient_E_MSGQCREATEFAILED;
+        goto leave;
+    }
+
+    /* locate server message queue */
+    rval = MessageQ_open(server, (MessageQ_QueueId *)(&obj->serverMsgQ));
+
+    if (MessageQ_E_NOTFOUND == rval) {
+        Log_error1(FXNN": given server not found, server=0x%x", (IArg)server);
+        status = RcmClient_E_SERVERNOTFOUND;
+        goto leave;
+    }
+    else if (status < 0) {
+        Log_error1(FXNN": could not open server message queue, server=0x%x",
+            (IArg)server);
+        status = RcmClient_E_MSGQOPENFAILED;
+        goto leave;
+    }
+
+    /* create callback server */
+    if ((obj->cbNotify = params->callbackNotification)) {
+        /* TODO create callback server thread */
+        /* make sure to free resources acquired by thread */
+        Error_raise(&eb, Error_E_generic, "Not Implemented", 0);
+        goto leave;
+    }
+
+    /* register the heapId used for message allocation */
+    if ((obj->heapId = params->heapId) == RcmClient_INVALIDHEAPID) {
+        Log_error0(FXNN": must specify a heap id in create params");
+        status = RcmClient_E_INVALIDHEAPID;
+        goto leave;
+    }
+
+    /* create the mailbox lock */
+    SemThread_Params_init(&semParams);
+    semHndl = SemThread_create(1, &semParams, &eb);
+    if (Error_check(&eb)) {
+        status = RcmClient_E_FAIL;
+        goto leave;
+    }
+    obj->mbxLock = SemThread_Handle_upCast(semHndl);
+
+    /* create the message queue lock */
+    SemThread_Params_init(&semParams);
+    semHndl = SemThread_create(1, &semParams, &eb);
+    if (Error_check(&eb)) {
+        status = RcmClient_E_FAIL;
+        goto leave;
+    }
+    obj->queueLock = SemThread_Handle_upCast(semHndl);
+
+    /* create the return message recipient list */
+#if defined(RCM_ti_ipc)
+    List_Params_init(&listP);
+    obj->recipients = List_create(&listP, &eb);
+
+    if (Error_check(&eb)) {
+        Log_error0(FXNN": could not create list object");
+        status = RcmClient_E_LISTCREATEFAILED;
+        goto leave;
+    }
+#elif defined(RCM_ti_syslink)
+    List_Params_init(&listP);
+    obj->recipients = List_create(&listP, NULL);
+
+    if (NULL == obj->recipients) {
+        Log_error0(FXNN": could not create list object");
+        status = RcmClient_E_LISTCREATEFAILED;
+        goto leave;
+    }
+#endif
+
+    /* create list of undelivered messages (new mail) */
+#if defined(RCM_ti_ipc)
+    List_Params_init(&listP);
+    obj->newMail = List_create(&listP, &eb);
+
+    if (Error_check(&eb)) {
+        Log_error0(FXNN": could not create list object");
+        status = RcmClient_E_LISTCREATEFAILED;
+        goto leave;
+    }
+#elif defined(RCM_ti_syslink)
+    List_Params_init(&listP);
+    obj->newMail = List_create(&listP, NULL);
+
+    if (NULL == obj->newMail) {
+        Log_error0(FXNN": could not create list object");
+        status = RcmClient_E_LISTCREATEFAILED;
+        goto leave;
+    }
+#endif
+
+leave:
+    Log_print2(Diags_EXIT, "<-- %s: %d", (IArg)FXNN, (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_delete ========
+ */
+#define FXNN "RcmClient_delete"
+Int RcmClient_delete(RcmClient_Handle *handlePtr)
+{
+    RcmClient_Object *obj = (RcmClient_Object *)(*handlePtr);
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print1(Diags_ENTRY, "--> %s: ()", (IArg)FXNN);
+
+    /* finalize the object */
+    status = RcmClient_Instance_finalize(obj);
+
+    /* free the object memory */
+    Log_print1(Diags_LIFECYCLE, FXNN": instance delete: 0x%x", (IArg)obj);
+
+    xdc_runtime_Memory_free(RcmClient_Module_heap(),
+        (Ptr)obj, sizeof(RcmClient_Object));
+    *handlePtr = NULL;
+
+    Log_print2(Diags_EXIT, "<-- %s: %d", (IArg)FXNN, (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_destruct ========
+ */
+#define FXNN "RcmClient_destruct"
+Int RcmClient_destruct(RcmClient_Struct *structPtr)
+{
+    RcmClient_Object *obj = (RcmClient_Object *)(structPtr);
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print1(Diags_ENTRY, "--> %s: ()", (IArg)FXNN);
+    Log_print1(Diags_LIFECYCLE, FXNN": instance destruct: 0x%x", (IArg)obj);
+
+    /* finalize the object */
+    status = RcmClient_Instance_finalize(obj);
+
+    Log_print2(Diags_EXIT, "<-- %s: %d", (IArg)FXNN, (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_Instance_finalize ========
+ */
+#define FXNN "RcmClient_Instance_finalize"
+Int RcmClient_Instance_finalize(RcmClient_Object *obj)
+{
+    SemThread_Handle semH;
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print1(Diags_ENTRY, "--> "FXNN": (obj=0x%x)", (IArg)obj);
+
+    if (NULL != obj->newMail) {
+        List_delete(&obj->newMail);
+    }
+
+    if (NULL != obj->recipients) {
+        List_delete(&obj->recipients);
+    }
+
+    if (NULL != obj->queueLock) {
+        semH = SemThread_Handle_downCast(obj->queueLock);
+        SemThread_delete(&semH);
+        obj->queueLock = NULL;
+    }
+
+    if (NULL != obj->mbxLock) {
+        semH = SemThread_Handle_downCast(obj->mbxLock);
+        SemThread_delete(&semH);
+        obj->mbxLock = NULL;
+    }
+
+    if (MessageQ_INVALIDMESSAGEQ != obj->serverMsgQ) {
+        MessageQ_close((MessageQ_QueueId *)(&obj->serverMsgQ));
+    }
+
+    if (NULL != obj->errorMsgQue) {
+        MessageQ_delete(&obj->errorMsgQue);
+    }
+
+    if (NULL != obj->msgQue) {
+        MessageQ_delete(&obj->msgQue);
+    }
+
+    if (NULL != obj->sync) {
+        SyncSemThread_delete((SyncSemThread_Handle *)(&obj->sync));
+    }
+
+    /* destruct the instance gate */
+    GateThread_destruct(&obj->gate);
+
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_acquireJobId ========
+ */
+#define FXNN "RcmClient_acquireJobId"
+Int RcmClient_acquireJobId(RcmClient_Object *obj, UInt16 *jobIdPtr)
+{
+    RcmClient_Message *msg;
+    RcmClient_Packet *packet;
+    MessageQ_Msg msgqMsg;
+    UInt16 msgId;
+    Int rval;
+    UInt16 serverStatus;
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print2(Diags_ENTRY,
+        "--> "FXNN": (obj=0x%x, jobIdPtr=0x%x)", (IArg)obj, (IArg)jobIdPtr);
+
+    /* allocate a message */
+    status = RcmClient_alloc(obj, sizeof(UInt16), &msg);
+
+    if (status < 0) {
+        goto leave;
+    }
+
+    /* classify this message */
+    packet = RcmClient_getPacketAddr_P(msg);
+    packet->desc |= RcmClient_Desc_JOB_ACQ << RcmClient_Desc_TYPE_SHIFT;
+    msgId = packet->msgId;
+
+    /* set the return address to this instance's message queue */
+    msgqMsg = (MessageQ_Msg)packet;
+    MessageQ_setReplyQueue(obj->msgQue, msgqMsg);
+
+    /* send the message to the server */
+    rval = MessageQ_put((MessageQ_QueueId)obj->serverMsgQ, msgqMsg);
+
+    if (rval < 0) {
+        Log_error0(FXNN": unable to the send message to the server");
+        status = RcmClient_E_FAIL;
+        goto leave;
+    }
+
+    /* get the return message from the server */
+    status = RcmClient_getReturnMsg_P(obj, msgId, &msg);
+
+    if (status < 0) {
+        goto leave;
+    }
+
+    /* check message status for error */
+    packet = RcmClient_getPacketAddr_P(msg);
+    serverStatus = (RcmClient_Desc_TYPE_MASK & packet->desc) >>
+            RcmClient_Desc_TYPE_SHIFT;
+
+    switch (serverStatus) {
+        case RcmServer_Status_SUCCESS:
+            break;
+
+        default:
+            Log_error1(FXNN": server returned error %d", (IArg)serverStatus);
+            status = RcmClient_E_SERVERERROR;
+            goto leave;
+    }
+
+    /* extract return value */
+    *jobIdPtr = (UInt16)(msg->data[0]);
+
+
+leave:
+    if (msg != NULL) {
+        RcmClient_free(obj, msg);
+    }
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_addSymbol ========
+ */
+#define FXNN "RcmClient_addSymbol"
+Int RcmClient_addSymbol(RcmClient_Object *obj, String name,
+        Fxn address, UInt32 *index)
+{
+//  Int status = RcmClient_S_SUCCESS;
+    Int status = RcmClient_E_FAIL;
+
+
+    Log_print2(Diags_ENTRY, "--> %s: (obj=0x%x)", (IArg)FXNN, (IArg)obj);
+
+    /* TODO */
+
+    Log_print2(Diags_EXIT, "<-- %s: %d", (IArg)FXNN, (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_alloc ========
+ */
+#define FXNN "RcmClient_alloc"
+Int RcmClient_alloc(RcmClient_Object *obj, UInt32 dataSize,
+    RcmClient_Message **message)
+{
+    SizeT totalSize;
+    RcmClient_Packet *packet;
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print3(Diags_ENTRY,
+        "--> RcmClient_alloc: obj: 0x%x, dataSize: %d, message: 0x%x",
+        (IArg)obj, (IArg)dataSize, (IArg)message);
+
+    /* ensure minimum size of UInt32[1] */
+    dataSize  = (dataSize < sizeof(UInt32) ? sizeof(UInt32) : dataSize);
+
+    /* total memory size (in chars) needed for headers and payload */
+    totalSize = sizeof(RcmClient_Packet) - sizeof(UInt32) + dataSize;
+
+    /* allocate the message */
+    packet = (RcmClient_Packet*)MessageQ_alloc(obj->heapId, totalSize);
+
+    if (NULL == packet) {
+        Log_error1(FXNN": could not allocate message, size = %u",
+            (IArg)totalSize);
+        status = RcmClient_E_MSGALLOCFAILED;
+        goto leave;
+    }
+
+    /* Log_info() */
+    Log_print2(Diags_INFO,
+        FXNN": RcmMessage allocated: addr=0x%x, size=%u (total size)",
+        (IArg)packet, (IArg)totalSize);
+
+    /* initialize the packet structure */
+    packet->desc = 0;
+    packet->msgId = RcmClient_genMsgId_P(obj);
+    packet->message.poolId = RcmClient_DEFAULTPOOLID;
+    packet->message.jobId = RcmClient_DISCRETEJOBID;
+    packet->message.fxnIdx = RcmClient_INVALIDFXNIDX;
+    packet->message.result = 0;
+    packet->message.dataSize = dataSize;
+
+    /* set message pointer to start of the message struct */
+    *message = (RcmClient_Message *)(&(packet->message));
+
+
+leave:
+    Log_print2(Diags_EXIT, "<-- %s: %d", (IArg)FXNN, (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_checkForError ========
+ *  If success, no message will be returned. If error message returned,
+ *  then function return value will always be < 0.
+ *
+ *  status      msgPtr
+ *  --------------------
+ *  success     null (always)
+ *  < 0         null (internal error)
+ *  < 0         msg  (error message returned)
+ */
+#define FXNN "RcmClient_checkForError"
+Int RcmClient_checkForError(RcmClient_Object *obj, RcmClient_Message **rtnMsg)
+{
+    RcmClient_Message *rcmMsg;
+    RcmClient_Packet *packet;
+    MessageQ_Msg msgqMsg;
+    UInt16 serverStatus;
+    Int rval;
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print1(Diags_ENTRY,
+        "--> "FXNN": (obj=0x%x, rtnMsg=0x%x)", (IArg)rtnMsg);
+
+    *rtnMsg = NULL;
+
+    /* get error message if available (non-blocking) */
+    rval = MessageQ_get(obj->errorMsgQue, &msgqMsg, 0);
+
+    if ((MessageQ_E_TIMEOUT != rval) && (rval < 0)) {
+        Log_error1(FXNN": MessageQ_get() returned error %d", (IArg)rval);
+        status = RcmClient_E_IPCERROR;
+        goto leave;
+    }
+    else if (msgqMsg == NULL) {
+        goto leave;
+    }
+
+    /* received an error message */
+    packet = getPacketAddrMsgqMsg(msgqMsg);
+    rcmMsg = &packet->message;
+    *rtnMsg = rcmMsg;
+
+    /* check the server status stored in the packet header */
+    serverStatus = (RcmClient_Desc_TYPE_MASK & packet->desc) >>
+            RcmClient_Desc_TYPE_SHIFT;
+
+    switch (serverStatus) {
+        case RcmServer_Status_JobNotFound:
+            Log_error1(FXNN": job id=%d not found", (IArg)rcmMsg->jobId);
+            break;
+
+        case RcmServer_Status_PoolNotFound:
+            Log_error1(FXNN": pool id=0x%x not found", (IArg)rcmMsg->poolId);
+            break;
+
+        case RcmServer_Status_INVALID_FXN:
+            Log_error1(FXNN": invalid function index: 0x%x",
+                (IArg)rcmMsg->fxnIdx);
+            status = RcmClient_E_INVALIDFXNIDX;
+            break;
+
+        case RcmServer_Status_MSG_FXN_ERR:
+            Log_error1(FXNN": message function error %d", (IArg)rcmMsg->result);
+            status = RcmClient_E_MSGFXNERROR;
+            break;
+
+        default:
+            Log_error1(FXNN": server returned error %d", (IArg)serverStatus);
+            status = RcmClient_E_SERVERERROR;
+            goto leave;
+    }
+
+
+leave:
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_exec ========
+ */
+#define FXNN "RcmClient_exec"
+Int RcmClient_exec(RcmClient_Object *obj,
+        RcmClient_Message *cmdMsg, RcmClient_Message **returnMsg)
+{
+    RcmClient_Packet *packet;
+    RcmClient_Message *rtnMsg;
+    MessageQ_Msg msgqMsg;
+    UInt16 msgId;
+    UInt16 serverStatus;
+    Int rval;
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print2(Diags_ENTRY,
+        "--> "FXNN": (cmdMsg=0x%x, rtnMsg=0x%x)", (IArg)obj, (IArg)returnMsg);
+
+    /* classify this message */
+    packet = RcmClient_getPacketAddr_P(cmdMsg);
+    packet->desc |= RcmClient_Desc_RCM_MSG << RcmClient_Desc_TYPE_SHIFT;
+    msgId = packet->msgId;
+
+    /* set the return address to this instance's message queue */
+    msgqMsg = (MessageQ_Msg)packet;
+    MessageQ_setReplyQueue(obj->msgQue, msgqMsg);
+
+    /* send the message to the server */
+    status = MessageQ_put((MessageQ_QueueId)obj->serverMsgQ, msgqMsg);
+
+    if (status < 0) {
+        Log_error0(FXNN": unable to the send message to the server");
+        status = RcmClient_E_EXECFAILED;
+        goto leave;
+    }
+
+    /* get the return message from the server */
+    rval = RcmClient_getReturnMsg_P(obj, msgId, &rtnMsg);
+
+    if (rval < 0) {
+        *returnMsg = NULL;
+        status = rval;
+        goto leave;
+    }
+    *returnMsg = rtnMsg;
+
+    /* check the server's status stored in the packet header */
+    packet = RcmClient_getPacketAddr_P(rtnMsg);
+    serverStatus = (RcmClient_Desc_TYPE_MASK & packet->desc) >>
+            RcmClient_Desc_TYPE_SHIFT;
+
+    switch (serverStatus) {
+        case RcmServer_Status_SUCCESS:
+            break;
+
+        case RcmServer_Status_INVALID_FXN:
+            Log_error1(FXNN": invalid function index: 0x%x",
+                (IArg)rtnMsg->fxnIdx);
+            status = RcmClient_E_INVALIDFXNIDX;
+            goto leave;
+
+        case RcmServer_Status_MSG_FXN_ERR:
+            Log_error1(FXNN": message function error %d", (IArg)rtnMsg->result);
+            status = RcmClient_E_MSGFXNERROR;
+            goto leave;
+
+        default:
+            Log_error1(FXNN": server returned error %d", (IArg)serverStatus);
+            status = RcmClient_E_SERVERERROR;
+            goto leave;
+    }
+
+leave:
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_execAsync ========
+ */
+#define FXNN "RcmClient_execAsync"
+Int RcmClient_execAsync(RcmClient_Object *obj, RcmClient_Message *cmdMsg,
+    RcmClient_CallbackFxn callback, Ptr appData)
+{
+    RcmClient_Packet *packet;
+    MessageQ_Msg msgqMsg;
+    Int rval;
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print3(Diags_ENTRY,
+        "--> %s: 0x%x, 0x%x", (IArg)FXNN, (IArg)obj, (IArg)cmdMsg);
+
+    /* cannot use this function if callback notification is false */
+    if (!obj->cbNotify) {
+        Log_error0(FXNN": asynchronous notification not enabled");
+        status = RcmClient_E_EXECASYNCNOTENABLED;
+        goto leave;
+    }
+
+    /* classify this message */
+    packet = RcmClient_getPacketAddr_P(cmdMsg);
+    packet->desc |= RcmClient_Desc_RCM_MSG << RcmClient_Desc_TYPE_SHIFT;
+
+    /* set the return address to this instance's message queue */
+    msgqMsg = (MessageQ_Msg)packet;
+    MessageQ_setReplyQueue(obj->msgQue, msgqMsg);
+
+    /* send the message to the server */
+    rval = MessageQ_put((MessageQ_QueueId)obj->serverMsgQ, msgqMsg);
+
+    if (rval < 0) {
+        Log_error0(FXNN": unable to the send message to the server");
+        status = RcmClient_E_EXECFAILED;
+        goto leave;
+    }
+
+    /* TODO finish this function */
+
+leave:
+    Log_print2(Diags_EXIT, "<-- %s: %d", (IArg)FXNN, (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_execCmd ========
+ */
+#define FXNN "RcmClient_execCmd"
+Int RcmClient_execCmd(RcmClient_Object *obj, RcmClient_Message *msg)
+{
+    RcmClient_Packet *packet;
+    MessageQ_Msg msgqMsg;
+    Int rval;
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print2(Diags_ENTRY | Diags_INFO,
+        "--> "FXNN": (obj=0x%x, msg=0x%x)", (IArg)obj, (IArg)msg);
+
+    /* classify this message */
+    packet = RcmClient_getPacketAddr_P(msg);
+    packet->desc |= RcmClient_Desc_CMD << RcmClient_Desc_TYPE_SHIFT;
+
+    /* set the return address to the error message queue */
+    msgqMsg = (MessageQ_Msg)packet;
+    MessageQ_setReplyQueue(obj->errorMsgQue, msgqMsg);
+
+    /* send the message to the server */
+    rval = MessageQ_put((MessageQ_QueueId)obj->serverMsgQ, msgqMsg);
+
+    if (rval < 0) {
+        Log_error0(FXNN": unable to send message to server");
+        status = RcmClient_E_IPCERROR;
+    }
+
+    Log_print1(Diags_EXIT | Diags_INFO, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_execDpc ========
+ */
+#define FXNN "RcmClient_execDpc"
+Int RcmClient_execDpc(RcmClient_Object *obj,
+    RcmClient_Message *cmdMsg, RcmClient_Message **returnMsg)
+{
+    RcmClient_Packet *packet;
+    RcmClient_Message *rtnMsg;
+    MessageQ_Msg msgqMsg;
+    UInt16 msgId;
+    Int rval;
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print3(Diags_ENTRY,
+        "--> %s: 0x%x, 0x%x", (IArg)FXNN, (IArg)obj, (IArg)returnMsg);
+
+    /* classify this message */
+    packet = RcmClient_getPacketAddr_P(cmdMsg);
+    packet->desc |= RcmClient_Desc_DPC << RcmClient_Desc_TYPE_SHIFT;
+    msgId = packet->msgId;
+
+    /* set the return address to this instance's message queue */
+    msgqMsg = (MessageQ_Msg)packet;
+    MessageQ_setReplyQueue(obj->msgQue, msgqMsg);
+
+    /* send the message to the server */
+    rval = MessageQ_put((MessageQ_QueueId)obj->serverMsgQ, msgqMsg);
+
+    if (rval < 0) {
+        /* Log_error() */
+        Log_error0(FXNN": unable to the send message to the server");
+        status = RcmClient_E_EXECFAILED;
+        goto leave;
+    }
+
+    /* get the return message from the server */
+    rval = RcmClient_getReturnMsg_P(obj, msgId, &rtnMsg);
+
+    if (rval < 0) {
+        *returnMsg = NULL;
+        status = rval;
+        goto leave;
+    }
+    *returnMsg = rtnMsg;
+
+
+leave:
+    Log_print2(Diags_EXIT, "<-- %s: %d", (IArg)FXNN, (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_execNoWait ========
+ */
+#define FXNN "RcmClient_execNoWait"
+Int RcmClient_execNoWait(RcmClient_Object *obj, RcmClient_Message *cmdMsg,
+    UInt16 *msgId)
+{
+    RcmClient_Packet *packet;
+    MessageQ_Msg msgqMsg;
+    Int rval;
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print4(Diags_ENTRY,
+        "--> %s: 0x%x, 0x%x, 0x%x",
+        (IArg)FXNN, (IArg)obj, (IArg)cmdMsg, (IArg)msgId);
+
+    /* classify this message */
+    packet = RcmClient_getPacketAddr_P(cmdMsg);
+    packet->desc |= RcmClient_Desc_RCM_MSG << RcmClient_Desc_TYPE_SHIFT;
+    *msgId = packet->msgId;
+
+    /* set the return address to this instance's message queue */
+    msgqMsg = (MessageQ_Msg)packet;
+    MessageQ_setReplyQueue(obj->msgQue, msgqMsg);
+
+    /* send the message to the server */
+    Log_print1(Diags_ANALYSIS, "%s: >>> MessageQ_put", (IArg)FXNN);
+    rval = MessageQ_put((MessageQ_QueueId)obj->serverMsgQ, msgqMsg);
+    Log_print1(Diags_ANALYSIS, "%s: <<< MessageQ_put", (IArg)FXNN);
+
+    if (rval < 0) {
+        *msgId = RcmClient_INVALIDMSGID;
+        Log_error0(FXNN": unable to the send message to the server");
+        status = RcmClient_E_EXECFAILED;
+        goto leave;
+    }
+
+leave:
+    Log_print2(Diags_EXIT, "<-- %s: %d", (IArg)FXNN, (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_free ========
+ */
+#define FXNN "RcmClient_free"
+Int RcmClient_free(RcmClient_Object *obj, RcmClient_Message *msg)
+{
+    Int rval;
+    MessageQ_Msg msgqMsg;
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print2(Diags_ENTRY,
+        "--> "FXNN": (obj=0x%x, msg=0x%x)", (IArg)obj, (IArg)msg);
+
+    msgqMsg = (MessageQ_Msg)RcmClient_getPacketAddr_P(msg);
+    rval = MessageQ_free(msgqMsg);
+
+    if (rval < 0) {
+        Log_error1(FXNN": ipc returned error %d", (IArg)rval);
+        status = RcmClient_E_IPCERROR;
+        goto leave;
+    }
+
+
+leave:
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_getSymbolIndex ========
+ */
+#define FXNN "RcmClient_getSymbolIndex"
+Int RcmClient_getSymbolIndex(RcmClient_Object *obj, String name, UInt32 *index)
+{
+    SizeT len;
+    RcmClient_Packet *packet;
+    UInt16 msgId;
+    MessageQ_Msg msgqMsg;
+    Int rval;
+    UInt16 serverStatus;
+    RcmClient_Message *rcmMsg = NULL;
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print3(Diags_ENTRY,
+        "--> "FXNN": (obj=0x%x, name=0x%x, index=0x%x",
+        (IArg)obj, (IArg)name, (IArg)index);
+
+    /* allocate a message */
+    len = _strlen(name) + 1;
+    rval = RcmClient_alloc(obj, len, &rcmMsg);
+
+    if (rval < 0) {
+        status = rval;
+        goto leave;
+    }
+
+    /* copy the function name into the message payload */
+    rcmMsg->dataSize = len;  //TODO this is not proper!
+    _strcpy((Char *)rcmMsg->data, name);
+
+    /* classify this message */
+    packet = RcmClient_getPacketAddr_P(rcmMsg);
+    packet->desc |= RcmClient_Desc_SYM_IDX << RcmClient_Desc_TYPE_SHIFT;
+    msgId = packet->msgId;
+
+    /* set the return address to this instance's message queue */
+    msgqMsg = (MessageQ_Msg)packet;
+    MessageQ_setReplyQueue(obj->msgQue, msgqMsg);
+
+    /* send the message to the server */
+    rval = MessageQ_put((MessageQ_QueueId)obj->serverMsgQ, msgqMsg);
+
+    if (rval < 0) {
+        Log_error0(FXNN": unable to the send message to the server");
+        status = RcmClient_E_EXECFAILED;
+        goto leave;
+    }
+
+    /* get the return message from the server */
+    rval = RcmClient_getReturnMsg_P(obj, msgId, &rcmMsg);
+
+    if (rval < 0) {
+        status = rval;
+        goto leave;
+    }
+
+    /* check message status for error */
+    packet = RcmClient_getPacketAddr_P(rcmMsg);
+    serverStatus = (RcmClient_Desc_TYPE_MASK & packet->desc) >>
+            RcmClient_Desc_TYPE_SHIFT;
+
+    switch (serverStatus) {
+        case RcmServer_Status_SUCCESS:
+            break;
+
+        case RcmServer_Status_SYMBOL_NOT_FOUND:
+            Log_error1(FXNN": symbol not found, name=0x%x", (IArg)name);
+            status = RcmClient_E_SYMBOLNOTFOUND;
+            goto leave;
+
+        default:
+            Log_error1(FXNN": server returned error %d", (IArg)serverStatus);
+            status = RcmClient_E_SERVERERROR;
+            goto leave;
+    }
+
+    /* extract return value */
+    *index = rcmMsg->data[0];
+
+
+leave:
+    if (rcmMsg != NULL) {
+        RcmClient_free(obj, rcmMsg);
+    }
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_releaseJobId ========
+ */
+#define FXNN "RcmClient_releaseJobId"
+Int RcmClient_releaseJobId(RcmClient_Object *obj, UInt16 jobId)
+{
+    RcmClient_Message *msg;
+    RcmClient_Packet *packet;
+    MessageQ_Msg msgqMsg;
+    UInt16 msgId;
+    Int rval;
+    UInt16 serverStatus;
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print2(Diags_ENTRY,
+        "--> "FXNN": (obj=0x%x, jobId=0x%x)", (IArg)obj, (IArg)jobId);
+
+    /* allocate a message */
+    status = RcmClient_alloc(obj, sizeof(UInt16), &msg);
+
+    if (status < 0) {
+        goto leave;
+    }
+
+    /* classify this message */
+    packet = RcmClient_getPacketAddr_P(msg);
+    packet->desc |= RcmClient_Desc_JOB_REL << RcmClient_Desc_TYPE_SHIFT;
+    msgId = packet->msgId;
+
+    /* set the return address to this instance's message queue */
+    msgqMsg = (MessageQ_Msg)packet;
+    MessageQ_setReplyQueue(obj->msgQue, msgqMsg);
+
+    /* marshal the job id into the message payload */
+    *(UInt16 *)(&msg->data[0]) = jobId;
+
+    /* send the message to the server */
+    rval = MessageQ_put((MessageQ_QueueId)obj->serverMsgQ, msgqMsg);
+
+    if (rval < 0) {
+        Log_error0(FXNN": unable to the send message to the server");
+        status = RcmClient_E_FAIL;
+        goto leave;
+    }
+
+    /* get the return message from the server */
+    status = RcmClient_getReturnMsg_P(obj, msgId, &msg);
+
+    if (status < 0) {
+        goto leave;
+    }
+
+    /* check message status for error */
+    packet = RcmClient_getPacketAddr_P(msg);
+    serverStatus = (RcmClient_Desc_TYPE_MASK & packet->desc) >>
+            RcmClient_Desc_TYPE_SHIFT;
+
+    switch (serverStatus) {
+        case RcmServer_Status_SUCCESS:
+            break;
+
+        case RcmServer_Status_JobNotFound:
+            Log_error1(FXNN": jobId=%d not found on server", (IArg)jobId);
+            status = RcmClient_E_JOBIDNOTFOUND;
+            break;
+
+        default:
+            Log_error1(FXNN": server returned error %d", (IArg)serverStatus);
+            status = RcmClient_E_SERVERERROR;
+            break;
+    }
+
+
+leave:
+    if (msg != NULL) {
+        RcmClient_free(obj, msg);
+    }
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+
+}
+#undef FXNN
+
+/*
+ *  ======== RcmClient_removeSymbol ========
+ */
+#define FXNN "RcmClient_removeSymbol"
+Int RcmClient_removeSymbol(RcmClient_Object *obj, String name)
+{
+//  Int status = RcmClient_S_SUCCESS;
+    Int status = RcmClient_E_FAIL;
+
+
+    Log_print2(Diags_ENTRY, "--> %s: (obj=0x%x)", (IArg)FXNN, (IArg)obj);
+
+    /* TODO */
+
+    Log_print2(Diags_EXIT, "<-- %s: %d", (IArg)FXNN, (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_waitUntilDone ========
+ */
+#define FXNN "RcmClient_waitUntilDone"
+Int RcmClient_waitUntilDone(RcmClient_Object *obj,
+    UInt16 msgId, RcmClient_Message **returnMsg)
+{
+    RcmClient_Message *rtnMsg;
+    Int rval;
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print4(Diags_ENTRY, "--> %s: (obj=0x%x, msgId=%d, msg=0x%x)",
+        (IArg)FXNN, (IArg)obj, (IArg)msgId, (IArg)returnMsg);
+
+    /* get the return message from the server */
+    rval = RcmClient_getReturnMsg_P(obj, msgId, &rtnMsg);
+
+    if (rval < 0) {
+        *returnMsg = NULL;
+        status = rval;
+        goto leave;
+    }
+    *returnMsg = rtnMsg;
+
+leave:
+    Log_print2(Diags_EXIT, "<-- %s: %d", (IArg)FXNN, (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_genMsgId_P ========
+ */
+UInt16 RcmClient_genMsgId_P(RcmClient_Object *obj)
+{
+    GateThread_Handle gateH;
+    IArg key;
+    UInt16 msgId;
+
+
+    gateH = GateThread_handle(&obj->gate);
+    key = GateThread_enter(gateH);
+
+    msgId = (obj->msgId == 0xFFFF ? obj->msgId = 1 : ++(obj->msgId));
+
+    GateThread_leave(gateH, key);
+
+    return(msgId);
+}
+
+
+/*
+ *  ======== RcmClient_getReturnMsg_P ========
+ *  A thread safe algorithm for message delivery
+ *
+ *  This function is called to pickup a specified return message from
+ *  the server. Messages are taken from the queue and either delivered
+ *  to the mailbox if not the specified message or returned to the caller.
+ *  The calling thread might take the role of mailman or simply wait
+ *  on a list of recipients.
+ *
+ *  This algorithm guarantees that a waiting recipient is released as soon
+ *  as his message arrives. All new unclaimed mail is placed in the mailbox
+ *  until the recipient arrives to collect it. The messages can arrive in
+ *  any order and will be processed as they arrive. Message delivery is never
+ *  stalled waiting on an absent recipient.
+ */
+#define FXNN "RcmClient_getReturnMsg_P"
+Int RcmClient_getReturnMsg_P(RcmClient_Object *obj, const UInt16 msgId,
+    RcmClient_Message **returnMsg)
+{
+    List_Elem *elem;
+    Recipient *recipient;
+    RcmClient_Packet *packet;
+    Bool messageDelivered;
+    MessageQ_Msg msgqMsg = NULL;
+    Bool messageFound = FALSE;
+    Int queueLockAcquired = 0;
+    Error_Block eb;
+    Int rval;
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print3(Diags_ENTRY,
+        "--> "FXNN": (obj=0x%x, msgId=%d, returnMsgPtr=0x%x",
+        (IArg)obj, (IArg)msgId, (IArg)returnMsg);
+
+    Error_init(&eb);
+    *returnMsg = NULL;
+
+    /* keep trying until message found */
+    while (!messageFound) {
+
+        /* acquire the mailbox lock */
+        Semaphore_pend(obj->mbxLock, Semaphore_FOREVER, &eb);
+        if (Error_check(&eb)) {
+            /* TODO */
+            goto leave;
+        }
+
+        /* search new mail list for message */
+        elem = NULL;
+        while ((elem = List_next(obj->newMail, elem)) != NULL) {
+            packet = getPacketAddrElem(elem);
+            if (msgId == packet->msgId) {
+                List_remove(obj->newMail, elem);
+                *returnMsg = &packet->message;
+                messageFound = TRUE;
+                break;
+            }
+        }
+
+        if (messageFound) {
+            /* release the mailbox lock */
+            Semaphore_post(obj->mbxLock, &eb);
+            if (Error_check(&eb)) {
+                /* TODO */
+            }
+        }
+        else {
+            /* attempt the message queue lock */
+            queueLockAcquired = Semaphore_pend(obj->queueLock, 0, &eb);
+            if (Error_check(&eb)) {
+                /* TODO */
+                goto leave;
+            }
+
+            if (1 == queueLockAcquired) {
+                /*
+                 * mailman role
+                 */
+
+                /* deliver new mail until message found */
+                while (!messageFound) {
+
+                    /* get message from queue if available (non-blocking) */
+                    if (NULL == msgqMsg) {
+                        rval = MessageQ_get(obj->msgQue, &msgqMsg, 0);
+
+                        if ((MessageQ_E_TIMEOUT != rval) && (rval < 0)) {
+                            Log_error0(FXNN": lost return message");
+                            status = RcmClient_E_LOSTMSG;
+                            goto leave;
+                        }
+                        Log_print0(Diags_INFO, FXNN": return message received");
+                    }
+
+                    while (NULL != msgqMsg) {
+
+                        /* check if message found */
+                        packet = getPacketAddrMsgqMsg(msgqMsg);
+                        messageFound = (msgId == packet->msgId);
+
+                        if (messageFound) {
+                            *returnMsg = &packet->message;
+
+                            /* search wait list for new mailman */
+                            elem = NULL;
+                            while ((elem =
+                                List_next(obj->recipients, elem)) != NULL) {
+                                recipient = (Recipient *)elem;
+                                if (NULL == recipient->msg) {
+                                    /* signal recipient's event */
+                                    SemThread_post(SemThread_handle(
+                                        &recipient->event), &eb);
+                                    break;
+                                }
+                            }
+
+                            /* release the message queue lock */
+                            Semaphore_post(obj->queueLock, &eb);
+                            if (Error_check(&eb)) {
+                                /* TODO */
+                            }
+
+                            /* release the mailbox lock */
+                            Semaphore_post(obj->mbxLock, &eb);
+                            if (Error_check(&eb)) {
+                                /* TODO */
+                            }
+
+                            break;
+                        }
+                        else {
+                            /*
+                             * deliver message to mailbox
+                             */
+
+                            /* search recipient list for message owner */
+                            elem = NULL;
+                            messageDelivered = FALSE;
+                            while ((elem =
+                                List_next(obj->recipients, elem)) != NULL) {
+                                recipient = (Recipient *)elem;
+                                if (recipient->msgId == packet->msgId) {
+                                    recipient->msg = &packet->message;
+                                    /* signal the recipient's event */
+                                    SemThread_post(SemThread_handle(
+                                        &recipient->event), &eb);
+                                    messageDelivered = TRUE;
+                                    break;
+                                }
+                            }
+
+                            /* add undelivered message to new mail list */
+                            if (!messageDelivered) {
+                                /* use the elem in the MessageQ header */
+                                elem = (List_Elem *)&packet->msgqHeader;
+                                List_put(obj->newMail, elem);
+                            }
+                        }
+
+                        /* get next message from queue if available */
+                        rval = MessageQ_get(obj->msgQue, &msgqMsg, 0);
+
+                        if ((MessageQ_E_TIMEOUT != rval) && (rval < 0)) {
+                            Log_error0(FXNN": lost return message");
+                            status = RcmClient_E_LOSTMSG;
+                            goto leave;
+                        }
+                        Log_print0(Diags_INFO, FXNN": return message received");
+                    }
+
+                    if (!messageFound) {
+                        /*
+                         * message queue empty
+                         */
+
+                        /* release the mailbox lock */
+                        Semaphore_post(obj->mbxLock, &eb);
+                        if (Error_check(&eb)) {
+                            /* TODO */
+                        }
+
+                        /* get next message, this blocks the thread */
+                        rval = MessageQ_get(obj->msgQue, &msgqMsg,
+                            MessageQ_FOREVER);
+
+                        if (rval < 0) {
+                            Log_error0(FXNN": lost return message");
+                            status = RcmClient_E_LOSTMSG;
+                            goto leave;
+                        }
+                        Log_print0(Diags_INFO, FXNN": return message received");
+
+                        if (msgqMsg == NULL) {
+                            Log_error0(FXNN": reply message has been lost");
+                            status = RcmClient_E_LOSTMSG;
+                            goto leave;
+                        }
+
+                        /* acquire the mailbox lock */
+                        Semaphore_pend(obj->mbxLock, Semaphore_FOREVER, &eb);
+                        if (Error_check(&eb)) {
+                            goto leave;  /* TODO */
+                        }
+                    }
+                }
+            }
+            else {
+                /* construct recipient on local stack */
+                Recipient self;
+                self.msgId = msgId;
+                self.msg = NULL;
+                SemThread_construct(&self.event, 0, NULL, &eb);
+                if (Error_check(&eb)) {
+                    /* TODO */
+                }
+
+                /* add recipient to wait list */
+                elem = &self.elem;
+                List_put(obj->recipients, elem);
+
+                /* release the mailbox lock */
+                Semaphore_post(obj->mbxLock, &eb);
+                if (Error_check(&eb)) {
+                    /* TODO */
+                }
+
+                /* wait on event */
+                SemThread_pend(SemThread_handle(&self.event),
+                    Semaphore_FOREVER, &eb);
+                if (Error_check(&eb)) {
+                    /* TODO */
+                }
+
+                /* acquire the mailbox lock */
+                Semaphore_pend(obj->mbxLock, Semaphore_FOREVER, &eb);
+                if (Error_check(&eb)) {
+                    goto leave;  /* TODO */
+                }
+
+                if (NULL != self.msg) {
+                    /* pickup message */
+                    *returnMsg = self.msg;
+                    messageFound = TRUE;
+                }
+
+                /* remove recipient from wait list */
+                List_remove(obj->recipients, elem);
+                SemThread_destruct(&self.event);
+
+                /* release the mailbox lock */
+                Semaphore_post(obj->mbxLock, &eb);
+                if (Error_check(&eb)) {
+                    /* TODO */
+                }
+            }
+        }
+    } /* while (!messageFound) */
+
+leave:
+    Log_print2(Diags_EXIT, "<-- %s: %d", (IArg)FXNN, (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmClient_getPacketAddr_P ========
+ */
+RcmClient_Packet *RcmClient_getPacketAddr_P(RcmClient_Message *msg)
+{
+    Int offset = (Int)&(((RcmClient_Packet *)0)->message);
+    return ((RcmClient_Packet *)((Char *)msg - offset));
+}
+
+
+/*
+ *  ======== getPacketAddrMsgqMsg ========
+ */
+static inline
+RcmClient_Packet *getPacketAddrMsgqMsg(MessageQ_Msg msg)
+{
+    Int offset = (Int)&(((RcmClient_Packet *)0)->msgqHeader);
+    return ((RcmClient_Packet *)((Char *)msg - offset));
+}
+
+
+/*
+ *  ======== getPacketAddrElem ========
+ */
+static inline
+RcmClient_Packet *getPacketAddrElem(List_Elem *elem)
+{
+    Int offset = (Int)&(((RcmClient_Packet *)0)->msgqHeader);
+    return ((RcmClient_Packet *)((Char *)elem - offset));
+}
diff --git a/packages/ti/grcm/RcmClient.h b/packages/ti/grcm/RcmClient.h
new file mode 100644 (file)
index 0000000..133a10a
--- /dev/null
@@ -0,0 +1,1072 @@
+/*
+ * Copyright (c) 2011-2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+/*
+ *  ======== RcmClient.h ========
+ *
+ */
+
+/*!
+ *  @file ti/grcm/RcmClient.h
+ *
+ *  @brief Remote Command Message Client Module. An RcmClient is used
+ *  for sending messages to an RcmServer for processing.
+ *
+ *  @sa RcmServer.h <br>
+ *  @ref ti_grcm "RCM Overview"
+ */
+
+/*!
+ *  @defgroup ti_grcm_RcmClient RcmClient
+ *
+ *  @brief Remote Command Message Client Module. An RcmClient is used
+ *  for sending messages to an RcmServer for processing.
+ *
+ *  The RcmClient module is used to send messages to an RcmServer for
+ *  processing. An RcmClient instance must be created which will
+ *  communicate with a single RcmServer instance. An RcmServer instance
+ *  can receive messages from many RcmClient instances but an RcmClient
+ *  instance can send messages to only one RcmServer instance.
+ *
+ *  <a name="error_handling"></a><h2>Error Handling</h2>
+ *
+ *  Errors may be raised at various points in the execution flow of a
+ *  single message. These are the types of errors raised by RCM:
+ *  - RCM Errors
+ *  - User Errors
+ *  - Message Function Errors
+ *  - Library Function Errors
+ *
+ *  The following diagram illustrates the call flow and highlights the
+ *  points at which errors can be raised.
+ *
+ *  @image html ti/grcm/doc-files/ExecFlow.png "Diagram 1: Execution Flow"
+ *
+ *  RCM errors are raised by the RCM implementation. For example, when
+ *  calling RcmClient_exec(), it may raise an error if it
+ *  is unable to send the message. This will be reported immediately to
+ *  the caller, the server is never involved. This is highlighted in the
+ *  diagram at point [A].
+ *
+ *  RCM errors may also be raised by the RcmServer. Once RcmClient_exec()
+ *  sends a message, it waits for the return message. When the server
+ *  receives the message, it has to decode its type. If this fails, the
+ *  server records this error in the message and sends it back to the
+ *  client. This is highlighted at point [B] in the diagram. When
+ *  RcmClient_exec() receives the return message, it inspects the status
+ *  field and recognizes the error. It then raises an appropriate error
+ *  to the caller.
+ *
+ *  User errors are raised by RCM as a result of an invalid runtime
+ *  condition. They are typically detected and raised by the server and
+ *  then sent back to the client for processing. For example, when the
+ *  server receives a message, it will lookup the function index in it's
+ *  table and invoke the corresponding message function. If the index is
+ *  invalid, this is detected by the server and reported as an error.
+ *  The message function is never invoked. The message is returned to
+ *  the client and RcmClient_exec() will raise the appropriate error.
+ *  This error is raised at point [B] in the diagram.
+ *
+ *  Message function errors are raised by the message function itself.
+ *  This is highlighted at point [C] in the diagram. In the body of the
+ *  message function, an error is encountered either when calling a
+ *  framework function or when unmarshalling the arguments from the
+ *  message payload. In both cases, the message function will abort and
+ *  return an error value as its return value. The error value must be
+ *  less than zero (< 0). When control returns to the server, it inspects
+ *  the message function's return value. If the message was sent by
+ *  RcmClient_exec(), then the server simply stores the return value in
+ *  the message and returns it to the client. However, if the message was
+ *  send by RcmClient_execCmd(), the behavior is slightly
+ *  different. If the return value is < 0 (error condition), then the
+ *  server behaves the same as for the RcmClient_exec() case. However,
+ *  if there is no error, the server simply frees the message. The message
+ *  is never returned to the client.
+ *
+ *  Library functions errors are raised by the library functions invoked
+ *  by the message function, highlighted at point [D] in the diagram. It
+ *  is the responsibility of the message function to detect a library
+ *  function error and to marshal the appropriate error code into the
+ *  message payload. The message function must also return an error value
+ *  (< 0) so that server can do proper error handing as described
+ *  in the preceeding paragraph. It is the stub function's responsibility
+ *  to unmarshal the error value from the message payload and take the
+ *  appropriate action.
+ *
+ *  Understanding the types of errors raised by RCM and where they are
+ *  raised is important when writing the upper layer software. The following
+ *  code fragment illustrates how to check for the errors discussed above.
+ *  See <a href"#error_handling">Error Handling</a> above.
+ *
+ *  @code
+ *  RcmClient_Message *msg;
+ *
+ *  // send message
+ *  status = RcmClient_exec(h, msg, &msg);
+ *
+ *  // check for error
+ *  switch (status) {
+ *
+ *      case RcmClient_S_SUCCESS:
+ *          // no error, all is well
+ *          break;
+ *
+ *      case RcmClient_E_EXECFAILED:
+ *          // RCM error, unable to send message
+ *          :
+ *          break;
+ *
+ *      case RcmClient_E_INVALIDFXNIDX:
+ *          // user error, bad function index
+ *          :
+ *          break;
+ *
+ *      case RcmClient_E_MSGFXNERROR:
+ *          // decode message function error
+ *          msgFxnErr = msg->result;
+ *          :
+ *          // decode library function error
+ *          libFxnErr = msg->data[0];
+ *          :
+ *          break;
+ *  }
+ *
+ *  // free message if one was returned
+ *  if (msg != NULL) {
+ *      RcmClient_free(h, msg);
+ *      msg = NULL;
+ *  }
+ *  @endcode
+ *
+ *  The upper layer software begins by calling RcmClient_exec()
+ *  to send the message to the server. If RCM encounters a transport error
+ *  and is unable to send the message, an RcmClient_E_EXECFAILED error is
+ *  returned.
+ *
+ *  If the server encounters an error while decoding the message, say an
+ *  invalid function index, the server returns the message and an
+ *  RcmClient_E_INVALIDFXNIDX error is returned.
+ *
+ *  If the message function or the library function encounter an error,
+ *  the message is returned and an RcmClient_E_MSGFXNERROR error is
+ *  returned. The upper layer software must decode the results field to
+ *  see what error the message function returned. If the library function
+ *  returned an error, its error code must be unmarshalled from the payload.
+ *  This is illustrated by decoding the first word in the payload
+ *  (msg->data[0]). The actual marshal format is implementation specific.
+ *
+ *  The message function must return >=0 for success, <0 for error.
+ *  Here is a very simple message function which simply turns on an LED.
+ *
+ *  @code
+ *  Int32 Led_On(UInt32 size, UInt32 *data)
+ *  {
+ *      Ptr led = <addr>;
+ *
+ *      *led = 1;  // turn on LED
+ *      return(0); // success
+ *  }
+ *  @endcode
+ *
+ *  In this example, the message payload is not used. The message function
+ *  does all the work, it just sets a bit in the LED control register, and
+ *  returns success.
+ *
+ *  This next example illustrates a very simple RPC style skel function.
+ *  It unmarshalls two arguments and invokes the libraray function. If the
+ *  library function succeeds, the message function returns 0, otherwise it
+ *  returns -1 to indicate failure. In both cases, the library function's
+ *  return value is marshalled into the payload. The calling stub function
+ *  can umarshal the return value to get the library function's error code.
+ *
+ *  @code
+ *  Int32 MediaSkel_process(UInt32 size, UInt32 *data)
+ *  {
+ *      Int a, b, x;
+ *      Int32 status = 0;  // success
+ *
+ *      // unmarshal args
+ *      a = (Int)data[1];
+ *      b = (Int)data[2];
+ *
+ *      // invoke library function, returns >=0 on success
+ *      x = Media_process(a, b);
+ *
+ *      // marshal return value
+ *      data[0] = (Int32)x;
+ *
+ *      // return status
+ *      return(x >= 0 ? 0 : -1);
+ *  }
+ *  @endcode
+ *
+ *  @sa ti_grcm_RcmServer <br>
+ *  @ref ti_grcm "RCM Overview"
+ */
+
+#ifndef ti_grcm_RcmClient__include
+#define ti_grcm_RcmClient__include
+
+#include <xdc/runtime/knl/GateThread.h>
+
+
+/** @ingroup ti_grcm_RcmClient */
+/*@{*/
+
+#if defined (__cplusplus)
+extern "C" {
+#endif
+
+
+// -------- status codes --------
+
+/*!
+ *  @brief Success return code
+ */
+#define RcmClient_S_SUCCESS (0)
+
+/*!
+ *  @brief General failure return code
+ */
+#define RcmClient_E_FAIL (-1)
+
+/*!
+ *  @brief The client has not been configured for asynchronous notification
+ *
+ *  In order to use the RcmClient_execAsync() function, the RcmClient
+ *  must be configured with callbackNotification set to true in the
+ *  instance create parameters.
+ */
+#define RcmClient_E_EXECASYNCNOTENABLED (-2)
+
+/*!
+ *  @brief The client was unable to send the command message to the server
+ *
+ *  An IPC transport error occurred. The message was never sent to the server.
+ */
+#define RcmClient_E_EXECFAILED (-3)
+
+/*!
+ *  @brief A heap id must be provided in the create params
+ *
+ *  When an RcmClient instance is created, a heap id must be given
+ *  in the create params. This heap id must be registered with MessageQ
+ *  before calling RcmClient_create().
+ */
+#define RcmClient_E_INVALIDHEAPID (-4)
+
+/*!
+ *  @brief Invalid function index
+ *
+ *  An RcmClient_Message was sent to the server which contained a
+ *  function index value (in the fxnIdx field) that was not found
+ *  in the server's function table.
+ */
+#define RcmClient_E_INVALIDFXNIDX (-5)
+
+/*!
+ *  @brief Message function error
+ *
+ *  There was an error encountered in either the message function or
+ *  the library function invoked by the message function. The semantics
+ *  of the error code are implementation dependent.
+ */
+#define RcmClient_E_MSGFXNERROR (-6)
+
+/*!
+ *  @brief An unknown error has been detected from the IPC layer
+ *
+ *  Check the error log for additional information.
+ */
+#define RcmClient_E_IPCERROR (-7)
+
+/*!
+ *  @brief Failed to create the list object
+ */
+#define RcmClient_E_LISTCREATEFAILED (-8)
+
+/*!
+ *  @brief The expected reply message from the server was lost
+ *
+ *  A command message was sent to the RcmServer but the reply
+ *  message was not received. This is an internal error.
+ */
+#define RcmClient_E_LOSTMSG (-9)
+
+/*!
+ *  @brief Insufficient memory to allocate a message
+ *
+ *  The message heap cannot allocate a buffer of the requested size.
+ *  The reported size it the requested data size and the underlying
+ *  message header size.
+ */
+#define RcmClient_E_MSGALLOCFAILED (-10)
+
+/*!
+ *  @brief The client message queue could not be created
+ *
+ *  Each RcmClient instance must create its own message queue for
+ *  receiving return messages from the RcmServer. The creation of
+ *  this message queue failed, thus failing the RcmClient instance
+ *  creation.
+ */
+#define RcmClient_E_MSGQCREATEFAILED (-11)
+
+/*!
+ *  @brief The server message queue could not be opened
+ *
+ *  Each RcmClient instance must open the server's message queue.
+ *  This error is raised when an internal error occurred while trying
+ *  to open the server's message queue.
+ */
+#define RcmClient_E_MSGQOPENFAILED (-12)
+
+/*!
+ *  @brief The server returned an unknown error code
+ *
+ *  The server encountered an error with the given message but
+ *  the error code is not recognized by the client.
+ */
+#define RcmClient_E_SERVERERROR (-13)
+
+/*!
+ *  @brief The server specified in the create params was not found
+ *
+ *  When creating an RcmClient instance, the specified server could not
+ *  be found. This could occur if the server name is incorrect, or
+ *  if the RcmClient instance is created before the RcmServer. In such an
+ *  instance, the client can retry when the RcmServer is expected to
+ *  have been created.
+ */
+#define RcmClient_E_SERVERNOTFOUND (-14)
+
+/*!
+ *  @brief The given symbol was not found in the server symbol table
+ *
+ *  This error could occur if the symbol spelling is incorrect or
+ *  if the RcmServer is still loading its symbol table.
+ */
+#define RcmClient_E_SYMBOLNOTFOUND (-15)
+
+/*!
+ *  @brief There is insufficient memory left in the heap
+ */
+#define RcmClient_E_NOMEMORY (-16)
+
+/*!
+ *  @brief The given job id was not found on the server
+ *
+ *  When releasing a job id with a call to RcmClient_releaseJobId(),
+ *  this error return value indicates that the given job id was not
+ *  previously allocated with a call to RcmClient_acquireJobId().
+ */
+#define RcmClient_E_JOBIDNOTFOUND (-17)
+
+
+// -------- constants and types --------
+
+/*!
+ *  @brief Invalid function index
+ */
+#define RcmClient_INVALIDFXNIDX ((UInt32)(0xFFFFFFFF))
+
+/*!
+ *  @brief Invalid heap id
+ */
+#define RcmClient_INVALIDHEAPID ((UInt16)(0xFFFF))
+
+/*!
+ *  @brief Invalid message id
+ */
+#define RcmClient_INVALIDMSGID (0)
+
+/*!
+ *  @brief Default worker pool id
+ *
+ *  The default worker pool is used to process all anonymous messages.
+ *  When a new message is allocated, the pool id property is
+ *  initialized to this value.
+ */
+#define RcmClient_DEFAULTPOOLID ((UInt16)(0x8000))
+
+/*!
+ *  @brief Invalid job stream id
+ *
+ *  All discrete messages must have their jobId property set to this value.
+ *  When a new message is allocated, the jobId property is initialized tothis value.
+ */
+#define RcmClient_DISCRETEJOBID (0)
+
+/*!
+ *  @brief RcmClient instance object handle
+ */
+typedef struct RcmClient_Object_tag *RcmClient_Handle;
+
+/*!
+ *  @brief Remote Command Message structure
+ *
+ *  An RcmClient needs to fill in this message before sending it
+ *  to the RcmServer for execution.
+ */
+typedef struct {
+    /*!
+     *  @brief The worker pool id that will process this message.
+     *
+     *  The message will be processed by a worker thread from the worker
+     *  pool specified in this field. The default value is the default
+     *  pool id.
+     */
+    UInt16      poolId;
+
+    /*!
+     *  @brief The job id associated with this message.
+     *
+     *  All messages beloging to a job id must have this field set to
+     *  that id. Use the value RcmClient_DISCRETEJOBID if the message
+     *  does not belong to any job.
+     */
+    UInt16      jobId;
+
+    /*!
+     *  @brief The index of the remote function to execute.
+     */
+    UInt32      fxnIdx;
+
+    /*!
+     *  @brief The return value of the remote message function.
+     */
+    Int32       result;
+
+    /*!
+     *  @brief The size of the data buffer (in chars).
+     *
+     *  This field should be considered as read-only. It is set by
+     *  the call to the RcmClient_alloc() function.
+     */
+    UInt32      dataSize;
+
+    /*!
+     *  @brief The data buffer containing the message payload.
+     *
+     *  The size of this field is dataSize chars. The space is allocated
+     *  by the call to the RcmClient_alloc() function.
+     */
+    UInt32      data[1];
+
+} RcmClient_Message;
+
+/*!
+ *  @brief Callback function type
+ *
+ *  When using callback notification, the application must supply a
+ *  callback function of this type. The callback will be invoked with
+ *  the pointer to the RcmClient_Message returned from the server and
+ *  the application data pointer supplied in the call to RcmClient_execAsync().
+ */
+typedef Void (*RcmClient_CallbackFxn)(RcmClient_Message *, Ptr);
+
+/*!
+ *  @brief Instance create parameters
+ */
+typedef struct {
+    /*!
+     *  @brief The heapId used by this instance for allocating messages
+     *
+     *  If sending messages to a remote server, the specified heap must
+     *  be compatible with the transport used for delivering messages
+     *  to the remote processor.
+     */
+    UInt16 heapId;
+
+    /*!
+     *  @brief Asynchronous callback notification support
+     *
+     *  When remote functions submitted with RcmClient_execAsync()
+     *  complete, the given callback function is invoked. The callback
+     *  function executes in the context of this RcmClient instance's
+     *  callback server thread.
+     *
+     *  This config param must be set to true when using RcmClient_execAsync()
+     *  to execute remote functions.
+     *
+     *  When set to false, the callback server thread is not created.
+     */
+    Bool callbackNotification;
+
+} RcmClient_Params;
+
+/*!
+ *  @brief Opaque client structure large enough to hold an instance object
+ *
+ *  Use this structure to define an embedded RcmClient object.
+ *
+ *  @sa RcmClient_construct
+ */
+typedef struct {
+    xdc_runtime_knl_GateThread_Struct   _f1;
+    Ptr                 _f2;
+    Ptr                 _f3;
+    UInt16              _f4;
+    Ptr                 _f5;
+    UInt32              _f6;
+    Bool                _f7;
+    UInt16              _f8;
+    Ptr                 _f9;
+    Ptr                 _f10;
+    Ptr                 _f11;
+    Ptr                 _f12;
+} RcmClient_Struct;
+
+
+// -------- functions --------
+
+/*
+ *  ======== RcmClient_acquireJobId ========
+ */
+/*!
+ *  @brief Get a job id from the server
+ *
+ *  Acquire a unique job id from the server. The job id is used to associate
+ *  messages with a common job id. The server will process all messages for
+ *  a given job id in sequence.
+ */
+Int RcmClient_acquireJobId(
+        RcmClient_Handle        handle,
+        UInt16 *                jobId
+    );
+
+/*
+ *  ======== RcmClient_addSymbol ========
+ */
+/*!
+ *  @brief Add a symbol and its address to the server table
+ *
+ *  This function is used by the client to dynamically load a new
+ *  function address into the server's function pointer table. The
+ *  given address must be in the server's address space. The function
+ *  must already be loaded into the server's memory.
+ *
+ *  This function is useful when dynamically loading code onto the
+ *  remote processor (as in the case of DLL's).
+ *
+ *  @param[in] handle Handle to an instance object
+ *
+ *  @param[in] name The function's name.
+ *
+ *  @param[in] addr The function's address as specified in the
+ *  remote processor's address space.
+ *
+ *  @param[out] index The function's index value to be used in the
+ *  RcmClient_Message.fxnIdx field.
+ *
+ *  @retval RcmClient_S_SUCCESS Success
+ *  @retval RcmClient_E_FAIL Failure
+ */
+Int RcmClient_addSymbol(
+        RcmClient_Handle        handle,
+        String                  name,
+        Fxn                     addr,
+        UInt32 *                index
+    );
+
+/*
+ *  ======== RcmClient_alloc ========
+ */
+/*!
+ *  @brief Allocate a message from the heap configured for this instance
+ *
+ *  When a message is allocated, the RcmClient instance is the owner
+ *  of the message. All messages must be returned to the heap by
+ *  calling RcmClient_free().
+ *
+ *  During a call to all of the exec functions, the ownership of the
+ *  message is temporarily transfered to the server. If the exec
+ *  function returns an RcmClient_Message pointer, then ownership of
+ *  the message is returned to the instance. For the other exec
+ *  functions, the client acquires ownership of the return message
+ *  by calling RcmClient_waitUntilDone().
+ *
+ *  A message should not be accessed when ownership has been given
+ *  away. Once ownership has been reacquired, the message can be
+ *  either reused or returned to the heap.
+ *
+ *  @param[in] handle Handle to an instance object
+ *
+ *  @param[in] dataSize Specifies (in chars) how much space to allocate
+ *  for the RcmClient_Message.data array. The actual memory allocated
+ *  from the heap will be larger as it includes the size of the
+ *  internal message header.
+ *
+ *  @param[out] message A pointer to the allocated message or NULL on error.
+ */
+Int RcmClient_alloc(
+        RcmClient_Handle        handle,
+        UInt32                  dataSize,
+        RcmClient_Message **    message
+    );
+
+/*
+ *  ======== RcmClient_checkForError ========
+ */
+/*!
+ *  @brief Check if an error message has been returned from the server
+ *
+ *  When using RcmClient_execCmd() to send messages to the server, the
+ *  message will be freed by the server unless an error occurs. In the
+ *  case of an error, the message is returned to the client. Use this
+ *  function to check for and to retrieve these error messages.
+ *
+ *  Note that the latency of the return message is dependent on many
+ *  system factors. In particular, the server's response time to processing
+ *  a message will be a significant factor. It is possible to call
+ *  RcmClient_execCmd() several times before any error message is returned.
+ *  There is no way to know when all the messages have been processed.
+ *
+ *  The return value of RcmClient_checkForError() is designed to mimic
+ *  the return value of RcmClient_exec(). When an error message is returned
+ *  to the caller, the return value of RcmClient_checkForError() will be
+ *  the appropriate error code as if the error had occured during a call
+ *  to RcmClient_exec(). For example, if a message is prepared with an
+ *  incorrect function index, the return value from RcmClient_exec() would
+ *  be RcmClient_E_INVALIDFXNIDX. However, the same message sent with
+ *  RcmClient_execCmd() will not return an error, because the function does
+ *  not wait for the return message. When the server receives the message
+ *  and detects the function index error, it will return the message to
+ *  the client on a special error queue. The subsequent call to
+ *  RcmClient_checkForError() will pickup this error message and return
+ *  with a status value of RcmClient_E_INVALIDFXNIDX, just as the call
+ *  to RcmClient_exec() would have done.
+ *
+ *  A return value of RcmClient_S_SUCCESS means there are no error messages.
+ *  This function will never return a message and a success status code at
+ *  the same time.
+ *
+ *  When this function returns an error message, the caller must return
+ *  the message to the heap by calling RcmClient_free().
+ *
+ *  It is possible that RcmClient_checkForError() will return with an error
+ *  but without an error message. This can happen when an internal error
+ *  occurs in RcmClient_checkForError() before it has checked the error
+ *  queue. In this case, an error is returned but the returnMsg argument
+ *  will be set to NULL.
+ *
+ *  @param[in] handle Handle to an instance object
+ *
+ *  @param[out] returnMsg A pointer to the error message or NULL if there
+ *  are no error messages in the queue.
+ *
+ *  @retval RcmClient_S_SUCCESS
+ *  @retval RcmClient_E_IPCERROR
+ *  @retval RcmClient_E_INVALIDFXNIDX
+ *  @retval RcmClient_E_MSGFXNERROR
+ *  @retval RcmClient_E_SERVERERROR
+ */
+Int RcmClient_checkForError(
+        RcmClient_Handle        handle,
+        RcmClient_Message **    returnMsg
+    );
+
+/*
+ *  ======== RcmClient_construct ========
+ */
+/*!
+ *  @brief Initialize a new instance object inside the provided structure
+ *
+ *  This function is the same as RcmClient_create() except that it does not
+ *  allocate memory for the instance object. The instance object is
+ *  constructed inside the provided structure. Call RcmClient_destruct()
+ *  to finalize a constructed instance object.
+ *
+ *  @param[in] structPtr A pointer to an allocated structure.
+ *
+ *  @param[in] server The name of the server that messages will be sent to for
+ *  executing commands. The name must be a system-wide unique name.
+ *
+ *  @param[in] params The create params used to customize the instance object.
+ *
+ *  @sa RcmClient_create
+ */
+Int RcmClient_construct(
+        RcmClient_Struct *      structPtr,
+        String                  server,
+        const RcmClient_Params *params
+    );
+
+/*
+ *  ======== RcmClient_create ========
+ */
+/*!
+ *  @brief Create an RcmClient instance
+ *
+ *  The RcmClient instance is used by the application to send messages to
+ *  an RcmServer for executing remote functions. A given
+ *  instance can send messages only to the server it was configured
+ *  for. If an application needs to send messages to multiple servers,
+ *  then create an RcmClient instance for each server.
+ *
+ *  The assigned server to this instance must already exist and be
+ *  running before creating RcmClient instances which send messages to it.
+ *
+ *  @param[in] server The name of the server that messages will be sent to for
+ *  executing commands. The name must be a system-wide unique name.
+ *
+ *  @param[in] params The create params used to customize the instance object.
+ *
+ *  @param[out] handle An opaque handle to the created instance object.
+ */
+Int RcmClient_create(
+        String                  server,
+        const RcmClient_Params *params,
+        RcmClient_Handle *      handle
+    );
+
+/*
+ *  ======== RcmClient_delete ========
+ */
+/*!
+ *  @brief Delete an RcmClient instance
+ *
+ *  @param[in,out] handlePtr Handle to the instance object to delete.
+ */
+Int RcmClient_delete(
+        RcmClient_Handle *      handlePtr
+    );
+
+/*
+ *  ======== RcmClient_destruct ========
+ */
+/*!
+ *  @brief Finalize the instance object inside the provided structure
+ *
+ *  @param[in] structPtr A pointer to the structure containing the
+ *  instance object to finalize.
+ */
+Int RcmClient_destruct(
+        RcmClient_Struct *      structPtr
+    );
+
+/*
+ *  ======== RcmClient_exec ========
+ */
+/*!
+ *  @brief Execute a command message on the server
+ *
+ *  The message is sent to the server for processing. This call will
+ *  block until the remote function has completed. When this function
+ *  returns, the message will contain the return value of the remote
+ *  function as well as a possibly modified context.
+ *
+ *  After calling exec, the message can be either reused for another
+ *  call to exec or it can be freed.
+ *
+ *  @param[in] handle Handle to an instance object
+ *
+ *  @param[in] cmdMsg Pointer to an RcmClient_Message structure.
+ *
+ *  @param[out] returnMsg A pointer to the return message or NULL on
+ *  error. The client must free this message. The return value of the
+ *  message function is stored in the results field. The return value
+ *  of the library function is marshalled into the data field.
+ *
+ *  @retval RcmClient_S_SUCCESS
+ *  @retval RcmClient_E_EXECFAILED
+ *  @retval RcmClient_E_INVALIDFXNIDX
+ *  @retval RcmClient_E_LOSTMSG
+ *  @retval RcmClient_E_MSGFXNERROR
+ *  @retval RcmClient_E_SERVERERROR
+ */
+Int RcmClient_exec(
+        RcmClient_Handle        handle,
+        RcmClient_Message *     cmdMsg,
+        RcmClient_Message **    returnMsg
+    );
+
+/*
+ *  ======== RcmClient_execAsync ========
+ */
+/*!
+ *  @brief Execute a command message and use a callback for notification
+ *
+ *  The message is sent to the server for execution, but this call does
+ *  not wait for the remote function to execute. This call returns
+ *  as soon as the message has been dispatched to the transport. Upon
+ *  returning from this function, the ownership of the message has been
+ *  lost; do not access the message at this time.
+ *
+ *  When the remote function completes, the given callback function is
+ *  invoked by this RcmClient instance's callback server thread. The
+ *  callback function is used to asynchronously notify the client that
+ *  the remote function has completed.
+ *
+ *  The RcmClient instance must be create with callbackNotification
+ *  set to true in order to use this function.
+ *
+ *  @param[in] handle Handle to an instance object
+ *
+ *  @param[in] cmdMsg Pointer to an RcmClient_Message structure.
+ *
+ *  @param[in] callback A callback function pointer supplied by the
+ *  application. It will be invoked by the callback server thread to
+ *  notify the application that the remote function has completed.
+ *
+ *  @param[in] appData A private data pointer supplied by the application.
+ *  This allows the application to provide its own context when
+ *  receiving the callback.
+ */
+Int RcmClient_execAsync(
+        RcmClient_Handle        handle,
+        RcmClient_Message *     cmdMsg,
+        RcmClient_CallbackFxn   callback,
+        Ptr                     appData
+    );
+
+/*
+ *  ======== RcmClient_execCmd ========
+ */
+/*!
+ *  @brief Execute a one-way command message on the server
+ *
+ *  The message is sent to the server for processing but this function
+ *  does not wait for the return message. This function is non-blocking.
+ *  The server will processes the message and then free it, unless an
+ *  error occurs. The return value from the remote function is discarded.
+ *
+ *  If an error occurs on the server while processing the message, the server
+ *  will return the message to the client. Use RcmClient_checkForError()
+ *  to collect these return error messages.
+ *
+ *  When this function returns, ownership of the message has been transfered
+ *  to the server. Do not access the message after this function returns,
+ *  it could cause cache inconsistencies or a memory access violation.
+ *
+ *  @param[in] handle Handle to an instance object
+ *
+ *  @param[in] cmdMsg Pointer to an RcmClient_Message structure.
+ *
+ *  @retval RcmClient_S_SUCCESS
+ *  @retval RcmClient_E_IPCERROR
+ */
+Int RcmClient_execCmd(
+        RcmClient_Handle        handle,
+        RcmClient_Message *     cmdMsg
+    );
+
+/*
+ *  ======== RcmClient_execDpc ========
+ */
+/*!
+ *  @brief Execute a deferred procedure call on the server
+ *
+ *  The return field of the message is not used.
+ *
+ *  @param[in] handle Handle to an instance object
+ *
+ *  @param[in] cmdMsg Pointer to an RcmClient_Message structure.
+ *
+ *  @param[out] returnMsg A pointer to the return message or NULL
+ *  on error. The client must free this message.
+ */
+Int RcmClient_execDpc(
+        RcmClient_Handle        handle,
+        RcmClient_Message *     cmdMsg,
+        RcmClient_Message **    returnMsg
+    );
+
+/*
+ *  ======== RcmClient_execNoWait ========
+ */
+/*!
+ *  @brief Submit a command message to the server and return immediately
+ *
+ *  The message is sent to the server for execution but this call does
+ *  not wait for the remote function to execute. The call returns
+ *  as soon as the message has been dispatched to the transport. Upon
+ *  returning from this function, the ownership of the message has been
+ *  lost; do not access the message at this time.
+ *
+ *  Using this call to execute a remote message does not require a
+ *  callback server thread. The application must call
+ *  RcmClient_waitUntilDone() to get the return message from the remote
+ *  function.
+ *
+ *  @param[in] handle Handle to an instance object
+ *
+ *  @param[in] cmdMsg A pointer to an RcmClient_Message structure.
+ *
+ *  @param[out] msgId Pointer used for storing the message id. Use
+ *  the message id in a call to RcmClient_WaitUntilDone() to retrieve
+ *  the return value of the remote function.
+ */
+Int RcmClient_execNoWait(
+        RcmClient_Handle        handle,
+        RcmClient_Message *     cmdMsg,
+        UInt16 *                msgId
+    );
+
+/*
+ *  ======== RcmClient_exit ========
+ */
+/*!
+ *  @brief Finalize the RcmClient module
+ *
+ *  This function is used to finalize the RcmClient module. Any resources
+ *  acquired by RcmClient_init() will be released. Do not call any RcmClient
+ *  functions after calling RcmClient_exit().
+ *
+ *  This function must be serialized by the caller.
+ */
+Void RcmClient_exit(Void);
+
+/*
+ *  ======== RcmClient_free ========
+ */
+/*!
+ *  @brief Free the given message
+ *
+ *  @param[in] handle Handle to an instance object
+ *
+ *  @param msg Pointer to an RcmClient_Message structure.
+ */
+Int RcmClient_free(
+        RcmClient_Handle        handle,
+        RcmClient_Message *     msg
+    );
+
+/*
+ *  ======== RcmClient_getSymbolIndex ========
+ */
+/*!
+ *  @brief Return the function index from the server
+ *
+ *  Query the server for the given function name and return its index.
+ *  Use the index in the fxnIdx field of the RcmClient_Message struct.
+ *
+ *  @param[in] handle Handle to an instance object
+ *
+ *  @param[in] name The function's name.
+ *
+ *  @param[out] index The function's index.
+ */
+Int RcmClient_getSymbolIndex(
+        RcmClient_Handle        handle,
+        String                  name,
+        UInt32 *                index
+    );
+
+/*
+ *  ======== RcmClient_init ========
+ */
+/*!
+ *  @brief Initialize the RcmClient module
+ *
+ *  This function is used to initialize the RcmClient module. Call this
+ *  function before calling any other RcmClient function.
+ *
+ *  This function must be serialized by the caller
+ */
+Void RcmClient_init(Void);
+
+/*
+ *  ======== RcmClient_Parmas_init ========
+ */
+/*!
+ *  @brief Initialize the instance create params structure
+ */
+Void RcmClient_Params_init(
+        RcmClient_Params *      params
+    );
+
+/*
+ *  ======== RcmClient_releaseJobId ========
+ */
+/*!
+ *  @brief Return a job id to the server and release all resources
+ *
+ *  @param[in] handle Handle to an instance object
+ *
+ *  @param[in] jobId The job id to be released
+ */
+Int RcmClient_releaseJobId(
+        RcmClient_Handle        handle,
+        UInt16                  jobId
+    );
+
+/*
+ *  ======== RcmClient_removeSymbol ========
+ */
+/*!
+ *  @brief Remove a symbol and from the server function table
+ *
+ *  Useful when unloading a DLL from the server.
+ *
+ *  @param[in] handle Handle to an instance object
+ *
+ *  @param[in] name The function name.
+ */
+Int RcmClient_removeSymbol(
+        RcmClient_Handle        handle,
+        String                  name
+    );
+
+/*
+ *  ======== RcmClient_waitUntilDone ========
+ */
+/*!
+ *  @brief Block until the specified message has been executed
+ *
+ *  This function will wait until the remote function invoked by the
+ *  specified message has completed. Upon return from this call, the
+ *  message will contain the return value and the return context of
+ *  the remote function.
+ *
+ *  @param[in] handle Handle to an instance object
+ *
+ *  @param[in] msgId The message ID to wait for.
+ *
+ *  @param[out] returnMsg A pointer to the return message or NULL
+ *  on error. The client must free this message.
+ */
+Int RcmClient_waitUntilDone(
+        RcmClient_Handle        handle,
+        UInt16                  msgId,
+        RcmClient_Message **    returnMsg
+    );
+
+
+#if defined (__cplusplus)
+}
+#endif /* defined (__cplusplus) */
+
+/*@}*/
+
+#endif /* ti_grcm_RcmClient__include */
diff --git a/packages/ti/grcm/RcmClient.xdc b/packages/ti/grcm/RcmClient.xdc
new file mode 100644 (file)
index 0000000..674cb36
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2011-2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+/*
+ *  ======== RcmClient.xdc ========
+ *
+ */
+
+package ti.grcm;
+
+
+/*!
+ *  ======== RcmClient ========
+ *  Remote Command Message client module
+ *
+ *  This is the RTSC meta-only module documentation. Please see the links
+ *  below for the runtime documentation.
+ *
+ *  @a(See Also)
+ *  @p(dlist)
+ *  - {@link doxy(ti_grcm_RcmClient) RcmClient API Reference}
+ *  - {@link doxy(RcmClient.h) RcmClient File Reference}
+ *  - {@link doxy(ti_grcm) RCM Overview}
+ *  @p
+ */
+
+metaonly module RcmClient
+{
+
+}
diff --git a/packages/ti/grcm/RcmClient.xs b/packages/ti/grcm/RcmClient.xs
new file mode 100644 (file)
index 0000000..2120d38
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2011-2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+/*
+ *  ======== RcmClient.xs ========
+ *
+ */
+
+/*
+ *  ======== module$use ========
+ *  Use other modules required by this module
+ */
+function module$use()
+{
+    var Settings = xdc.module(this.$package.$name + '.Settings');
+
+    /* Settings.ipc config param cannot be undefined */
+    if (Settings.ipc == undefined) {
+        throw new Error("the " + Settings.$name + ".ipc config param"
+        + " is undefined, it must be assigned a value by"
+        + " the application config script.");
+    }
+
+    xdc.useModule('xdc.runtime.Diags');
+    xdc.useModule('xdc.runtime.Error');
+    xdc.useModule('xdc.runtime.Log');
+    xdc.useModule('xdc.runtime.Memory');
+    xdc.useModule('xdc.runtime.Startup');
+    xdc.useModule('xdc.runtime.knl.GateThread');
+    xdc.useModule('xdc.runtime.knl.Semaphore');
+    xdc.useModule('xdc.runtime.knl.SemThread');
+    xdc.useModule('xdc.runtime.knl.SyncSemThread');
+
+    if (Settings.IpcSupport_ti_sdo_ipc == Settings.ipc) {
+        xdc.useModule('ti.sdo.ipc.MessageQ');
+        xdc.useModule('ti.sdo.utils.List');
+    }
+    else if (Settings.IpcSupport_ti_syslink_ipc == Settings.ipc) {
+        xdc.loadPackage('ti.syslink');
+    }
+    else {
+        throw new Error("unknown value for " + Settings.$name
+        + ".ipc config param (" + Settings.ipc + ")");
+    }
+}
diff --git a/packages/ti/grcm/RcmServer.c b/packages/ti/grcm/RcmServer.c
new file mode 100644 (file)
index 0000000..27c2910
--- /dev/null
@@ -0,0 +1,2514 @@
+/*
+ * Copyright (c) 2011-2013, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ *  ======== RcmServer.c ========
+ *
+ */
+
+/* this define must precede inclusion of any xdc header file */
+#define Registry_CURDESC ti_grcm_RcmServer__Desc
+#define MODULE_NAME "ti.grcm.RcmServer"
+
+#define xdc_runtime_Memory__nolocalnames  /* short name clashes with SysLink */
+
+/* rtsc header files */
+#include <xdc/std.h>
+#include <xdc/runtime/Assert.h>
+#include <xdc/runtime/Diags.h>
+#include <xdc/runtime/Error.h>
+#include <xdc/runtime/IHeap.h>
+#include <xdc/runtime/Log.h>
+#include <xdc/runtime/Memory.h>
+#include <xdc/runtime/Registry.h>
+#include <xdc/runtime/Startup.h>
+#include <xdc/runtime/knl/GateThread.h>
+#include <xdc/runtime/knl/ISemaphore.h>
+#include <xdc/runtime/knl/Semaphore.h>
+#include <xdc/runtime/knl/SemThread.h>
+#include <xdc/runtime/knl/Thread.h>
+#include <xdc/runtime/System.h>
+
+#define MSGBUFFERSIZE    512   // Make global and move to MessageQCopy.h
+
+#if defined(RCM_ti_ipc)
+#include <ti/sdo/utils/List.h>
+#include <ti/ipc/MultiProc.h>
+
+#elif defined(RCM_ti_syslink)
+#include <ti/syslink/utils/List.h>
+#define List_Struct List_Object
+#define List_handle(exp) (exp)
+
+#else
+    #error "undefined ipc binding";
+#endif
+
+/* local header files */
+#include "RcmClient.h"
+#include "RcmTypes.h"
+#include "RcmServer.h"
+
+#if USE_MESSAGEQCOPY
+#include <ti/srvmgr/rpmsg_omx.h>
+#endif
+
+#define _RCM_KeyResetValue 0x07FF       // key reset value
+#define _RCM_KeyMask 0x7FF00000         // key mask in function index
+#define _RCM_KeyShift 20                // key bit position in function index
+
+#define RcmServer_MAX_TABLES 9          // max number of function tables
+#define RcmServer_POOL_MAP_LEN 4        // pool map length
+
+#define RcmServer_E_InvalidFxnIdx       (-101)
+#define RcmServer_E_JobIdNotFound       (-102)
+#define RcmServer_E_PoolIdNotFound      (-103)
+
+typedef struct {                        // function table element
+    String                      name;
+#if USE_MESSAGEQCOPY
+    union  {
+       RcmServer_MsgFxn         fxn;
+       RcmServer_MsgCreateFxn   createFxn;
+    }addr;
+#else
+    RcmServer_MsgFxn            addr;
+#endif
+    UInt16                      key;
+} RcmServer_FxnTabElem;
+
+typedef struct {
+    Int                         length;
+    RcmServer_FxnTabElem *      elem;
+} RcmServer_FxnTabElemAry;
+
+typedef struct {
+    String                      name;       // pool name
+    Int                         count;      // thread count (at create time)
+    Thread_Priority             priority;   // thread priority
+    Int                         osPriority;
+    SizeT                       stackSize;  // thread stack size
+    String                      stackSeg;   // thread stack placement
+    ISemaphore_Handle           sem;        // message semaphore (counting)
+    List_Struct                 threadList; // list of worker threads
+    List_Struct                 readyQueue; // queue of messages
+} RcmServer_ThreadPool;
+
+typedef struct RcmServer_Object_tag {
+    GateThread_Struct           gate;       // instance gate
+    Ptr                         run;        // run semaphore for the server
+#if USE_MESSAGEQCOPY
+    MessageQCopy_Handle         serverQue;  // inbound message queue
+    UInt32                      localAddr;  // inbound message queue address
+    UInt32                      replyAddr;  // Reply address (same per inst.)
+    UInt32                      dstProc;    // Reply processor.
+#else
+    MessageQ_Handle             serverQue;  // inbound message queue
+#endif
+    Thread_Handle               serverThread; // server thread object
+    RcmServer_FxnTabElemAry     fxnTabStatic; // static function table
+    RcmServer_FxnTabElem *      fxnTab[RcmServer_MAX_TABLES]; // base pointers
+    UInt16                      key;        // function index key
+    UInt16                      jobId;      // job id tracker
+    Bool                        shutdown;   // server shutdown flag
+    Int                         poolMap0Len;// length of static table
+    RcmServer_ThreadPool *      poolMap[RcmServer_POOL_MAP_LEN];
+    List_Handle                 jobList;    // list of job stream queues
+} RcmServer_Object;
+
+typedef struct {
+    List_Elem                   elem;
+    UInt16                      jobId;      // current job stream id
+    Thread_Handle               thread;     // server thread object
+    Bool                        terminate;  // thread terminate flag
+    RcmServer_ThreadPool*       pool;       // worker pool
+    RcmServer_Object *          server;     // server instance
+} RcmServer_WorkerThread;
+
+typedef struct {
+    List_Elem                   elem;
+    UInt16                      jobId;      // job stream id
+    Bool                        empty;      // true if no messages on server
+    List_Struct                 msgQue;     // queue of messages
+} RcmServer_JobStream;
+
+typedef struct RcmServer_Module_tag {
+    String              name;
+    IHeap_Handle        heap;
+} RcmServer_Module;
+
+
+/* private functions */
+static
+Int RcmServer_Instance_init_P(
+        RcmServer_Object *              obj,
+        String                          name,
+        const RcmServer_Params *        params
+    );
+
+static
+Int RcmServer_Instance_finalize_P(
+        RcmServer_Object *              obj
+    );
+
+static
+Int RcmServer_acqJobId_P(
+        RcmServer_Object *              obj,
+        UInt16 *                        jobIdPtr
+    );
+
+static
+Int RcmServer_dispatch_P(
+        RcmServer_Object *              obj,
+        RcmClient_Packet *              packet
+    );
+
+static
+Int RcmServer_execMsg_I(
+        RcmServer_Object *              obj,
+        RcmClient_Message *             msg
+    );
+
+static
+Int RcmServer_getFxnAddr_P(
+        RcmServer_Object *              obj,
+        UInt32                          fxnIdx,
+        RcmServer_MsgFxn *              addrPtr,
+        RcmServer_MsgCreateFxn *        createPtr
+    );
+
+static
+UInt16 RcmServer_getNextKey_P(
+        RcmServer_Object *              obj
+    );
+
+static
+Int RcmServer_getSymIdx_P(
+        RcmServer_Object *              obj,
+        String                          name,
+        UInt32 *                        index
+    );
+
+static
+Int RcmServer_getPool_P(
+        RcmServer_Object *              obj,
+        RcmClient_Packet *              packet,
+        RcmServer_ThreadPool **         poolP
+    );
+
+static
+Void RcmServer_process_P(
+        RcmServer_Object *              obj,
+        RcmClient_Packet *              packet
+    );
+
+static
+Int RcmServer_relJobId_P(
+        RcmServer_Object *              obj,
+        UInt16                          jobId
+    );
+
+static
+Void RcmServer_serverThrFxn_P(
+        IArg                            arg
+    );
+
+static inline
+Void RcmServer_setStatusCode_I(
+        RcmClient_Packet *              packet,
+        UInt16                          code
+    );
+
+static
+Void RcmServer_workerThrFxn_P(
+        IArg                            arg
+    );
+
+
+#define RcmServer_Module_heap() (RcmServer_Mod.heap)
+
+
+/* static objects */
+static Int curInit = 0;
+static Char ti_grcm_RcmServer_Name[] = {
+        't','i','.','s','d','o','.','r','c','m','.',
+        'R','c','m','S','e','r','v','e','r','\0'
+    };
+
+static RcmServer_Module RcmServer_Mod = {
+    MODULE_NAME,        /* name */
+    (IHeap_Handle)NULL  /* heap */
+};
+
+/* module diags mask */
+Registry_Desc Registry_CURDESC;
+
+
+/*
+ *  ======== RcmServer_init ========
+ *
+ *  This function must be serialized by the caller
+ */
+Void RcmServer_init(Void)
+{
+    Registry_Result result;
+
+
+    if (curInit++ != 0) {
+        return; /* module already initialized */
+    }
+
+    /* register with xdc.runtime to get a diags mask */
+//  result = Registry_addModule(&Registry_CURDESC, MODULE_NAME);
+    result = Registry_addModule(&Registry_CURDESC, ti_grcm_RcmServer_Name);
+    Assert_isTrue(result == Registry_SUCCESS, (Assert_Id)NULL);
+
+    /* the size of object and struct must be the same */
+    Assert_isTrue(sizeof(RcmServer_Object) == sizeof(RcmServer_Struct), NULL);
+}
+
+
+/*
+ *  ======== RcmServer_exit ========
+ *
+ *  This function must be serialized by the caller
+ */
+Void RcmServer_exit(Void)
+{
+//  Registry_Result result;
+
+
+    if (--curInit != 0) {
+        return; /* module still in use */
+    }
+
+    /* unregister from xdc.runtime */
+//  result = Registry_removeModule(MODULE_NAME);
+//  Assert_isTrue(result == Registry_SUCCESS, (Assert_Id)NULL);
+}
+
+
+/*
+ *  ======== RcmServer_Params_init ========
+ */
+Void RcmServer_Params_init(RcmServer_Params *params)
+{
+    /* server thread */
+    params->priority = Thread_Priority_HIGHEST;
+    params->osPriority = Thread_INVALID_OS_PRIORITY;
+    params->stackSize = 0;  // use system default
+    params->stackSeg = "";
+
+    /* default pool */
+    params->defaultPool.name = NULL;
+    params->defaultPool.count = 0;
+    params->defaultPool.priority = Thread_Priority_NORMAL;
+    params->defaultPool.osPriority = Thread_INVALID_OS_PRIORITY;
+    params->defaultPool.stackSize = 0;  // use system default
+    params->defaultPool.stackSeg = "";
+
+    /* worker pools */
+    params->workerPools.length = 0;
+    params->workerPools.elem = NULL;
+
+    /* function table */
+    params->fxns.length = 0;
+    params->fxns.elem = NULL;
+}
+
+
+/*
+ *  ======== RcmServer_create ========
+ */
+#define FXNN "RcmServer_create"
+Int RcmServer_create(String name, RcmServer_Params *params,
+        RcmServer_Handle *handle)
+{
+    RcmServer_Object *obj;
+    Error_Block eb;
+    Int status = RcmServer_S_SUCCESS;
+
+
+    Log_print3(Diags_ENTRY, "--> "FXNN": (name=0x%x, params=0x%x, hP=0x%x)",
+        (IArg)name, (IArg)params, (IArg)handle);
+
+    /* initialize the error block */
+    Error_init(&eb);
+    *handle = (RcmServer_Handle)NULL;
+
+    /* check for valid params */
+    if (NULL == params) {
+        Log_error0(FXNN": params ptr must not be NULL");
+        status = RcmServer_E_FAIL;
+        goto leave;
+    }
+    if (NULL == handle) {
+        Log_error0(FXNN": Invalid pointer");
+        status = RcmServer_E_FAIL;
+        goto leave;
+    }
+    if (NULL == name) {
+        Log_error0(FXNN": name passed is NULL!");
+        status = RcmServer_E_FAIL;
+        goto leave;
+    }
+
+    /* allocate the object */
+    obj = (RcmServer_Handle)xdc_runtime_Memory_calloc(RcmServer_Module_heap(),
+        sizeof(RcmServer_Object), sizeof(Int), &eb);
+
+    if (NULL == obj) {
+        Log_error2(FXNN": out of memory: heap=0x%x, size=%u",
+            (IArg)RcmServer_Module_heap(), sizeof(RcmServer_Object));
+        status = RcmServer_E_NOMEMORY;
+        goto leave;
+    }
+
+    Log_print1(Diags_LIFECYCLE, FXNN": instance create: 0x%x", (IArg)obj);
+
+    /* object-specific initialization */
+    status = RcmServer_Instance_init_P(obj, name, params);
+
+    if (status < 0) {
+        RcmServer_Instance_finalize_P(obj);
+        xdc_runtime_Memory_free(RcmServer_Module_heap(),
+            (Ptr)obj, sizeof(RcmServer_Object));
+        goto leave;
+    }
+
+    /* success, return opaque pointer */
+    *handle = (RcmServer_Handle)obj;
+
+
+leave:
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmServer_construct ========
+ */
+#define FXNN "RcmServer_construct"
+Int RcmServer_construct(RcmServer_Struct *structPtr, String name,
+    const RcmServer_Params *params)
+{
+    RcmServer_Object *obj = (RcmServer_Object*)structPtr;
+    Int status = RcmServer_S_SUCCESS;
+
+
+    Log_print1(Diags_ENTRY, "--> "FXNN": (structPtr=0x%x)", (IArg)structPtr);
+    Log_print1(Diags_LIFECYCLE, FXNN": instance construct: 0x%x", (IArg)obj);
+
+    /* ensure the constructed object is zeroed */
+    _memset((Void *)obj, 0, sizeof(RcmServer_Object));
+
+    /* object-specific initialization */
+    status = RcmServer_Instance_init_P(obj, name, params);
+
+    if (status < 0) {
+        RcmServer_Instance_finalize_P(obj);
+        goto leave;
+    }
+
+
+leave:
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmServer_Instance_init_P ========
+ */
+#define FXNN "RcmServer_Instance_init_P"
+Int RcmServer_Instance_init_P(RcmServer_Object *obj, String name,
+        const RcmServer_Params *params)
+{
+    Error_Block eb;
+    List_Params listP;
+#if USE_MESSAGEQCOPY == 0
+    MessageQ_Params mqParams;
+#endif
+    Thread_Params threadP;
+    SemThread_Params semThreadP;
+    SemThread_Handle semThreadH;
+    Int i, j;
+    SizeT size;
+    Char *cp;
+    RcmServer_ThreadPool *poolAry;
+    RcmServer_WorkerThread *worker;
+    List_Handle listH;
+    Int status = RcmServer_S_SUCCESS;
+
+
+    Log_print1(Diags_ENTRY, "--> "FXNN": (obj=0x%x)", (IArg)obj);
+
+    Error_init(&eb);
+
+    /* initialize instance state */
+    obj->shutdown = FALSE;
+    obj->key = 0;
+    obj->jobId = 0xFFFF;
+    obj->run = NULL;
+    obj->serverQue = NULL;
+    obj->serverThread = NULL;
+    obj->fxnTabStatic.length = 0;
+    obj->fxnTabStatic.elem = NULL;
+    obj->poolMap0Len = 0;
+    obj->jobList = NULL;
+
+
+    /* initialize the function table */
+    for (i = 0; i < RcmServer_MAX_TABLES; i++) {
+        obj->fxnTab[i] = NULL;
+    }
+
+    /* initialize the worker pool map */
+    for (i = 0; i < RcmServer_POOL_MAP_LEN; i++) {
+        obj->poolMap[i] = NULL;
+    }
+
+    /* create the instance gate */
+    GateThread_construct(&obj->gate, NULL, &eb);
+
+    if (Error_check(&eb)) {
+        Log_error0(FXNN": could not create gate object");
+        status = RcmServer_E_FAIL;
+        goto leave;
+    }
+
+    /* create list for job objects */
+#if defined(RCM_ti_ipc)
+    List_Params_init(&listP);
+    obj->jobList = List_create(&listP, &eb);
+
+    if (Error_check(&eb)) {
+        Log_error0(FXNN": could not create list object");
+        status = RcmServer_E_FAIL;
+        goto leave;
+    }
+#elif defined(RCM_ti_syslink)
+    List_Params_init(&listP);
+    obj->jobList = List_create(&listP, NULL);
+
+    if (obj->jobList == NULL) {
+        Log_error0(FXNN": could not create list object");
+        status = RcmServer_E_FAIL;
+        goto leave;
+    }
+#endif
+
+    /* create the static function table */
+    if (params->fxns.length > 0) {
+        obj->fxnTabStatic.length = params->fxns.length;
+
+        /* allocate static function table */
+        size = params->fxns.length * sizeof(RcmServer_FxnTabElem);
+        obj->fxnTabStatic.elem = xdc_runtime_Memory_alloc(
+            RcmServer_Module_heap(), size, sizeof(Ptr), &eb);
+
+        if (Error_check(&eb)) {
+            Log_error2(FXNN": out of memory: heap=0x%x, size=%u",
+                (IArg)RcmServer_Module_heap(), size);
+            status = RcmServer_E_NOMEMORY;
+            goto leave;
+        }
+        obj->fxnTabStatic.elem[0].name = NULL;
+
+        /* allocate a single block to store all name strings */
+        for (size = 0, i = 0; i < params->fxns.length; i++) {
+            size += _strlen(params->fxns.elem[i].name) + 1;
+        }
+        cp = xdc_runtime_Memory_alloc(
+            RcmServer_Module_heap(), size, sizeof(Ptr), &eb);
+
+        if (Error_check(&eb)) {
+            Log_error2(FXNN": out of memory: heap=0x%x, size=%u",
+                (IArg)RcmServer_Module_heap(), size);
+            status = RcmServer_E_NOMEMORY;
+            goto leave;
+        }
+
+        /* copy function table data into allocated memory blocks */
+        for (i = 0; i < params->fxns.length; i++) {
+            _strcpy(cp, params->fxns.elem[i].name);
+            obj->fxnTabStatic.elem[i].name = cp;
+            cp += (_strlen(params->fxns.elem[i].name) + 1);
+            obj->fxnTabStatic.elem[i].addr.fxn = params->fxns.elem[i].addr.fxn;
+            obj->fxnTabStatic.elem[i].key = 0;
+        }
+
+        /* hook up the static function table */
+        obj->fxnTab[0] = obj->fxnTabStatic.elem;
+    }
+
+    /* create static worker pools */
+    if ((params->workerPools.length + 1) > RcmServer_POOL_MAP_LEN) {
+        Log_error1(FXNN": Exceeded maximum number of worker pools =%d",
+            (IArg) (params->workerPools.length) );
+        status = RcmServer_E_NOMEMORY;
+        goto leave;
+    }
+    obj->poolMap0Len = params->workerPools.length + 1; /* workers + default */
+
+    /* allocate the static worker pool table */
+    size = obj->poolMap0Len * sizeof(RcmServer_ThreadPool);
+    obj->poolMap[0] = (RcmServer_ThreadPool *)xdc_runtime_Memory_alloc(
+        RcmServer_Module_heap(), size, sizeof(Ptr), &eb);
+
+    if (Error_check(&eb)) {
+        Log_error2(FXNN": out of memory: heap=0x%x, size=%u",
+            (IArg)RcmServer_Module_heap(), size);
+        status = RcmServer_E_NOMEMORY;
+        goto leave;
+    }
+
+    /* convenience alias */
+    poolAry = obj->poolMap[0];
+
+    /* allocate a single block to store all name strings         */
+    /* Buffer format is: [SIZE][DPN][\0][WPN1][\0][WPN2][\0].... */
+    /* DPN = Default Pool Name, WPN = Worker Pool Name           */
+    /* In case, DPN is NULL, format is: [SIZE][\0][WPN1][\0].... */
+    /* In case, WPN is NULL, format is: [SIZE][DPN][\0]          */
+    size = sizeof(SizeT) /* block size */
+        + (params->defaultPool.name == NULL ? 1 :
+        _strlen(params->defaultPool.name) + 1);
+
+    for (i = 0; i < params->workerPools.length; i++) {
+        size += (params->workerPools.elem[i].name == NULL ? 0 :
+            _strlen(params->workerPools.elem[i].name) + 1);
+    }
+    cp = xdc_runtime_Memory_alloc(
+        RcmServer_Module_heap(), size, sizeof(Ptr), &eb);
+
+    if (Error_check(&eb)) {
+        Log_error2(FXNN": out of memory: heap=0x%x, size=%u",
+            (IArg)RcmServer_Module_heap(), size);
+        status = RcmServer_E_NOMEMORY;
+        goto leave;
+    }
+
+    *(SizeT *)cp = size;
+    cp += sizeof(SizeT);
+
+    /* initialize the default worker pool, poolAry[0] */
+    if (params->defaultPool.name != NULL) {
+        _strcpy(cp, params->defaultPool.name);
+        poolAry[0].name = cp;
+        cp += (_strlen(params->defaultPool.name) + 1);
+    }
+    else {
+        poolAry[0].name = cp;
+        *cp++ = '\0';
+    }
+
+    poolAry[0].count = params->defaultPool.count;
+    poolAry[0].priority = params->defaultPool.priority;
+    poolAry[0].osPriority = params->defaultPool.osPriority;
+    poolAry[0].stackSize = params->defaultPool.stackSize;
+    poolAry[0].stackSeg = NULL;
+    poolAry[0].sem = NULL;
+
+    List_construct(&(poolAry[0].threadList), NULL);
+    List_construct(&(poolAry[0].readyQueue), NULL);
+
+    SemThread_Params_init(&semThreadP);
+    semThreadP.mode = SemThread_Mode_COUNTING;
+
+    semThreadH = SemThread_create(0, &semThreadP, &eb);
+
+    if (Error_check(&eb)) {
+        Log_error0(FXNN": could not create semaphore");
+        status = RcmServer_E_FAIL;
+        goto leave;
+    }
+
+    poolAry[0].sem = SemThread_Handle_upCast(semThreadH);
+
+    /* initialize the static worker pools, poolAry[1..(n-1)] */
+    for (i = 0; i < params->workerPools.length; i++) {
+        if (params->workerPools.elem[i].name != NULL) {
+            _strcpy(cp, params->workerPools.elem[i].name);
+            poolAry[i+1].name = cp;
+            cp += (_strlen(params->workerPools.elem[i].name) + 1);
+        }
+        else {
+            poolAry[i+1].name = NULL;
+        }
+
+        poolAry[i+1].count = params->workerPools.elem[i].count;
+        poolAry[i+1].priority = params->workerPools.elem[i].priority;
+        poolAry[i+1].osPriority =params->workerPools.elem[i].osPriority;
+        poolAry[i+1].stackSize = params->workerPools.elem[i].stackSize;
+        poolAry[i+1].stackSeg = NULL;
+
+        List_construct(&(poolAry[i+1].threadList), NULL);
+        List_construct(&(poolAry[i+1].readyQueue), NULL);
+
+        SemThread_Params_init(&semThreadP);
+        semThreadP.mode = SemThread_Mode_COUNTING;
+
+        semThreadH = SemThread_create(0, &semThreadP, &eb);
+
+        if (Error_check(&eb)) {
+            Log_error0(FXNN": could not create semaphore");
+            status = RcmServer_E_FAIL;
+            goto leave;
+        }
+
+        poolAry[i+1].sem = SemThread_Handle_upCast(semThreadH);
+    }
+
+    /* create the worker threads in each static pool */
+    for (i = 0; i < obj->poolMap0Len; i++) {
+        for (j = 0; j < poolAry[i].count; j++) {
+
+            /* allocate worker thread object */
+            size = sizeof(RcmServer_WorkerThread);
+            worker = (RcmServer_WorkerThread *)xdc_runtime_Memory_alloc(
+                RcmServer_Module_heap(), size, sizeof(Ptr), &eb);
+
+            if (Error_check(&eb)) {
+                Log_error2(FXNN": out of memory: heap=0x%x, size=%u",
+                    (IArg)RcmServer_Module_heap(), size);
+                status = RcmServer_E_NOMEMORY;
+                goto leave;
+            }
+
+            /* initialize worker thread object */
+            worker->jobId = RcmClient_DISCRETEJOBID;
+            worker->thread = NULL;
+            worker->terminate = FALSE;
+            worker->pool = &(poolAry[i]);
+            worker->server = obj;
+
+            /* add worker thread to worker pool */
+            listH = List_handle(&(poolAry[i].threadList));
+            List_putHead(listH, &(worker->elem));
+
+            /* create worker thread */
+            Thread_Params_init(&threadP);
+            threadP.arg = (IArg)worker;
+            threadP.priority = poolAry[i].priority;
+            threadP.osPriority = poolAry[i].osPriority;
+            threadP.stackSize = poolAry[i].stackSize;
+            threadP.instance->name = "RcmServer_workerThr";
+
+            worker->thread = Thread_create(
+                (Thread_RunFxn)(RcmServer_workerThrFxn_P), &threadP, &eb);
+
+            if (Error_check(&eb)) {
+                Log_error2(FXNN": could not create worker thread, "
+                    "pool=%d, thread=%d", (IArg)i, (IArg)j);
+                status = RcmServer_E_FAIL;
+                goto leave;
+            }
+        }
+    }
+
+    /* create the semaphore used to release the server thread */
+    SemThread_Params_init(&semThreadP);
+    semThreadP.mode = SemThread_Mode_COUNTING;
+
+    obj->run = SemThread_create(0, &semThreadP, &eb);
+
+    if (Error_check(&eb)) {
+        Log_error0(FXNN": could not create semaphore");
+        status = RcmServer_E_FAIL;
+        goto leave;
+    }
+
+    /* create the message queue for inbound messages */
+#if USE_MESSAGEQCOPY
+    obj->serverQue = MessageQCopy_create(MessageQCopy_ASSIGN_ANY, NULL, NULL,
+                                         &obj->localAddr);
+#ifdef BIOS_ONLY_TEST
+    obj->dstProc = MultiProc_self();
+#else
+    obj->dstProc = MultiProc_getId("HOST");
+#endif
+
+#else
+    MessageQ_Params_init(&mqParams);
+    obj->serverQue = MessageQ_create(name, &mqParams);
+#endif
+
+    if (NULL == obj->serverQue) {
+        Log_error0(FXNN": could not create server message queue");
+        status = RcmServer_E_FAIL;
+        goto leave;
+    }
+
+    /* create the server thread */
+    Thread_Params_init(&threadP);
+    threadP.arg = (IArg)obj;
+    threadP.priority = params->priority;
+    threadP.osPriority = params->osPriority;
+    threadP.stackSize = params->stackSize;
+    threadP.instance->name = "RcmServer_serverThr";
+
+    obj->serverThread = Thread_create(
+        (Thread_RunFxn)(RcmServer_serverThrFxn_P), &threadP, &eb);
+
+    if (Error_check(&eb)) {
+        Log_error0(FXNN": could not create server thread");
+        status = RcmServer_E_FAIL;
+        goto leave;
+    }
+
+
+leave:
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmServer_delete ========
+ */
+#define FXNN "RcmServer_delete"
+Int RcmServer_delete(RcmServer_Handle *handlePtr)
+{
+    RcmServer_Object *obj = (RcmServer_Object *)(*handlePtr);
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print1(Diags_ENTRY, "--> "FXNN": (handlePtr=0x%x)", (IArg)handlePtr);
+
+    /* finalize the object */
+    status = RcmServer_Instance_finalize_P(obj);
+
+    /* free the object memory */
+    Log_print1(Diags_LIFECYCLE, FXNN": instance delete: 0x%x", (IArg)obj);
+
+    xdc_runtime_Memory_free(RcmServer_Module_heap(),
+        (Ptr)obj, sizeof(RcmServer_Object));
+    *handlePtr = NULL;
+
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmServer_destruct ========
+ */
+#define FXNN "RcmServer_destruct"
+Int RcmServer_destruct(RcmServer_Struct *structPtr)
+{
+    RcmServer_Object *obj = (RcmServer_Object *)(structPtr);
+    Int status = RcmClient_S_SUCCESS;
+
+
+    Log_print1(Diags_ENTRY, "--> "FXNN": (structPtr=0x%x)", (IArg)structPtr);
+    Log_print1(Diags_LIFECYCLE, FXNN": instance destruct: 0x%x", (IArg)obj);
+
+    /* finalize the object */
+    status = RcmServer_Instance_finalize_P(obj);
+
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmServer_Instance_finalize_P ========
+ */
+#define FXNN "RcmServer_Instance_finalize_P"
+Int RcmServer_Instance_finalize_P(RcmServer_Object *obj)
+{
+    Int i, j;
+    Int size;
+    Char *cp;
+    UInt tabCount;
+    RcmServer_FxnTabElem *fdp;
+    Error_Block eb;
+    RcmServer_ThreadPool *poolAry;
+    RcmServer_WorkerThread *worker;
+    List_Elem *elem;
+    List_Handle listH;
+    List_Handle msgQueH;
+    RcmClient_Packet *packet;
+#if USE_MESSAGEQCOPY == 0
+    MessageQ_Msg msgqMsg;
+#endif
+    SemThread_Handle semThreadH;
+    RcmServer_JobStream *job;
+    Int rval;
+    Int status = RcmClient_S_SUCCESS;
+
+    Log_print1(Diags_ENTRY, "--> "FXNN": (obj=0x%x)", (IArg)obj);
+
+    /* must initialize the error block before using it */
+    Error_init(&eb);
+
+    /* block until server thread exits */
+    obj->shutdown = TRUE;
+
+    if (obj->serverThread != NULL) {
+#if USE_MESSAGEQCOPY
+        MessageQCopy_unblock(obj->serverQue);
+#else
+        MessageQ_unblock(obj->serverQue);
+#endif
+        Thread_join(obj->serverThread, &eb);
+
+        if (Error_check(&eb)) {
+            Log_error0(FXNN": server thread did not exit properly");
+            status = RcmServer_E_FAIL;
+            goto leave;
+        }
+    }
+
+    /* delete any remaining job objects (there should not be any) */
+    while ((elem = List_get(obj->jobList)) != NULL) {
+        job = (RcmServer_JobStream *)elem;
+
+        /* return any remaining messages (there should not be any) */
+        msgQueH = List_handle(&job->msgQue);
+
+        while ((elem = List_get(msgQueH)) != NULL) {
+            packet = (RcmClient_Packet *)elem;
+            Log_warning2(
+                FXNN": returning unprocessed message, jobId=0x%x, packet=0x%x",
+                (IArg)job->jobId, (IArg)packet);
+
+            RcmServer_setStatusCode_I(packet, RcmServer_Status_Unprocessed);
+#if USE_MESSAGEQCOPY
+            packet->hdr.type = OMX_RAW_MSG;
+            packet->hdr.len = PACKET_DATA_SIZE + packet->message.dataSize;
+            rval = MessageQCopy_send(obj->dstProc, obj->replyAddr,
+                                 obj->localAddr, (Ptr)&packet->hdr,
+                                 PACKET_HDR_SIZE + packet->message.dataSize);
+#else
+            msgqMsg = &packet->msgqHeader;
+            rval = MessageQ_put(MessageQ_getReplyQueue(msgqMsg), msgqMsg);
+#endif
+            if (rval < 0) {
+                Log_error1(FXNN": unknown ipc error, 0x%x", (IArg)rval);
+            }
+        }
+
+        /* finalize the job stream object */
+        List_destruct(&job->msgQue);
+
+        xdc_runtime_Memory_free(RcmServer_Module_heap(),
+            (Ptr)job, sizeof(RcmServer_JobStream));
+    }
+    List_delete(&(obj->jobList));
+
+    /* convenience alias */
+    poolAry = obj->poolMap[0];
+
+    /* free all the static pool resources */
+    for (i = 0; i < obj->poolMap0Len; i++) {
+
+        /* free all the worker thread objects */
+        listH = List_handle(&(poolAry[i].threadList));
+
+        /* mark each worker thread for termination */
+        elem = NULL;
+        while ((elem = List_next(listH, elem)) != NULL) {
+            worker = (RcmServer_WorkerThread *)elem;
+            worker->terminate = TRUE;
+        }
+
+        /* unblock each worker thread so it can terminate */
+        elem = NULL;
+        while ((elem = List_next(listH, elem)) != NULL) {
+            Semaphore_post(poolAry[i].sem, &eb);
+
+            if (Error_check(&eb)) {
+                Log_error0(FXNN": post failed on thread");
+                status = RcmServer_E_FAIL;
+                goto leave;
+            }
+        }
+
+        /* wait for each worker thread to terminate */
+        elem = NULL;
+        while ((elem = List_get(listH)) != NULL) {
+            worker = (RcmServer_WorkerThread *)elem;
+
+            Thread_join(worker->thread, &eb);
+
+            if (Error_check(&eb)) {
+                Log_error1(
+                    FXNN": worker thread did not exit properly, thread=0x%x",
+                    (IArg)worker->thread);
+                status = RcmServer_E_FAIL;
+                goto leave;
+            }
+
+            Thread_delete(&worker->thread);
+
+            /* free the worker thread object */
+            xdc_runtime_Memory_free(RcmServer_Module_heap(), (Ptr)worker,
+                sizeof(RcmServer_WorkerThread));
+        }
+
+        /* free up pool resources */
+        semThreadH = SemThread_Handle_downCast(poolAry[i].sem);
+        SemThread_delete(&semThreadH);
+        List_destruct(&(poolAry[i].threadList));
+
+        /* return any remaining messages on the readyQueue */
+        msgQueH = List_handle(&poolAry[i].readyQueue);
+
+        while ((elem = List_get(msgQueH)) != NULL) {
+            packet = (RcmClient_Packet *)elem;
+            Log_warning2(
+                FXNN": returning unprocessed message, msgId=0x%x, packet=0x%x",
+                (IArg)packet->msgId, (IArg)packet);
+
+            RcmServer_setStatusCode_I(packet, RcmServer_Status_Unprocessed);
+#if USE_MESSAGEQCOPY
+            packet->hdr.type = OMX_RAW_MSG;
+            packet->hdr.len = PACKET_DATA_SIZE + packet->message.dataSize;
+            rval = MessageQCopy_send(obj->dstProc, obj->replyAddr,
+                                 obj->localAddr, (Ptr)&packet->hdr,
+                                 PACKET_HDR_SIZE + packet->message.dataSize);
+#else
+            msgqMsg = &packet->msgqHeader;
+            rval = MessageQ_put(MessageQ_getReplyQueue(msgqMsg), msgqMsg);
+#endif
+            if (rval < 0) {
+                Log_error1(FXNN": unknown ipc error, 0x%x", (IArg)rval);
+            }
+        }
+
+        List_destruct(&(poolAry[i].readyQueue));
+    }
+
+    /* free the name block for the static pools */
+    if ((obj->poolMap[0] != NULL) && (obj->poolMap[0]->name != NULL)) {
+        cp = obj->poolMap[0]->name;
+        cp -= sizeof(SizeT);
+        xdc_runtime_Memory_free(RcmServer_Module_heap(), (Ptr)cp, *(SizeT *)cp);
+    }
+
+    /* free the static worker pool table */
+    if (obj->poolMap[0] != NULL) {
+        xdc_runtime_Memory_free(RcmServer_Module_heap(), (Ptr)(obj->poolMap[0]),
+            obj->poolMap0Len * sizeof(RcmServer_ThreadPool));
+        obj->poolMap[0] = NULL;
+    }
+
+#if 0
+    /* free all dynamic worker pools */
+    for (p = 1; p < RcmServer_POOL_MAP_LEN; p++) {
+        if ((poolAry = obj->poolMap[p]) == NULL) {
+            continue;
+        }
+    }
+#endif
+
+    /* free up the dynamic function tables and any leftover name strings */
+    for (i = 1; i < RcmServer_MAX_TABLES; i++) {
+        if (obj->fxnTab[i] != NULL) {
+            tabCount = (1 << (i + 4));
+            for (j = 0; j < tabCount; j++) {
+                if (((obj->fxnTab[i])+j)->name != NULL) {
+                    cp = ((obj->fxnTab[i])+j)->name;
+                    size = _strlen(cp) + 1;
+                    xdc_runtime_Memory_free(RcmServer_Module_heap(), cp, size);
+                }
+            }
+            fdp = obj->fxnTab[i];
+            size = tabCount * sizeof(RcmServer_FxnTabElem);
+            xdc_runtime_Memory_free(RcmServer_Module_heap(), fdp, size);
+            obj->fxnTab[i] = NULL;
+        }
+    }
+
+    if (NULL != obj->serverThread) {
+        Thread_delete(&obj->serverThread);
+    }
+
+    if (NULL != obj->serverQue) {
+#if USE_MESSAGEQCOPY
+        MessageQCopy_delete(&obj->serverQue);
+#else
+        MessageQ_delete(&obj->serverQue);
+#endif
+    }
+
+    if (NULL != obj->run) {
+        SemThread_delete((SemThread_Handle *)(&obj->run));
+    }
+
+    /* free the name block for the static function table */
+    if ((NULL != obj->fxnTabStatic.elem) &&
+        (NULL != obj->fxnTabStatic.elem[0].name)) {
+        for (size = 0, i = 0; i < obj->fxnTabStatic.length; i++) {
+            size += _strlen(obj->fxnTabStatic.elem[i].name) + 1;
+        }
+        xdc_runtime_Memory_free(
+            RcmServer_Module_heap(),
+            obj->fxnTabStatic.elem[0].name, size);
+    }
+
+    /* free the static function table */
+    if (NULL != obj->fxnTabStatic.elem) {
+        xdc_runtime_Memory_free(RcmServer_Module_heap(),
+            obj->fxnTabStatic.elem,
+            obj->fxnTabStatic.length * sizeof(RcmServer_FxnTabElem));
+    }
+
+    /* destruct the instance gate */
+    GateThread_destruct(&obj->gate);
+
+
+leave:
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmServer_addSymbol ========
+ */
+#define FXNN "RcmServer_addSymbol"
+Int RcmServer_addSymbol(RcmServer_Object *obj, String funcName,
+        RcmServer_MsgFxn addr, UInt32 *index)
+{
+    GateThread_Handle gateH;
+    IArg key;
+    Int len;
+    UInt i, j;
+    UInt tabCount;
+    SizeT tabSize;
+    UInt32 fxnIdx = 0xFFFF;
+    RcmServer_FxnTabElem *slot = NULL;
+    Error_Block eb;
+    Int status = RcmServer_S_SUCCESS;
+
+
+    Log_print3(Diags_ENTRY,
+        "--> "FXNN": (obj=0x%x, name=0x%x, addr=0x%x)",
+        (IArg)obj, (IArg)funcName, (IArg)addr);
+
+    Error_init(&eb);
+
+    /* protect the symbol table while changing it */
+    gateH = GateThread_handle(&obj->gate);
+    key = GateThread_enter(gateH);
+
+    /* look for an empty slot to use */
+    for (i = 1; i < RcmServer_MAX_TABLES; i++) {
+        if (obj->fxnTab[i] != NULL) {
+            for (j = 0; j < (1 << (i + 4)); j++) {
+                if (((obj->fxnTab[i])+j)->addr.fxn == 0) {
+                    slot = (obj->fxnTab[i]) + j;  // found empty slot
+                    break;
+                }
+            }
+        }
+        else {
+            /* all previous tables are full, allocate a new table */
+            tabCount = (1 << (i + 4));
+            tabSize = tabCount * sizeof(RcmServer_FxnTabElem);
+            obj->fxnTab[i] = (RcmServer_FxnTabElem *)xdc_runtime_Memory_alloc(
+                RcmServer_Module_heap(), tabSize, sizeof(Ptr), &eb);
+
+            if (Error_check(&eb)) {
+                Log_error0(FXNN": unable to allocate new function table");
+                obj->fxnTab[i] = NULL;
+                status = RcmServer_E_NOMEMORY;
+                goto leave;
+            }
+
+            /* initialize the new table */
+            for (j = 0; j < tabCount; j++) {
+                ((obj->fxnTab[i])+j)->addr.fxn = 0;
+                ((obj->fxnTab[i])+j)->name = NULL;
+                ((obj->fxnTab[i])+j)->key = 0;
+            }
+
+            /* use first slot in new table */
+            j = 0;
+            slot = (obj->fxnTab[i])+j;
+        }
+
+        /* if new slot found, break out of loop */
+        if (slot != NULL) {
+            break;
+        }
+    }
+
+    /* insert new symbol into slot */
+    if (slot != NULL) {
+        slot->addr.fxn = addr;
+        len = _strlen(funcName) + 1;
+        slot->name = (String)xdc_runtime_Memory_alloc(
+            RcmServer_Module_heap(), len, sizeof(Char *), &eb);
+
+        if (Error_check(&eb)) {
+            Log_error0(FXNN": unable to allocate function name");
+            slot->name = NULL;
+            status = RcmServer_E_NOMEMORY;
+            goto leave;
+        }
+
+        _strcpy(slot->name, funcName);
+        slot->key = RcmServer_getNextKey_P(obj);
+        fxnIdx = (slot->key << _RCM_KeyShift) | (i << 12) | j;
+    }
+
+    /* error, no more room to add new symbol */
+    else {
+        Log_error0(FXNN": cannot add symbol, table is full");
+        status = RcmServer_E_SYMBOLTABLEFULL;
+        goto leave;
+    }
+
+
+leave:
+    GateThread_leave(gateH, key);
+
+    /* on success, return new function index */
+    if (status >= 0) {
+        *index = fxnIdx;
+    }
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmServer_removeSymbol ========
+ */
+#define FXNN "RcmServer_removeSymbol"
+Int RcmServer_removeSymbol(RcmServer_Object *obj, String name)
+{
+    GateThread_Handle gateH;
+    IArg key;
+    UInt32 fxnIdx;
+    UInt tabIdx, tabOff;
+    RcmServer_FxnTabElem *slot;
+    Int status = RcmServer_S_SUCCESS;
+
+
+    Log_print2(Diags_ENTRY,
+        "--> "FXNN": (obj=0x%x, name=0x%x)", (IArg)obj, (IArg)name);
+
+    /* protect the symbol table while changing it */
+    gateH = GateThread_handle(&obj->gate);
+    key = GateThread_enter(gateH);
+
+    /* find the symbol in the table */
+    status = RcmServer_getSymIdx_P(obj, name, &fxnIdx);
+
+    if (status < 0) {
+        Log_error0(FXNN": given symbol not found");
+        goto leave;
+    }
+
+    /* static symbols have bit-31 set, cannot remove these symbols */
+    if (fxnIdx & 0x80000000) {
+        Log_error0(FXNN": cannot remove static symbol");
+        status = RcmServer_E_SYMBOLSTATIC;
+        goto leave;
+    }
+
+    /* get slot pointer */
+    tabIdx = (fxnIdx & 0xF000) >> 12;
+    tabOff = (fxnIdx & 0xFFF);
+    slot = (obj->fxnTab[tabIdx]) + tabOff;
+
+    /* clear the table index */
+    slot->addr.fxn = 0;
+    if (slot->name != NULL) {
+        xdc_runtime_Memory_free(
+            RcmServer_Module_heap(), slot->name, _strlen(slot->name) + 1);
+        slot->name = NULL;
+    }
+    slot->key = 0;
+
+leave:
+    GateThread_leave(gateH, key);
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmServer_start ========
+ */
+#define FXNN "RcmServer_start"
+Int RcmServer_start(RcmServer_Object *obj)
+{
+    Error_Block eb;
+    Int status = RcmServer_S_SUCCESS;
+
+
+    Log_print1(Diags_ENTRY, "--> "FXNN": (obj=0x%x)", (IArg)obj);
+
+    Error_init(&eb);
+
+    /* unblock the server thread */
+    Semaphore_post(obj->run, &eb);
+
+    if (Error_check(&eb)) {
+        Log_error0(FXNN": semaphore post failed");
+        status = RcmServer_E_FAIL;
+    }
+
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmServer_acqJobId_P ========
+ */
+#define FXNN "RcmServer_acqJobId_P"
+Int RcmServer_acqJobId_P(RcmServer_Object *obj, UInt16 *jobIdPtr)
+{
+    Error_Block eb;
+    GateThread_Handle gateH;
+    IArg key;
+    Int count;
+    UInt16 jobId;
+    List_Elem *elem;
+    RcmServer_JobStream *job;
+    Int status = RcmServer_S_SUCCESS;
+
+
+    Log_print2(Diags_ENTRY,
+        "--> "FXNN": (obj=0x%x, jobIdPtr=0x%x)", (IArg)obj, (IArg)jobIdPtr);
+
+    Error_init(&eb);
+    gateH = GateThread_handle(&obj->gate);
+
+    /* enter critical section */
+    key = GateThread_enter(gateH);
+
+    /* compute new job id */
+    for (count = 0xFFFF; count > 0; count--) {
+
+        /* generate a new job id */
+        jobId = (obj->jobId == 0xFFFF ? obj->jobId = 1 : ++(obj->jobId));
+
+        /* verify job id is not in use */
+        elem = NULL;
+        while ((elem = List_next(obj->jobList, elem)) != NULL) {
+            job = (RcmServer_JobStream *)elem;
+            if (jobId == job->jobId) {
+                jobId = RcmClient_DISCRETEJOBID;
+                break;
+            }
+        }
+
+        if (jobId != RcmClient_DISCRETEJOBID) {
+            break;
+        }
+    }
+
+    /* check if job id was acquired */
+    if (jobId == RcmClient_DISCRETEJOBID) {
+        *jobIdPtr = RcmClient_DISCRETEJOBID;
+        Log_error0(FXNN": no job id available");
+        status = RcmServer_E_FAIL;
+        GateThread_leave(gateH, key);
+        goto leave;
+    }
+
+    /* create a new job steam object */
+    job = xdc_runtime_Memory_alloc(RcmServer_Module_heap(),
+        sizeof(RcmServer_JobStream), sizeof(Ptr), &eb);
+
+    if (Error_check(&eb)) {
+        Log_error2(FXNN": out of memory: heap=0x%x, size=%u",
+            (IArg)RcmServer_Module_heap(), sizeof(RcmServer_JobStream));
+        status = RcmServer_E_NOMEMORY;
+        GateThread_leave(gateH, key);
+        goto leave;
+    }
+
+    /* initialize new job stream object */
+    job->jobId = jobId;
+    job->empty = TRUE;
+    List_construct(&(job->msgQue), NULL);
+
+    /* put new job stream object at end of server list */
+    List_put(obj->jobList, (List_Elem *)job);
+
+    /* leave critical section */
+    GateThread_leave(gateH, key);
+
+    /* return new job id */
+    *jobIdPtr = jobId;
+
+
+leave:
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmServer_dispatch_P ========
+ *
+ *  Return Value
+ *      < 0: error
+ *        0: success, job stream queue
+ *      > 0: success, ready queue
+ *
+ *  Pool id description
+ *
+ *  Static Worker Pools
+ *  --------------------------------------------------------------------
+ *  15      1 = static pool
+ *  14:8    reserved
+ *  7:0     offset: 0 - 255
+ *
+ *  Dynamic Worker Pools
+ *  --------------------------------------------------------------------
+ *  15      0 = dynamic pool
+ *  14:7    key: 0 - 255
+ *  6:5     index: 1 - 3
+ *  4:0     offset: 0 - [7, 15, 31]
+ */
+#define FXNN "RcmServer_dispatch_P"
+Int RcmServer_dispatch_P(RcmServer_Object *obj, RcmClient_Packet *packet)
+{
+    GateThread_Handle gateH;
+    IArg key;
+    List_Elem *elem;
+    List_Handle listH;
+    RcmServer_ThreadPool *pool;
+    UInt16 jobId;
+    RcmServer_JobStream *job;
+    Error_Block eb;
+    Int status = RcmServer_S_SUCCESS;
+
+
+    Log_print2(Diags_ENTRY,
+        "--> "FXNN": (obj=0x%x, packet=0x%x)", (IArg)obj, (IArg)packet);
+
+    Error_init(&eb);
+
+    /* get the target pool id from the message */
+    status = RcmServer_getPool_P(obj, packet, &pool);
+
+    if (status < 0) {
+        goto leave;
+    }
+
+    System_printf("Rcm dispatch: p:%d j:%d f:%d l:%d\n",
+                  packet->message.poolId, packet->message.jobId,
+                  packet->message.fxnIdx, packet->message.dataSize);
+
+    /* discrete jobs go on the end of the ready queue */
+    jobId = packet->message.jobId;
+
+    if (jobId == RcmClient_DISCRETEJOBID) {
+        listH = List_handle(&pool->readyQueue);
+        List_put(listH, (List_Elem *)packet);
+
+        /* dispatch a new worker thread */
+        Semaphore_post(pool->sem, &eb);
+
+        if (Error_check(&eb)) {
+            Log_error0(FXNN": semaphore post failed");
+        }
+    }
+
+    /* must be a job stream message */
+    else {
+        /* must protect job list while searching it */
+        gateH = GateThread_handle(&obj->gate);
+        key = GateThread_enter(gateH);
+
+        /* find the job stream object in the list */
+        elem = NULL;
+        while ((elem = List_next(obj->jobList, elem)) != NULL) {
+            job = (RcmServer_JobStream *)elem;
+            if (job->jobId == jobId) {
+                break;
+            }
+        }
+
+        if (elem == NULL) {
+            Log_error1(FXNN": failed to find jobId=%d", (IArg)jobId);
+            status = RcmServer_E_JobIdNotFound;
+        }
+
+        /* if job object is empty, place message directly on ready queue */
+        else if (job->empty) {
+            job->empty = FALSE;
+            listH = List_handle(&pool->readyQueue);
+            List_put(listH, (List_Elem *)packet);
+
+            /* dispatch a new worker thread */
+            Semaphore_post(pool->sem, &eb);
+
+            if (Error_check(&eb)) {
+                Log_error0(FXNN": semaphore post failed");
+            }
+        }
+
+        /* place message on job queue */
+        else {
+            listH = List_handle(&job->msgQue);
+            List_put(listH, (List_Elem *)packet);
+        }
+
+        GateThread_leave(gateH, key);
+    }
+
+
+leave:
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmServer_execMsg_I ========
+ */
+Int RcmServer_execMsg_I(RcmServer_Object *obj, RcmClient_Message *msg)
+{
+    RcmServer_MsgFxn fxn;
+#if USE_MESSAGEQCOPY
+    RcmServer_MsgCreateFxn createFxn = NULL;
+#endif
+    Int status;
+
+    status = RcmServer_getFxnAddr_P(obj, msg->fxnIdx, &fxn, &createFxn);
+
+    if (status >= 0) {
+#if 0
+        System_printf("RcmServer_execMsg_I: Calling fxnIdx: %d\n",
+                      (msg->fxnIdx & 0x0000FFFF));
+#endif
+#if USE_MESSAGEQCOPY
+        if (createFxn)  {
+            msg->result = (*createFxn)(obj, msg->dataSize, msg->data);
+        }
+        else {
+            msg->result = (*fxn)(msg->dataSize, msg->data);
+        }
+#else
+        msg->result = (*fxn)(msg->dataSize, msg->data);
+#endif
+    }
+
+    return(status);
+}
+
+
+/*
+ *  ======== RcmServer_getFxnAddr_P ========
+ *
+ *  The function index (fxnIdx) uses the following format. Note that the
+ *  format differs for static vs. dynamic functions. All static functions
+ *  are in fxnTab[0], all dynamic functions are in fxnTab[1 - 8].
+ *
+ *  Bits    Description
+ *
+ *  Static Function Index
+ *  --------------------------------------------------------------------
+ *  31      static/dynamic function flag
+ *              0 = dynamic function
+ *              1 = static function
+ *  30:20   reserved
+ *  19:16   reserved
+ *  15:0    offset: 0 - 65,535
+ *
+ *  Dynamic Function Index
+ *  --------------------------------------------------------------------
+ *  31      static/dynamic function flag
+ *              0 = dynamic function
+ *              1 = static function
+ *  30:20   key
+ *  19:16   reserved
+ *  15:12   index: 1 - 8
+ *  11:0    offset: 0 - [31, 63, 127, 255, 511, 1023, 2047, 4095]
+ */
+#define FXNN "RcmServer_getFxnAddr_P"
+Int RcmServer_getFxnAddr_P(RcmServer_Object *obj, UInt32 fxnIdx,
+        RcmServer_MsgFxn *addrPtr, RcmServer_MsgCreateFxn *createPtr)
+{
+    UInt i, j;
+    UInt16 key;
+    RcmServer_FxnTabElem *slot;
+    RcmServer_MsgFxn addr = NULL;
+    RcmServer_MsgCreateFxn createAddr = NULL;
+    Int status = RcmServer_S_SUCCESS;
+
+    /* static functions have bit-31 set */
+    if (fxnIdx & 0x80000000) {
+        j = (fxnIdx & 0x0000FFFF);
+        if (j < (obj->fxnTabStatic.length)) {
+
+            /* fetch the function address from the table */
+            slot = (obj->fxnTab[0])+j;
+            if (j == 0)  {
+                 createAddr = slot->addr.createFxn;
+            }
+            else {
+                 addr = slot->addr.fxn;
+            }
+        }
+        else {
+            Log_error1(FXNN": invalid function index 0x%x", (IArg)fxnIdx);
+            status = RcmServer_E_InvalidFxnIdx;
+            goto leave;
+        }
+    }
+    /* must be a dynamic function */
+    else {
+        /* extract the key from the function index */
+        key = (fxnIdx & _RCM_KeyMask) >> _RCM_KeyShift;
+
+        i = (fxnIdx & 0xF000) >> 12;
+        if ((i > 0) && (i < RcmServer_MAX_TABLES) && (obj->fxnTab[i] != NULL)) {
+
+            /* fetch the function address from the table */
+            j = (fxnIdx & 0x0FFF);
+            slot = (obj->fxnTab[i])+j;
+            addr = slot->addr.fxn;
+
+            /* validate the key */
+            if (key != slot->key) {
+                Log_error1(FXNN": invalid function index 0x%x", (IArg)fxnIdx);
+                status = RcmServer_E_InvalidFxnIdx;
+                goto leave;
+            }
+        }
+        else {
+            Log_error1(FXNN": invalid function index 0x%x", (IArg)fxnIdx);
+            status = RcmServer_E_InvalidFxnIdx;
+            goto leave;
+        }
+    }
+
+leave:
+    if (status >= 0) {
+       if (j == 0)  {
+           *createPtr = createAddr;
+       }
+       else {
+           *addrPtr = addr;
+       }
+    }
+    return(status);
+}
+#undef FXNN
+
+
+/* *  ======== RcmServer_getSymIdx_P ========
+ *
+ *  Must have table gate before calling this function.
+ */
+#define FXNN "RcmServer_getSymIdx_P"
+Int RcmServer_getSymIdx_P(RcmServer_Object *obj, String name, UInt32 *index)
+{
+    UInt i, j, len;
+    RcmServer_FxnTabElem *slot;
+    UInt32 fxnIdx = 0xFFFFFFFF;
+    Int status = RcmServer_S_SUCCESS;
+
+
+    Log_print3(Diags_ENTRY,
+        "--> "FXNN": (obj=0x%x, name=0x%x, index=0x%x)",
+        (IArg)obj, (IArg)name, (IArg)index);
+
+    /* search tables for given function name */
+    for (i = 0; i < RcmServer_MAX_TABLES; i++) {
+        if (obj->fxnTab[i] != NULL) {
+            len = (i == 0) ? obj->fxnTabStatic.length : (1 << (i + 4));
+            for (j = 0; j < len; j++) {
+                slot = (obj->fxnTab[i]) + j;
+                if ((((obj->fxnTab[i])+j)->name != NULL) &&
+                    (_strcmp(((obj->fxnTab[i])+j)->name, name) == 0)) {
+                    /* found function name */
+                    if (i == 0) {
+                        fxnIdx = 0x80000000 | j;
+                    } else {
+                        fxnIdx = (slot->key << _RCM_KeyShift) | (i << 12) | j;
+                    }
+                    break;
+                }
+            }
+        }
+
+        if (0xFFFFFFFF != fxnIdx) {
+            break;
+        }
+    }
+
+    /* log an error if the symbol was not found */
+    if (fxnIdx == 0xFFFFFFFF) {
+        Log_error0(FXNN": given symbol not found");
+        status = RcmServer_E_SYMBOLNOTFOUND;
+    }
+
+    /* if success, return symbol index */
+    if (status >= 0) {
+        *index = fxnIdx;
+    }
+
+    Log_print1(Diags_EXIT, "<-- "FXNN": %d", (IArg)status);
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmServer_getNextKey_P ========
+ */
+UInt16 RcmServer_getNextKey_P(RcmServer_Object *obj)
+{
+    GateThread_Handle gateH;
+    IArg gateKey;
+    UInt16 key;
+
+
+    gateH = GateThread_handle(&obj->gate);
+    gateKey = GateThread_enter(gateH);
+
+    if (obj->key <= 1) {
+        obj->key = _RCM_KeyResetValue;  /* don't use 0 as a key value */
+    }
+    else {
+        (obj->key)--;
+    }
+    key = obj->key;
+
+    GateThread_leave(gateH, gateKey);
+
+    return(key);
+}
+
+
+/*
+ *  ======== RcmServer_getPool_P ========
+ */
+#define FXNN "RcmServer_getPool_P"
+Int RcmServer_getPool_P(RcmServer_Object *obj,
+        RcmClient_Packet *packet, RcmServer_ThreadPool **poolP)
+{
+    UInt16 poolId;
+    UInt16 offset;
+    Int status = RcmServer_S_SUCCESS;
+
+
+    poolId = packet->message.poolId;
+
+    /* static pools have bit-15 set */
+    if (poolId & 0x8000) {
+        offset = (poolId & 0x00FF);
+        if (offset < obj->poolMap0Len) {
+            *poolP = &(obj->poolMap[0])[offset];
+        }
+        else {
+            Log_error1(FXNN": pool id=0x%x not found", (IArg)poolId);
+            *poolP = NULL;
+            status = RcmServer_E_PoolIdNotFound;
+            goto leave;
+        }
+    }
+
+leave:
+    return(status);
+}
+#undef FXNN
+
+
+/*
+ *  ======== RcmServer_process_P ========
+ */
+#define FXNN "RcmServer_process_P"
+Void RcmServer_process_P(RcmServer_Object *obj, RcmClient_Packet *packet)
+{
+    String name;
+    UInt32 fxnIdx;
+    RcmServer_MsgFxn fxn;
+    RcmClient_Message *rcmMsg;
+#if USE_MESSAGEQCOPY
+    RcmServer_MsgCreateFxn createFxn = NULL;
+#endif
+#if USE_MESSAGEQCOPY == 0
+    MessageQ_Msg msgqMsg;
+#endif
+    UInt16 messageType;
+    Error_Block eb;
+    UInt16 jobId;
+    Int rval;
+    Int status = RcmServer_S_SUCCESS;
+
+
+    Log_print2(Diags_ENTRY,
+        "--> "FXNN": (obj=0x%x, packet=0x%x)", (IArg)obj, (IArg)packet);
+
+    Error_init(&eb);
+
+    /* decode the message */
+    rcmMsg = &packet->message;
+#if USE_MESSAGEQCOPY == 0
+    msgqMsg = &packet->msgqHeader;
+#endif
+    Log_print1(Diags_INFO, FXNN": message desc=0x%x", (IArg)packet->desc);
+
+    /* extract the message type from the packet descriptor field */
+    messageType = (RcmClient_Desc_TYPE_MASK & packet->desc) >>
+        RcmClient_Desc_TYPE_SHIFT;
+
+    /* process the given message */
+    switch (messageType) {
+
+        case RcmClient_Desc_RCM_MSG:
+            rval = RcmServer_execMsg_I(obj, rcmMsg);
+
+            if (rval < 0) {
+                switch (rval) {
+                    case RcmServer_E_InvalidFxnIdx:
+                        RcmServer_setStatusCode_I(
+                            packet, RcmServer_Status_INVALID_FXN);
+                        break;
+                    default:
+                        RcmServer_setStatusCode_I(
+                            packet, RcmServer_Status_Error);
+                        break;
+                }
+            }
+            else if (rcmMsg->result < 0) {
+                RcmServer_setStatusCode_I(packet, RcmServer_Status_MSG_FXN_ERR);
+            }
+            else {
+                RcmServer_setStatusCode_I(packet, RcmServer_Status_SUCCESS);
+            }
+
+#if USE_MESSAGEQCOPY
+#if 0
+            System_printf("RcmServer_process_P: Sending reply from: %d to: %d\n",
+                      obj->localAddr, obj->replyAddr);
+#endif
+
+            packet->hdr.type = OMX_RAW_MSG;
+            packet->hdr.len = PACKET_DATA_SIZE + packet->message.dataSize;
+            status = MessageQCopy_send(obj->dstProc, obj->replyAddr,
+                                 obj->localAddr, (Ptr)&packet->hdr,
+                                 PACKET_HDR_SIZE + packet->message.dataSize);
+#else
+            status = MessageQ_put(MessageQ_getReplyQueue(msgqMsg), msgqMsg);
+#endif
+            if (status < 0) {
+                Log_error1(FXNN": unknown ipc error, 0x%x", (IArg)status);
+            }
+            break;
+
+        case RcmClient_Desc_CMD:
+            status = RcmServer_execMsg_I(obj, rcmMsg);
+
+            /* if all went well, free the message */
+            if ((status >= 0) && (rcmMsg->result >= 0)) {
+
+#if USE_MESSAGEQCOPY == 0
+                status = MessageQ_free(msgqMsg);
+#endif
+                if (status < 0) {
+                    Log_error1(
+                        FXNN": MessageQ_free returned error %d", (IArg)status);
+                }
+            }
+
+            /* an error occurred, must return message to client */
+            else {
+                if (status < 0) {
+                    /* error trying to process the message */
+                    switch (status) {
+                        case RcmServer_E_InvalidFxnIdx:
+                            RcmServer_setStatusCode_I(
+                                packet, RcmServer_Status_INVALID_FXN);
+                            break;
+                        default:
+                            RcmServer_setStatusCode_I(
+                                packet, RcmServer_Status_Error);
+                            break;
+                    }
+                }
+                else  {
+                    /* error in message function */
+                    RcmServer_setStatusCode_I(
+                        packet, RcmServer_Status_MSG_FXN_ERR);
+                }
+
+                /* send error message back to client */
+#if USE_MESSAGEQCOPY
+                packet->hdr.type = OMX_RAW_MSG;
+                packet->hdr.len = PACKET_DATA_SIZE + packet->message.dataSize;
+                status = MessageQCopy_send(obj->dstProc, obj->replyAddr,
+                                 obj->localAddr, (Ptr)&packet->hdr,
+                                 PACKET_HDR_SIZE + packet->message.dataSize);
+#else
+                status = MessageQ_put(MessageQ_getReplyQueue(msgqMsg), msgqMsg);
+#endif
+                if (status < 0) {
+                    Log_error1(FXNN": unknown ipc error, 0x%x", (IArg)status);
+                }
+            }
+            break;
+
+        case RcmClient_Desc_DPC:
+            rval = RcmServer_getFxnAddr_P(obj, rcmMsg->fxnIdx, &fxn,
+                                          &createFxn);
+
+            if (rval < 0) {
+                RcmServer_setStatusCode_I(
+                    packet, RcmServer_Status_SYMBOL_NOT_FOUND);
+                Error_init(&eb);
+            }
+
+#if USE_MESSAGEQCOPY
+            packet->hdr.type = OMX_RAW_MSG;
+            packet->hdr.len = PACKET_DATA_SIZE + packet->message.dataSize;
+            status = MessageQCopy_send(obj->dstProc, obj->replyAddr,
+                                 obj->localAddr, (Ptr)&packet->hdr,
+                                 PACKET_HDR_SIZE + packet->message.dataSize);
+#else
+            status = MessageQ_put(MessageQ_getReplyQueue(msgqMsg), msgqMsg);
+#endif
+            if (status < 0) {
+                Log_error1(FXNN": unknown ipc error, 0x%x", (IArg)status);
+            }
+
+            /* invoke the function with a null context */
+#if USE_MESSAGEQCOPY
+            if (createFxn)  {
+                 (*createFxn)(obj, 0, NULL);
+            }
+            else {
+                 (*fxn)(0, NULL);
+            }
+#else
+            (*fxn)(0, NULL);
+#endif
+            break;
+
+        case RcmClient_Desc_SYM_ADD:
+            break;
+
+        case RcmClient_Desc_SYM_IDX:
+            name = (String)rcmMsg->data;
+            rval = RcmServer_getSymIdx_P(obj, name, &fxnIdx);
+
+            if (rval < 0) {
+                RcmServer_setStatusCode_I(
+                    packet, RcmServer_Status_SYMBOL_NOT_FOUND);
+            }
+            else {
+                RcmServer_setStatusCode_I(packet, RcmServer_Status_SUCCESS);
+                rcmMsg->data[0] = fxnIdx;
+                rcmMsg->result = 0;
+            }
+
+#if USE_MESSAGEQCOPY
+            packet->hdr.type = OMX_RAW_MSG;
+            packet->hdr.len = PACKET_DATA_SIZE + packet->message.dataSize;
+            status = MessageQCopy_send(obj->dstProc, obj->replyAddr,
+                                 obj->localAddr, (Ptr)&packet->hdr,
+                                 PACKET_HDR_SIZE + packet->message.dataSize);
+#else
+            status = MessageQ_put(MessageQ_getReplyQueue(msgqMsg), msgqMsg);
+#endif
+            if (status < 0) {
+                Log_error1(FXNN": unknown ipc error, 0x%x", (IArg)status);
+            }
+            break;
+
+        case RcmClient_Desc_JOB_ACQ:
+            rval = RcmServer_acqJobId_P(obj, &jobId);
+
+            if (rval < 0) {
+                RcmServer_setStatusCode_I(packet, RcmServer_Status_Error);
+            }
+            else {
+                RcmServer_setStatusCode_I(packet, RcmServer_Status_SUCCESS);
+                *(UInt16 *)(&rcmMsg->data[0]) = jobId;
+                rcmMsg->result = 0;
+            }
+
+#if USE_MESSAGEQCOPY
+            packet->hdr.type = OMX_RAW_MSG;
+            packet->hdr.len = PACKET_DATA_SIZE + packet->message.dataSize;
+            status = MessageQCopy_send(obj->dstProc, obj->replyAddr,
+                                 obj->localAddr, (Ptr)&packet-