Merge recent 3.00 changes into 3.10 3.10.01.10_eng
authorChris Ring <cring@ti.com>
Tue, 1 Oct 2013 15:21:47 +0000 (08:21 -0700)
committerChris Ring <cring@ti.com>
Tue, 1 Oct 2013 15:21:47 +0000 (08:21 -0700)
159 files changed:
.gitignore
Makefile.am
Makefile.in
android/src/api/Android.mk [moved from qnx/src/ipc3x_dev/ti/syslink/headers/Makefile with 64% similarity]
android/src/daemon/Android.mk [new file with mode: 0644]
android/src/mm/Android.mk [new file with mode: 0644]
android/src/tests/Android.mk [new file with mode: 0644]
android/src/utils/Android.mk [new file with mode: 0644]
configure
configure.ac
hlos_common/include/_NameServerRemoteRpmsg.h
ipc-bios.bld
ipc-bios.mak
ipc-linux.mak
linux/etc/Makefile.in
linux/include/_MultiProc.h
linux/include/_lad.h
linux/include/ti/ipc/Std.h
linux/src/api/Ipc.c
linux/src/api/Makefile.in
linux/src/api/MessageQ.c
linux/src/daemon/Makefile.am
linux/src/daemon/Makefile.in
linux/src/daemon/MessageQ_daemon.c
linux/src/daemon/MultiProcCfg_dra7xx.c [moved from packages/ti/platform/vayu/dsp1/Platform.xs with 69% similarity]
linux/src/daemon/MultiProcCfg_omap54xx_smp.c
linux/src/daemon/MultiProcCfg_omapl138.c
linux/src/daemon/MultiProcCfg_tci6614.c
linux/src/daemon/MultiProcCfg_tci6638.c
linux/src/daemon/NameServer_daemon.c
linux/src/mm/Makefile.am
linux/src/mm/Makefile.in
linux/src/tests/Makefile.am
linux/src/tests/Makefile.in
linux/src/tests/Msgq100.c [new file with mode: 0644]
linux/src/tests/NameServerApp.c
linux/src/tests/ping_rpmsg.c
linux/src/utils/LAD_client.c
linux/src/utils/Makefile.am
linux/src/utils/Makefile.in
linux/src/utils/MultiProc_app.c [moved from packages/ti/platform/vayu/dsp1/package.xdc with 78% similarity]
linux/src/utils/SocketFxns.c
packages/ti/configs/vayu/Dsp2.cfg [new file with mode: 0644]
packages/ti/configs/vayu/IpcCommon.cfg.xs
packages/ti/configs/vayu/Ipu1Smp.cfg [new file with mode: 0644]
packages/ti/ipc/GateMP.h
packages/ti/ipc/Ipc.h
packages/ti/ipc/MessageQ.h
packages/ti/ipc/MultiProc.h
packages/ti/ipc/NameServer.h
packages/ti/ipc/Notify.h
packages/ti/ipc/family/omap54xx/InterruptIpu.h
packages/ti/ipc/family/omap54xx/VirtQueue.c
packages/ti/ipc/family/vayu/InterruptProxy.h
packages/ti/ipc/family/vayu/VirtQueue.c
packages/ti/ipc/mm/MmRpc.c
packages/ti/ipc/mm/MmRpc.h
packages/ti/ipc/mm/MmType.h
packages/ti/ipc/namesrv/NameServerRemoteRpmsg.c
packages/ti/ipc/namesrv/_NameServerRemoteRpmsg.h
packages/ti/ipc/remoteproc/Resource.c
packages/ti/ipc/remoteproc/Resource.xdc
packages/ti/ipc/remoteproc/Resource.xdt
packages/ti/ipc/remoteproc/linkcmd.xdt [new file with mode: 0644]
packages/ti/ipc/remoteproc/package.bld
packages/ti/ipc/remoteproc/package.xs
packages/ti/ipc/remoteproc/rsc_table_omap5_ipu.h
packages/ti/ipc/remoteproc/rsc_table_vayu_dsp.h
packages/ti/ipc/remoteproc/rsc_table_vayu_ipu.h
packages/ti/ipc/remoteproc/rsc_types.h
packages/ti/ipc/rpmsg/RPMessage.h
packages/ti/ipc/tests/GateMPAppCommon.h [moved from packages/ti/platform/vayu/dsp1/Platform.xdc with 52% similarity]
packages/ti/ipc/tests/Mx.c
packages/ti/ipc/tests/Mx.h
packages/ti/ipc/tests/NameServerApp.c [new file with mode: 0644]
packages/ti/ipc/tests/gatempapp.c [new file with mode: 0644]
packages/ti/ipc/tests/gatempapp.cfg [new file with mode: 0644]
packages/ti/ipc/tests/gatempapp_rsc_table_vayu_dsp.h [new file with mode: 0644]
packages/ti/ipc/tests/mmrpc_test.c
packages/ti/ipc/tests/package.bld
packages/ti/ipc/tests/ping_rpmsg.cfg
packages/ti/ipc/tests/rpc_task.c
packages/ti/ipc/tests/rpmsg_transport.cfg
packages/ti/ipc/tests/test_omx_dsp_vayu.cfg
packages/ti/ipc/tests/test_omx_ipu_vayu.cfg
packages/ti/platform/vayu/dsp1/package.bld [deleted file]
packages/ti/pm/IpcPower.c
packages/ti/pm/IpcPower.h
packages/ti/sdo/ipc/GateMP.c
packages/ti/sdo/ipc/GateMP.xdc
packages/ti/sdo/ipc/GateMP.xs
packages/ti/sdo/ipc/MessageQ.c
packages/ti/sdo/ipc/MessageQ.xdc
packages/ti/sdo/ipc/MessageQ.xs
packages/ti/sdo/ipc/family/f28m35x/NotifyDriverCirc.c
packages/ti/sdo/ipc/family/f28m35x/NotifyDriverCirc.xs
packages/ti/sdo/ipc/family/f28m35x/TransportCirc.c
packages/ti/sdo/ipc/family/f28m35x/TransportCirc.xdc
packages/ti/sdo/ipc/family/f28m35x/TransportCirc.xs
packages/ti/sdo/ipc/family/vayu/NotifySetup.xdc
packages/ti/sdo/ipc/family/vayu/NotifySetup.xs
packages/ti/sdo/ipc/nsremote/NameServerMessageQ.c
packages/ti/sdo/ipc/nsremote/NameServerMessageQ.xs
packages/ti/sdo/utils/NameServer.c
packages/ti/sdo/utils/NameServer.xdc
packages/ti/sdo/utils/NameServer.xs
packages/ti/srvmgr/omaprpc/OmapRpc.c
packages/ti/srvmgr/omaprpc/OmapRpc.h
packages/ti/srvmgr/omx/OmxSrvMgr.c
products.mak
qnx/Makefile
qnx/include/GateMP_config.h [new file with mode: 0644]
qnx/include/_GateMP.h [moved from packages/ti/platform/vayu/ipu2/Platform.xdc with 53% similarity]
qnx/include/_GateMP_usr.h [moved from packages/ti/platform/vayu/ipu2/package.bld with 77% similarity]
qnx/src/api/Ipc.c
qnx/src/api/NameServer.c
qnx/src/api/common.mk
qnx/src/api/gates/GateHWSpinlock.c [new file with mode: 0644]
qnx/src/api/gates/GateMP.c [new file with mode: 0644]
qnx/src/api/gates/GateMutex.c [new file with mode: 0644]
qnx/src/ipc3x_dev/sharedmemallocator/usr/arm/a.le.v7/Makefile [new file with mode: 0644]
qnx/src/ipc3x_dev/ti/syslink/build/Qnx/resmgr/common.mk
qnx/src/ipc3x_dev/ti/syslink/build/Qnx/resmgr/dcmd_syslink.h
qnx/src/ipc3x_dev/ti/syslink/build/Qnx/resmgr/ipc.use
qnx/src/ipc3x_dev/ti/syslink/build/Qnx/resmgr/syslink_devctl.c
qnx/src/ipc3x_dev/ti/syslink/build/Qnx/resmgr/syslink_main.c
qnx/src/ipc3x_dev/ti/syslink/family/vayu/Platform.c
qnx/src/ipc3x_dev/ti/syslink/inc/GateHWSpinlock.h
qnx/src/ipc3x_dev/ti/syslink/inc/GateMPDrvDefs.h [new file with mode: 0644]
qnx/src/ipc3x_dev/ti/syslink/inc/NameServerDrvDefs.h
qnx/src/ipc3x_dev/ti/syslink/inc/_GateMP_daemon.h [new file with mode: 0644]
qnx/src/ipc3x_dev/ti/syslink/inc/_NameServer_daemon.h [moved from packages/ti/platform/vayu/ipu2/Platform.xs with 75% similarity]
qnx/src/ipc3x_dev/ti/syslink/inc/ti/ipc/rpmsg_rpc.h
qnx/src/ipc3x_dev/ti/syslink/inc/usr/Qnx/GateMPDrv.h [new file with mode: 0644]
qnx/src/ipc3x_dev/ti/syslink/ipc/hlos/knl/GateHWSpinlock_daemon.c [moved from qnx/src/ipc3x_dev/ti/syslink/ipc/hlos/knl/GateHWSpinlock.c with 90% similarity]
qnx/src/ipc3x_dev/ti/syslink/ipc/hlos/knl/GateMP_daemon.c [new file with mode: 0644]
qnx/src/ipc3x_dev/ti/syslink/ipc/hlos/knl/Ipc.c
qnx/src/ipc3x_dev/ti/syslink/ipc/hlos/knl/MessageQCopy.c
qnx/src/ipc3x_dev/ti/syslink/ipc/hlos/knl/Qnx/gatemp_devctl.c [new file with mode: 0644]
qnx/src/ipc3x_dev/ti/syslink/ipc/hlos/knl/_MessageQCopyDefs.h
qnx/src/ipc3x_dev/ti/syslink/ipc/hlos/usr/Qnx/GateMPDrv.c [new file with mode: 0644]
qnx/src/ipc3x_dev/ti/syslink/resources/RscTable.c
qnx/src/ipc3x_dev/ti/syslink/resources/RscTable.h
qnx/src/ipc3x_dev/ti/syslink/rpmsg-rpc/rpmsg-rpc.c
qnx/src/ipc3x_dev/ti/syslink/samples/hlos/hwspinlock/usr/common.mk
qnx/src/ipc3x_dev/ti/syslink/utils/hlos/knl/NameServer_daemon.c
qnx/src/ipc3x_dev/ti/syslink/utils/hlos/knl/Qnx/Nameserver_devctl.c
qnx/src/ipc3x_dev/ti/syslink/utils/hlos/usr/Qnx/NameServerDrv.c
qnx/src/tests/GateMPApp/GateMPApp.c [new file with mode: 0644]
qnx/src/tests/GateMPApp/GateMPApp.h [moved from packages/ti/platform/vayu/ipu2/package.xdc with 81% similarity]
qnx/src/tests/GateMPApp/GateMPApp.use [new file with mode: 0644]
qnx/src/tests/GateMPApp/Makefile [new file with mode: 0644]
qnx/src/tests/GateMPApp/arm/Makefile [new file with mode: 0644]
qnx/src/tests/GateMPApp/arm/o.g.le.v7/Makefile [new file with mode: 0644]
qnx/src/tests/GateMPApp/arm/o.le.v7/Makefile [new file with mode: 0644]
qnx/src/tests/GateMPApp/common.mk [new file with mode: 0644]
qnx/src/tests/GateMPApp/main_host.c [new file with mode: 0644]
qnx/src/tests/NameServerApp/NameServerApp.c
qnx/src/utils/common.mk

index 43e7a411a2d2550ea9c231b1438c7c105854f031..6a407071ae86111fd9631569fecf8eb070a4f940 100644 (file)
@@ -1,3 +1,6 @@
+# General
+*.patch
+
 # BIOS stuff
 package/
 lib/
@@ -47,6 +50,7 @@ packages/ti/srvmgr/omx/OmxSrvMgr.h
 /linux/src/tests/MessageQApp
 /linux/src/tests/MessageQBench
 /linux/src/tests/MessageQMulti
+/linux/src/tests/Msgq100
 /linux/src/tests/NameServerApp
 /linux/src/tests/nano_test_*
 /linux/src/tests/ping_rpmsg
@@ -63,6 +67,7 @@ packages/ti/srvmgr/omx/OmxSrvMgr.h
 /qnx/src/tests/*/arm/o.g.le.v7/*.o
 /qnx/src/tests/*/arm/o.g.le.v7/*.map
 /qnx/src/tests/*/arm/o.g.le.v7/*.pinfo
+/qnx/src/tests/*/arm/o.g.le.v7/GateMPApp_g
 /qnx/src/tests/*/arm/o.g.le.v7/MessageQApp_g
 /qnx/src/tests/*/arm/o.g.le.v7/MessageQBench_g
 /qnx/src/tests/*/arm/o.g.le.v7/MessageQMulti_g
@@ -72,6 +77,7 @@ packages/ti/srvmgr/omx/OmxSrvMgr.h
 /qnx/src/tests/*/arm/o.le.v7/*.o
 /qnx/src/tests/*/arm/o.le.v7/*.map
 /qnx/src/tests/*/arm/o.le.v7/*.pinfo
+/qnx/src/tests/*/arm/o.le.v7/GateMPApp
 /qnx/src/tests/*/arm/o.le.v7/MessageQApp
 /qnx/src/tests/*/arm/o.le.v7/MessageQBench
 /qnx/src/tests/*/arm/o.le.v7/MessageQMulti
index 49c49ad9e8a606e5f397f0f1d615d9226b20da96..997f8fe1c19d70008a939e38c30b4d6e1b1c3e99 100644 (file)
 SUBDIRS =  linux/etc linux/src/utils linux/src/api \
         linux/src/mm linux/src/daemon linux/src/tests
 
-# hook to remove libtools library extention files (.la)
-install-exec-hook:
-       rm -f $(DESTDIR)$(libdir)/*.la
-
 # where to install common headers on the system
 ipcincludedir = $(includedir)/ti/ipc
 
index 71849d7fc08aea50eda2ecafa01f851858f1eebe..e67de2b9b77c65fd76faabe86fd093070454de79 100644 (file)
@@ -108,6 +108,11 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DRA7XX_FALSE = @DRA7XX_FALSE@
+DRA7XX_TRUE = @DRA7XX_TRUE@
+DRM_FALSE = @DRM_FALSE@
+DRM_PREFIX = @DRM_PREFIX@
+DRM_TRUE = @DRM_TRUE@
 ECHO = @ECHO@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
@@ -605,8 +610,6 @@ info-am:
 install-data-am: install-ipcincludeHEADERS
 
 install-exec-am:
-       @$(NORMAL_INSTALL)
-       $(MAKE) $(AM_MAKEFLAGS) install-exec-hook
 
 install-info: install-info-recursive
 
@@ -644,19 +647,15 @@ uninstall-info: uninstall-info-recursive
        distclean-tags distcleancheck distdir distuninstallcheck dvi \
        dvi-am html html-am info info-am install install-am \
        install-data install-data-am install-exec install-exec-am \
-       install-exec-hook install-info install-info-am \
-       install-ipcincludeHEADERS install-man install-strip \
-       installcheck installcheck-am installdirs installdirs-am \
-       maintainer-clean maintainer-clean-generic \
-       maintainer-clean-recursive mostlyclean mostlyclean-generic \
-       mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
-       tags tags-recursive uninstall uninstall-am uninstall-info-am \
+       install-info install-info-am install-ipcincludeHEADERS \
+       install-man install-strip installcheck installcheck-am \
+       installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic maintainer-clean-recursive \
+       mostlyclean mostlyclean-generic mostlyclean-libtool \
+       mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+       uninstall uninstall-am uninstall-info-am \
        uninstall-ipcincludeHEADERS
 
-
-# hook to remove libtools library extention files (.la)
-install-exec-hook:
-       rm -f $(DESTDIR)$(libdir)/*.la
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
similarity index 64%
rename from qnx/src/ipc3x_dev/ti/syslink/headers/Makefile
rename to android/src/api/Android.mk
index a9197c8b49fb1530241b33925cd39c07e7fa40f8..b14d8360579cd292f34d7834ebeeffd1c8c48ed2 100644 (file)
 #   EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 
-ifndef QCONFIG
-QCONFIG=qconfig.mk
-endif
-include $(QCONFIG)
-
-#include $(MKFILES_ROOT)/qmacros.mk
-
-hinstall:
-install:
-       $(CP_HOST) -Rv $(PROJECT_ROOT)../inc/ti/ipc/rpmsg_omx.h $(INSTALL_ROOT_nto)/usr/include/ti/ipc/rpmsg_omx.h
-       $(CP_HOST) -Rv $(PROJECT_ROOT)../inc/ti/ipc/rpmsg_dce.h $(INSTALL_ROOT_nto)/usr/include/ti/ipc/rpmsg_dce.h
-       $(CP_HOST) -Rv $(PROJECT_ROOT)../inc/ti/ipc/ti_ipc.h $(INSTALL_ROOT_nto)/usr/include/ti/ipc/ti_ipc.h
-       $(CP_HOST) -Rv $(PROJECT_ROOT)../inc/ti/ipc/rpmsg_rpc.h $(INSTALL_ROOT_nto)/usr/include/ti/ipc/rpmsg_rpc.h
-       $(CP_HOST) -Rv $(PROJECT_ROOT)../inc/ti/ipc/HwSpinLockUsr.h $(INSTALL_ROOT_nto)/usr/include/ti/ipc/HwSpinLockUsr.h
-       $(CP_HOST) -Rv $(PROJECT_ROOT)../inc/GateHWSpinlock.h $(INSTALL_ROOT_nto)/usr/include/ti/ipc/GateHWSpinlock.h
-       $(CP_HOST) -Rv $(PROJECT_ROOT)../Std.h $(INSTALL_ROOT_nto)/usr/include/ti/ipc/ti/ipc/Std.h
-clean:
-       true
+LOCAL_PATH:= $(call my-dir)
 
+include $(CLEAR_VARS)
+
+IPC_ROOT := ../../..
+
+LOCAL_C_INCLUDES +=  $(LOCAL_PATH)/$(IPC_ROOT)/linux/include \
+                     $(LOCAL_PATH)/$(IPC_ROOT)/packages \
+                     $(LOCAL_PATH)/$(IPC_ROOT)/hlos_common/include
+
+LOCAL_CFLAGS += -DIPC_BUILDOS_ANDROID
+LOCAL_MODULE_TAGS:= optional
+
+LOCAL_SRC_FILES:= $(IPC_ROOT)/linux/src/api/MultiProc.c \
+                  $(IPC_ROOT)/linux/src/api/NameServer.c \
+                  $(IPC_ROOT)/linux/src/api/Ipc.c \
+                  $(IPC_ROOT)/linux/src/api/MessageQ.c
+
+LOCAL_SHARED_LIBRARIES := \
+    liblog libtiipcutils
+
+LOCAL_MODULE:= libtiipc
+include $(BUILD_SHARED_LIBRARY)
diff --git a/android/src/daemon/Android.mk b/android/src/daemon/Android.mk
new file mode 100644 (file)
index 0000000..595f5e4
--- /dev/null
@@ -0,0 +1,55 @@
+#
+#   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.
+#
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+IPC_ROOT := ../../..
+
+LOCAL_C_INCLUDES +=  $(LOCAL_PATH)/$(IPC_ROOT)/linux/include \
+                     $(LOCAL_PATH)/$(IPC_ROOT)/packages \
+                     $(LOCAL_PATH)/$(IPC_ROOT)/hlos_common/include
+
+LOCAL_CFLAGS += -DIPC_BUILDOS_ANDROID
+LOCAL_MODULE_TAGS:= optional
+
+LOCAL_SRC_FILES:= $(IPC_ROOT)/linux/src/daemon/lad.c \
+                  $(IPC_ROOT)/linux/src/daemon/MessageQ_daemon.c \
+                  $(IPC_ROOT)/linux/src/daemon/MultiProc_daemon.c \
+                  $(IPC_ROOT)/linux/src/daemon/NameServer_daemon.c \
+                  $(IPC_ROOT)/linux/src/daemon/MultiProcCfg_dra7xx.c
+
+LOCAL_SHARED_LIBRARIES := \
+    liblog libtiipcutils_lad libtiipc
+
+LOCAL_MODULE:= lad_dra7xx
+include $(BUILD_EXECUTABLE)
diff --git a/android/src/mm/Android.mk b/android/src/mm/Android.mk
new file mode 100644 (file)
index 0000000..7206df2
--- /dev/null
@@ -0,0 +1,49 @@
+#
+#   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.
+#
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+IPC_ROOT := ../../..
+
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(IPC_ROOT) \
+                    $(LOCAL_PATH)/$(IPC_ROOT)/packages
+
+LOCAL_CFLAGS += -DIPC_BUILDOS_ANDROID
+LOCAL_MODULE_TAGS:= optional
+
+LOCAL_SRC_FILES:= $(IPC_ROOT)/packages/ti/ipc/mm/MmRpc.c
+LOCAL_SHARED_LIBRARIES := \
+    liblog
+
+LOCAL_MODULE:= libmmrpc
+include $(BUILD_SHARED_LIBRARY)
diff --git a/android/src/tests/Android.mk b/android/src/tests/Android.mk
new file mode 100644 (file)
index 0000000..2cf11e4
--- /dev/null
@@ -0,0 +1,109 @@
+#
+#   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.
+#
+
+LOCAL_PATH:= $(call my-dir)
+
+##### MessageQApp #####
+include $(CLEAR_VARS)
+
+IPC_ROOT := ../../..
+
+LOCAL_C_INCLUDES +=  $(LOCAL_PATH)/$(IPC_ROOT)/linux/include \
+                     $(LOCAL_PATH)/$(IPC_ROOT)/packages
+
+LOCAL_CFLAGS += -DIPC_BUILDOS_ANDROID
+LOCAL_MODULE_TAGS:= optional
+
+LOCAL_SRC_FILES:= $(IPC_ROOT)/linux/src/tests/MessageQApp.c
+
+LOCAL_SHARED_LIBRARIES := \
+    liblog libtiipcutils libtiipc
+
+LOCAL_MODULE:= messageQApp
+include $(BUILD_EXECUTABLE)
+
+##### MessageQBench #####
+include $(CLEAR_VARS)
+
+IPC_ROOT := ../../..
+
+LOCAL_C_INCLUDES +=  $(LOCAL_PATH)/$(IPC_ROOT)/linux/include \
+                     $(LOCAL_PATH)/$(IPC_ROOT)/packages
+
+LOCAL_CFLAGS += -DIPC_BUILDOS_ANDROID
+LOCAL_MODULE_TAGS:= optional
+
+LOCAL_SRC_FILES:= $(IPC_ROOT)/linux/src/tests/MessageQBench.c
+
+LOCAL_SHARED_LIBRARIES := \
+    liblog libtiipcutils libtiipc
+
+LOCAL_MODULE:= messageQBench
+include $(BUILD_EXECUTABLE)
+
+##### MessageQMulti #####
+include $(CLEAR_VARS)
+
+IPC_ROOT := ../../..
+
+LOCAL_C_INCLUDES +=  $(LOCAL_PATH)/$(IPC_ROOT)/linux/include \
+                     $(LOCAL_PATH)/$(IPC_ROOT)/packages
+
+LOCAL_CFLAGS += -DIPC_BUILDOS_ANDROID
+LOCAL_MODULE_TAGS:= optional
+
+LOCAL_SRC_FILES:= $(IPC_ROOT)/linux/src/tests/MessageQMulti.c
+
+LOCAL_SHARED_LIBRARIES := \
+    liblog libtiipcutils libtiipc
+
+LOCAL_MODULE:= messageQMulti
+include $(BUILD_EXECUTABLE)
+
+##### NameServerApp #####
+include $(CLEAR_VARS)
+
+IPC_ROOT := ../../..
+
+LOCAL_C_INCLUDES +=  $(LOCAL_PATH)/$(IPC_ROOT)/linux/include \
+                     $(LOCAL_PATH)/$(IPC_ROOT)/hlos_common/include \
+                     $(LOCAL_PATH)/$(IPC_ROOT)/packages
+
+LOCAL_CFLAGS += -DIPC_BUILDOS_ANDROID
+LOCAL_MODULE_TAGS:= optional
+
+LOCAL_SRC_FILES:= $(IPC_ROOT)/linux/src/tests/NameServerApp.c
+
+LOCAL_SHARED_LIBRARIES := \
+    liblog libtiipcutils libtiipc
+
+LOCAL_MODULE:= nameServerApp
+include $(BUILD_EXECUTABLE)
diff --git a/android/src/utils/Android.mk b/android/src/utils/Android.mk
new file mode 100644 (file)
index 0000000..c2f896d
--- /dev/null
@@ -0,0 +1,78 @@
+#
+#   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.
+#
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+IPC_ROOT := ../../..
+
+LOCAL_C_INCLUDES +=  $(LOCAL_PATH)/$(IPC_ROOT)/linux/include \
+                     $(LOCAL_PATH)/$(IPC_ROOT)/packages \
+                     $(LOCAL_PATH)/$(IPC_ROOT)/hlos_common/include
+
+LOCAL_CFLAGS += -DIPC_BUILDOS_ANDROID
+LOCAL_MODULE_TAGS:= optional
+
+LOCAL_SRC_FILES:= $(IPC_ROOT)/linux/src/utils/LAD_client.c \
+                  $(IPC_ROOT)/linux/src/utils/SocketFxns.c \
+                  $(IPC_ROOT)/linux/src/utils/MultiProc_app.c \
+                  $(IPC_ROOT)/hlos_common/src/utils/MultiProc.c
+
+LOCAL_SHARED_LIBRARIES := \
+    liblog
+
+LOCAL_MODULE:= libtiipcutils
+include $(BUILD_SHARED_LIBRARY)
+
+##### libtiipcutils_lad #####
+include $(CLEAR_VARS)
+
+IPC_ROOT := ../../..
+
+LOCAL_C_INCLUDES +=  $(LOCAL_PATH)/$(IPC_ROOT)/linux/include \
+                     $(LOCAL_PATH)/$(IPC_ROOT)/packages \
+                     $(LOCAL_PATH)/$(IPC_ROOT)/hlos_common/include
+
+LOCAL_CFLAGS += -DIPC_BUILDOS_ANDROID
+LOCAL_MODULE_TAGS:= optional
+
+LOCAL_SRC_FILES:= $(IPC_ROOT)/linux/src/utils/LAD_client.c \
+                  $(IPC_ROOT)/linux/src/utils/SocketFxns.c \
+                  $(IPC_ROOT)/hlos_common/src/utils/MultiProc.c
+
+LOCAL_SHARED_LIBRARIES := \
+    liblog
+
+LOCAL_ALLOW_UNDEFINED_SYMBOLS:= true
+
+LOCAL_MODULE:= libtiipcutils_lad
+include $(BUILD_SHARED_LIBRARY)
index 8022d7439ca556270c953216e7eaba5e42cf7d96..6996fa7e10ad5c381402937fc1e991c4bf3808a4 100755 (executable)
--- a/configure
+++ b/configure
@@ -461,7 +461,7 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
-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 KERNEL_INSTALL_DIR OMAPL138_TRUE OMAPL138_FALSE TCI6614_TRUE TCI6614_FALSE TCI6636_TRUE TCI6636_FALSE TCI6638_TRUE TCI6638_FALSE OMAP54XX_SMP_TRUE OMAP54XX_SMP_FALSE CMEM_TRUE CMEM_FALSE KDIR_TRUE KDIR_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 KERNEL_INSTALL_DIR DRM_PREFIX OMAPL138_TRUE OMAPL138_FALSE TCI6614_TRUE TCI6614_FALSE TCI6636_TRUE TCI6636_FALSE TCI6638_TRUE TCI6638_FALSE OMAP54XX_SMP_TRUE OMAP54XX_SMP_FALSE DRA7XX_TRUE DRA7XX_FALSE CMEM_TRUE CMEM_FALSE KDIR_TRUE KDIR_FALSE DRM_TRUE DRM_FALSE LIBOBJS LTLIBOBJS'
 ac_subst_files=''
 
 # Initialize some variables set by options.
@@ -946,6 +946,10 @@ ac_env_KERNEL_INSTALL_DIR_set=${KERNEL_INSTALL_DIR+set}
 ac_env_KERNEL_INSTALL_DIR_value=$KERNEL_INSTALL_DIR
 ac_cv_env_KERNEL_INSTALL_DIR_set=${KERNEL_INSTALL_DIR+set}
 ac_cv_env_KERNEL_INSTALL_DIR_value=$KERNEL_INSTALL_DIR
+ac_env_DRM_PREFIX_set=${DRM_PREFIX+set}
+ac_env_DRM_PREFIX_value=$DRM_PREFIX
+ac_cv_env_DRM_PREFIX_set=${DRM_PREFIX+set}
+ac_cv_env_DRM_PREFIX_value=$DRM_PREFIX
 
 #
 # Report the --help message.
@@ -1060,12 +1064,13 @@ Some influential environment variables:
   CXXFLAGS    C++ compiler flags
   CXXCPP      C++ preprocessor
   PLATFORM    Platform to build. Options are: 'omapl138' 'omap54xx_smp'
-              'tci6636' and 'tci6638'. If not defined all platforms will be
-              built.
+              'tci6636' 'tci6638' and 'dra7xx'. If not defined all platforms
+              will be built.
   CMEM_INSTALL_DIR
               Installation path directory to the CMEM libraries
   KERNEL_INSTALL_DIR
               Installation path to the Linux kernel.
+  DRM_PREFIX  Installation location to the DRM library.
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -3711,7 +3716,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 3714 "configure"' > conftest.$ac_ext
+  echo '#line 3719 "configure"' > conftest.$ac_ext
   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -6136,11 +6141,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:6139: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:6144: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:6143: \$? = $ac_status" >&5
+   echo "$as_me:6148: \$? = $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.
@@ -6404,11 +6409,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:6407: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:6412: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:6411: \$? = $ac_status" >&5
+   echo "$as_me:6416: \$? = $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.
@@ -6508,11 +6513,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:6511: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:6516: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:6515: \$? = $ac_status" >&5
+   echo "$as_me:6520: \$? = $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
@@ -8853,7 +8858,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 8856 "configure"
+#line 8861 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -8953,7 +8958,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 8956 "configure"
+#line 8961 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11293,11 +11298,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:11296: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:11301: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:11300: \$? = $ac_status" >&5
+   echo "$as_me:11305: \$? = $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.
@@ -11397,11 +11402,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:11400: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:11405: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:11404: \$? = $ac_status" >&5
+   echo "$as_me:11409: \$? = $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
@@ -12704,11 +12709,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:12707: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:12712: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:12711: \$? = $ac_status" >&5
+   echo "$as_me:12716: \$? = $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.
@@ -12972,11 +12977,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:12975: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:12980: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:12979: \$? = $ac_status" >&5
+   echo "$as_me:12984: \$? = $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.
@@ -13076,11 +13081,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:13079: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13084: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13083: \$? = $ac_status" >&5
+   echo "$as_me:13088: \$? = $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
@@ -16775,6 +16780,7 @@ done
 
 
 
+
 # Test platform variable for setting
 if test "x$PLATFORM" = "xomapl138"; then
   { echo "$as_me:$LINENO: PLATFORM is set to ${PLATFORM}" >&5
@@ -16795,6 +16801,10 @@ else
   if test "x$PLATFORM" = "xomap54xx_smp"; then
   { echo "$as_me:$LINENO: PLATFORM is set to ${PLATFORM}" >&5
 echo "$as_me: PLATFORM is set to ${PLATFORM}" >&6;}
+else
+  if test "x$PLATFORM" = "xdra7xx"; then
+  { echo "$as_me:$LINENO: PLATFORM is set to ${PLATFORM}" >&5
+echo "$as_me: PLATFORM is set to ${PLATFORM}" >&6;}
 else
   if test "x$PLATFORM" = "x"; then
   { echo "$as_me:$LINENO: PLATFORM is not set. All supported platforms will be built ...." >&5
 
 fi
 
-
-# Test platform for omap5 variable and require a KERNEL path
-if test "x$PLATFORM" = "xomap54xx_smp"; then
-  if test "x$KERNEL_INSTALL_DIR" = "x"; then
-  { { echo "$as_me:$LINENO: error: Kernel path for ${PLATFORM} is not set" >&5
-echo "$as_me: error: Kernel path for ${PLATFORM} is not set" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
 fi
 
 
@@ -16832,12 +16833,21 @@ if test "x$PLATFORM" = "x"; then
   KERNEL_INSTALL_DIR=
 fi
 
+if test "x$PLATFORM" = "x"; then
+  DRM_PREFIX=
+fi
+
+if test "x$PLATFORM" = "x"; then
+  CMEM_INSTALL_DIR=
+fi
+
 
 # Export optional user variable to Makefile(s)
 
 
 
 
+
 # Define specific variables to be used in Makefile.am
 
 
 
 
 
+if test "x$PLATFORM" = "xdra7xx"; then
+  DRA7XX_TRUE=
+  DRA7XX_FALSE='#'
+else
+  DRA7XX_TRUE='#'
+  DRA7XX_FALSE=
+fi
+
+
+
 if test "x$CMEM_INSTALL_DIR" != "x"; then
   CMEM_TRUE=
   CMEM_FALSE='#'
@@ -16910,6 +16930,16 @@ else
 fi
 
 
+
+if test "x$DRM_PREFIX" != "x"; then
+  DRM_TRUE=
+  DRM_FALSE='#'
+else
+  DRM_TRUE='#'
+  DRM_FALSE=
+fi
+
+
 # Generate Makefile(s)
           ac_config_files="$ac_config_files Makefile"
 
@@ -17117,6 +17147,13 @@ echo "$as_me: error: conditional \"OMAP54XX_SMP\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
+if test -z "${DRA7XX_TRUE}" && test -z "${DRA7XX_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DRA7XX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DRA7XX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
 if test -z "${CMEM_TRUE}" && test -z "${CMEM_FALSE}"; then
   { { echo "$as_me:$LINENO: error: conditional \"CMEM\" was never defined.
 Usually this means the macro was only invoked conditionally." >&5
@@ -17131,6 +17168,13 @@ echo "$as_me: error: conditional \"KDIR\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
+if test -z "${DRM_TRUE}" && test -z "${DRM_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DRM\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DRM\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
 
 : ${CONFIG_STATUS=./config.status}
 ac_clean_files_save=$ac_clean_files
@@ -17732,6 +17776,7 @@ s,@AM_LDFLAGS@,$AM_LDFLAGS,;t t
 s,@PLATFORM@,$PLATFORM,;t t
 s,@CMEM_INSTALL_DIR@,$CMEM_INSTALL_DIR,;t t
 s,@KERNEL_INSTALL_DIR@,$KERNEL_INSTALL_DIR,;t t
+s,@DRM_PREFIX@,$DRM_PREFIX,;t t
 s,@OMAPL138_TRUE@,$OMAPL138_TRUE,;t t
 s,@OMAPL138_FALSE@,$OMAPL138_FALSE,;t t
 s,@TCI6614_TRUE@,$TCI6614_TRUE,;t t
@@ -17742,10 +17787,14 @@ s,@TCI6638_TRUE@,$TCI6638_TRUE,;t t
 s,@TCI6638_FALSE@,$TCI6638_FALSE,;t t
 s,@OMAP54XX_SMP_TRUE@,$OMAP54XX_SMP_TRUE,;t t
 s,@OMAP54XX_SMP_FALSE@,$OMAP54XX_SMP_FALSE,;t t
+s,@DRA7XX_TRUE@,$DRA7XX_TRUE,;t t
+s,@DRA7XX_FALSE@,$DRA7XX_FALSE,;t t
 s,@CMEM_TRUE@,$CMEM_TRUE,;t t
 s,@CMEM_FALSE@,$CMEM_FALSE,;t t
 s,@KDIR_TRUE@,$KDIR_TRUE,;t t
 s,@KDIR_FALSE@,$KDIR_FALSE,;t t
+s,@DRM_TRUE@,$DRM_TRUE,;t t
+s,@DRM_FALSE@,$DRM_FALSE,;t t
 s,@LIBOBJS@,$LIBOBJS,;t t
 s,@LTLIBOBJS@,$LTLIBOBJS,;t t
 CEOF
@@ -18232,6 +18281,9 @@ You have configured to build for the '${PLATFORM}' platform
 Your KERNEL installation directory is set to:
     '${KERNEL_INSTALL_DIR}'
 
+Your DRM installation directory is set to:
+    '${DRM_PREFIX}'
+
 Your CMEM installation directory is set to:
     '${CMEM_INSTALL_DIR}'
 
index e41feaad06802dc96902f13eb0e1c7a2e4e8a46e..355d2286af777878544bb4c6f9024494121699bd 100644 (file)
@@ -67,9 +67,10 @@ AC_SUBST([AM_LDFLAGS])
 
 # Add config variables/options and check them
 # Note that 6614 isn't documented and, though it may work, is planned for removal
-AC_ARG_VAR(PLATFORM, Platform to build. Options are: 'omapl138' 'omap54xx_smp' 'tci6636' and 'tci6638'. If not defined all platforms will be built.)
+AC_ARG_VAR(PLATFORM, Platform to build. Options are: 'omapl138' 'omap54xx_smp' 'tci6636' 'tci6638' and 'dra7xx'. If not defined all platforms will be built.)
 AC_ARG_VAR(CMEM_INSTALL_DIR, Installation path directory to the CMEM libraries)
 AC_ARG_VAR(KERNEL_INSTALL_DIR, Installation path to the Linux kernel.)
+AC_ARG_VAR(DRM_PREFIX, Installation location to the DRM library.)
 
 # Test platform variable for setting
 AS_IF([test "x$PLATFORM" = "xomapl138"],
@@ -82,22 +83,22 @@ AS_IF([test "x$PLATFORM" = "xomapl138"],
   [AC_MSG_NOTICE([PLATFORM is set to ${PLATFORM}])],
   [AS_IF([test "x$PLATFORM" = "xomap54xx_smp"],
   [AC_MSG_NOTICE([PLATFORM is set to ${PLATFORM}])],
+  [AS_IF([test "x$PLATFORM" = "xdra7xx"],
+  [AC_MSG_NOTICE([PLATFORM is set to ${PLATFORM}])],
   [AS_IF([test "x$PLATFORM" = "x"],
   [AC_MSG_NOTICE([PLATFORM is not set. All supported platforms will be built ....])],
-  [AC_MSG_ERROR([PLATFORM is set to "${PLATFORM}": run ./configure --help for available PLATFORM options])])])])])])])
-
-# Test platform for omap5 variable and require a KERNEL path
-AS_IF([test "x$PLATFORM" = "xomap54xx_smp"],
-   [AS_IF([test "x$KERNEL_INSTALL_DIR" = "x"],
-   [AC_MSG_ERROR([Kernel path for ${PLATFORM} is not set])])])
+  [AC_MSG_ERROR([PLATFORM is set to "${PLATFORM}": run ./configure --help for available PLATFORM options])])])])])])])])
 
 # Ignore KERNEL path when no platform is set
 AS_IF([test "x$PLATFORM" = "x"], [KERNEL_INSTALL_DIR=])
+AS_IF([test "x$PLATFORM" = "x"], [DRM_PREFIX=])
+AS_IF([test "x$PLATFORM" = "x"], [CMEM_INSTALL_DIR=])
 
 # Export optional user variable to Makefile(s)
 AC_SUBST([PLATFORM])
 AC_SUBST([CMEM_INSTALL_DIR])
 AC_SUBST([KERNEL_INSTALL_DIR])
+AC_SUBST([DRM_PREFIX])
 
 # Define specific variables to be used in Makefile.am
 AM_CONDITIONAL([OMAPL138], [test "x$PLATFORM" = "xomapl138"])
@@ -105,8 +106,10 @@ AM_CONDITIONAL([TCI6614], [test "x$PLATFORM" = "xtci6614"])
 AM_CONDITIONAL([TCI6636], [test "x$PLATFORM" = "xtci6636"])
 AM_CONDITIONAL([TCI6638], [test "x$PLATFORM" = "xtci6638"])
 AM_CONDITIONAL([OMAP54XX_SMP], [test "x$PLATFORM" = "xomap54xx_smp"])
+AM_CONDITIONAL([DRA7XX], [test "x$PLATFORM" = "xdra7xx"])
 AM_CONDITIONAL([CMEM], [test "x$CMEM_INSTALL_DIR" != "x"])
 AM_CONDITIONAL([KDIR], [test "x$KERNEL_INSTALL_DIR" != "x"])
+AM_CONDITIONAL([DRM], [test "x$DRM_PREFIX" != "x"])
 
 # Generate Makefile(s)
 AC_CONFIG_FILES([Makefile])
@@ -131,6 +134,9 @@ You have configured to build for the '${PLATFORM}' platform
 Your KERNEL installation directory is set to:
     '${KERNEL_INSTALL_DIR}'
 
+Your DRM installation directory is set to:
+    '${DRM_PREFIX}'
+
 Your CMEM installation directory is set to:
     '${CMEM_INSTALL_DIR}'
 
index b168bd021c6294322ed39cd00d5fb0ed45243fa8..70238f9e8af4996640b29cfb903147518928f488 100644 (file)
@@ -37,8 +37,9 @@
 
 #define MAXNAMEINCHAR 80
 #define NAMEARRAYSZIE   (((MAXNAMEINCHAR - 1) / sizeof(Bits32)) + 1)
+#define MAXVALUELEN   75
 
-#define NAMESERVER_GET_TIMEOUT  10 /* Seconds */
+#define NAMESERVER_GET_TIMEOUT  20000 /* microseconds */
 
 #define NAMESERVER_MSG_TOKEN   0x5678abcd
 
@@ -52,4 +53,6 @@ typedef struct NameServerMsg {
     Bits32  instanceName[NAMEARRAYSZIE];
                                 /* name of NameServer entry         */
     Bits32  name[NAMEARRAYSZIE];
+    Bits32  valueLen;              /* len of value                  */
+    Bits32  valueBuf[MAXVALUELEN]; /* value buffer                  */
 } NameServerMsg;
index 7e4cc755d8a1b37340ae0a7add5bab66c2aa648d..b2e455f19c6c1bc86f7f7e7abc7cac45f6eab30b 100644 (file)
  *
  *  These settings may be a function of the following global variables:
  *
- *     environment a hash table of environment strings
+ *      environment a hash table of environment strings
  *
- *     arguments   an array of string arguments to the _config.bld script
- *                 initialized as follows:
- *                     arguments[0] - the file name of the _config.bld script
- *                     arguments[1] - the first argument specified in XDCARGS
- *                         :
- *                     arguments[n] - the n'th argument in XDCARGS
+ *      arguments   an array of string arguments to the script
+ *                  initialized as follows:
+ *                      arguments[0] - the file name of the script
+ *                      arguments[1] - the first argument specified in XDCARGS
+ *                          :
+ *                      arguments[n] - the n'th argument in XDCARGS
  *
- *     Build       an alias for xdc.om.xdc.bld.BuildEnvironment
+ *      Build       an alias for xdc.om.xdc.bld.BuildEnvironment
  */
 
+var Build = xdc.useModule('xdc.bld.BuildEnvironment');
+var Pkg = xdc.useModule('xdc.bld.PackageContents');
+
 /* 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"             : " -mi10 -mo -pds=71",
+    "ti.targets.elf.C64T"             : c6xOpts,
     "ti.targets.elf.C66"              : c6xOpts,
     "ti.targets.elf.C66_big_endian"   : c6xOpts,
     "ti.targets.elf.C674"             : c6xOpts,
@@ -104,73 +107,135 @@ var ccOpts = {
     "gnu.targets.arm.A15F"            : " -g "
 };
 
-/* Enable building SMP-BIOS enabled libraries for targets that support it */
-if (Pkg.name.match(/^ti\.sdo\.(ipc|utils)/)) {
-    xdc.module("ti.targets.arm.elf.M3").profiles["smp"] =
-            xdc.module("ti.targets.arm.elf.M3").profiles["debug"];
-    xdc.module("ti.targets.arm.elf.M4").profiles["smp"] =
-            xdc.module("ti.targets.arm.elf.M4").profiles["debug"];
-}
+var lnkOpts = {
+    "ti.targets.elf.C66"              : " --cinit_compression=off",
+    "ti.targets.arm.elf.M4"           : " --retain=.resource_table" +
+                                        " --cinit_compression=off"
+};
+
+var platform = "";
+var smpEnabled = true;
 
 /* initialize local vars with those set in xdcpaths.mak (via XDCARGS) */
 for (arg = 0; arg < arguments.length; arg++) {
+    /* split each arg into its '+' separated parts */
+    var configParts = arguments[arg].split(";");
+    // print("arg " + arg + " has " + configParts.length + " parts");
+
+    /* if "known args come in, filter them... else they're targets */
+    if (configParts[0].split("=")[0] == "PLATFORM") {
+        // print("FOUND PLATFORM ARG - " + configParts[0]);
+        platform = configParts[0].split("=")[1];
+        continue;
+    }
+    else if (configParts[0].split("=")[0] == "BIOS_SMPENABLED") {
+        // print("FOUND SMP_ENABLED ARG - " + configParts[0]);
+        smpEnabled = configParts[0].split("=")[1].match(/^1$/);
+        continue;
+    }
     /*
      * Get the compiler's installation directory.
      * For "ti.targets.elf.C674=/vendors/c6x/7.2.0", we get "/vendors/c6x/7.2.0"
      */
-    var targetName = arguments[arg].split("=")[0];
-    var rootDir = arguments[arg].split("=")[1];
+    var targetName = configParts[0].split("=")[0];
+    var rootDir = configParts[0].split("=")[1];
 
     /* only build for the specified compilers */
     if (rootDir == "" || rootDir == undefined) {
         continue;
     }
 
+//    print("Building '" + targetName + "' using '" + rootDir + "' ...");
+
     var target = xdc.useModule(targetName);
     target.rootDir = rootDir;
-    target.ccOpts.suffix += ccOpts[targetName];
+    if (ccOpts[targetName] != undefined) {
+        target.ccOpts.suffix += ccOpts[targetName];
+    }
+    if (lnkOpts[targetName] != undefined) {
+        target.lnkOpts.suffix += lnkOpts[targetName];
+    }
+
+    /* for all the other parts, assign target.<left> = <right> */
+    for (var i = 1; i < configParts.length; i++) {
+        var modCfgParam = configParts[i].split("=")[0];
+        var modCfgValue = configParts[i].split("=")[1];
+        var modCfgIndex = modCfgParam.split(".");
+        var element = target;
+
+//        print("Configuring target." + modCfgParam + " = " + modCfgValue);
+
+        for (j = 0; j < (modCfgIndex.length -1); j++) {
+                element = element[modCfgIndex[j]];
+        }
+        element[modCfgIndex[j]] = modCfgValue;
+    }
 
     /* Add appropriate platforms to build for based on target name */
     if (targetName.match(/elf\.C674/)) {
-        target.platforms = [ "ti.platforms.evmOMAPL138:DSP" ];
+        if (platform == 'omapl138') {
+            target.platforms.$add("ti.platforms.evmOMAPL138:DSP");
+        }
     }
 
     if (targetName.match(/elf\.C66$/)) {
-        target.lnkOpts.prefix += " -e=ti_sysbios_family_c64p_Hwi0";
-        target.lnkOpts.prefix += " --cinit_compression=off";
-        target.platforms = [
-            //"ti.platforms.simKepler"
-            //"ti.platforms.evm6614:DSP"
-            "ti.platforms.evmTCI6636K2H",
-            "ti.platforms.evmTCI6638K2K",
-            "ti.platforms.evmDRA7XX:dsp1",
-        ];
+        switch (platform) {
+            case 'tci6636':
+                target.platforms.$add("ti.platforms.evmTCI6636K2H");
+                break;
+
+            case 'tci6638':
+                target.platforms.$add("ti.platforms.evmTCI6638K2K");
+                break;
+
+            case 'dra7xx':
+                target.platforms.$add("ti.platforms.evmDRA7XX:dsp1");
+                target.platforms.$add("ti.platforms.evmDRA7XX:dsp2");
+                break;
+
+            default:
+                print("Unknown platform, skipping " + platform);
+                break;
+        }
     }
 
     if (targetName.match(/elf\.C64T/)) {
-        target.lnkOpts.prefix += " -e=ti_sysbios_family_c64p_Hwi0";
-
-        target.platforms = [
-            "ti.platforms.sdp5430:DSP",
-        ];
+        if (platform == 'omap54xx_smp') {
+            target.platforms.$add("ti.platforms.sdp5430:DSP");
+        }
     }
 
     if (targetName.match(/elf\.M4$/)) {
-        target.lnkOpts.prefix += " --retain=.resource_table";
-        target.lnkOpts.prefix += " --cinit_compression=off";
+        switch (platform) {
+            case 'omap54xx_smp':
+                target.platforms.$add("ti.platforms.sdp5430:IPU");
+                break;
 
-        target.platforms =  [
-            "ti.platforms.sdp5430:IPU",
-            "ti.platforms.evmDRA7XX:ipu2",
-        ];
+            case 'dra7xx':
+                target.platforms.$add("ti.platforms.evmDRA7XX:ipu2");
+                target.platforms.$add("ti.platforms.evmDRA7XX:ipu1");
+                break;
+
+            default:
+                print("Unknown platform, skipping " + platform);
+                break;
+        }
     }
 
     Build.targets.$add(target);
 }
 
+if (smpEnabled) {
+    /* Enable building SMP-BIOS enabled libraries for targets that support it */
+    if (Pkg.name.match(/^ti\.sdo\.(ipc|utils)/)) {
+        xdc.module("ti.targets.arm.elf.M3").profiles["smp"] =
+                xdc.module("ti.targets.arm.elf.M3").profiles["debug"];
+        xdc.module("ti.targets.arm.elf.M4").profiles["smp"] =
+                xdc.module("ti.targets.arm.elf.M4").profiles["debug"];
+    }
+}
 
 /* lib/ is a generated directory that 'xdc clean' should remove */
-var Pkg = xdc.useModule('xdc.bld.PackageContents');
 Pkg.generatedFiles.$add("lib/");
 
 /*
index 7c211646b80f97cc05d7f2842cd46a16e5d86f67..de0628e20244c1aa0b6860e66ac69a85cdb4a626 100644 (file)
@@ -72,6 +72,8 @@ include ./products.mak
 #     http://rtsc.eclipse.org/docs-tip/Command_-_xdc#Environment_Variables
 #
 XDCARGS= \
+    PLATFORM=\"$(PLATFORM)\" \
+    BIOS_SMPENABLED=\"$(BIOS_SMPENABLED)\" \
     ti.targets.C28_large=\"$(ti.targets.C28_large)\" \
     ti.targets.C28_float=\"$(ti.targets.C28_float)\" \
     ti.targets.C64P=\"$(ti.targets.C64P)\" \
index 3688e627603428db43aa4919078b7dfc2f50203d..788a5a254b2ebde52603a2e13e261ec375e4008d 100644 (file)
@@ -41,7 +41,9 @@ config:
             CC=$(TOOLCHAIN_PREFIX)gcc \
             PLATFORM=$(PLATFORM) \
             CMEM_INSTALL_DIR=$(CMEM_INSTALL_DIR) \
-            KERNEL_INSTALL_DIR=$(KERNEL_INSTALL_DIR)
+            KERNEL_INSTALL_DIR=$(KERNEL_INSTALL_DIR) \
+            DRM_PREFIX=$(DRM_PREFIX)
+
 
 config-static:
        @echo "Configuring Linux Ipc static only libaries ..."
@@ -49,7 +51,8 @@ config-static:
             CC=$(TOOLCHAIN_PREFIX)gcc \
             PLATFORM=$(PLATFORM) \
             CMEM_INSTALL_DIR=$(CMEM_INSTALL_DIR) \
-            KERNEL_INSTALL_DIR=$(KERNEL_INSTALL_DIR)
+            KERNEL_INSTALL_DIR=$(KERNEL_INSTALL_DIR) \
+            DRM_PREFIX=$(DRM_PREFIX)
 
 
 config-shared:
@@ -58,4 +61,5 @@ config-shared:
             CC=$(TOOLCHAIN_PREFIX)gcc \
             PLATFORM=$(PLATFORM) \
             CMEM_INSTALL_DIR=$(CMEM_INSTALL_DIR) \
-            KERNEL_INSTALL_DIR=$(KERNEL_INSTALL_DIR)
+            KERNEL_INSTALL_DIR=$(KERNEL_INSTALL_DIR) \
+            DRM_PREFIX=$(DRM_PREFIX)
index 7b88b866ecfd04973274639457ae9fa6821d7359..38b6aec786e1f495bb17c1cde80500c5b6106dc2 100644 (file)
@@ -74,6 +74,11 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DRA7XX_FALSE = @DRA7XX_FALSE@
+DRA7XX_TRUE = @DRA7XX_TRUE@
+DRM_FALSE = @DRM_FALSE@
+DRM_PREFIX = @DRM_PREFIX@
+DRM_TRUE = @DRM_TRUE@
 ECHO = @ECHO@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
index 39ed3858e654c9455f5f5d4389acf2057775a1fe..4d3a031b5782f6f7f6be244a1a3a197b88b5854a 100644 (file)
@@ -65,6 +65,8 @@ typedef struct MultiProc_Config_tag {
     /*!< Max number of procs for particular system */
     Char   nameList [MultiProc_MAXPROCESSORS][MultiProc_MAXNAMELENGTH];
     /*!< Name List for processors in the system */
+    Int32  rprocList[MultiProc_MAXPROCESSORS];
+    /*!< Linux "remoteproc index" for processors in the system */
     UInt16 id;
     /*!< Local Proc ID. This needs to be set before calling any other APIs */
 } MultiProc_Config;
@@ -85,6 +87,17 @@ typedef struct MultiProc_Config_tag {
  */
 Void MultiProc_getConfig (MultiProc_Config * cfg);
 
+/*!
+ *  @brief     Initialize the configuration for the MultiProc module.
+ *
+ *             This function is called to initialize the configuration for
+ *              MultiProc.
+ *
+ *  @param     cfg        Pointer to a populated MultiProc configuration
+ *                        structure.
+ */
+Void _MultiProc_initCfg(MultiProc_Config * cfg);
+
 /* This exported from daemon/MultiProcCfg_<PLATFORM>.c: */
 extern MultiProc_Config _MultiProc_cfg;
 
index 275690585b668aee328565b4b22d78fe5457aedf..d184df4f073b39f72c9e0a4c2f945cc973871970 100644 (file)
@@ -76,8 +76,14 @@ extern FILE *logPtr;
 
 
 /* LAD commmand FIFO strings: */
+#if defined (IPC_BUILDOS_ANDROID)
+#define LAD_COMMANDFIFO         "/data/local/tmp/LAD/LADCMDS"
+#define LAD_WORKINGDIR          "/data/local/tmp/LAD/"
+#else
 #define LAD_COMMANDFIFO         "/tmp/LAD/LADCMDS"
 #define LAD_WORKINGDIR          "/tmp/LAD/"
+#endif
+
 #define LAD_RESPONSEFIFOPATH    LAD_WORKINGDIR
 #define LAD_PROTOCOLVERSION     "03000000"    /*  MMSSRRRR */
 
index 63adabf7ac3fd0482d3fcc4060fe58785d6f791f..43891966439c27c3f8587f17df82030cd513816b 100644 (file)
@@ -94,6 +94,10 @@ typedef PVOID           HANDLE;         /* h    */
 #define FAIL   -1
 //#define NULL            '\0'
 
+#if defined (IPC_BUILDOS_ANDROID)
+#define MAX(a,b) (((a)>(b))?(a):(b))
+#endif
+
 #if defined (__cplusplus)
 }
 #endif
index ebd6c470f46ae483d12dc0e30f1cc439b185583e..214c6264612627943c5e500607488ba11093372d 100644 (file)
 
 /* IPC startup/shutdown stuff: */
 #include <ti/ipc/MultiProc.h>
+#include <_MultiProc.h>
 #include <_MessageQ.h>
 #include <_NameServer.h>
 
-MultiProc_Config _MultiProc_cfg;
-
 static LAD_ClientHandle ladHandle;
 
 static void cleanup(int arg);
@@ -73,9 +72,10 @@ Int Ipc_start (Void)
 {
     MessageQ_Config   msgqCfg;
     MultiProc_Config  mpCfg;
-    Int32             status = Ipc_S_SUCCESS;
+    Int32             status;
     LAD_Status        ladStatus;
     UInt16            rprocId;
+    Int32             attachedAny = 0;
 
     /* Catch ctrl-C, and cleanup: */
     (void) signal(SIGINT, cleanup);
@@ -87,9 +87,12 @@ Int Ipc_start (Void)
         goto exit;
     }
 
-    /* Setup and get MultiProc configuration from LAD */
+    /* 
+     * Get MultiProc configuration from LAD and initialize local MultiProc
+     * config structure.
+     */
     MultiProc_getConfig(&mpCfg);
-    _MultiProc_cfg = mpCfg;
+    _MultiProc_initCfg(&mpCfg);
 
     status = NameServer_setup();
     if (status >= 0) {
@@ -97,19 +100,28 @@ Int Ipc_start (Void)
         MessageQ_setup(&msgqCfg);
 
         /* Now attach to all remote processors, assuming they are up. */
-        for (rprocId = 0;
-             (rprocId < MultiProc_getNumProcessors()) && (status >= 0);
-             rprocId++) {
-           if (0 == rprocId) {
-               /* Skip host, which should always be 0th entry. */
-               continue;
-           }
-           status = MessageQ_attach (rprocId, NULL);
-           if (status < 0) {
-              printf("Ipc_start: MessageQ_attach(%d) failed: %d\n",
-                     rprocId, status);
-              status = Ipc_E_FAIL;
-           }
+        for (rprocId = 0; rprocId < MultiProc_getNumProcessors(); rprocId++) {
+            if (0 == rprocId) {
+                /* Skip host, which should always be 0th entry. */
+                continue;
+            }
+            status = MessageQ_attach(rprocId, NULL);
+            if (status == MessageQ_E_RESOURCE) {
+                continue;
+            }
+            if (status < 0) {
+                printf("Ipc_start: MessageQ_attach(%d) failed: %d\n",
+                       rprocId, status);
+                status = Ipc_E_FAIL;
+
+                break;
+            }
+            else {
+                attachedAny = 1;
+            }
+        }
+        if (attachedAny) {
+            status = Ipc_S_SUCCESS;
         }
     }
     else {
index 6d35817a2d98f9b0598ca4399c8295ef735d0485..75fef243aa83b0a3f7cbf56c63fc7b048474fc90 100644 (file)
@@ -108,6 +108,11 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DRA7XX_FALSE = @DRA7XX_FALSE@
+DRA7XX_TRUE = @DRA7XX_TRUE@
+DRM_FALSE = @DRM_FALSE@
+DRM_PREFIX = @DRM_PREFIX@
+DRM_TRUE = @DRM_TRUE@
 ECHO = @ECHO@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
index 5921fe78325111b341ea28621cdc463a342bd9c5..c2930ad44c1b351fe4163ef298f93518142f524a 100644 (file)
@@ -221,7 +221,7 @@ Void MessageQ_getConfig (MessageQ_Config * cfg)
 }
 
 /* Function to setup the MessageQ module. */
-Int MessageQ_setup (const MessageQ_Config * cfg)
+Int MessageQ_setup(const MessageQ_Config * cfg)
 {
     Int status;
     LAD_ClientHandle handle;
@@ -266,10 +266,9 @@ Int MessageQ_setup (const MessageQ_Config * cfg)
 
     /* Clear sockets array. */
     for (i = 0; i < MultiProc_MAXPROCESSORS; i++) {
-       MessageQ_module->sock[i]      = Transport_INVALIDSOCKET;
+        MessageQ_module->sock[i] = Transport_INVALIDSOCKET;
     }
 
-
     return status;
 }
 
@@ -333,7 +332,7 @@ Void MessageQ_Params_init (MessageQ_Params * params)
  */
 MessageQ_Handle MessageQ_create (String name, const MessageQ_Params * params)
 {
-    Int                   status    = MessageQ_S_SUCCESS;
+    Int                   status;
     MessageQ_Object *     obj    = NULL;
     UInt16                queueIndex = 0u;
     UInt16                procId;
@@ -413,7 +412,7 @@ MessageQ_Handle MessageQ_create (String name, const MessageQ_Params * params)
         status = transportCreateEndpoint(&obj->fd[rprocId], rprocId,
                                            queueIndex);
         if (status < 0) {
-           goto cleanup;
+           obj->fd[rprocId] = Transport_INVALIDSOCKET;
         }
     }
 
@@ -425,13 +424,20 @@ MessageQ_Handle MessageQ_create (String name, const MessageQ_Params * params)
     if (obj->unblockFd == -1)  {
         printf ("MessageQ_create: eventfd creation failed: %d, %s\n",
                    errno, strerror(errno));
-        status = MessageQ_E_FAIL;
+        MessageQ_delete((MessageQ_Handle *)&obj);
     }
+    else {
+        int endpointFound = 0;
 
-cleanup:
-    /* Cleanup if fail: */
-    if (status < 0) {
-        MessageQ_delete((MessageQ_Handle *)&obj);
+        for (rprocId = 0; rprocId < MultiProc_getNumProcessors(); rprocId++) {
+            if (obj->fd[rprocId] != Transport_INVALIDSOCKET) {
+                endpointFound = 1;
+            }
+        }
+        if (!endpointFound) {
+            printf("MessageQ_create: no transport endpoints found, deleting\n");
+            MessageQ_delete((MessageQ_Handle *)&obj);
+        }
     }
 
     return ((MessageQ_Handle) obj);
@@ -585,6 +591,7 @@ Int MessageQ_put (MessageQ_QueueId queueId, MessageQ_Msg msg)
  */
 Int MessageQ_get (MessageQ_Handle handle, MessageQ_Msg * msg ,UInt timeout)
 {
+    static int last = 0;
     Int     status = MessageQ_S_SUCCESS;
     Int     tmpStatus;
     MessageQ_Object * obj = (MessageQ_Object *) handle;
@@ -595,11 +602,14 @@ Int MessageQ_get (MessageQ_Handle handle, MessageQ_Msg * msg ,UInt timeout)
     void    *timevalPtr;
     UInt16  rprocId;
     int     maxfd = 0;
+    int     selfId;
+    int     nProcessors;
 
     /* Wait (with timeout) and retreive message from socket: */
     FD_ZERO(&rfds);
     for (rprocId = 0; rprocId < MultiProc_getNumProcessors(); rprocId++) {
-        if (rprocId == MultiProc_self()) {
+        if (rprocId == MultiProc_self() ||
+            obj->fd[rprocId] == Transport_INVALIDSOCKET) {
             continue;
         }
         maxfd = MAX(maxfd, obj->fd[rprocId]);
@@ -636,20 +646,30 @@ Int MessageQ_get (MessageQ_Handle handle, MessageQ_Msg * msg ,UInt timeout)
             status = MessageQ_E_UNBLOCKED;
         }
         else {
-            for (rprocId = 0; rprocId < MultiProc_getNumProcessors();
-                 rprocId++) {
-                if (rprocId == MultiProc_self()) {
-                    continue;
-                }
-                if (FD_ISSET(obj->fd[rprocId], &rfds)) {
-                    /* Our transport's fd was signalled: Get the message: */
-                    tmpStatus = transportGet(obj->fd[rprocId], msg);
-                    if (tmpStatus < 0) {
-                        printf ("MessageQ_get: tranposrtshm_get failed.");
-                        status = MessageQ_E_FAIL;
-                    }
+           /* start where we last left off */
+           rprocId = last;
+
+           selfId = MultiProc_self();
+           nProcessors = MultiProc_getNumProcessors();
+
+           do {
+                if (rprocId != selfId &&
+                    obj->fd[rprocId] != Transport_INVALIDSOCKET) {
+
+                   if (FD_ISSET(obj->fd[rprocId], &rfds)) {
+                       /* Our transport's fd was signalled: Get the message */
+                       tmpStatus = transportGet(obj->fd[rprocId], msg);
+                       if (tmpStatus < 0) {
+                           printf ("MessageQ_get: tranposrtshm_get failed.");
+                           status = MessageQ_E_FAIL;
+                       }
+
+                       last = (rprocId + 1) % nProcessors;
+                       break;
+                   }
                 }
-            }
+               rprocId = (rprocId + 1) % nProcessors;
+            } while (rprocId != last);
         }
     }
     else if (retval == 0) {
@@ -840,7 +860,13 @@ Int MessageQ_attach (UInt16 remoteProcId, Ptr sharedAddr)
             PRINTVERBOSE1("MessageQ_attach: created send socket: %d\n", sock)
             MessageQ_module->sock[remoteProcId] = sock;
             /* Attempt to connect: */
-            ConnectSocket(sock, remoteProcId, MESSAGEQ_RPMSG_PORT);
+            status = ConnectSocket(sock, remoteProcId, MESSAGEQ_RPMSG_PORT);
+            if (status < 0) {
+                status = MessageQ_E_RESOURCE;
+                /* don't hard-printf since this is no longer fatal */
+                PRINTVERBOSE1("MessageQ_attach: ConnectSocket(remoteProcId:%d) failed\n",
+                       remoteProcId);
+            }
         }
     }
     else {
@@ -849,6 +875,10 @@ Int MessageQ_attach (UInt16 remoteProcId, Ptr sharedAddr)
 
     pthread_mutex_unlock (&(MessageQ_module->gate));
 
+    if (status == MessageQ_E_RESOURCE) {
+        MessageQ_detach(remoteProcId);
+    }
+
 exit:
     return (status);
 }
@@ -870,14 +900,16 @@ Int MessageQ_detach (UInt16 remoteProcId)
     pthread_mutex_lock (&(MessageQ_module->gate));
 
     sock = MessageQ_module->sock[remoteProcId];
-    if (close (sock)) {
-        status = MessageQ_E_OSFAILURE;
-        printf ("MessageQ_detach: close failed: %d, %s\n",
-                       errno, strerror(errno));
-    }
-    else {
-        PRINTVERBOSE1("MessageQ_detach: closed socket: %d\n", sock)
-        MessageQ_module->sock[remoteProcId] = Transport_INVALIDSOCKET;
+    if (sock != Transport_INVALIDSOCKET) {
+        if (close(sock)) {
+            status = MessageQ_E_OSFAILURE;
+            printf("MessageQ_detach: close failed: %d, %s\n",
+                   errno, strerror(errno));
+        }
+        else {
+            PRINTVERBOSE1("MessageQ_detach: closed socket: %d\n", sock)
+            MessageQ_module->sock[remoteProcId] = Transport_INVALIDSOCKET;
+        }
     }
 
     pthread_mutex_unlock (&(MessageQ_module->gate));
@@ -900,7 +932,7 @@ Void MessageQ_msgInit (MessageQ_Msg msg)
     handle = LAD_findHandle();
     if (handle == LAD_MAXNUMCLIENTS) {
         PRINTVERBOSE1(
-          "MessageQ_setup: can't find connection to daemon for pid %d\n",
+          "MessageQ_msgInit: can't find connection to daemon for pid %d\n",
            getpid())
 
         return;
@@ -969,8 +1001,9 @@ static Int transportCreateEndpoint(int * fd, UInt16 rprocId, UInt16 queueIndex)
     err = SocketBindAddr(*fd, rprocId, (UInt32)queueIndex);
     if (err < 0) {
         status = MessageQ_E_FAIL;
-        printf ("transportCreateEndpoint: bind failed: %d, %s\n",
-                  errno, strerror(errno));
+        /* don't hard-printf since this is no longer fatal */
+        PRINTVERBOSE2("transportCreateEndpoint: bind failed: %d, %s\n",
+                      errno, strerror(errno));
     }
 
 exit:
index da988e07c9b296e3b5b8f638ef94305fa5df9a12..32af0a0e528012d403b77e37e941f72ffceeea29 100644 (file)
@@ -45,6 +45,9 @@ bin_PROGRAMS =
 if OMAP54XX_SMP
   bin_PROGRAMS += lad_omap54xx_smp
 else
+if DRA7XX
+  bin_PROGRAMS += lad_dra7xx
+else
 if OMAPL138
   bin_PROGRAMS += lad_omapl138
 else
@@ -57,7 +60,8 @@ else
 if TCI6636
   bin_PROGRAMS += lad_tci6636
 else
-  bin_PROGRAMS += lad_omap54xx_smp lad_omapl138 lad_tci6614 lad_tci6636 lad_tci6638
+  bin_PROGRAMS += lad_omap54xx_smp lad_dra7xx lad_omapl138 lad_tci6614 lad_tci6636 lad_tci6638
+endif
 endif
 endif
 endif
@@ -87,17 +91,20 @@ common_sources = \
 # NOTE:  6636_SOURCES using 6638.c is not a typo!  6636 has the same
 # MultiProc config as 6638, so we reuse that source file.
 lad_omap54xx_smp_SOURCES = $(common_sources) MultiProcCfg_omap54xx_smp.c
+lad_dra7xx_SOURCES = $(common_sources) MultiProcCfg_dra7xx.c
 lad_omapl138_SOURCES = $(common_sources) MultiProcCfg_omapl138.c
 lad_tci6614_SOURCES = $(common_sources) MultiProcCfg_tci6614.c
 lad_tci6636_SOURCES = $(common_sources) MultiProcCfg_tci6638.c
 lad_tci6638_SOURCES = $(common_sources) MultiProcCfg_tci6638.c
 
-common_libraries = -lpthread $(top_builddir)/linux/src/api/libtiipc.la \
-                $(top_builddir)/linux/src/utils/libtiipcutils.la
+common_libraries = -lpthread \
+                $(top_builddir)/linux/src/utils/libtiipcutils_lad.la
 
 # the additional libraries needed to link program
 lad_omap54xx_smp_LDADD = $(common_libraries) \
                 $(AM_LDFLAGS)
+lad_dra7xx_LDADD = $(common_libraries) \
+                $(AM_LDFLAGS)
 lad_omapl138_LDADD = $(common_libraries) \
                 $(AM_LDFLAGS)
 lad_tci6614_LDADD = $(common_libraries) \
index a865ba2729d7464bd0708ba4cc4d9362f2937a0d..169d63b95480fbd1ba74df359d324b0f677c1559 100644 (file)
@@ -37,13 +37,15 @@ POST_UNINSTALL = :
 build_triplet = @build@
 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_4) $(am__EXEEXT_5) $(am__EXEEXT_6) \
+       $(am__EXEEXT_7)
 @OMAP54XX_SMP_TRUE@am__append_1 = lad_omap54xx_smp
-@OMAP54XX_SMP_FALSE@@OMAPL138_TRUE@am__append_2 = lad_omapl138
-@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_TRUE@am__append_3 = lad_tci6614
-@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_TRUE@am__append_4 = lad_tci6638
-@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_TRUE@@TCI6638_FALSE@am__append_5 = lad_tci6636
-@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@am__append_6 = lad_omap54xx_smp lad_omapl138 lad_tci6614 lad_tci6636 lad_tci6638
+@DRA7XX_TRUE@@OMAP54XX_SMP_FALSE@am__append_2 = lad_dra7xx
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_TRUE@am__append_3 = lad_omapl138
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_TRUE@am__append_4 = lad_tci6614
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_TRUE@am__append_5 = lad_tci6638
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_TRUE@@TCI6638_FALSE@am__append_6 = lad_tci6636
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@am__append_7 = lad_omap54xx_smp lad_dra7xx lad_omapl138 lad_tci6614 lad_tci6636 lad_tci6638
 subdir = linux/src/daemon
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -53,27 +55,31 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 mkinstalldirs = $(install_sh) -d
 CONFIG_CLEAN_FILES =
 @OMAP54XX_SMP_TRUE@am__EXEEXT_1 = lad_omap54xx_smp$(EXEEXT)
-@OMAP54XX_SMP_FALSE@@OMAPL138_TRUE@am__EXEEXT_2 =  \
-@OMAP54XX_SMP_FALSE@@OMAPL138_TRUE@    lad_omapl138$(EXEEXT)
-@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_TRUE@am__EXEEXT_3 = lad_tci6614$(EXEEXT)
-@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_TRUE@am__EXEEXT_4 = lad_tci6638$(EXEEXT)
-@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_TRUE@@TCI6638_FALSE@am__EXEEXT_5 = lad_tci6636$(EXEEXT)
-@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@am__EXEEXT_6 = lad_omap54xx_smp$(EXEEXT) \
-@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@      lad_omapl138$(EXEEXT) \
-@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@      lad_tci6614$(EXEEXT) \
-@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@      lad_tci6636$(EXEEXT) \
-@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@      lad_tci6638$(EXEEXT)
+@DRA7XX_TRUE@@OMAP54XX_SMP_FALSE@am__EXEEXT_2 = lad_dra7xx$(EXEEXT)
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_TRUE@am__EXEEXT_3 = lad_omapl138$(EXEEXT)
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_TRUE@am__EXEEXT_4 = lad_tci6614$(EXEEXT)
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6638_TRUE@am__EXEEXT_5 = lad_tci6638$(EXEEXT)
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_TRUE@@TCI6638_FALSE@am__EXEEXT_6 = lad_tci6636$(EXEEXT)
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@am__EXEEXT_7 = lad_omap54xx_smp$(EXEEXT) \
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@        lad_dra7xx$(EXEEXT) \
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@        lad_omapl138$(EXEEXT) \
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@        lad_tci6614$(EXEEXT) \
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@        lad_tci6636$(EXEEXT) \
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@        lad_tci6638$(EXEEXT)
 am__installdirs = "$(DESTDIR)$(bindir)"
 binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
 am__objects_1 = lad.$(OBJEXT) MessageQ_daemon.$(OBJEXT) \
        MultiProc_daemon.$(OBJEXT) NameServer_daemon.$(OBJEXT)
+am_lad_dra7xx_OBJECTS = $(am__objects_1) MultiProcCfg_dra7xx.$(OBJEXT)
+lad_dra7xx_OBJECTS = $(am_lad_dra7xx_OBJECTS)
+am__DEPENDENCIES_1 =  \
+       $(top_builddir)/linux/src/utils/libtiipcutils_lad.la
+am__DEPENDENCIES_2 =
+lad_dra7xx_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
 am_lad_omap54xx_smp_OBJECTS = $(am__objects_1) \
        MultiProcCfg_omap54xx_smp.$(OBJEXT)
 lad_omap54xx_smp_OBJECTS = $(am_lad_omap54xx_smp_OBJECTS)
-am__DEPENDENCIES_1 = $(top_builddir)/linux/src/api/libtiipc.la \
-       $(top_builddir)/linux/src/utils/libtiipcutils.la
-am__DEPENDENCIES_2 =
 lad_omap54xx_smp_DEPENDENCIES = $(am__DEPENDENCIES_1) \
        $(am__DEPENDENCIES_2)
 am_lad_omapl138_OBJECTS = $(am__objects_1) \
@@ -104,12 +110,12 @@ LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
 CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(lad_omap54xx_smp_SOURCES) $(lad_omapl138_SOURCES) \
-       $(lad_tci6614_SOURCES) $(lad_tci6636_SOURCES) \
-       $(lad_tci6638_SOURCES)
-DIST_SOURCES = $(lad_omap54xx_smp_SOURCES) $(lad_omapl138_SOURCES) \
-       $(lad_tci6614_SOURCES) $(lad_tci6636_SOURCES) \
-       $(lad_tci6638_SOURCES)
+SOURCES = $(lad_dra7xx_SOURCES) $(lad_omap54xx_smp_SOURCES) \
+       $(lad_omapl138_SOURCES) $(lad_tci6614_SOURCES) \
+       $(lad_tci6636_SOURCES) $(lad_tci6638_SOURCES)
+DIST_SOURCES = $(lad_dra7xx_SOURCES) $(lad_omap54xx_smp_SOURCES) \
+       $(lad_omapl138_SOURCES) $(lad_tci6614_SOURCES) \
+       $(lad_tci6636_SOURCES) $(lad_tci6638_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -143,6 +149,11 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DRA7XX_FALSE = @DRA7XX_FALSE@
+DRA7XX_TRUE = @DRA7XX_TRUE@
+DRM_FALSE = @DRM_FALSE@
+DRM_PREFIX = @DRM_PREFIX@
+DRM_TRUE = @DRM_TRUE@
 ECHO = @ECHO@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
@@ -256,18 +267,22 @@ common_sources = \
 # NOTE:  6636_SOURCES using 6638.c is not a typo!  6636 has the same
 # MultiProc config as 6638, so we reuse that source file.
 lad_omap54xx_smp_SOURCES = $(common_sources) MultiProcCfg_omap54xx_smp.c
+lad_dra7xx_SOURCES = $(common_sources) MultiProcCfg_dra7xx.c
 lad_omapl138_SOURCES = $(common_sources) MultiProcCfg_omapl138.c
 lad_tci6614_SOURCES = $(common_sources) MultiProcCfg_tci6614.c
 lad_tci6636_SOURCES = $(common_sources) MultiProcCfg_tci6638.c
 lad_tci6638_SOURCES = $(common_sources) MultiProcCfg_tci6638.c
-common_libraries = -lpthread $(top_builddir)/linux/src/api/libtiipc.la \
-                $(top_builddir)/linux/src/utils/libtiipcutils.la
+common_libraries = -lpthread \
+                $(top_builddir)/linux/src/utils/libtiipcutils_lad.la
 
 
 # the additional libraries needed to link program
 lad_omap54xx_smp_LDADD = $(common_libraries) \
                 $(AM_LDFLAGS)
 
+lad_dra7xx_LDADD = $(common_libraries) \
+                $(AM_LDFLAGS)
+
 lad_omapl138_LDADD = $(common_libraries) \
                 $(AM_LDFLAGS)
 
@@ -341,6 +356,9 @@ clean-binPROGRAMS:
          echo " rm -f $$p $$f"; \
          rm -f $$p $$f ; \
        done
+lad_dra7xx$(EXEEXT): $(lad_dra7xx_OBJECTS) $(lad_dra7xx_DEPENDENCIES) 
+       @rm -f lad_dra7xx$(EXEEXT)
+       $(LINK) $(lad_dra7xx_LDFLAGS) $(lad_dra7xx_OBJECTS) $(lad_dra7xx_LDADD) $(LIBS)
 lad_omap54xx_smp$(EXEEXT): $(lad_omap54xx_smp_OBJECTS) $(lad_omap54xx_smp_DEPENDENCIES) 
        @rm -f lad_omap54xx_smp$(EXEEXT)
        $(LINK) $(lad_omap54xx_smp_LDFLAGS) $(lad_omap54xx_smp_OBJECTS) $(lad_omap54xx_smp_LDADD) $(LIBS)
@@ -364,6 +382,7 @@ distclean-compile:
        -rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MessageQ_daemon.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MultiProcCfg_dra7xx.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MultiProcCfg_omap54xx_smp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MultiProcCfg_omapl138.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MultiProcCfg_tci6614.Po@am__quote@
index dad1d7cefeb10ef44ca8a23b32ad62bb7b5babd0..d718f2d8249508aaaa6eb7513d40f777b325dd92 100644 (file)
@@ -143,7 +143,11 @@ static MessageQ_ModuleObject MessageQ_state =
     .queues                 = NULL,
     .numQueues              = 2u,
     .canFreeQueues          = FALSE,
+#if defined(IPC_BUILDOS_ANDROID)
+    .gate                   = PTHREAD_RECURSIVE_MUTEX_INITIALIZER,
+#else
     .gate                   = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP,
+#endif
     .defaultCfg.traceFlag   = FALSE,
     .defaultCfg.maxRuntimeEntries = 32u,
     .defaultCfg.maxNameLen    = 32u,
similarity index 69%
rename from packages/ti/platform/vayu/dsp1/Platform.xs
rename to linux/src/daemon/MultiProcCfg_dra7xx.c
index 18b7b1b1b6934c6b7ba79865bcdf6ce0e259ebf5..10c88ccfc50071580679162594fc8c6b872117f7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2013, Texas Instruments Incorporated
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-/*!
- * File generated by platform wizard.
- *
+/*
+ * ======== MultiProcCfg.c ========
+ * System-wide MultiProc configuration
  */
 
-function getCpuDataSheet(cpuId)
-{
-    return this.$module.plat.getCpuDataSheet(cpuId);
-}
-
-function getCreateArgs()
-{
-    return this.$module.plat.getCreateArgs();
-}
-
-function getExeContext(prog)
-{
-    return this.$module.plat.getExeContext(prog);
-}
+/* Standard IPC headers */
+#include <ti/ipc/Std.h>
 
-function getExecCmd(prog)
-{
-    return this.$module.plat.getExecCmd(prog);
-}
+/* For Backplane IPC startup/shutdown stuff: */
+#include <_MultiProc.h>
 
-function getLinkTemplate(prog)
-{
-    return this.$module.plat.getLinkTemplate(prog);
-}
+/* This must match BIOS side MultiProc configuration for given platform!: */
+MultiProc_Config _MultiProc_cfg =  {
+   .numProcessors = 5,
+   .nameList[0] = "HOST",
+   .nameList[1] = "IPU2",
+   .nameList[2] = "IPU1",
+   .nameList[3] = "DSP2",
+   .nameList[4] = "DSP1",
+   .rprocList[0] = -1,
+   .rprocList[1] = 1,
+   .rprocList[2] = 3,
+   .rprocList[3] = 2,
+   .rprocList[4] = 0,
+   .id = 0,                 /* The host is always zero */
+};
index 1a48ffb71c2755d5c55caaaae9b5e29b0ed557ab..3cabbac980572a261d9fa9141e9594620e6ff28b 100644 (file)
@@ -46,5 +46,8 @@ MultiProc_Config _MultiProc_cfg =  {
    .nameList[0] = "HOST",
    .nameList[1] = "IPU",
    .nameList[2] = "DSP",
+   .rprocList[0] = -1,
+   .rprocList[1] = 1,
+   .rprocList[2] = 0,
    .id = 0,                 /* The host is always zero */
 };
index d114aff3301bd294ff00bb0888431add6edaf593..d7508e8eedefe7554f9f8c35d96b231fea4428eb 100644 (file)
@@ -45,5 +45,7 @@ MultiProc_Config _MultiProc_cfg =  {
    .numProcessors = 2,
    .nameList[0] = "HOST",
    .nameList[1] = "DSP",
+   .rprocList[0] = -1,
+   .rprocList[1] = 0,
    .id = 0,                 /* The host is always zero */
 };
index 08b84b2666ec34c336db6c92985f352a0bc02b9d..1528b25099ba8b994ad46e384738ace9ae44bc5d 100644 (file)
@@ -48,5 +48,10 @@ MultiProc_Config _MultiProc_cfg =  {
    .nameList[2] = "CORE1",
    .nameList[3] = "CORE2",
    .nameList[4] = "CORE3",
+   .rprocList[0] = -1,
+   .rprocList[1] = 0,
+   .rprocList[2] = 1,
+   .rprocList[3] = 2,
+   .rprocList[4] = 3,
    .id = 0,                 /* The host is always zero */
 };
index 3490732f0779625e2016b216a2dc6f3beefe3d36..18b338a8d5fa3730e7b161d68f1c90dec87eb215 100644 (file)
@@ -52,5 +52,14 @@ MultiProc_Config _MultiProc_cfg =  {
    .nameList[6] = "CORE5",
    .nameList[7] = "CORE6",
    .nameList[8] = "CORE7",
+   .rprocList[0] = -1,
+   .rprocList[1] = 0,
+   .rprocList[2] = 1,
+   .rprocList[3] = 2,
+   .rprocList[4] = 3,
+   .rprocList[5] = 4,
+   .rprocList[6] = 5,
+   .rprocList[7] = 6,
+   .rprocList[8] = 7,
    .id = 0,                 /* The host is always zero */
 };
index b8aec85925c25a7f3082bac48719d1f181c0228f..bc644e5b5d83ed78c257554044cb3b9cdb95daad 100644 (file)
@@ -113,6 +113,7 @@ struct NameServer_Object {
     String             name;            /* name of the instance */
     NameServer_Params  params;          /* the parameter structure */
     UInt32             count;           /* count of entries */
+    UInt32             refCount;        /* reference count to this object */
     pthread_mutex_t    gate;            /* crit sect gate */
 } NameServer_Object;
 
@@ -167,9 +168,12 @@ static NameServer_ModuleObject NameServer_state = {
     .defInstParams.checkExisting     = TRUE,
     .defInstParams.maxValueLen       = 0u,
     .defInstParams.maxNameLen        = 16u,
+#if defined(IPC_BUILDOS_ANDROID)
+    .modGate                         = PTHREAD_RECURSIVE_MUTEX_INITIALIZER,
+#else
 // only _NP (non-portable) type available in CG tools which we're using
     .modGate                         = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP,
-//    .modGate                         = PTHREAD_RECURSIVE_MUTEX_INITIALIZER,
+#endif
     .refCount                        = 0
 };
 
@@ -464,15 +468,15 @@ Int NameServer_setup(Void)
 
             err = SocketBindAddr(sock, procId, NAME_SERVER_RPMSG_ADDR);
             if (err < 0) {
-               status = NameServer_E_FAIL;
-               LOG2("NameServer_setup: bind failed: %d, %s\n",
+                status = NameServer_E_FAIL;
+                LOG2("NameServer_setup: bind failed: %d, %s\n",
                     errno, strerror(errno))
 
                 LOG1("    closing recv socket: %d\n", sock)
                 close(sock);
             }
             else {
-               NameServer_module->recvSock[procId] = sock;
+                NameServer_module->recvSock[procId] = sock;
             }
         }
     }
@@ -489,6 +493,17 @@ Int NameServer_setup(Void)
 
         status = NameServer_E_FAIL;
     }
+    else {
+        /* look for at least one good send/recv pair to indicate success */
+        for (procId = 0; procId < numProcs; procId++) {
+            if (NameServer_module->sendSock[procId] != INVALIDSOCKET &&
+                NameServer_module->recvSock[procId] != INVALIDSOCKET) {
+                status = NameServer_S_SUCCESS;
+
+                break;
+            }
+        }
+    }
 
 exit:
     LOG1("NameServer_setup: exiting, refCount=%d\n", NameServer_module->refCount)
@@ -617,9 +632,16 @@ NameServer_Handle NameServer_create(String name,
     }
 
     /* check if the name is already created or not */
-    if (NameServer_getHandle(name)) {
-        LOG0("NameServer_create NameServer_E_INVALIDARG Name is in use!\n")
-        handle = NULL;
+    handle = NameServer_getHandle(name);
+    if (handle != NULL) {
+        if (memcmp((Ptr)&handle->params, (Ptr)params,
+            sizeof(NameServer_Params)) == 0) {
+            handle->refCount++;
+        }
+        else {
+            LOG0("NameServer_create: NameServer params mismatch\n")
+            handle = NULL;
+        }
         goto leave;
     }
     else {
@@ -631,6 +653,7 @@ NameServer_Handle NameServer_create(String name,
         goto leave;
     }
 
+    handle->refCount = 1;
     handle->name = (String)malloc(strlen(name) + 1u);
     if (!handle->name) {
         LOG0("NameServer_create: instance name alloc failed\n")
@@ -685,6 +708,11 @@ Int NameServer_delete(NameServer_Handle * handle)
 
     pthread_mutex_lock(&NameServer_module->modGate);
 
+    (*handle)->refCount--;
+    if ((*handle)->refCount != 0) {
+        goto leave;
+    }
+
     if ((*handle)->count == 0) {
         CIRCLEQ_REMOVE(&NameServer_module->objList, *handle, elem);
 
@@ -699,6 +727,7 @@ Int NameServer_delete(NameServer_Handle * handle)
         (*handle) = NULL;
     }
 
+leave:
     pthread_mutex_unlock(&NameServer_module->modGate);
 
     return (status);
@@ -932,17 +961,25 @@ Int NameServer_getRemote(NameServer_Handle handle,
     int err;
 
     /* Set Timeout to wait: */
-    tv.tv_sec = NAMESERVER_GET_TIMEOUT;
-    tv.tv_usec = 0;
+    tv.tv_sec = 0;
+    tv.tv_usec = NAMESERVER_GET_TIMEOUT;
 
     /* Create request message and send to remote: */
     sock = NameServer_module->sendSock[procId];
+    if (sock == INVALIDSOCKET) {
+        LOG1("NameServer_getRemote: no socket connection to processor %d\n",
+             procId);
+        status = NameServer_E_RESOURCE;
+        goto exit;
+    }
+
     LOG1("NameServer_getRemote: Sending request via sock: %d\n", sock)
 
     /* Create request message and send to remote processor: */
     nsMsg.reserved = NAMESERVER_MSG_TOKEN;
     nsMsg.request = NAMESERVER_REQUEST;
     nsMsg.requestStatus = 0;
+    nsMsg.valueLen = *len;
 
     strncpy((char *)nsMsg.instanceName, obj->name, strlen(obj->name) + 1);
     strncpy((char *)nsMsg.name, name, strlen(name) + 1);
@@ -1039,7 +1076,8 @@ Int NameServer_get(NameServer_Handle handle,
                 status = NameServer_getRemote(handle, name, value, len, i);
 
                 if ((status >= 0) ||
-                    ((status < 0) && (status != NameServer_E_NOTFOUND))) {
+                    ((status < 0) && (status != NameServer_E_NOTFOUND) &&
+                                     (status != NameServer_E_RESOURCE))) {
                     break;
                 }
             }
@@ -1060,7 +1098,8 @@ Int NameServer_get(NameServer_Handle handle,
             }
 
             if ((status >= 0) ||
-                ((status < 0) && (status != NameServer_E_NOTFOUND))) {
+                ((status < 0) && (status != NameServer_E_NOTFOUND) &&
+                                 (status != NameServer_E_RESOURCE))) {
                 break;
             }
 
@@ -1068,6 +1107,10 @@ Int NameServer_get(NameServer_Handle handle,
         }
     }
 
+    if (status == NameServer_E_RESOURCE) {
+        status = NameServer_E_NOTFOUND;
+    }
+
     return (status);
 }
 
index ea801a63e58f8fd02df619c533fefe3abf1b1cff..96dfa17e072dd1009ddfce7ee1672a7479011fb9 100644 (file)
@@ -53,6 +53,18 @@ libmmrpc_la_HEADERS = $(top_srcdir)/packages/ti/ipc/mm/MmRpc.h
 endif
 endif
 
+if DRA7XX
+if KDIR
+lib_LTLIBRARIES += libmmrpc.la
+
+# where to install the headers on the system
+libmmrpc_ladir = $(includedir)/ti/ipc/mm
+
+# the list of header files that belong to the library (to be installed later)
+libmmrpc_la_HEADERS = $(top_srcdir)/packages/ti/ipc/mm/MmRpc.h
+endif
+endif
+
 # the sources to add to the library and to add to the source distribution
 libmmrpc_la_SOURCES = \
         $(libmmrpc_la_HEADERS) \
index 6a5ca152bce63231884ba50a6412778a979469f0..f4ed0f9e5122f1a58c16832bd6c54d3c438165bc 100644 (file)
@@ -38,6 +38,7 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 @KDIR_TRUE@@OMAP54XX_SMP_TRUE@am__append_1 = libmmrpc.la
+@DRA7XX_TRUE@@KDIR_TRUE@am__append_2 = libmmrpc.la
 subdir = linux/src/mm
 DIST_COMMON = $(am__libmmrpc_la_HEADERS_DIST) $(srcdir)/Makefile.am \
        $(srcdir)/Makefile.in
@@ -63,6 +64,7 @@ am__libmmrpc_la_SOURCES_DIST =  \
 am__objects_1 =
 am_libmmrpc_la_OBJECTS = $(am__objects_1) MmRpc.lo
 libmmrpc_la_OBJECTS = $(am_libmmrpc_la_OBJECTS)
+@DRA7XX_TRUE@@KDIR_TRUE@am_libmmrpc_la_rpath = -rpath $(libdir)
 @KDIR_TRUE@@OMAP54XX_SMP_TRUE@am_libmmrpc_la_rpath = -rpath $(libdir)
 DEFAULT_INCLUDES = -I. -I$(srcdir)
 depcomp = $(SHELL) $(top_srcdir)/linux/build-aux/depcomp
@@ -112,6 +114,11 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DRA7XX_FALSE = @DRA7XX_FALSE@
+DRA7XX_TRUE = @DRA7XX_TRUE@
+DRM_FALSE = @DRM_FALSE@
+DRM_PREFIX = @DRM_PREFIX@
+DRM_TRUE = @DRM_TRUE@
 ECHO = @ECHO@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
@@ -207,11 +214,17 @@ target_alias = @target_alias@
 ###############################################################################
 
 # the library names to build (note we are building shared libs)
-lib_LTLIBRARIES = $(am__append_1)
+lib_LTLIBRARIES = $(am__append_1) $(am__append_2)
+
+# where to install the headers on the system
+@DRA7XX_TRUE@@KDIR_TRUE@libmmrpc_ladir = $(includedir)/ti/ipc/mm
 
 # where to install the headers on the system
 @KDIR_TRUE@@OMAP54XX_SMP_TRUE@libmmrpc_ladir = $(includedir)/ti/ipc/mm
 
+# the list of header files that belong to the library (to be installed later)
+@DRA7XX_TRUE@@KDIR_TRUE@libmmrpc_la_HEADERS = $(top_srcdir)/packages/ti/ipc/mm/MmRpc.h
+
 # the list of header files that belong to the library (to be installed later)
 @KDIR_TRUE@@OMAP54XX_SMP_TRUE@libmmrpc_la_HEADERS = $(top_srcdir)/packages/ti/ipc/mm/MmRpc.h
 
index 9020e601339346dad3c08c3ad76b2beaeaf4f10d..fbbf52b82598224872ca96456084d3b45e5a87f9 100644 (file)
@@ -34,6 +34,9 @@
 # additional include paths necessary to compile the program
 AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/hlos_common/include \
         -I$(top_srcdir)/packages -I$(CMEM_INSTALL_DIR)/include \
+        -I$(DRM_PREFIX)/usr/include \
+        -I$(DRM_PREFIX)/usr/include/libdrm \
+        -I$(DRM_PREFIX)/usr/include/omap \
         -D_GNU_SOURCE -Wall @AM_CFLAGS@
 VPATH = ../../../packages/ti/ipc/tests
 
@@ -43,15 +46,26 @@ VPATH = ../../../packages/ti/ipc/tests
 
 # the program to build (the names of the final binaries)
 bin_PROGRAMS = ping_rpmsg MessageQApp  MessageQBench MessageQMulti \
-                NameServerApp
+                NameServerApp Msgq100
 
 
 if OMAP54XX_SMP
 # Add platform specific bin application's here
   bin_PROGRAMS +=
 if KDIR
+if DRM
   bin_PROGRAMS += mmrpc_test
 endif
+endif
+else
+if DRA7XX
+# Add platform specific bin application's here
+  bin_PROGRAMS +=
+if KDIR
+if DRM
+  bin_PROGRAMS += mmrpc_test
+endif
+endif
 else
 if OMAPL138
 # Add platform specific bin application's here
@@ -77,6 +91,7 @@ if CMEM
   bin_PROGRAMS += nano_test
 endif
 if KDIR
+if DRM
   bin_PROGRAMS += mmrpc_test
 endif
 endif
@@ -84,6 +99,8 @@ endif
 endif
 endif
 endif
+endif
+endif
 
 common_sources = \
                 $(top_srcdir)/linux/include/ti/ipc/Std.h \
@@ -120,6 +137,9 @@ NameServerApp_SOURCES = $(nameServer_common_sources)
 # list of sources for the 'nano_test' binary
 nano_test_SOURCES = $(common_sources) nano_test.c
 
+# list of sources for the 'Msgq100' binary
+Msgq100_SOURCES = $(common_sources) Msgq100.c
+
 common_libraries = -lpthread $(top_builddir)/linux/src/api/libtiipc.la \
                 $(top_builddir)/linux/src/utils/libtiipcutils.la
 
@@ -128,7 +148,9 @@ ping_rpmsg_LDADD = -lrt
 
 # the additional libraries to link mmrpc_test
 mmrpc_test_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/mm/libmmrpc.la
+                $(top_builddir)/linux/src/mm/libmmrpc.la \
+                $(DRM_PREFIX)/usr/lib/libdrm.la \
+                $(DRM_PREFIX)/usr/lib/libdrm_omap.la
 
 # the additional libraries needed to link MessageQApp
 MessageQApp_LDADD = $(common_libraries) \
@@ -151,4 +173,8 @@ nano_test_LDADD = $(common_libraries) \
                 $(CMEM_INSTALL_DIR)/src/cmem/api/.libs/libticmem.a \
                 $(AM_LDFLAGS)
 
+# the additional libraries needed to link Msgq100
+Msgq100_LDADD = $(common_libraries) \
+                $(AM_LDFLAGS)
+
 ###############################################################################
index efb87cf12e03cb3d77e47a00cd2ae2fb43bf6a0c..c806d3369ede88a65677cc9918ee5f673acc4c47 100644 (file)
@@ -37,26 +37,30 @@ build_triplet = @build@
 host_triplet = @host@
 bin_PROGRAMS = ping_rpmsg$(EXEEXT) MessageQApp$(EXEEXT) \
        MessageQBench$(EXEEXT) MessageQMulti$(EXEEXT) \
-       NameServerApp$(EXEEXT) $(am__EXEEXT_1) $(am__EXEEXT_2) \
-       $(am__EXEEXT_1) $(am__EXEEXT_3) $(am__EXEEXT_1) \
-       $(am__EXEEXT_1) $(am__EXEEXT_1) $(am__EXEEXT_4) \
-       $(am__EXEEXT_5)
+       NameServerApp$(EXEEXT) Msgq100$(EXEEXT) $(am__EXEEXT_1) \
+       $(am__EXEEXT_2) $(am__EXEEXT_1) $(am__EXEEXT_3) \
+       $(am__EXEEXT_1) $(am__EXEEXT_4) $(am__EXEEXT_1) \
+       $(am__EXEEXT_1) $(am__EXEEXT_1) $(am__EXEEXT_5) \
+       $(am__EXEEXT_6)
 
 # Add platform specific bin application's here
 @OMAP54XX_SMP_TRUE@am__append_1 = 
-@KDIR_TRUE@@OMAP54XX_SMP_TRUE@am__append_2 = mmrpc_test
+@DRM_TRUE@@KDIR_TRUE@@OMAP54XX_SMP_TRUE@am__append_2 = mmrpc_test
 # Add platform specific bin application's here
-@OMAP54XX_SMP_FALSE@@OMAPL138_TRUE@am__append_3 = 
-@CMEM_TRUE@@OMAP54XX_SMP_FALSE@@OMAPL138_TRUE@am__append_4 = nano_test
+@DRA7XX_TRUE@@OMAP54XX_SMP_FALSE@am__append_3 = 
+@DRA7XX_TRUE@@DRM_TRUE@@KDIR_TRUE@@OMAP54XX_SMP_FALSE@am__append_4 = mmrpc_test
 # Add platform specific bin application's here
-@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_TRUE@am__append_5 = 
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_TRUE@am__append_5 = 
+@CMEM_TRUE@@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_TRUE@am__append_6 = nano_test
 # Add platform specific bin application's here
-@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_TRUE@am__append_6 = 
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_TRUE@am__append_7 = 
 # Add platform specific bin application's here
-@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_TRUE@am__append_7 = 
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_TRUE@am__append_8 = 
+# Add platform specific bin application's here
+@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_TRUE@am__append_9 = 
 # Add platform independent apps here or above in bin_PROGRAMS
-@CMEM_TRUE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@am__append_8 = nano_test
-@KDIR_TRUE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@am__append_9 = mmrpc_test
+@CMEM_TRUE@@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@am__append_10 = nano_test
+@DRA7XX_FALSE@@DRM_TRUE@@KDIR_TRUE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@am__append_11 = mmrpc_test
 subdir = linux/src/tests
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -66,10 +70,12 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 mkinstalldirs = $(install_sh) -d
 CONFIG_CLEAN_FILES =
 am__EXEEXT_1 =
-@KDIR_TRUE@@OMAP54XX_SMP_TRUE@am__EXEEXT_2 = mmrpc_test$(EXEEXT)
-@CMEM_TRUE@@OMAP54XX_SMP_FALSE@@OMAPL138_TRUE@am__EXEEXT_3 = nano_test$(EXEEXT)
-@CMEM_TRUE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@am__EXEEXT_4 = nano_test$(EXEEXT)
-@KDIR_TRUE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@am__EXEEXT_5 = mmrpc_test$(EXEEXT)
+@DRM_TRUE@@KDIR_TRUE@@OMAP54XX_SMP_TRUE@am__EXEEXT_2 =  \
+@DRM_TRUE@@KDIR_TRUE@@OMAP54XX_SMP_TRUE@       mmrpc_test$(EXEEXT)
+@DRA7XX_TRUE@@DRM_TRUE@@KDIR_TRUE@@OMAP54XX_SMP_FALSE@am__EXEEXT_3 = mmrpc_test$(EXEEXT)
+@CMEM_TRUE@@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_TRUE@am__EXEEXT_4 = nano_test$(EXEEXT)
+@CMEM_TRUE@@DRA7XX_FALSE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@am__EXEEXT_5 = nano_test$(EXEEXT)
+@DRA7XX_FALSE@@DRM_TRUE@@KDIR_TRUE@@OMAP54XX_SMP_FALSE@@OMAPL138_FALSE@@TCI6614_FALSE@@TCI6636_FALSE@@TCI6638_FALSE@am__EXEEXT_6 = mmrpc_test$(EXEEXT)
 am__installdirs = "$(DESTDIR)$(bindir)"
 binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
@@ -88,6 +94,9 @@ am_MessageQMulti_OBJECTS = $(am__objects_1) MessageQMulti.$(OBJEXT)
 MessageQMulti_OBJECTS = $(am_MessageQMulti_OBJECTS)
 MessageQMulti_DEPENDENCIES = $(am__DEPENDENCIES_1) \
        $(am__DEPENDENCIES_2)
+am_Msgq100_OBJECTS = $(am__objects_1) Msgq100.$(OBJEXT)
+Msgq100_OBJECTS = $(am_Msgq100_OBJECTS)
+Msgq100_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
 am__objects_2 = NameServerApp.$(OBJEXT)
 am_NameServerApp_OBJECTS = $(am__objects_2)
 NameServerApp_OBJECTS = $(am_NameServerApp_OBJECTS)
@@ -96,7 +105,9 @@ NameServerApp_DEPENDENCIES = $(am__DEPENDENCIES_1) \
 am_mmrpc_test_OBJECTS = Mx.$(OBJEXT) mmrpc_test.$(OBJEXT)
 mmrpc_test_OBJECTS = $(am_mmrpc_test_OBJECTS)
 mmrpc_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-       $(top_builddir)/linux/src/mm/libmmrpc.la
+       $(top_builddir)/linux/src/mm/libmmrpc.la \
+       $(DRM_PREFIX)/usr/lib/libdrm.la \
+       $(DRM_PREFIX)/usr/lib/libdrm_omap.la
 am_nano_test_OBJECTS = $(am__objects_1) nano_test.$(OBJEXT)
 nano_test_OBJECTS = $(am_nano_test_OBJECTS)
 nano_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \
@@ -117,13 +128,13 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
 SOURCES = $(MessageQApp_SOURCES) $(MessageQBench_SOURCES) \
-       $(MessageQMulti_SOURCES) $(NameServerApp_SOURCES) \
-       $(mmrpc_test_SOURCES) $(nano_test_SOURCES) \
-       $(ping_rpmsg_SOURCES)
+       $(MessageQMulti_SOURCES) $(Msgq100_SOURCES) \
+       $(NameServerApp_SOURCES) $(mmrpc_test_SOURCES) \
+       $(nano_test_SOURCES) $(ping_rpmsg_SOURCES)
 DIST_SOURCES = $(MessageQApp_SOURCES) $(MessageQBench_SOURCES) \
-       $(MessageQMulti_SOURCES) $(NameServerApp_SOURCES) \
-       $(mmrpc_test_SOURCES) $(nano_test_SOURCES) \
-       $(ping_rpmsg_SOURCES)
+       $(MessageQMulti_SOURCES) $(Msgq100_SOURCES) \
+       $(NameServerApp_SOURCES) $(mmrpc_test_SOURCES) \
+       $(nano_test_SOURCES) $(ping_rpmsg_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -136,6 +147,9 @@ AMTAR = @AMTAR@
 # additional include paths necessary to compile the program
 AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/hlos_common/include \
         -I$(top_srcdir)/packages -I$(CMEM_INSTALL_DIR)/include \
+        -I$(DRM_PREFIX)/usr/include \
+        -I$(DRM_PREFIX)/usr/include/libdrm \
+        -I$(DRM_PREFIX)/usr/include/omap \
         -D_GNU_SOURCE -Wall @AM_CFLAGS@
 
 AM_LDFLAGS = @AM_LDFLAGS@
@@ -159,6 +173,11 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DRA7XX_FALSE = @DRA7XX_FALSE@
+DRA7XX_TRUE = @DRA7XX_TRUE@
+DRM_FALSE = @DRM_FALSE@
+DRM_PREFIX = @DRM_PREFIX@
+DRM_TRUE = @DRM_TRUE@
 ECHO = @ECHO@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
@@ -284,6 +303,9 @@ NameServerApp_SOURCES = $(nameServer_common_sources)
 
 # list of sources for the 'nano_test' binary
 nano_test_SOURCES = $(common_sources) nano_test.c
+
+# list of sources for the 'Msgq100' binary
+Msgq100_SOURCES = $(common_sources) Msgq100.c
 common_libraries = -lpthread $(top_builddir)/linux/src/api/libtiipc.la \
                 $(top_builddir)/linux/src/utils/libtiipcutils.la
 
@@ -293,7 +315,9 @@ ping_rpmsg_LDADD = -lrt
 
 # the additional libraries to link mmrpc_test
 mmrpc_test_LDADD = $(common_libraries) \
-                $(top_builddir)/linux/src/mm/libmmrpc.la
+                $(top_builddir)/linux/src/mm/libmmrpc.la \
+                $(DRM_PREFIX)/usr/lib/libdrm.la \
+                $(DRM_PREFIX)/usr/lib/libdrm_omap.la
 
 
 # the additional libraries needed to link MessageQApp
@@ -321,6 +345,11 @@ nano_test_LDADD = $(common_libraries) \
                 $(CMEM_INSTALL_DIR)/src/cmem/api/.libs/libticmem.a \
                 $(AM_LDFLAGS)
 
+
+# the additional libraries needed to link Msgq100
+Msgq100_LDADD = $(common_libraries) \
+                $(AM_LDFLAGS)
+
 all: all-am
 
 .SUFFIXES:
@@ -391,6 +420,9 @@ MessageQBench$(EXEEXT): $(MessageQBench_OBJECTS) $(MessageQBench_DEPENDENCIES)
 MessageQMulti$(EXEEXT): $(MessageQMulti_OBJECTS) $(MessageQMulti_DEPENDENCIES) 
        @rm -f MessageQMulti$(EXEEXT)
        $(LINK) $(MessageQMulti_LDFLAGS) $(MessageQMulti_OBJECTS) $(MessageQMulti_LDADD) $(LIBS)
+Msgq100$(EXEEXT): $(Msgq100_OBJECTS) $(Msgq100_DEPENDENCIES) 
+       @rm -f Msgq100$(EXEEXT)
+       $(LINK) $(Msgq100_LDFLAGS) $(Msgq100_OBJECTS) $(Msgq100_LDADD) $(LIBS)
 NameServerApp$(EXEEXT): $(NameServerApp_OBJECTS) $(NameServerApp_DEPENDENCIES) 
        @rm -f NameServerApp$(EXEEXT)
        $(LINK) $(NameServerApp_LDFLAGS) $(NameServerApp_OBJECTS) $(NameServerApp_LDADD) $(LIBS)
@@ -413,6 +445,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MessageQApp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MessageQBench.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MessageQMulti.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Msgq100.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Mx.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NameServerApp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmrpc_test.Po@am__quote@
diff --git a/linux/src/tests/Msgq100.c b/linux/src/tests/Msgq100.c
new file mode 100644 (file)
index 0000000..6041b65
--- /dev/null
@@ -0,0 +1,343 @@
+/*
+ * 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   Msgq100.c
+ *
+ *  @brief  Bug validation test: ####
+ *
+ *  ============================================================================
+ */
+
+/* standard headers */
+#include <stdio.h>
+#include <stdlib.h>
+
+/* ipc headers */
+#include <ti/ipc/Std.h>
+#include <ti/ipc/Ipc.h>
+#include <ti/ipc/MessageQ.h>
+
+#define HEAPID                  0               /* not actually used */
+#define SLAVE_MSGQNAME          "SLAVE"
+#define MPU_MESSAGEQNAME        "HOST"
+#define Main_MAXQUE             10
+#define NUM_LOOPS_DFLT          4
+
+#define Main_USAGE "\
+Usage:\n\
+    Msgq100 [options] procId ...\n\
+\n\
+Arguments:\n\
+    procId: remote processor id\n\
+\n\
+Options:\n\
+    h   : print this help message\n\
+    l   : list the available remote processors\n\
+\n\
+Examples:\n\
+    Msgq100 1\n\
+    Msgq100 1 4\n\
+    Msgq100 -h\n\
+\n"
+
+typedef struct SyncMsg {
+    MessageQ_MsgHeader header;
+    unsigned long numLoops;
+    unsigned long print;
+} SyncMsg ;
+
+/* private functions */
+static int Main_main(Void);
+
+static int Main_procCount = 0;
+static UInt16 Main_procAry[Main_MAXQUE];
+static MessageQ_QueueId Main_msgQueAry[Main_MAXQUE];
+
+
+/*
+ *  ======== main ========
+ */
+int main(int argc, char *argv[])
+{
+    Int32 status = 0;
+    int arg, opt;
+    int p;
+    UInt16 procId;
+    UInt16 numProcs;
+    String name;
+
+    /* parse the command line options (e.g. -h) */
+    for (arg = 1; (arg < argc) && (argv[arg][0] == '-'); arg++) {
+
+        /* convert option into numeric value */
+        opt = (int)argv[arg][1];
+
+        switch (opt) {
+            case 'h': /* -h */
+                printf("%s", Main_USAGE);
+                exit(0);
+                break;
+
+            case 'l': /* -l */
+                printf("Processor List\n");
+                status = Ipc_start();
+                if (status >= 0) {
+                    numProcs = MultiProc_getNumProcessors();
+                    for (p = 0; p < numProcs; p++) {
+                        name = MultiProc_getName(p);
+                        printf("    procId=%d, procName=%s\n", p, name);
+                    }
+                    Ipc_stop();
+                }
+                else {
+                    printf(
+                        "Error: %s, line %d: Ipc_start failed\n",
+                        __FILE__, __LINE__);
+                    goto leave;
+                }
+                exit(0);
+                break;
+
+            default:
+                printf(
+                    "Error: %s, line %d: invalid option, %c\n",
+                    __FILE__, __LINE__, (Char)opt);
+                printf("%s", Main_USAGE);
+                status = -1;
+                goto leave;
+        }
+    }
+
+    /* parse the command line arguments */
+    while (arg < argc) {
+
+        if (Main_procCount == Main_MAXQUE) {
+            printf("Error: too many procIds (max=%d)\n", Main_MAXQUE);
+            status = -1;
+            goto leave;
+        }
+
+        /* remaining arguments is a list of procId's */
+        Main_procAry[Main_procCount++] = atoi(argv[arg]);
+
+        arg++;
+    }
+
+    /* ipc initialization */
+    status = Ipc_start();
+
+    if (status < 0) {
+        printf("Error: Ipc_start failed: status = %d\n", status);
+        status = -1;
+        goto leave;
+    }
+
+    /* validate procId list, must do this after Ipc_start() */
+    for (p = 0; p < Main_procCount; p++) {
+        procId = Main_procAry[p];
+
+        if (procId >= MultiProc_getNumProcessors()) {
+            printf("Error: procId must be less than %d\n",
+                    MultiProc_getNumProcessors());
+            status = -1;
+            goto stop;
+        }
+    }
+
+    /* execute main body of test */
+    status = Main_main();
+
+    if (status == 0) {
+        printf("Test PASSED\n");
+    }
+
+stop:
+    /* ipc finalization */
+    Ipc_stop();
+
+leave:
+    return(status);
+}
+
+/*
+ *  ======== Main_main ========
+ */
+int Main_main(Void)
+{
+    int                 status = 0;
+    MessageQ_Msg        msg = NULL;
+    MessageQ_Params     msgParams;
+    int                 p, j;
+    UInt16              procId;
+    MessageQ_Handle     hostQ;
+    char                queueName[64];
+    String              procName;
+
+    printf("Entered Main_main\n");
+
+    /* create local message queue for receiving messages */
+    MessageQ_Params_init(&msgParams);
+
+    hostQ = MessageQ_create(MPU_MESSAGEQNAME, &msgParams);
+
+    if (hostQ == NULL) {
+        printf("Error: MessageQ_create() failed\n");
+        goto leave;
+    }
+    printf("HOST MessageQId: 0x%x\n", MessageQ_getQueueId(hostQ));
+
+    /* open remote message queues */
+    for (p = 0; p < Main_procCount; p++) {
+
+        /* compute remote queue name */
+        procId = Main_procAry[p];
+        procName = MultiProc_getName(procId);
+        sprintf(queueName, "%s_%s", SLAVE_MSGQNAME, procName);
+
+        /* open the remote message queue, loop until queue is available */
+        do {
+            status = MessageQ_open(queueName, &Main_msgQueAry[p]);
+
+            if (status == MessageQ_E_NOTFOUND) {
+                sleep(1);
+            }
+        } while (status == MessageQ_E_NOTFOUND);
+
+        if (status < 0) {
+            printf("Error: MessageQ_open(\"%s\") failed, status=%d\n",
+                    queueName, status);
+            status = -1;
+            goto cleanup;
+        }
+        printf("Remote queueId[%d]=0x%x\n", p, Main_msgQueAry[p]);
+    }
+
+    /* allocate handshake message */
+    msg = MessageQ_alloc(HEAPID, sizeof(SyncMsg));
+
+    if (msg == NULL) {
+        printf("Error: MessageQ_alloc() failed\n");
+        status = -1;
+        goto cleanup;
+    }
+
+    /* handshake with each remote processor to set the number of loops */
+    for (p = 0; p < Main_procCount; p++) {
+        MessageQ_setReplyQueue(hostQ, msg);
+        ((SyncMsg *)msg)->numLoops = NUM_LOOPS_DFLT;
+        ((SyncMsg *)msg)->print = TRUE;
+        MessageQ_put(Main_msgQueAry[p], msg);
+        MessageQ_get(hostQ, &msg, MessageQ_FOREVER);
+
+        procId = Main_procAry[p];
+        procName = MultiProc_getName(procId);
+        printf("Exchanging %d messages with remote processor %s...\n",
+               NUM_LOOPS_DFLT, procName);
+    }
+
+    /* free handshake message */
+    MessageQ_free(msg);
+
+    /* allocate and send all messages */
+    for (p = 0; p < Main_procCount; p++) {
+        for (j = 0; j < NUM_LOOPS_DFLT; j++) {
+
+            /* allocate message */
+            msg = MessageQ_alloc(HEAPID, sizeof(SyncMsg));
+
+            if (msg == NULL) {
+                printf("Error: MessageQ_alloc() failed\n");
+                status = -1;
+                goto cleanup;
+            }
+
+            /* fill in message */
+            MessageQ_setMsgId(msg, j);
+            MessageQ_setReplyQueue(hostQ, msg);
+
+            /* send the messages */
+            status = MessageQ_put(Main_msgQueAry[p], msg);
+
+            if (status < 0) {
+                printf("Error: MessageQ_put() failed, procId=%d, status=%d\n",
+                        Main_procAry[p], status);
+                status = -1;
+                goto cleanup;
+            }
+        }
+    }
+
+    /* delay here to allow for return message deliver */
+    printf("Waiting...");
+    sleep(3);
+    printf("done.");
+
+    /* receive and free all messages */
+    for (p = 0; p < Main_procCount; p++) {
+        for (j = 0; j < NUM_LOOPS_DFLT; j++) {
+
+            /* receive message, timeout 2 sec */
+            status = MessageQ_get(hostQ, &msg, 2000);
+
+            if (status == MessageQ_E_TIMEOUT) {
+                printf("Error: detected dropped message\n");
+                status = -1;
+                goto cleanup;
+            }
+            else if (status < 0) {
+                printf("Error: MessageQ_get() failed, status=%d\n", status);
+                status = -1;
+                goto cleanup;
+            }
+        }
+
+        procId = Main_procAry[p];
+        printf("ProcId %d, received %d messages\n", procId, NUM_LOOPS_DFLT);
+    }
+
+   /* getting here implies success */
+   printf("All messages received\n");
+
+cleanup:
+    /* close remote message queues */
+    for (p = 0; p < Main_procCount; p++) {
+        MessageQ_close(&Main_msgQueAry[p]);
+    }
+
+    /* delete local message queue */
+    MessageQ_delete(&hostQ);
+
+leave:
+    printf("Leaving Main_main(), status=%d", status);
+
+    return(status);
+}
index 45830ab7eb1005d8caafb4e0d4dc5e5ce3d419c0..1cb6e555a0c1698afba320e31114e5725960a2a1 100644 (file)
@@ -193,6 +193,7 @@ NameServerApp_startup()
     Int32 status = 0;
     NameServer_Params params;
     NameServer_Handle nsHandle;
+    NameServer_Handle nsHandleAlias;
     NameServer_Handle nsHandle2;
     Int iteration = 0;
 #ifdef USE_NSD
@@ -218,12 +219,14 @@ NameServerApp_startup()
 
 again:
     NameServer_Params_init(&params);
+
+    params.maxValueLen = sizeof(UInt32);
+    params.maxNameLen = 32;
+
     printf("params.maxValueLen=%d\n", params.maxValueLen);
     printf("params.maxNameLen=%d\n", params.maxNameLen);
     printf("params.checkExisting=%d\n", params.checkExisting);
 
-    params.maxValueLen = sizeof(UInt32);
-    params.maxNameLen = 32;
     nsHandle = NameServer_create(NSNAME, &params);
     if (nsHandle == NULL) {
         printf("Failed to create NameServer '%s'\n", NSNAME);
@@ -233,6 +236,15 @@ again:
         printf("Created NameServer '%s'\n", NSNAME);
     }
 
+    nsHandleAlias = NameServer_create(NSNAME, &params);
+    if (nsHandleAlias == NULL) {
+        printf("Failed to get handle to NameServer '%s'\n", NSNAME);
+        return -1;
+    }
+    else {
+        printf("Got another handle to NameServer '%s'\n", NSNAME);
+    }
+
     NameServer_Params_init(&params);
 
     params.maxValueLen = sizeof(UInt32);
@@ -246,13 +258,36 @@ again:
         printf("Created NameServer '%s'\n", NSNAME2);
     }
 
+    printf("Testing nsHandle\n");
     status = testNS(nsHandle, "Key");
+    if (status != 0) {
+        printf("test failed on nsHandle\n");
+        return status;
+    }
+    printf("Testing nsHandle2\n");
     status = testNS(nsHandle2, "Key");
+    if (status != 0) {
+        printf("test failed on nsHandle2\n");
+        return status;
+    }
 
     printf("Deleting nsHandle and nsHandle2...\n");
     NameServer_delete(&nsHandle);
     NameServer_delete(&nsHandle2);
 
+    /*
+     * Verify that we can still use the alias handle after deleting the
+     * initial handle
+     */
+    printf("Testing nsHandleAlias\n");
+    status = testNS(nsHandleAlias, "Key");
+    if (status != 0) {
+        printf("test failed on nsHandleAlias\n");
+        return status;
+    }
+    printf("Deleting nsHandleAlias...\n");
+    NameServer_delete(&nsHandleAlias);
+
     iteration++;
     if (iteration < 2) {
         goto again;
index bc1962b0875f1885b064d3d9115843108b6be881..740f614bb579f812243b70b53543566c06450ee4 100644 (file)
@@ -49,9 +49,8 @@
 /* Ipc Socket Protocol Family */
 #include <net/rpmsg.h>
 
-#define CORE0 (0)  /* This should be MultiProc_getId("CORE0") - 1 */
-
-#define NUMLOOPS 100
+#define NUM_LOOPS_DFLT 100
+#define CORE_ID_DFLT   0 /* CORE ID should be (MultiProc ID - 1) */
 
 long diff(struct timespec start, struct timespec end)
 {
@@ -68,8 +67,11 @@ long diff(struct timespec start, struct timespec end)
     return (temp.tv_sec * 1000000UL + temp.tv_nsec / 1000);
 }
 
-int main(void)
+int main (int argc, char ** argv)
 {
+    int status = 0;
+    unsigned int numLoops = NUM_LOOPS_DFLT;
+    short coreId = CORE_ID_DFLT;
     int sock, err;
     struct sockaddr_rpmsg src_addr, dst_addr;
     socklen_t len;
@@ -79,8 +81,26 @@ int main(void)
     long              elapsed=0,delta;
     int i;
 
+    /* Parse Args: */
+    switch (argc) {
+        case 1:
+           /* use defaults */
+           break;
+        case 2:
+           numLoops = atoi(argv[1]);
+           break;
+        case 3:
+           numLoops   = atoi(argv[1]);
+           coreId     = atoi(argv[2]);
+           break;
+        default:
+           printf("Usage: %s [<numLoops>] [<CoreId>]\n", argv[0]);
+           printf("\tDefaults: numLoops: %d; CoreId: %d\n",
+                   NUM_LOOPS_DFLT, CORE_ID_DFLT);
+           exit(0);
+    }
+
     /* 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);
@@ -90,7 +110,7 @@ int main(void)
     /* connect to remote service */
     memset(&dst_addr, 0, sizeof(dst_addr));
     dst_addr.family = AF_RPMSG;
-    dst_addr.vproc_id = CORE0;
+    dst_addr.vproc_id = coreId;
     dst_addr.addr = 51; // use 51 for ping_tasks;
     //dst_addr.addr = 61; // use 61 for messageQ transport;
 
@@ -98,7 +118,6 @@ int main(void)
             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);
@@ -106,7 +125,6 @@ int main(void)
     }
 
     /* 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);
@@ -118,10 +136,9 @@ int main(void)
 
     printf("Sending \"%s\" in a loop.\n", msg);
 
-    for (i = 0; i < NUMLOOPS; i++) {
+    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);
@@ -132,7 +149,6 @@ int main(void)
 
         len = sizeof(src_addr);
 
-        /* QNX PORTING NOTE:  len = read(fd, buf, len); */
         err = recvfrom(sock, buf, sizeof(buf), 0,
                        (struct sockaddr *)&src_addr, &len);
 
@@ -160,7 +176,6 @@ int main(void)
     }
     printf ("Avg time: %ld usecs over %d iterations\n", elapsed / i, i);
 
-    /* QNX PORTING NOTE:  close(fd); */
     close(sock);
 
     return 0;
index 48ef3d3e382de50975b5466095952325dda11543..6b909508a84ac60bff99b52fb18e1864a140af6e 100644 (file)
@@ -63,9 +63,13 @@ static _LAD_ClientInfo clientInfo[LAD_MAXNUMCLIENTS];
 
 static LAD_Status initWrappers(Void);
 static Bool openCommandFIFO(Void);
+
+#if defined(IPC_BUILDOS_ANDROID)
+static pthread_mutex_t modGate  = PTHREAD_RECURSIVE_MUTEX_INITIALIZER;
+#else
 // only _NP (non-portable) type available in CG tools which we're using
 static pthread_mutex_t modGate  = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
-// static pthread_mutex_t modGate  = PTHREAD_RECURSIVE_MUTEX_INITIALIZER;
+#endif
 
 
 /*
index 938c44ec4dfd16218044e47d095b26098437cef3..6fdf887f781a99867b44f03fa890e38689f79de3 100644 (file)
@@ -40,13 +40,15 @@ AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/hlos_common/include \
 ###############################################################################
 
 # the library names to build (note we are building shared libs)
-lib_LTLIBRARIES = libtiipcutils.la
+lib_LTLIBRARIES = libtiipcutils.la libtiipcutils_lad.la
 
 # where to install the headers on the system
 libtiipcutils_ladir = $(includedir)
+libtiipcutils_lad_ladir = $(includedir)
 
 # the list of header files that belong to the library (to be installed later)
 libtiipcutils_la_HEADERS =
+libtiipcutils_lad_la_HEADERS =
 
 # the sources to add to the library and to add to the source distribution
 libtiipcutils_la_SOURCES =    \
@@ -59,9 +61,24 @@ libtiipcutils_la_SOURCES =    \
                         $(top_srcdir)/packages/ti/ipc/MultiProc.h \
                         LAD_client.c \
                         $(top_srcdir)/hlos_common/src/utils/MultiProc.c \
+                        MultiProc_app.c \
                         SocketFxns.c
 
+libtiipcutils_lad_la_SOURCES =    \
+                        $(libtiipcutils_la_HEADERS) \
+                        $(top_srcdir)/linux/include/ladclient.h \
+                        $(top_srcdir)/linux/include/_lad.h \
+                        $(top_srcdir)/linux/include/_MultiProc.h \
+                        $(top_srcdir)/linux/include/net/rpmsg.h \
+                        $(top_srcdir)/linux/include/ti/ipc/Std.h \
+                        $(top_srcdir)/packages/ti/ipc/MultiProc.h \
+                        LAD_client.c \
+                        $(top_srcdir)/hlos_common/src/utils/MultiProc.c \
+                        SocketFxns.c
+
+
 # Add version info to the shared library
 libtiipcutils_la_LDFLAGS = -version-info 1:0:0
+libtiipcutils_lad_la_LDFLAGS = -version-info 1:0:0
 
 ###############################################################################
index cfeb8070478122b57cec5372c50489f68909cd2d..575707aaa2c13e796906515e4b918459dc7a7935 100644 (file)
@@ -38,7 +38,8 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = linux/src/utils
-DIST_COMMON = $(libtiipcutils_la_HEADERS) $(srcdir)/Makefile.am \
+DIST_COMMON = $(libtiipcutils_la_HEADERS) \
+       $(libtiipcutils_lad_la_HEADERS) $(srcdir)/Makefile.am \
        $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
@@ -53,14 +54,19 @@ am__vpath_adj = case $$p in \
   esac;
 am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
 am__installdirs = "$(DESTDIR)$(libdir)" \
-       "$(DESTDIR)$(libtiipcutils_ladir)"
+       "$(DESTDIR)$(libtiipcutils_ladir)" \
+       "$(DESTDIR)$(libtiipcutils_lad_ladir)"
 libLTLIBRARIES_INSTALL = $(INSTALL)
 LTLIBRARIES = $(lib_LTLIBRARIES)
 libtiipcutils_la_LIBADD =
 am__objects_1 =
 am_libtiipcutils_la_OBJECTS = $(am__objects_1) LAD_client.lo \
-       MultiProc.lo SocketFxns.lo
+       MultiProc.lo MultiProc_app.lo SocketFxns.lo
 libtiipcutils_la_OBJECTS = $(am_libtiipcutils_la_OBJECTS)
+libtiipcutils_lad_la_LIBADD =
+am_libtiipcutils_lad_la_OBJECTS = $(am__objects_1) LAD_client.lo \
+       MultiProc.lo SocketFxns.lo
+libtiipcutils_lad_la_OBJECTS = $(am_libtiipcutils_lad_la_OBJECTS)
 DEFAULT_INCLUDES = -I. -I$(srcdir)
 depcomp = $(SHELL) $(top_srcdir)/linux/build-aux/depcomp
 am__depfiles_maybe = depfiles
@@ -72,10 +78,12 @@ LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
 CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libtiipcutils_la_SOURCES)
-DIST_SOURCES = $(libtiipcutils_la_SOURCES)
+SOURCES = $(libtiipcutils_la_SOURCES) $(libtiipcutils_lad_la_SOURCES)
+DIST_SOURCES = $(libtiipcutils_la_SOURCES) \
+       $(libtiipcutils_lad_la_SOURCES)
 libtiipcutils_laHEADERS_INSTALL = $(INSTALL_HEADER)
-HEADERS = $(libtiipcutils_la_HEADERS)
+libtiipcutils_lad_laHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(libtiipcutils_la_HEADERS) $(libtiipcutils_lad_la_HEADERS)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -109,6 +117,11 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DRA7XX_FALSE = @DRA7XX_FALSE@
+DRA7XX_TRUE = @DRA7XX_TRUE@
+DRM_FALSE = @DRM_FALSE@
+DRM_PREFIX = @DRM_PREFIX@
+DRM_TRUE = @DRM_TRUE@
 ECHO = @ECHO@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
@@ -204,16 +217,31 @@ target_alias = @target_alias@
 ###############################################################################
 
 # the library names to build (note we are building shared libs)
-lib_LTLIBRARIES = libtiipcutils.la
+lib_LTLIBRARIES = libtiipcutils.la libtiipcutils_lad.la
 
 # where to install the headers on the system
 libtiipcutils_ladir = $(includedir)
+libtiipcutils_lad_ladir = $(includedir)
 
 # the list of header files that belong to the library (to be installed later)
 libtiipcutils_la_HEADERS = 
+libtiipcutils_lad_la_HEADERS = 
 
 # the sources to add to the library and to add to the source distribution
 libtiipcutils_la_SOURCES = \
+                        $(libtiipcutils_la_HEADERS) \
+                        $(top_srcdir)/linux/include/ladclient.h \
+                        $(top_srcdir)/linux/include/_lad.h \
+                        $(top_srcdir)/linux/include/_MultiProc.h \
+                        $(top_srcdir)/linux/include/net/rpmsg.h \
+                        $(top_srcdir)/linux/include/ti/ipc/Std.h \
+                        $(top_srcdir)/packages/ti/ipc/MultiProc.h \
+                        LAD_client.c \
+                        $(top_srcdir)/hlos_common/src/utils/MultiProc.c \
+                        MultiProc_app.c \
+                        SocketFxns.c
+
+libtiipcutils_lad_la_SOURCES = \
                         $(libtiipcutils_la_HEADERS) \
                         $(top_srcdir)/linux/include/ladclient.h \
                         $(top_srcdir)/linux/include/_lad.h \
@@ -228,6 +256,7 @@ libtiipcutils_la_SOURCES = \
 
 # Add version info to the shared library
 libtiipcutils_la_LDFLAGS = -version-info 1:0:0
+libtiipcutils_lad_la_LDFLAGS = -version-info 1:0:0
 all: all-am
 
 .SUFFIXES:
@@ -290,6 +319,8 @@ clean-libLTLIBRARIES:
        done
 libtiipcutils.la: $(libtiipcutils_la_OBJECTS) $(libtiipcutils_la_DEPENDENCIES) 
        $(LINK) -rpath $(libdir) $(libtiipcutils_la_LDFLAGS) $(libtiipcutils_la_OBJECTS) $(libtiipcutils_la_LIBADD) $(LIBS)
+libtiipcutils_lad.la: $(libtiipcutils_lad_la_OBJECTS) $(libtiipcutils_lad_la_DEPENDENCIES) 
+       $(LINK) -rpath $(libdir) $(libtiipcutils_lad_la_LDFLAGS) $(libtiipcutils_lad_la_OBJECTS) $(libtiipcutils_lad_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
        -rm -f *.$(OBJEXT)
@@ -299,6 +330,7 @@ distclean-compile:
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LAD_client.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MultiProc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MultiProc_app.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SocketFxns.Plo@am__quote@
 
 .c.o:
@@ -355,6 +387,23 @@ uninstall-libtiipcutils_laHEADERS:
          echo " rm -f '$(DESTDIR)$(libtiipcutils_ladir)/$$f'"; \
          rm -f "$(DESTDIR)$(libtiipcutils_ladir)/$$f"; \
        done
+install-libtiipcutils_lad_laHEADERS: $(libtiipcutils_lad_la_HEADERS)
+       @$(NORMAL_INSTALL)
+       test -z "$(libtiipcutils_lad_ladir)" || $(mkdir_p) "$(DESTDIR)$(libtiipcutils_lad_ladir)"
+       @list='$(libtiipcutils_lad_la_HEADERS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(libtiipcutils_lad_laHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libtiipcutils_lad_ladir)/$$f'"; \
+         $(libtiipcutils_lad_laHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libtiipcutils_lad_ladir)/$$f"; \
+       done
+
+uninstall-libtiipcutils_lad_laHEADERS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(libtiipcutils_lad_la_HEADERS)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(libtiipcutils_lad_ladir)/$$f'"; \
+         rm -f "$(DESTDIR)$(libtiipcutils_lad_ladir)/$$f"; \
+       done
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
        list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -435,7 +484,7 @@ check-am: all-am
 check: check-am
 all-am: Makefile $(LTLIBRARIES) $(HEADERS)
 installdirs:
-       for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libtiipcutils_ladir)"; do \
+       for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libtiipcutils_ladir)" "$(DESTDIR)$(libtiipcutils_lad_ladir)"; do \
          test -z "$$dir" || $(mkdir_p) "$$dir"; \
        done
 install: install-am
@@ -483,7 +532,8 @@ info: info-am
 
 info-am:
 
-install-data-am: install-libtiipcutils_laHEADERS
+install-data-am: install-libtiipcutils_laHEADERS \
+       install-libtiipcutils_lad_laHEADERS
 
 install-exec-am: install-libLTLIBRARIES
 
@@ -512,7 +562,8 @@ ps: ps-am
 ps-am:
 
 uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES \
-       uninstall-libtiipcutils_laHEADERS
+       uninstall-libtiipcutils_laHEADERS \
+       uninstall-libtiipcutils_lad_laHEADERS
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
        clean-libLTLIBRARIES clean-libtool ctags distclean \
@@ -521,12 +572,13 @@ uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES \
        install install-am install-data install-data-am install-exec \
        install-exec-am install-info install-info-am \
        install-libLTLIBRARIES install-libtiipcutils_laHEADERS \
-       install-man install-strip installcheck installcheck-am \
-       installdirs maintainer-clean maintainer-clean-generic \
-       mostlyclean mostlyclean-compile mostlyclean-generic \
-       mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
-       uninstall-am uninstall-info-am uninstall-libLTLIBRARIES \
-       uninstall-libtiipcutils_laHEADERS
+       install-libtiipcutils_lad_laHEADERS install-man install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am uninstall-info-am \
+       uninstall-libLTLIBRARIES uninstall-libtiipcutils_laHEADERS \
+       uninstall-libtiipcutils_lad_laHEADERS
 
 
 ###############################################################################
similarity index 78%
rename from packages/ti/platform/vayu/dsp1/package.xdc
rename to linux/src/utils/MultiProc_app.c
index 971b69d1245cc7dec1d9e682d8b6b99f6e3c4f85..55a9e5d9eb57d3280449dfe1b8b2542396a367c6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2013, Texas Instruments Incorporated
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-/*!
- * File generated by platform wizard.
+/*
+ *  ======== MultiProc_app.c ========
  *
+ *  Internal function to initialized the MultiProc configuration
  */
 
-package ti.platform.vayu.dsp1 {
-    module Platform;
+#include <ti/ipc/Std.h>
+
+#include <_MultiProc.h>
+
+MultiProc_Config _MultiProc_cfg;
+
+/*
+ *  ===== MultiProc_initCfg =====
+ */
+Void _MultiProc_initCfg(MultiProc_Config  * cfg)
+{
+    /* Initialize _MultiProc_cfg struct */
+    memcpy (&_MultiProc_cfg, cfg, sizeof(*cfg));
 }
index 5666beb713662174aac7bbccbf4a869b21a9a6de..8aa9ab167d20a2e31a5e916303b98b8a3a66eb99 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Texas Instruments Incorporated
+ * Copyright (c) 2012-2013, Texas Instruments Incorporated
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -52,6 +52,9 @@
 /* For PRINTVERBOSE* */
 #include <_lad.h>
 
+/* For MultiProc id to remoteproc index map */
+#include <_MultiProc.h>
+
 static Bool verbose = FALSE;
 
 int ConnectSocket(int sock, UInt16 procId, int dst)
@@ -63,22 +66,23 @@ int ConnectSocket(int sock, UInt16 procId, int dst)
     /* connect to remote service */
     memset(&dstAddr, 0, sizeof(dstAddr));
     dstAddr.family     = AF_RPMSG;
-     /* rpmsg "vproc_id" is one less than the MultiProc ID: */
-    dstAddr.vproc_id   = procId - 1;
+    /* convert MultiProc 'procId' to remoteproc index */
+    dstAddr.vproc_id   = _MultiProc_cfg.rprocList[procId];
     dstAddr.addr       = dst;
 
     len = sizeof(struct sockaddr_rpmsg);
     err = connect(sock, (struct sockaddr *)&dstAddr, len);
     if (err < 0) {
-         printf("connect failed: %s (%d)\n", strerror(errno), errno);
-         return (-1);
+        /* don't hard-printf since this is no longer fatal */
+        PRINTVERBOSE2("connect failed: %s (%d)\n", strerror(errno), errno);
+        return (-1);
     }
 
     /* let's see what local address we got */
     err = getsockname(sock, (struct sockaddr *)&srcAddr, &len);
     if (err < 0) {
-         printf("getpeername failed: %s (%d)\n", strerror(errno), errno);
-         return (-1);
+        printf("getpeername failed: %s (%d)\n", strerror(errno), errno);
+        return (-1);
     }
 
     PRINTVERBOSE3("Connected over sock: %d\n\tdst vproc_id: %d, dst addr: %d\n",
@@ -99,7 +103,7 @@ int SocketBindAddr(int fd, UInt16 rprocId, UInt32 localAddr)
     memset(&srcAddr, 0, sizeof(srcAddr));
     srcAddr.family = AF_RPMSG;
     /* We bind the remote proc ID, but local address! */
-    srcAddr.vproc_id = (rprocId - 1);
+    srcAddr.vproc_id   = _MultiProc_cfg.rprocList[rprocId];
     srcAddr.addr  = localAddr;
 
     len = sizeof(struct sockaddr_rpmsg);
diff --git a/packages/ti/configs/vayu/Dsp2.cfg b/packages/ti/configs/vayu/Dsp2.cfg
new file mode 100644 (file)
index 0000000..fc6cc29
--- /dev/null
@@ -0,0 +1,172 @@
+/*
+ * 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');
+
+var Cache = xdc.useModule('ti.sysbios.family.c66.Cache');
+Cache.setMarMeta(0xa0000000, 0x02000000, Cache.Mar_DISABLE);
+var L1cache = new Cache.Size();
+L1cache.l1dSize = Cache.L1Size_0K;
+
+/* 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.sdo.ipc.family.vayu');
+xdc.useModule('ti.sdo.ipc.family.vayu.InterruptDsp');
+xdc.loadPackage('ti.ipc.rpmsg');
+xdc.loadPackage('ti.ipc.family.vayu');
+
+/* 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 Resource = xdc.useModule('ti.ipc.remoteproc.Resource');
+Resource.loadSegment = "EXT_CODE"
+
+/* 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');
+Idle.addFunc('&VirtQueue_cacheWb');
+
+//TBD: Idle.addFunc('&ti_deh_Deh_idleBegin'); /* Must be placed before pwr mgmt */
+//TBD: 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_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.c64p.Hwi');
+//TBD: var Deh = xdc.useModule('ti.deh.Deh');
+Hwi.enableException = true;
+
+/* -------------------------------- DSP ----------------------------------*/
+var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
+MultiProc.setConfig("DSP2", ["HOST", "IPU2", "IPU1", "DSP2", "DSP1"]);
+
+/* --------------------------- TICK --------------------------------------*/
+var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+Clock.tickSource = Clock.TickSource_NULL;
+//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');
+*/
index 3b0c0d1919f05e508088d20cb5e00825da04b180..95b77652f97f095f9846230b90f8e0a0abbe226e 100644 (file)
@@ -115,14 +115,38 @@ var StackDbg = xdc.useModule('ti.trace.StackDbg');
 */
 
 var dmTimer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer');
-/* dmTimer 0 mapped to GPT3 */
+/* dmTimer 0 mapped to GPT1 */
+dmTimer.timerSettings[0].baseAddr = 0x6AE18000;
+/* dmTimer 1 mapped to GPT2 */
+dmTimer.timerSettings[1].baseAddr = 0x68032000;
+/* dmTimer 2 mapped to GPT3 */
 dmTimer.timerSettings[2].baseAddr = 0x68034000;
-/* dmTimer 1 mapped to GPT4 */
+/* dmTimer 3 mapped to GPT4 */
 dmTimer.timerSettings[3].baseAddr = 0x68036000;
-/* dmTimer 2 mapped to GPT9 */
+/* dmTimer 4 mapped to GPT5 */
+dmTimer.timerSettings[4].baseAddr = 0x68820000;
+/* dmTimer 5 mapped to GPT6 */
+dmTimer.timerSettings[5].baseAddr = 0x68822000;
+/* dmTimer 6 mapped to GPT7 */
+dmTimer.timerSettings[6].baseAddr = 0x68034000;
+/* dmTimer 7 mapped to GPT8 */
+dmTimer.timerSettings[7].baseAddr = 0x68036000;
+/* dmTimer 8 mapped to GPT9 */
 dmTimer.timerSettings[8].baseAddr = 0x6803E000;
-/* dmTimer 3 mapped to GPT11 */
+/* dmTimer 9 mapped to GPT10 */
+dmTimer.timerSettings[9].baseAddr = 0x68086000;
+/* dmTimer 10 mapped to GPT11 */
 dmTimer.timerSettings[10].baseAddr = 0x68088000;
+/* dmTimer 11 mapped to GPT12 */
+dmTimer.timerSettings[11].baseAddr = 0x6AE20000;
+/* dmTimer 12 mapped to GPT13 */
+dmTimer.timerSettings[12].baseAddr = 0x68828000;
+/* dmTimer 13 mapped to GPT14 */
+dmTimer.timerSettings[13].baseAddr = 0x6882A000;
+/* dmTimer 14 mapped to GPT15 */
+dmTimer.timerSettings[14].baseAddr = 0x6882C000;
+/* dmTimer 15 mapped to GPT16 */
+dmTimer.timerSettings[15].baseAddr = 0x6882E000;
 
 /* Skip the Timer frequency verification check. Need to remove this later */
 dmTimer.checkFrequency = false;
diff --git a/packages/ti/configs/vayu/Ipu1Smp.cfg b/packages/ti/configs/vayu/Ipu1Smp.cfg
new file mode 100644 (file)
index 0000000..c65ead0
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * 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("IPU1", ["HOST", "IPU2", "IPU1", "DSP2", "DSP1"]);
+
+/* We are IPU1 */
+var Core = xdc.useModule('ti.sysbios.family.arm.ducati.Core');
+Core.ipuId = 1;
+
+/* ----------------------------- TICK ---------------------------------------*/
+var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+Clock.tickSource = Clock.TickSource_USER;
+/* Configure GPTimer11 as BIOS clock source */
+Clock.timerId = 10;
+
+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";
index 6feff19a58ba1b75fa233692ffd733ab00867a46..356ee9b3573073f8948b573cbc2c03eb4631342a 100644 (file)
@@ -93,64 +93,64 @@ extern "C" {
 /*!
  *  @brief  The resource is still in use
  */
-#define GateMP_S_BUSY               2
+#define GateMP_S_BUSY               (2)
 
 /*!
  *  @brief  The module has been already setup
  */
-#define GateMP_S_ALREADYSETUP       1
+#define GateMP_S_ALREADYSETUP       (1)
 
 /*!
  *  @brief  Operation is successful.
  */
-#define GateMP_S_SUCCESS            0
+#define GateMP_S_SUCCESS            (0)
 
 /*!
  *  @brief  Generic failure.
  */
-#define GateMP_E_FAIL              -1
+#define GateMP_E_FAIL              (-1)
 
 /*!
  *  @brief  Argument passed to function is invalid.
  */
-#define GateMP_E_INVALIDARG        -2
+#define GateMP_E_INVALIDARG        (-2)
 
 /*!
  *  @brief  Operation resulted in memory failure.
  */
-#define GateMP_E_MEMORY            -3
+#define GateMP_E_MEMORY            (-3)
 
 /*!
  *  @brief  The specified entity already exists.
  */
-#define GateMP_E_ALREADYEXISTS     -4
+#define GateMP_E_ALREADYEXISTS     (-4)
 
 /*!
  *  @brief  Unable to find the specified entity.
  */
-#define GateMP_E_NOTFOUND          -5
+#define GateMP_E_NOTFOUND          (-5)
 
 /*!
  *  @brief  Operation timed out.
  */
-#define GateMP_E_TIMEOUT           -6
+#define GateMP_E_TIMEOUT           (-6)
 
 /*!
  *  @brief  Module is not initialized.
  */
-#define GateMP_E_INVALIDSTATE      -7
+#define GateMP_E_INVALIDSTATE      (-7)
 
 /*!
  *  @brief  A failure occurred in an OS-specific call  */
-#define GateMP_E_OSFAILURE         -8
+#define GateMP_E_OSFAILURE         (-8)
 
 /*!
  *  @brief  Specified resource is not available  */
-#define GateMP_E_RESOURCE          -9
+#define GateMP_E_RESOURCE          (-9)
 
 /*!
  *  @brief  Operation was interrupted. Please restart the operation  */
-#define GateMP_E_RESTART           -10
+#define GateMP_E_RESTART           (-10)
 
 /* =============================================================================
  *  Structures & Enums
index 4d2aee88470ae4df4c9601bcaa7bc35729753daf..445a7476764a488418a56a30ee9990c2b211bb6e 100644 (file)
@@ -62,72 +62,72 @@ extern "C" {
 /*!
  *  @brief  The resource is still in use
  */
-#define Ipc_S_BUSY              2
+#define Ipc_S_BUSY              (2)
 
 /*!
  *  @brief  The module has been already setup
  */
-#define Ipc_S_ALREADYSETUP      1
+#define Ipc_S_ALREADYSETUP      (1)
 
 /*!
  *  @brief  Operation is successful.
  */
-#define Ipc_S_SUCCESS           0
+#define Ipc_S_SUCCESS           (0)
 
 /*!
  *  @brief  Generic failure.
  */
-#define Ipc_E_FAIL             -1
+#define Ipc_E_FAIL             (-1)
 
 /*!
  *  @brief  Argument passed to function is invalid.
  */
-#define Ipc_E_INVALIDARG       -2
+#define Ipc_E_INVALIDARG       (-2)
 
 /*!
  *  @brief  Operation resulted in memory failure.
  */
-#define Ipc_E_MEMORY           -3
+#define Ipc_E_MEMORY           (-3)
 
 /*!
  *  @brief  The specified entity already exists.
  */
-#define Ipc_E_ALREADYEXISTS    -4
+#define Ipc_E_ALREADYEXISTS    (-4)
 
 /*!
  *  @brief  Unable to find the specified entity.
  */
-#define Ipc_E_NOTFOUND         -5
+#define Ipc_E_NOTFOUND         (-5)
 
 /*!
  *  @brief  Operation timed out.
  */
-#define Ipc_E_TIMEOUT          -6
+#define Ipc_E_TIMEOUT          (-6)
 
 /*!
  *  @brief  Module is not initialized or in an invalid state.
  */
-#define Ipc_E_INVALIDSTATE     -7
+#define Ipc_E_INVALIDSTATE     (-7)
 
 /*!
  *  @brief  A failure occurred in an OS-specific call
  */
-#define Ipc_E_OSFAILURE        -8
+#define Ipc_E_OSFAILURE        (-8)
 
 /*!
  *  @brief  Specified resource is not available
  */
-#define Ipc_E_RESOURCE         -9
+#define Ipc_E_RESOURCE         (-9)
 
 /*!
  *  @brief  Operation was interrupted. Please restart the operation
  */
-#define Ipc_E_RESTART          -10
+#define Ipc_E_RESTART          (-10)
 
 /*!
  *  @brief  Operation was not ready.
  */
-#define Ipc_E_NOTREADY         -11
+#define Ipc_E_NOTREADY         (-11)
 
 
 /* =============================================================================
index 820713ca19d915848b5803cab03fbba9eb67fa9b..7a1becd16954a13b6e4cc144eb90773ac65e05dc 100644 (file)
@@ -147,112 +147,112 @@ extern "C" {
 /*!
  *  @brief  The resource is still in use
  */
-#define MessageQ_S_BUSY                  2
+#define MessageQ_S_BUSY                  (2)
 
 /*!
  *  @brief  The module has been already setup
  */
-#define MessageQ_S_ALREADYSETUP          1
+#define MessageQ_S_ALREADYSETUP          (1)
 
 /*!
  *  @brief  Operation is successful.
  */
-#define MessageQ_S_SUCCESS               0
+#define MessageQ_S_SUCCESS               (0)
 
 /*!
  *  @brief  Operation is not successful.
  */
-#define MessageQ_E_FAIL                 -1
+#define MessageQ_E_FAIL                 (-1)
 
 /*!
  *  @brief  There is an invalid argument.
  */
-#define MessageQ_E_INVALIDARG           -2
+#define MessageQ_E_INVALIDARG           (-2)
 
 /*!
  *  @brief  Operation resulted in memory failure.
  */
-#define MessageQ_E_MEMORY               -3
+#define MessageQ_E_MEMORY               (-3)
 
 /*!
  *  @brief  The specified entity already exists.
  */
-#define MessageQ_E_ALREADYEXISTS        -4
+#define MessageQ_E_ALREADYEXISTS        (-4)
 
 /*!
  *  @brief  Unable to find the specified entity.
  */
-#define MessageQ_E_NOTFOUND             -5
+#define MessageQ_E_NOTFOUND             (-5)
 
 /*!
  *  @brief  Operation timed out.
  */
-#define MessageQ_E_TIMEOUT              -6
+#define MessageQ_E_TIMEOUT              (-6)
 
 /*!
  *  @brief  Module is not initialized.
  */
-#define MessageQ_E_INVALIDSTATE         -7
+#define MessageQ_E_INVALIDSTATE         (-7)
 
 /*!
  *  @brief  A failure occurred in an OS-specific call
  */
-#define MessageQ_E_OSFAILURE            -8
+#define MessageQ_E_OSFAILURE            (-8)
 
 /*!
  *  @brief  Specified resource is not available
  */
-#define MessageQ_E_RESOURCE             -9
+#define MessageQ_E_RESOURCE             (-9)
 
 /*!
  *  @brief  Operation was interrupted. Please restart the operation
  */
-#define MessageQ_E_RESTART              -10
+#define MessageQ_E_RESTART              (-10)
 
 /*!
  *  @brief  An invalid message was encountered
  */
-#define MessageQ_E_INVALIDMSG           -11
+#define MessageQ_E_INVALIDMSG           (-11)
 
 /*!
  *  @brief  Not the owner
  */
-#define MessageQ_E_NOTOWNER             -12
+#define MessageQ_E_NOTOWNER             (-12)
 
 /*!
  *  @brief  Operation resulted in error
  */
-#define MessageQ_E_REMOTEACTIVE         -13
+#define MessageQ_E_REMOTEACTIVE         (-13)
 
 /*!
  *  @brief  An invalid heap id was encountered
  */
-#define MessageQ_E_INVALIDHEAPID        -14
+#define MessageQ_E_INVALIDHEAPID        (-14)
 
 /*!
  *  @brief  An invalid MultiProc id was encountered
  */
-#define MessageQ_E_INVALIDPROCID        -15
+#define MessageQ_E_INVALIDPROCID        (-15)
 
 /*!
  *  @brief  The max has been reached.
  */
-#define MessageQ_E_MAXREACHED           -16
+#define MessageQ_E_MAXREACHED           (-16)
 
 /*!
  *  @brief  Attempting to use an unregistered heap id.
  */
-#define MessageQ_E_UNREGISTEREDHEAPID   -17
+#define MessageQ_E_UNREGISTEREDHEAPID   (-17)
 
 /*!
  *  @brief  Trying to free a statically initialized message
  */
-#define MessageQ_E_CANNOTFREESTATICMSG  -18
+#define MessageQ_E_CANNOTFREESTATICMSG  (-18)
 
 /*!
  *  @brief  MessageQ was unblocked
  */
-#define MessageQ_E_UNBLOCKED            -19
+#define MessageQ_E_UNBLOCKED            (-19)
 
 /* =============================================================================
  *  Macros
@@ -262,22 +262,22 @@ extern "C" {
 /*!
  *  @brief      Used as the timeout value to specify wait forever
  */
-#define MessageQ_FOREVER                ~(0)
+#define MessageQ_FOREVER                (~(0))
 
 /*!
  *  @brief      Invalid message id
  */
-#define MessageQ_INVALIDMSGID           0xffff
+#define MessageQ_INVALIDMSGID           (0xffff)
 
 /*!
  *  @brief      Invalid message queue
  */
-#define MessageQ_INVALIDMESSAGEQ        0xffff
+#define MessageQ_INVALIDMESSAGEQ        (0xffff)
 
 /*!
  *  @brief      Mask to extract priority setting
  */
-#define MessageQ_PRIORITYMASK           0x3
+#define MessageQ_PRIORITYMASK           (0x3)
 
 /*!
  *  @brief      Extract the destination queue ID from a message.
@@ -410,7 +410,7 @@ typedef UInt16 MessageQ_QueueIndex;
 typedef struct MessageQ_Object *MessageQ_Handle;
 
 /*!
- *  @brief  Structure defining parameters for the MessageQ module.
+ *  @brief  Structure defining parameters for MessageQ_create().
  */
 typedef struct {
     Void *synchronizer;
@@ -424,6 +424,39 @@ typedef struct {
 
 } MessageQ_Params;
 
+/*!
+ *  @brief  Structure defining parameters for MessageQ_create2().
+ *
+ *  MessageQ_Params2 is a superset of MessageQ_Params. It is used
+ *  with MessageQ_create2().
+ */
+typedef struct {
+    Void *synchronizer;
+    /*!< Synchronizer instance used to signal IO completion
+     *
+     *  The synchronizer is used in MessageQ_put() and MessageQ_get().
+     *  The synchronizer signal is called as part of MessageQ_put().
+     *  The synchronizer waits in MessageQ_get() if there are no messages
+     *  present.
+     */
+
+     MessageQ_QueueIndex queueIndex;
+     /*!< Value used to specify the index in the MessageQ array
+      *
+      *  This parameter allows an application to specify a queueIndex to
+      *  be used for a message queue. To use this functionality, the
+      *  MessageQ.numReservedEntries static configuration parameter must be
+      *  set to one more than the highest requested queueIndex. The
+      *  MessageQ.numReservedEntries parameter reserves that number of
+      *  message queue slots starting at 0 and proceeding to
+      *  (MessageQ.numReservedEntries - 1).
+      *
+      *  The default is MessageQ_ANY, which means it is not taken from the
+      *  reserved slots.
+      */
+
+} MessageQ_Params2;
+
 /*!
  *  @brief      Required first field in every message
  */
@@ -454,10 +487,25 @@ typedef MessageQ_MsgHeader *MessageQ_Msg;
 typedef enum {
     MessageQ_NORMALPRI      = 0,    /*!< Normal Priority                  */
     MessageQ_HIGHPRI        = 1,    /*!< High Priority                    */
-    MessageQ_RESERVEDPRI    = 2,    /*!< Reserved Priority                 */
+    MessageQ_RESERVEDPRI    = 2,    /*!< Reserved Priority                */
     MessageQ_URGENTPRI      = 3     /*!< Urgent Priority                  */
 } MessageQ_Priority;
 
+/*!
+ *  @brief      Denotes any queueId is acceptable.
+ *
+ *  This constant is the default for the queueId in the MessageQ_Params2
+ *  structure.
+ */
+#define MessageQ_ANY (Bits16)~(0)
+
+/*!
+ *  @brief      Free hook prototype
+ *
+ *  @param[in]  heapId      heapId of message that was freed
+ *  @param[in]  msgId       msgId of message that was freed
+ */
+typedef Void (*MessageQ_FreeHookFxn)(Bits16 heapId, Bits16 msgId);
 
 /* =============================================================================
  *  MessageQ Module-wide Functions
@@ -471,11 +519,18 @@ typedef enum {
  */
 Void MessageQ_Params_init(MessageQ_Params *params);
 
+/*!
+ *  @brief      Initialize MessageQ_Params2
+ *
+ *  @param[in]  params      Parameters required to create a MessageQ
+ */
+Void MessageQ_Params2_init(MessageQ_Params2 *params);
+
 /*!
  *  @brief      Create a MessageQ instance
  *
  *  The name supplied here does not have to be in persistent memory.  The
- *  maximum length of the string supplied here, including the '\\0' terminator
+ *  maximum length of the string supplied here, including the '\\0' terminator,
  *  is '32' by default.
  *
  *  There are no verifications to ensure that the name supplied in
@@ -489,6 +544,24 @@ Void MessageQ_Params_init(MessageQ_Params *params);
  */
 MessageQ_Handle MessageQ_create(String name, const MessageQ_Params *params);
 
+/*!
+ *  @brief      Create a MessageQ instance with the MessageQ_Params2 structure
+ *
+ *  The name supplied here does not have to be in persistent memory.  The
+ *  maximum length of the string supplied here, including the '\\0' terminator,
+ *  is '32' by default.
+ *
+ *  There are no verifications to ensure that the name supplied in
+ *  MessageQ_create2() is unique across all processors. Caution must be exercised
+ *  to ensure that each processor uses a unique name.
+ *
+ *  @param[in]  name        Name of the queue
+ *  @param[in]  params      Initialized MessageQ_Params2
+ *
+ *  @return     MessageQ Handle
+ */
+MessageQ_Handle MessageQ_create2(String name, const MessageQ_Params2 *params);
+
 /*!
  *  @brief      Delete a created MessageQ instance
  *
@@ -523,6 +596,41 @@ Int MessageQ_delete(MessageQ_Handle *handlePtr);
  */
 Int MessageQ_open(String name, MessageQ_QueueId *queueId);
 
+/*!
+ *  @brief      Opens a MessageQ given the queue index and remote processor id
+ *
+ *  This function can be used instead of MessageQ_open() if the queue was created
+ *  with a specified QueueIndex.
+ *
+ *      @code
+ *      #define SERVERQUEUEINDEX  1
+ *      #define SERVERMULTIPROCID 2
+ *
+ *      serverFxn() {
+ *          MessageQ_Params2 params2;
+ *
+ *          MessageQ_Params2_init(&params2);
+ *          params2.queueIndex = SERVERQUEUEINDEX;
+ *          messageQ = MessageQ_create2("server", &params2);
+ *          ...
+ *
+ *      clientFxn() {
+ *          MessageQ_QueueId serverQueue;
+ *          serverQueue = MessageQ_openQueueId(SERVERQUEUEINDEX, SERVERMULTIPROCID);
+ *      @endcode
+ *
+ *  It is up to the application to guarantee that the queue that is being opened
+ *  has already been created.  MessageQ_openQueueId() does not validate that
+ *  the queue has been created (unlike the MessageQ_open() function).
+ *
+ *  @param[in] queueIndex   QueueIndex specified in MessageQ_Params2
+ *  @param[in] remoteProcId Multiproc_Id of where the created queue resides
+ *
+ *  @return     The MessageQ_QueueId associated with the queueIndex
+ *              and remoteProcId
+ */
+MessageQ_QueueId MessageQ_openQueueId(UInt16 queueIndex, UInt16 remoteProcId);
+
 /*!
  *  @brief      Close the opened handle
  *
@@ -655,6 +763,26 @@ Void MessageQ_setMsgTrace(MessageQ_Msg msg, Bool traceFlag);
  */
 Void MessageQ_staticMsgInit(MessageQ_Msg msg, UInt32 size);
 
+/*!
+ *  @brief      Sets MessageQ's free hook function.
+ *
+ *  This API allows a user to specify a hook function which is called within
+ *  MessageQ_free(). The hook is called after a message is freed back to the
+ *  associated heap. The two parameters to the hook function are the heapId
+ *  and the msgId of the freed message.
+ *
+ *  The function is called within MessageQ_free(), so care must be taken to
+ *  minimize any performance or calling context impact.
+ *
+ *  MessageQ_setFreeHookFxn() is not thread safe. It should only
+ *  be called when no MessageQ_free()'s are happening.
+ *
+ *  To disable the hook function, call MessageQ_setFreeHookFxn() with NULL.
+ *
+ *  @param[in]  freeHookFxn  function to be called within MessageQ_free()
+ */
+Void MessageQ_setFreeHookFxn(MessageQ_FreeHookFxn freeHookFxn);
+
 /* =============================================================================
  *  MessageQ Per-instance Functions
  * =============================================================================
index cda9a74182234c7d971f775304f78a52b6aed134..3b2d2425203f070ade2729383a072ec11f0b4eb3 100644 (file)
@@ -67,67 +67,67 @@ extern "C" {
 /*!
  *  @brief  The resource is still in use
  */
-#define MultiProc_S_BUSY                 2
+#define MultiProc_S_BUSY                 (2)
 
 /*!
  *  @brief  The module has been already setup
  */
-#define MultiProc_S_ALREADYSETUP         1
+#define MultiProc_S_ALREADYSETUP         (1)
 
 /*!
  *  @brief  Operation is successful.
  */
-#define MultiProc_S_SUCCESS              0
+#define MultiProc_S_SUCCESS              (0)
 
 /*!
  *  @brief  Generic failure.
  */
-#define MultiProc_E_FAIL                -1
+#define MultiProc_E_FAIL                (-1)
 
 /*!
  *  @brief  Argument passed to function is invalid.
  */
-#define MultiProc_E_INVALIDARG          -2
+#define MultiProc_E_INVALIDARG          (-2)
 
 /*!
  *  @brief  Operation resulted in memory failure.
  */
-#define MultiProc_E_MEMORY              -3
+#define MultiProc_E_MEMORY              (-3)
 
 /*!
  *  @brief  The specified entity already exists.
  */
-#define MultiProc_E_ALREADYEXISTS       -4
+#define MultiProc_E_ALREADYEXISTS       (-4)
 
 /*!
  *  @brief  Unable to find the specified entity.
  */
-#define MultiProc_E_NOTFOUND            -5
+#define MultiProc_E_NOTFOUND            (-5)
 
 /*!
  *  @brief  Operation timed out.
  */
-#define MultiProc_E_TIMEOUT             -6
+#define MultiProc_E_TIMEOUT             (-6)
 
 /*!
  *  @brief  Module is not initialized.
  */
-#define MultiProc_E_INVALIDSTATE        -7
+#define MultiProc_E_INVALIDSTATE        (-7)
 
 /*!
  *  @brief  A failure occurred in an OS-specific call
  */
-#define MultiProc_E_OSFAILURE           -8
+#define MultiProc_E_OSFAILURE           (-8)
 
 /*!
  *  @brief  Specified resource is not available
  */
-#define MultiProc_E_RESOURCE            -9
+#define MultiProc_E_RESOURCE            (-9)
 
 /*!
  *  @brief  Operation was interrupted. Please restart the operation
  */
-#define MultiProc_E_RESTART             -10
+#define MultiProc_E_RESTART             (-10)
 
 /* =============================================================================
  *  Macros
index 7e8666c93a12ce3f14ade9825f11c83cc8bf7605..b77929e6d99a19c40794a9701844314b6f6ab1b6 100644 (file)
@@ -94,67 +94,67 @@ extern "C" {
 /*!
  *  @brief  The resource is still in use
  */
-#define NameServer_S_BUSY                2
+#define NameServer_S_BUSY                (2)
 
 /*!
  *  @brief  The module has been already setup
  */
-#define NameServer_S_ALREADYSETUP        1
+#define NameServer_S_ALREADYSETUP        (1)
 
 /*!
  *  @brief  Operation is successful.
  */
-#define NameServer_S_SUCCESS             0
+#define NameServer_S_SUCCESS             (0)
 
 /*!
  *  @brief  Generic failure.
  */
-#define NameServer_E_FAIL               -1
+#define NameServer_E_FAIL               (-1)
 
 /*!
  *  @brief  Argument passed to function is invalid.
  */
-#define NameServer_E_INVALIDARG         -2
+#define NameServer_E_INVALIDARG         (-2)
 
 /*!
  *  @brief  Operation resulted in memory failure.
  */
-#define NameServer_E_MEMORY             -3
+#define NameServer_E_MEMORY             (-3)
 
 /*!
  *  @brief  The specified entity already exists.
  */
-#define NameServer_E_ALREADYEXISTS      -4
+#define NameServer_E_ALREADYEXISTS      (-4)
 
 /*!
  *  @brief  Unable to find the specified entity.
  */
-#define NameServer_E_NOTFOUND           -5
+#define NameServer_E_NOTFOUND           (-5)
 
 /*!
  *  @brief  Operation timed out.
  */
-#define NameServer_E_TIMEOUT            -6
+#define NameServer_E_TIMEOUT            (-6)
 
 /*!
  *  @brief  Module is not initialized.
  */
-#define NameServer_E_INVALIDSTATE       -7
+#define NameServer_E_INVALIDSTATE       (-7)
 
 /*!
  *  @brief  A failure occurred in an OS-specific call
  */
-#define NameServer_E_OSFAILURE          -8
+#define NameServer_E_OSFAILURE          (-8)
 
 /*!
  *  @brief  Specified resource is not available
  */
-#define NameServer_E_RESOURCE           -9
+#define NameServer_E_RESOURCE           (-9)
 
 /*!
  *  @brief  Operation was interrupted. Please restart the operation
  */
-#define NameServer_E_RESTART            -10
+#define NameServer_E_RESTART            (-10)
 
 /* =============================================================================
  *  Macros
@@ -169,7 +169,7 @@ extern "C" {
 /*!
  *  @brief  The default maximum length of the name for the name/value pair
  */
-#define NameServer_Params_MAXNAMELEN    16
+#define NameServer_Params_MAXNAMELEN    (16)
 
 /* =============================================================================
  *  Structures & Enums
@@ -263,6 +263,11 @@ Void NameServer_Params_init(NameServer_Params *params);
 /*!
  *  @brief      Creates a NameServer instance
  *
+ *  If NameServer_create() was previously called to create an instance with the
+ *  same name, subsequent calls to NameServer_create() on the same name will
+ *  simply return a valid handle to the existing NameServer instance, similar
+ *  to what is done by NameServer_getHandle().
+ *
  *  @param      name    Instance name
  *  @param      params  Instance param structure
  *
@@ -279,6 +284,10 @@ NameServer_Handle NameServer_create(String name,
  *  If the instance is not empty, the contents is freed back to the
  *  heap it was allocated from.
  *
+ *  If NameServer_create() was called multiple times on the same name,
+ *  a matching number of calls to NameServer_delete() is necessary in
+ *  order to fully deallocate the instance.
+ *
  *  @param      handlePtr  Pointer to a NameServer handle
  *
  *  @return     Status
index e629aa275e7711270911baa91445ed89480e43fe..dca17a3e8acc7f53f650bd93883280a2c95cf67e 100644 (file)
@@ -110,102 +110,102 @@ extern "C" {
 /*!
  *  @brief  The resource is still in use
  */
-#define Notify_S_BUSY                    2
+#define Notify_S_BUSY                    (2)
 
 /*!
  *  @brief  Module already set up
  */
-#define Notify_S_ALREADYSETUP            1
+#define Notify_S_ALREADYSETUP            (1)
 
 /*!
  *  @brief  Operation is successful.
  */
-#define Notify_S_SUCCESS                 0
+#define Notify_S_SUCCESS                 (0)
 
 /*!
  *  @brief  Generic failure.
  */
-#define Notify_E_FAIL                   -1
+#define Notify_E_FAIL                   (-1)
 
 /*!
  *  @brief  Argument passed to function is invalid.
  */
-#define Notify_E_INVALIDARG             -2
+#define Notify_E_INVALIDARG             (-2)
 
 /*!
  *  @brief  Operation resulted in memory failure.
  */
-#define Notify_E_MEMORY                 -3
+#define Notify_E_MEMORY                 (-3)
 
 /*!
  *  @brief  The specified entity already exists.
  */
-#define Notify_E_ALREADYEXISTS          -4
+#define Notify_E_ALREADYEXISTS          (-4)
 
 /*!
  *  @brief  Unable to find the specified entity.
  */
-#define Notify_E_NOTFOUND               -5
+#define Notify_E_NOTFOUND               (-5)
 
 /*!
  *  @brief  Operation timed out.
  */
-#define Notify_E_TIMEOUT                -6
+#define Notify_E_TIMEOUT                (-6)
 
 /*!
  *  @brief  Module is not initialized.
  */
-#define Notify_E_INVALIDSTATE           -7
+#define Notify_E_INVALIDSTATE           (-7)
 
 /*!
  *  @brief  A failure occurred in an OS-specific call
  */
-#define Notify_E_OSFAILURE              -8
+#define Notify_E_OSFAILURE              (-8)
 
 /*!
  *  @brief  The module has been already setup
  */
-#define Notify_E_ALREADYSETUP           -9
+#define Notify_E_ALREADYSETUP           (-9)
 
 /*!
  *  @brief  Specified resource is not available
  */
-#define Notify_E_RESOURCE               -10
+#define Notify_E_RESOURCE               (-10)
 
 /*!
  *  @brief  Operation was interrupted. Please restart the operation
  */
-#define Notify_E_RESTART                -11
+#define Notify_E_RESTART                (-11)
 
 /*!
  *  @brief  The resource is still in use
  */
-#define Notify_E_BUSY                   -12
+#define Notify_E_BUSY                   (-12)
 
 /*!
  *  @brief  Driver corresponding to the specified eventId is not registered
  */
-#define Notify_E_DRIVERNOTREGISTERED    -13
+#define Notify_E_DRIVERNOTREGISTERED    (-13)
 
 /*!
  *  @brief  Event not registered
  */
-#define Notify_E_EVTNOTREGISTERED       -14
+#define Notify_E_EVTNOTREGISTERED       (-14)
 
 /*!
  *  @brief  Event is disabled
  */
-#define Notify_E_EVTDISABLED            -15
+#define Notify_E_EVTDISABLED            (-15)
 
 /*!
  *  @brief  Remote notification is not initialized
  */
-#define Notify_E_NOTINITIALIZED         -16
+#define Notify_E_NOTINITIALIZED         (-16)
 
 /*!
  *  @brief  Trying to illegally use a reserved event
  */
-#define Notify_E_EVTRESERVED            -17
+#define Notify_E_EVTRESERVED            (-17)
 
 /* =============================================================================
  *  Macros
index cfd56de8c3790bdff53c7ceb2ef7414b2b3a1e08..2327ead185aab085421745776ac412df5cd3de75 100644 (file)
  */
 /*
  *  ======== InterruptIpu.h ========
- *  OMAP4430/Ducati Interrupt Manger
+ *  OMAP54xx IPU Interrupt Manger
  */
 
+#ifndef ti_ipc_family_omap54xx_InterruptIpu__include
+#define ti_ipc_family_omap54xx_InterruptIpu__include
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
 #include <ti/sysbios/hal/Hwi.h>
 
 #define INVALIDPAYLOAD       (0xFFFFFFFF)
@@ -66,3 +73,10 @@ Void InterruptIpu_intSend(UInt16 remoteProcId,  UArg arg);
  *  Clear interrupt
  */
 UInt InterruptIpu_intClear();
+
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* ti_ipc_family_omap54xx_InterruptIpu__include */
index 6c2220427e66e40e3071d8ec476f7218bda28688..c055ada73ba895e589029bb95bfd5877a942ed79 100644 (file)
  *
  */
 
+/* this define must precede inclusion of any xdc header file */
+#define Registry_CURDESC ti_ipc_family_vayu__Desc
+#define MODULE_NAME "ti.ipc.family.omap54xx.VirtQueue"
+
 #include <xdc/std.h>
 #include <xdc/runtime/System.h>
+#include <xdc/runtime/Assert.h>
 #include <xdc/runtime/Error.h>
 #include <xdc/runtime/Memory.h>
+#include <xdc/runtime/Registry.h>
 #include <xdc/runtime/Log.h>
 #include <xdc/runtime/Diags.h>
 
 #include <ti/pm/IpcPower.h>
 #include <string.h>
 
+#include <ti/ipc/remoteproc/Resource.h>
+#include <ti/ipc/remoteproc/rsc_types.h>
 #include <ti/ipc/rpmsg/_VirtQueue.h>
 
 #include "InterruptProxy.h"
 #include "VirtQueue.h"
 
 
+/*
+ *  The following three VIRTIO_* defines must match those in
+ *  <Linux_kernel>/include/uapi/linux/virtio_config.h
+ */
+#define VIRTIO_CONFIG_S_ACKNOWLEDGE     1
+#define VIRTIO_CONFIG_S_DRIVER          2
+#define VIRTIO_CONFIG_S_DRIVER_OK       4
+
+#define VRING_BUFS_PRIMED  (VIRTIO_CONFIG_S_ACKNOWLEDGE | \
+                            VIRTIO_CONFIG_S_DRIVER | VIRTIO_CONFIG_S_DRIVER_OK)
+
 /* Used for defining the size of the virtqueue registry */
 #define NUM_QUEUES              4
 
@@ -198,6 +217,9 @@ typedef struct VirtQueue_Object {
     GateHwi_Handle       gateH;
 } VirtQueue_Object;
 
+/* module diags mask */
+Registry_Desc Registry_CURDESC;
+
 static struct VirtQueue_Object *queueRegistry[NUM_QUEUES] = {NULL};
 
 static UInt16 hostProcId;
@@ -212,6 +234,29 @@ extern Void OffloadM3_init();
 extern Int OffloadM3_processSysM3Tasks(UArg msg);
 #endif
 
+/*!
+ * ======== _VirtQueue_init ========
+ *
+ * This function adds the VirtQueue "module" to the Registry so that
+ * DIAGS will work with this non-XDC module.
+ * Since VirtQueue_init is not called by XDC-VirtQueue module clients, this
+ * function is called in the first VirtQueue fxn called: VirtQueue_create.
+ */
+static Void _VirtQueue_init()
+{
+    static int initialized = 0;
+
+    if (!initialized) {
+        Registry_Result result;
+
+        /* register with xdc.runtime to get a diags mask */
+        result = Registry_addModule(&Registry_CURDESC, MODULE_NAME);
+        Assert_isTrue(result == Registry_SUCCESS, (Assert_Id)NULL);
+
+        initialized = 1;
+    }
+}
+
 static inline Void * mapPAtoVA(UInt pa)
 {
     return (Void *)((pa & 0x000fffffU) | IPC_MEM_VRING0);
@@ -489,6 +534,9 @@ VirtQueue_Handle VirtQueue_create(UInt16 remoteProcId, VirtQueue_Params *params,
     VirtQueue_Object *vq;
     Void *vringAddr;
 
+    /* Perform initialization we can't do in Instance_init (being non-XDC): */
+    _VirtQueue_init();
+
     vq = Memory_alloc(NULL, sizeof(VirtQueue_Object), 0, eb);
     if (NULL == vq) {
         return (NULL);
@@ -585,7 +633,22 @@ Void VirtQueue_startup()
     }
 #endif
 
+    /*
+     * Wait for HLOS (Virtio device) to indicate that priming of host's receive
+     * buffers is complete, indicating that host is ready to send.
+     *
+     * Though this is a Linux Virtio configuration status, it must be
+     * implemented by each non-Linux HLOS as well.
+     */
+    Log_print1(Diags_USER1, "VirtQueue_startup: VDEV status: 0x%x\n",
+              Resource_getVdevStatus(VIRTIO_ID_RPMSG));
+    Log_print0(Diags_USER1, "VirtQueue_startup: Polling VDEV status...\n");
+    while (Resource_getVdevStatus(VIRTIO_ID_RPMSG) != VRING_BUFS_PRIMED);
+    Log_print1(Diags_USER1, "VirtQueue_startup: VDEV status: 0x%x\n",
+              Resource_getVdevStatus(VIRTIO_ID_RPMSG));
+
     InterruptProxy_intRegister(VirtQueue_isr);
+    Log_print0(Diags_USER1, "Passed VirtQueue_startup\n");
 }
 
 /*!
index 21dff80431836dd7538beb965a9fd201f25c7451..e32bdbd185fd0b5fe782dd189d2d57c48532d527 100644 (file)
@@ -34,8 +34,8 @@
  *  Proxy Interrupt Manager
  */
 
-#ifndef ti_ipc_rpmsg_InterruptProxy__include
-#define ti_ipc_rpmsg_InterruptProxy__include
+#ifndef ti_ipc_family_vayu_InterruptProxy__include
+#define ti_ipc_family_vayu_InterruptProxy__include
 
 #if defined(__cplusplus)
 extern "C" {
@@ -88,4 +88,4 @@ extern "C" {
 }
 #endif /* defined (__cplusplus) */
 
-#endif /* ti_ipc_rpmsg_InterruptProxy__include */
+#endif /* ti_ipc_family_vayu_InterruptProxy__include */
index 781179773b06fa92ed94ae37848e34c1f17e527d..42e9b8680afe849481b3c27760f2cb7c80545698 100644 (file)
  *
  */
 
+/* this define must precede inclusion of any xdc header file */
+#define Registry_CURDESC ti_ipc_family_vayu__Desc
+#define MODULE_NAME "ti.ipc.family.vayu.VirtQueue"
+
 #include <xdc/std.h>
 #include <xdc/runtime/System.h>
+#include <xdc/runtime/Assert.h>
 #include <xdc/runtime/Error.h>
 #include <xdc/runtime/Memory.h>
+#include <xdc/runtime/Registry.h>
 #include <xdc/runtime/Log.h>
 #include <xdc/runtime/Diags.h>
 
@@ -74,6 +80,8 @@
 #endif
 #include <string.h>
 
+#include <ti/ipc/remoteproc/Resource.h>
+#include <ti/ipc/remoteproc/rsc_types.h>
 #include <ti/ipc/rpmsg/_VirtQueue.h>
 
 #include <ti/sdo/ipc/notifyDrivers/IInterrupt.h>
@@ -203,6 +211,9 @@ typedef struct VirtQueue_Object {
     GateHwi_Handle       gateH;
 } VirtQueue_Object;
 
+/* module diags mask */
+Registry_Desc Registry_CURDESC;
+
 static struct VirtQueue_Object *queueRegistry[NUM_QUEUES] = {NULL};
 
 static UInt16 hostProcId;
@@ -220,6 +231,28 @@ extern Void OffloadM3_init();
 extern Int OffloadM3_processSysM3Tasks(UArg msg);
 #endif
 
+/*!
+ * ======== _VirtQueue_init ========
+ *
+ * This function adds the VirtQueue "module" to the Registry so that
+ * DIAGS will work with this non-XDC module.
+ * Since VirtQueue_init is not called by XDC-VirtQueue module clients, this
+ * function is called in the first VirtQueue fxn called: VirtQueue_create.
+ */
+static Void _VirtQueue_init()
+{
+    static int initialized = 0;
+
+    if (!initialized) {
+        Registry_Result result;
+
+        /* register with xdc.runtime to get a diags mask */
+        result = Registry_addModule(&Registry_CURDESC, MODULE_NAME);
+        Assert_isTrue(result == Registry_SUCCESS, (Assert_Id)NULL);
+
+        initialized = 1;
+    }
+}
 static inline Void * mapPAtoVA(UInt pa)
 {
     return (Void *)((pa & 0x000fffffU) | IPC_MEM_VRING0);
@@ -498,6 +531,9 @@ VirtQueue_Handle VirtQueue_create(UInt16 remoteProcId, VirtQueue_Params *params,
     VirtQueue_Object *vq;
     Void *vringAddr;
 
+    /* Perform initialization we can't do in Instance_init (being non-XDC): */
+    _VirtQueue_init();
+
     vq = Memory_alloc(NULL, sizeof(VirtQueue_Object), 0, eb);
     if (NULL == vq) {
         return (NULL);
@@ -571,6 +607,17 @@ VirtQueue_Handle VirtQueue_create(UInt16 remoteProcId, VirtQueue_Params *params,
     return (vq);
 }
 
+/*
+ *  The following three VIRTIO_* defines must match those in
+ *  <Linux_kernel>/include/uapi/linux/virtio_config.h
+ */
+#define VIRTIO_CONFIG_S_ACKNOWLEDGE     1
+#define VIRTIO_CONFIG_S_DRIVER          2
+#define VIRTIO_CONFIG_S_DRIVER_OK       4
+
+#define VRING_BUFS_PRIMED  (VIRTIO_CONFIG_S_ACKNOWLEDGE | \
+                            VIRTIO_CONFIG_S_DRIVER | VIRTIO_CONFIG_S_DRIVER_OK)
+
 /*!
  * ======== VirtQueue_startup ========
  */
@@ -590,7 +637,22 @@ Void VirtQueue_startup()
     IpcPower_init();
 #endif
 
+    /*
+     * Wait for HLOS (Virtio device) to indicate that priming of host's receive
+     * buffers is complete, indicating that host is ready to send.
+     *
+     * Though this is a Linux Virtio configuration status, it must be
+     * implemented by each non-Linux HLOS as well.
+     */
+    Log_print1(Diags_USER1, "VirtQueue_startup: VDEV status: 0x%x\n",
+              Resource_getVdevStatus(VIRTIO_ID_RPMSG));
+    Log_print0(Diags_USER1, "VirtQueue_startup: Polling VDEV status...\n");
+    while (Resource_getVdevStatus(VIRTIO_ID_RPMSG) != VRING_BUFS_PRIMED);
+    Log_print1(Diags_USER1, "VirtQueue_startup: VDEV status: 0x%x\n",
+              Resource_getVdevStatus(VIRTIO_ID_RPMSG));
+
     InterruptProxy_intRegister(hostProcId, &intInfo, (Fxn)VirtQueue_isr, NULL);
+    Log_print0(Diags_USER1, "Passed VirtQueue_startup\n");
 }
 
 /*!
index 2442218fcba484dba20f42dc29835dae8f1f3418..d33a13b84b6eb6cfc299b93d0435297b5b9ff3b8 100644 (file)
 
 #include <ti/ipc/rpmsg_rpc.h>
 
+#elif defined(IPC_BUILDOS_ANDROID)
+#include <linux/rpmsg_rpc.h>
+
 #else
 #error Unsupported Operating System
 #endif
 
 #include "MmRpc.h"
 
+#if defined(KERNEL_INSTALL_DIR) || defined(IPC_BUILDOS_ANDROID)
+static int MmRpc_bufHandle(MmRpc_Handle handle, int cmd, int num,
+        MmRpc_BufDesc *desc);
+#endif
+
 
 /*
  *  ======== MmRpc_Object ========
@@ -181,9 +189,7 @@ int MmRpc_call(MmRpc_Handle handle, MmRpc_FxnCtx *ctx, int32_t *ret)
     int len;
     int i;
 
-    /* Combine function parameters and translation array into one contiguous
-     * message. TODO, modify driver to accept two separate buffers in order
-     * to eliminate this step. */
+    /* combine params and translation array into one contiguous message */
     len = sizeof(struct rppc_function) +
                 (ctx->num_xlts * sizeof(struct rppc_param_translation));
     msg = (void *)calloc(len, sizeof(char));
@@ -208,7 +214,7 @@ int MmRpc_call(MmRpc_Handle handle, MmRpc_FxnCtx *ctx, int32_t *ret)
                 rpfxn->params[i].size = param->param.scalar.size;
                 rpfxn->params[i].data = param->param.scalar.data;
                 rpfxn->params[i].base = 0;
-                rpfxn->params[i].reserved = 0;
+                rpfxn->params[i].fd = 0;
                 break;
 
             case MmRpc_ParamType_Ptr:
@@ -216,18 +222,18 @@ int MmRpc_call(MmRpc_Handle handle, MmRpc_FxnCtx *ctx, int32_t *ret)
                 rpfxn->params[i].size = param->param.ptr.size;
                 rpfxn->params[i].data = param->param.ptr.addr;
                 rpfxn->params[i].base = param->param.ptr.addr;
-                rpfxn->params[i].reserved = param->param.ptr.handle;
+                rpfxn->params[i].fd = (size_t)param->param.ptr.handle;
                 break;
 
-#if 0 /* TBD */
-            case MmRpc_ParamType_Elem:
+            case MmRpc_ParamType_OffPtr:
                 rpfxn->params[i].type = RPPC_PARAM_TYPE_PTR;
-                rpfxn->params[i].size = param->param.elem.size;
-                rpfxn->params[i].data = param->param.elem.offset;
-                rpfxn->params[i].base = param->param.elem.base;
-                rpfxn->params[i].reserved = param->param.elem.handle;
+                rpfxn->params[i].size = param->param.offPtr.size;
+                rpfxn->params[i].data = param->param.offPtr.base +
+                        param->param.offPtr.offset;
+                rpfxn->params[i].base = param->param.offPtr.base;
+                rpfxn->params[i].fd = (size_t)param->param.offPtr.handle;
                 break;
-#endif
+
             default:
                 printf("MmRpc_call: Error: invalid parameter type\n");
                 status = MmRpc_E_INVALIDPARAM;
@@ -240,18 +246,11 @@ int MmRpc_call(MmRpc_Handle handle, MmRpc_FxnCtx *ctx, int32_t *ret)
     rpfxn->num_translations = ctx->num_xlts;
 
     for (i = 0; i < ctx->num_xlts; i++) {
-        uint32_t index;
-        size_t ptr;
-
-        /* compute base value */
-        index = ctx->xltAry[i].index;
-        ptr = rpfxn->params[index].base + ctx->xltAry[i].offset;
-
         /* pack the pointer translation entry */
-        rpfxn->translations[i].index    = index;
-        rpfxn->translations[i].offset   = ctx->xltAry[i].offset;
-        rpfxn->translations[i].base     = (size_t)(*(void **)ptr);
-        rpfxn->translations[i].reserved = ctx->xltAry[i].handle;
+        rpfxn->translations[i].index = ctx->xltAry[i].index;
+        rpfxn->translations[i].offset = ctx->xltAry[i].offset;
+        rpfxn->translations[i].base = ctx->xltAry[i].base;
+        rpfxn->translations[i].fd = (int32_t)ctx->xltAry[i].handle;
     }
 
     /* send message for remote execution */
@@ -290,3 +289,104 @@ leave:
 
     return(status);
 }
+
+/*
+ *  ======== MmRcp_release ========
+ */
+int MmRpc_release(MmRpc_Handle handle, MmRpc_BufType type, int num,
+        MmRpc_BufDesc *desc)
+{
+    int stat = MmRpc_S_SUCCESS;
+
+    switch (type) {
+
+#if defined(KERNEL_INSTALL_DIR) || defined(IPC_BUILDOS_ANDROID)
+        case MmRpc_BufType_Handle:
+            stat = MmRpc_bufHandle(handle, RPPC_IOC_BUFUNREGISTER, num, desc);
+            break;
+
+#elif defined(SYSLINK_BUILDOS_QNX)
+        case MmRpc_BufType_Ptr:
+            break;
+#endif
+        default:
+            printf("MmRpc_release: Error: unsupported type value: %d\n", type);
+            stat = MmRpc_E_INVALIDPARAM;
+            break;
+    }
+
+    if (stat < 0) {
+        printf("MmRpc_release: Error: unable to release buffer\n");
+    }
+
+    return(stat);
+}
+
+/*
+ *  ======== MmRcp_use ========
+ */
+int MmRpc_use(MmRpc_Handle handle, MmRpc_BufType type, int num,
+        MmRpc_BufDesc *desc)
+{
+    int stat = MmRpc_S_SUCCESS;
+
+    switch (type) {
+
+#if defined(KERNEL_INSTALL_DIR) || defined(IPC_BUILDOS_ANDROID)
+        case MmRpc_BufType_Handle:
+            stat = MmRpc_bufHandle(handle, RPPC_IOC_BUFREGISTER, num, desc);
+            break;
+
+#elif defined(SYSLINK_BUILDOS_QNX)
+        case MmRpc_BufType_Ptr:
+            break;
+#endif
+        default:
+            printf("MmRpc_use: Error: unsupported type value: %d\n", type);
+            stat = MmRpc_E_INVALIDPARAM;
+            break;
+    }
+
+    if (stat < 0) {
+        printf("MmRpc_use: Error: unable to declare buffer use\n");
+    }
+
+    return(stat);
+}
+
+#if defined(KERNEL_INSTALL_DIR) || defined(IPC_BUILDOS_ANDROID)
+/*
+ *  ======== MmRpc_bufHandle ========
+ */
+int MmRpc_bufHandle(MmRpc_Handle handle, int cmd, int num, MmRpc_BufDesc *desc)
+{
+    int stat = MmRpc_S_SUCCESS;
+    MmRpc_Object *obj = (MmRpc_Object *)handle;
+    int i;
+    struct rppc_buf_fds reg = { num, NULL };
+
+    reg.fds = (int32_t *)malloc(num * sizeof(int32_t));
+
+    if (reg.fds == NULL) {
+        stat = MmRpc_E_NOMEM;
+        goto leave;
+    }
+
+    for (i = 0; i < num; i++) {
+        reg.fds[i] = desc[i].handle;
+    }
+
+    stat = ioctl(obj->fd, cmd, &reg);
+
+    if (stat < 0) {
+        stat = MmRpc_E_SYS;
+    }
+
+leave:
+    if (reg.fds != NULL) {
+        free(reg.fds);
+    }
+
+    return(stat);
+}
+#endif
index 013cad56320332cc5a65ce4d38177a9deecd77c2..14b36a6cd172916a848fc61ee1cae5da1dd0ddc9 100644 (file)
@@ -66,6 +66,16 @@ extern "C" {
  */
 #define MmRpc_E_INVALIDPARAM (-2)
 
+/*!
+ *  @brief  Memory allocation failed
+ */
+#define MmRpc_E_NOMEM (-3)
+
+/*!
+ *  @brief  A system call failed
+ */
+#define MmRpc_E_SYS (-4)
+
 /*!
  *  @brief  Size of parameter array in function context structure
  */
@@ -104,6 +114,7 @@ typedef struct MmRpc_Object *MmRpc_Handle;
 typedef enum {
     MmRpc_ParamType_Scalar = 1, /*!< pass by value */
     MmRpc_ParamType_Ptr,        /*!< data pointer */
+    MmRpc_ParamType_OffPtr,     /*!< buffer at offset in memory block */
     MmRpc_ParamType_Elem        /*!< array element */
 } MmRpc_ParamType;
 
@@ -125,20 +136,33 @@ typedef struct {
             size_t      handle; /*!< memory allocator handle */
         } ptr;
 
-#if 0 /* TBD */
         struct {
-            size_t      size;   /*!< size of the array element */
-            size_t      offset; /*!< offset to current array element */
-            size_t      base;   /*!< base address of array */
+            size_t      size;   /*!< size (bytes) of param structure */
+            size_t      base;   /*!< param address */
+            size_t      offset; /*!< offset within param */
             size_t      handle; /*!< memory allocator handle */
-        } elem;
-#endif
+        } offPtr;
+
     } param;
 } MmRpc_Param;
 
 typedef struct {
     uint32_t    index;  /*!< parameter index to base pointer */
-    ptrdiff_t   offset; /*!< offset from the base address to pointer */
+    ptrdiff_t   offset; /*!< offset to embedded pointer
+                         *
+                         *   If param type is MmRpc_ParamType_Ptr, offset
+                         *   to embedded pointer from addr. If param type
+                         *   is MmRpc_ParamType_OffPtr, offset to embedded
+                         *   pointer from base+offset.
+                         */
+    size_t      base;   /*!< addr or file descriptor [+ data offset]
+                         *
+                         *   If param type is MmRpc_ParamType_Ptr, the
+                         *   value of the embedded pointer. If param type
+                         *   is MmRpc_ParamType_OffPtr, the file descriptor
+                         *   of the block referenced by the embedded pointer
+                         *   plus an optional data offset.
+                         */
     size_t      handle; /*!< memory allocator handle */
 } MmRpc_Xlt;
 
@@ -154,6 +178,29 @@ typedef struct {
     MmRpc_Xlt * xltAry;         /*!< array of translations */
 } MmRpc_FxnCtx;
 
+/*!
+ *  @brief      Memory buffer types
+ *
+ *  @remark     Not all operating systems support all buffer types.
+ */
+typedef enum {
+    MmRpc_BufType_Handle,       /*!< memory allocator handle */
+    MmRpc_BufType_Ptr           /*!< buffer address */
+} MmRpc_BufType;
+
+/*!
+ *  @brief      Memory buffer descriptor
+ */
+typedef union {
+    size_t      handle;         /*!< file descriptor or handle */
+
+    struct {
+        size_t  addr;           /*!< address of memory buffer */
+        size_t  size;           /*!< size (bytes) of memory buffer */
+    } ptr;
+    
+} MmRpc_BufDesc;
+
 /*!
  *  @brief      Instance create parameters
  */
@@ -180,6 +227,70 @@ int MmRpc_create(const char *service, const MmRpc_Params *params,
  */
 int MmRpc_delete(MmRpc_Handle *handlePtr);
 
+/*!
+ *  @brief      Release buffers which were declared in use
+ *
+ *  @param[in]  type    buffer descriptor type
+ *
+ *  @param[in]  num     number of elements in @c desc array
+ *
+ *  @param[in]  desc    pointer to array of buffer descriptors
+ *
+ *  @remark     When the remote processor no longer needs a reference
+ *              to a buffer, calling MmRpc_release() will release the
+ *              buffer and any associated resources.
+ *
+ *  @retval     MmRpc_S_SUCCESS
+ *  @retval     MmRpc_E_INVALIDPARAM
+ *  @retval     MmRpc_E_NOMEM
+ *  @retval     MmRpc_E_SYS
+ *
+ *  @sa         MmRpc_use()
+ */
+int MmRpc_release(MmRpc_Handle handle, MmRpc_BufType type, int num,
+        MmRpc_BufDesc *desc);
+
+/*!
+ *  @brief      Declare the use of the given buffers
+ *
+ *  @param[in]  type    buffer descriptor type
+ *
+ *  @param[in]  num     number of elements in @c desc array
+ *
+ *  @param[in]  desc    pointer to array of buffer descriptors
+ *
+ *  @remark     When using MmRpc_call() to invoke remote function calls,
+ *              any referenced buffers will be made available to the
+ *              remote processor only for the duration of the remote
+ *              function call. If the remote processor maintains a
+ *              reference to the buffer across multiple invocations of
+ *              MmRpc_call(), then the application must declare the buffer
+ *              "in use". This will make the buffer persistent.
+ *
+ *  @remark     The application must release the buffer when it is no
+ *              longer needed.
+ *
+ *  @code
+ *      #include <ti/ipc/mm/MmRpc.h>
+ *
+ *      MmRpc_BufDesc desc[2];
+ *
+ *      desc[0].handle = fd1;
+ *      desc[1].handle = fd2;
+ *
+ *      MmRpc_use(h, MmRpc_BufType_Handle, 2, desc);
+ *  @endcode
+ *
+ *  @retval     MmRpc_S_SUCCESS
+ *  @retval     MmRpc_E_INVALIDPARAM
+ *  @retval     MmRpc_E_NOMEM
+ *  @retval     MmRpc_E_SYS
+ *
+ *  @sa         MmRpc_release()
+ */
+int MmRpc_use(MmRpc_Handle handle, MmRpc_BufType type, int num,
+        MmRpc_BufDesc *desc);
+
 /*!
  *  @brief      Initialize the instance create parameter structure
  *
@@ -187,7 +298,6 @@ int MmRpc_delete(MmRpc_Handle *handlePtr);
 void MmRpc_Params_init(MmRpc_Params *params);
 
 
-
 #if defined(__cplusplus)
 }
 #endif
index b60e866c797f17eda898f6d87f69ac581104cb82..5b9d583801e60921a60e87ca21c604fd73b7706b 100644 (file)
@@ -63,7 +63,7 @@ extern "C" {
  *              The given array must be the actual array buffer,
  *              not a pointer to it.
  */
-#define MmType_NumElem(x) (sizeof(x)/sizeof(x[0]))
+#define MmType_NumElem(x) (sizeof(x)/sizeof((x)[0]))
 
 /*!
  *  @brief      Parameter Direction
@@ -97,7 +97,7 @@ typedef enum {
     MmType_Param_MAX
 } MmType_ParamType;
 
-#define MmType_PtrType(type)    (type | MmType_Param_PTR)
+#define MmType_PtrType(type)    ((type) | MmType_Param_PTR)
 
 /*!
  *  @brief      Parameter Signature
index 5f895f2f885738dad4bd7e2775f573b84fc8bc0d..a005e51631e0dc85bf0f4c22e1ff9d1f4ec0b1bd 100644 (file)
@@ -180,6 +180,7 @@ Int NameServerRemoteRpmsg_get(NameServerRemoteRpmsg_Object *obj,
     /* Create request message and send to remote processor: */
     msg.request = NameServerRemoteRpmsg_REQUEST;
     msg.requestStatus = 0;
+    msg.valueLen = *valueLen;
 
     len = strlen(instanceName);
     Assert_isTrue(len < MAXNAMEINCHAR, NameServerRemoteRpmsg_A_nameIsTooLong);
@@ -212,10 +213,15 @@ Int NameServerRemoteRpmsg_get(NameServerRemoteRpmsg_Object *obj,
         /* name is found */
 
         /* set length to amount of data that was copied */
-        *valueLen = sizeof(Bits32);
+        *valueLen = replyMsg->valueLen;
 
         /* set the contents of value */
-        memcpy(value, &(replyMsg->value), sizeof(Bits32));
+        if (*valueLen <= sizeof (Bits32)) {
+            memcpy(value, &(replyMsg->value), sizeof(Bits32));
+        }
+        else {
+            memcpy(value, replyMsg->valueBuf, *valueLen);
+        }
 
         /* set the status to success */
         status = NameServer_S_SUCCESS;
@@ -258,6 +264,7 @@ void NameServerRemote_processMessage(NameServerRemote_Msg * msg)
     UInt16 dstProc  = MultiProc_getId("HOST");
 
     Assert_isTrue(msg != NULL, NULL);
+    Assert_isTrue(msg->valueLen <= MAXVALUELEN, NULL);
 
     if (msg->request == NameServerRemoteRpmsg_REQUEST) {
         Log_print1(Diags_INFO, FXNN": Request from procId %d.\n", dstProc);
@@ -270,8 +277,14 @@ void NameServerRemote_processMessage(NameServerRemote_Msg * msg)
 
         if (handle != NULL) {
             /* Search for the NameServer entry */
-            status = NameServer_getLocalUInt32(handle,
+            if (msg->valueLen <= sizeof (Bits32)) {
+                status = NameServer_getLocalUInt32(handle,
                      (String)msg->name, &msg->value);
+            }
+            else {
+                status = NameServer_getLocal(handle, (String)msg->name,
+                     (Ptr)msg->valueBuf, &msg->valueLen);
+            }
         }
 
         /* set the request status */
index 074f2699ce9f1c49095dacee200a9948f900c512..84412283c1f3b6ed18f1cfcdc8fba041940dbfe1 100644 (file)
@@ -40,17 +40,20 @@ extern "C" {
 
 #define MAXNAMEINCHAR   80
 #define NAMEARRAYSZIE   (((MAXNAMEINCHAR - 1) / sizeof(Bits32)) + 1)
+#define MAXVALUELEN     75
 
 /* message sent to remote procId */
 typedef struct NameServerRemote_Msg {
     Bits32  reserved;           /* reserved field: must be first!   */
-    Bits32  value;              /* holds value                      */
+    Bits32  value;              /* holds value if len <= 4          */
     Bits32  request;            /* whether its a request/response   */
     Bits32  requestStatus;      /* status of request                */
                                 /* name of NameServer instance      */
     Bits32  instanceName[NAMEARRAYSZIE];
                                 /* name of NameServer entry         */
     Bits32  name[NAMEARRAYSZIE];
+    Bits32  valueLen;              /* len of value                  */
+    Bits32  valueBuf[MAXVALUELEN]; /* value buffer                  */
 } NameServerRemote_Msg;
 
 #define NAME_SERVER_RPMSG_ADDR  0
index 3f23a52ee57f70683c6906e99205af41ddfc09e5..34603fc1d7f333afbb60ab4028908d39ab04c675 100644 (file)
@@ -37,6 +37,7 @@
 
 #include <xdc/runtime/System.h>
 #include <xdc/runtime/Startup.h>
+#include <ti/sysbios/hal/Cache.h>
 
 #include "rsc_types.h"
 #include "package/internal/Resource.xdc.h"
@@ -66,6 +67,36 @@ Ptr Resource_getTraceBufPtr()
     return (NULL);
 }
 
+/*
+ *  ======== getVdevStatus ========
+ */
+Char Resource_getVdevStatus(UInt32 id)
+{
+    UInt32 i;
+    UInt32 offset;
+    UInt32 type;
+    Char status = 0;
+    struct fw_rsc_vdev *vdev= NULL;
+    Resource_RscTable *table = (Resource_RscTable *)
+                                            (Resource_module->pTable);
+
+    for (i = 0; i < module->pTable->num; i++) {
+        offset = (UInt32)((Char *)table + table->offset[i]);
+        type = *(UInt32 *)offset;
+        if (type == TYPE_VDEV) {
+            vdev = (struct fw_rsc_vdev *)offset;
+            if (vdev->id == id) {
+                /* invalidate memory as host will update the status field */
+                Cache_inv(vdev, sizeof(*vdev), Cache_Type_ALL, TRUE);
+                status = vdev->status;
+                break;
+            }
+        }
+    }
+
+    return (status);
+}
+
 /*
  *  ======== Resource_getVringDA ========
  */
index 1ef430461544a69f009052324034a3bd980067ef..8051cfc29bcb5cebb506536e4d5da2eeb90a2a42 100644 (file)
@@ -139,6 +139,14 @@ module Resource {
     @DirectCall
     Ptr getTraceBufPtr();
 
+    /*!
+     *  @brief      Get the status field of the VDEV, given the fw_rsc_vdev id.
+     *
+     *  @return     status value which is set by Virtio device on HLOS.
+     */
+    @DirectCall
+    Char getVdevStatus(UInt32 id);
+
     /*!
      *  @brief      Get the nth (vqId) vring address from the VDEV struct.
      *
index 8c4f805d4f40c6b3edb1535d701ae700b50bafe2..0f87a88c04bf9d9e8f39ad145cbcb3d847b40f61 100644 (file)
@@ -70,13 +70,26 @@ extern struct resource_table ti_ipc_remoteproc_ResourceTable;
 %  }
 %  else if (prog.cpu.deviceName.match(/Vayu/) ||
 %          prog.cpu.deviceName.match(/DRA7XX/)) {
-%    if (prog.cpu.attrs.cpuCore.match(/CM4/) &&
-%       (xdc.om["ti.sysbios.family.arm.ducati.Core"].ipuId == 2)) {
-#define OMAP5
+%    if (prog.cpu.attrs.cpuCore.match(/CM4/)) {
+%       if (xdc.om["ti.sysbios.family.arm.ducati.Core"].ipuId == 1) {
+#define VAYU_IPU_1
+%           //print("ti.ipc.remoteproc.Resource.xdt : VAYU_IPU_1");
+%       }
+%       if (xdc.om["ti.sysbios.family.arm.ducati.Core"].ipuId == 2) {
+#define VAYU_IPU_2
+%           //print("ti.ipc.remoteproc.Resource.xdt : VAYU_IPU_2");
+%       }
 #include <ti/ipc/remoteproc/rsc_table_vayu_ipu.h>
 %    }
 %    else if (prog.cpu.attrs.cpuCore.match(/6600/)) {
-#define OMAP5
+%       if (prog.platformName.match(/DRA7XX:dsp1$/)) {
+#define VAYU_DSP_1
+%           //print("ti.ipc.remoteproc.Resource.xdt : VAYU_DSP_1");
+%       }
+%       if (prog.platformName.match(/DRA7XX:dsp2$/)) {
+#define VAYU_DSP_2
+%           //print("ti.ipc.remoteproc.Resource.xdt : VAYU_DSP_2");
+%       }
 #include <ti/ipc/remoteproc/rsc_table_vayu_dsp.h>
 %    }
 %    else {
diff --git a/packages/ti/ipc/remoteproc/linkcmd.xdt b/packages/ti/ipc/remoteproc/linkcmd.xdt
new file mode 100644 (file)
index 0000000..857c622
--- /dev/null
@@ -0,0 +1,57 @@
+%%{
+/*
+ *  Copyright (c) 2008-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.
+ */
+%%}
+
+%if (xdc.module('ti.sysbios.BIOS').$used) {
+    /*
+     *  Set entry point to the HWI reset vector 0 to automatically satisfy
+     *  any alignment constraints for the boot vector.
+     */
+%if ((Program.build.target.$name.match(/C64P/)) ||
+%    (Program.build.target.$name.match(/C674/)) ||
+%    (Program.build.target.$name.match(/C64T/)) ||
+%    (Program.build.target.$name.match(/C66/)) ||
+%    (Program.build.target.$name.match(/C67P/))) {
+%    if (Program.build.target.$name.match(/elf/)) {
+    -eti_sysbios_family_c64p_Hwi0
+%    }
+%    else {
+    -e_ti_sysbios_family_c64p_Hwi0
+%    }
+%}
+
+    /*
+     * We just modified the entry point, so suppress "entry point symbol other
+     * than _c_int00 specified" warning.
+     */
+    --diag_suppress=10063
+%}
\ No newline at end of file
index 6d0372c7a0e74b610a93e7afc3cf9ff1d119db95..aceab31801a848ac70a0b6af30d9655db720741e 100644 (file)
@@ -44,6 +44,7 @@ var Pkg = xdc.useModule('xdc.bld.PackageContents');
 Pkg.attrs.exportSrc = true;
 
 Pkg.otherFiles = ["package.bld", "rsc_types.h",
+        "linkcmd.xdt",
         "rsc_table_omapl138.h",
         "rsc_table_tci6614.h",
         "rsc_table_tci6614_v3.3.h",
index 42a355a62f72c6387c32700a22fb2aa0745a9e33..63343199353ef9f9339eaf6430bd811e16dbf09a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011-2012, Texas Instruments Incorporated
+ * Copyright (c) 2011-2013, Texas Instruments Incorporated
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -64,3 +64,11 @@ function getLibs(prog)
 
     return (lib);
 }
+
+/*
+ *  ======== Package.getSects ========
+ */
+function getSects()
+{
+    return "ti/ipc/remoteproc/linkcmd.xdt";
+}
index 3a9050e2e61eabf72e37c8a90b2d76e194dac171..80588a9fa2eb31213bfc4334fa468da3c8cda05f 100644 (file)
@@ -220,19 +220,19 @@ struct my_resource_table ti_ipc_remoteproc_ResourceTable = {
     {
         TYPE_CARVEOUT,
         IPU_MEM_TEXT, 0,
-        IPU_MEM_TEXT_SIZE, 0, RPROC_MEMREGION_CODE, "IPU_MEM_TEXT",
+        IPU_MEM_TEXT_SIZE, 0, 0, "IPU_MEM_TEXT",
     },
 
     {
         TYPE_CARVEOUT,
         IPU_MEM_DATA, 0,
-        IPU_MEM_DATA_SIZE, 0, RPROC_MEMREGION_DATA, "IPU_MEM_DATA",
+        IPU_MEM_DATA_SIZE, 0, 0, "IPU_MEM_DATA",
     },
 
     {
         TYPE_CARVEOUT,
         IPU_MEM_IPC_DATA, 0,
-        IPU_MEM_IPC_DATA_SIZE, 0, RPROC_MEMREGION_SMEM, "IPU_MEM_IPC_DATA",
+        IPU_MEM_IPC_DATA_SIZE, 0, 0, "IPU_MEM_IPC_DATA",
     },
 
     {
@@ -242,13 +242,13 @@ struct my_resource_table ti_ipc_remoteproc_ResourceTable = {
     {
         TYPE_DEVMEM,
         IPU_MEM_IPC_VRING, PHYS_MEM_IPC_VRING,
-        IPU_MEM_IPC_VRING_SIZE, 0, RPROC_MEMREGION_VRING, "IPU_MEM_IPC_VRING",
+        IPU_MEM_IPC_VRING_SIZE, 0, 0, "IPU_MEM_IPC_VRING",
     },
 
     {
         TYPE_DEVMEM,
         IPU_MEM_IOBUFS, PHYS_MEM_IOBUFS,
-        IPU_MEM_IOBUFS_SIZE, 0, RPROC_MEMREGION_1D, "IPU_MEM_IOBUFS",
+        IPU_MEM_IOBUFS_SIZE, 0, 0, "IPU_MEM_IOBUFS",
     },
 
     {
index 84608b6040051c110b177a961e6e553ce6e6a1fc..328aee1260d3ce13ff0cfac94f5cb15992d9b02f 100644 (file)
 #include "rsc_types.h"
 
 /* DSP Memory Map */
-#define L4_44XX_BASE            0x4A000000
+#define L4_DRA7XX_BASE          0x4A000000
 
-#define L4_PERIPHERAL_L4CFG     (L4_44XX_BASE)
+#define L4_PERIPHERAL_L4CFG     (L4_DRA7XX_BASE)
 #define DSP_PERIPHERAL_L4CFG    0x4A000000
 
-#define L4_PERIPHERAL_L4PER     0x48000000
-#define DSP_PERIPHERAL_L4PER    0x48000000
+#define L4_PERIPHERAL_L4PER1    0x48000000
+#define DSP_PERIPHERAL_L4PER1   0x48000000
+
+#define L4_PERIPHERAL_L4PER2    0x48400000
+#define DSP_PERIPHERAL_L4PER2   0x48400000
+
+#define L4_PERIPHERAL_L4PER3    0x48800000
+#define DSP_PERIPHERAL_L4PER3   0x48800000
 
 #define L4_PERIPHERAL_L4EMU     0x54000000
 #define DSP_PERIPHERAL_L4EMU    0x54000000
 /*
  * Assign fixed RAM addresses to facilitate a fixed MMU table.
  */
-/* This address is derived from current IPU & ION carveouts */
+/* See CMA BASE addresses in Linux side: arch/arm/mach-omap2/remoteproc.c */
 #ifdef OMAP5
 #define PHYS_MEM_IPC_VRING      0x95000000
+#elif defined (VAYU_DSP_1)
+#define PHYS_MEM_IPC_VRING      0x95000000
+#elif defined (VAYU_DSP_2)
+#define PHYS_MEM_IPC_VRING      0x94800000
 #else
 #define PHYS_MEM_IPC_VRING      0x98800000
 #endif
 struct my_resource_table {
     struct resource_table base;
 
-    UInt32 offset[16];  /* Should match 'num' in actual definition */
+    UInt32 offset[18];  /* Should match 'num' in actual definition */
 
     /* rpmsg vdev entry */
     struct fw_rsc_vdev rpmsg_vdev;
@@ -168,6 +178,12 @@ struct my_resource_table {
 
     /* devmem entry */
     struct fw_rsc_devmem devmem9;
+
+    /* devmem entry */
+    struct fw_rsc_devmem devmem10;
+
+    /* devmem entry */
+    struct fw_rsc_devmem devmem11;
 };
 
 #define TRACEBUFADDR (UInt32)&ti_trace_SysMin_Module_State_0_outbuf__A
@@ -177,7 +193,7 @@ struct my_resource_table {
 
 struct my_resource_table ti_ipc_remoteproc_ResourceTable = {
     1,      /* we're the first version that implements this */
-    16,     /* number of entries in the table */
+    18,     /* number of entries in the table */
     0, 0,   /* reserved, must be zero */
     /* offsets to entries */
     {
@@ -197,6 +213,8 @@ struct my_resource_table ti_ipc_remoteproc_ResourceTable = {
         offsetof(struct my_resource_table, devmem7),
         offsetof(struct my_resource_table, devmem8),
         offsetof(struct my_resource_table, devmem9),
+        offsetof(struct my_resource_table, devmem10),
+        offsetof(struct my_resource_table, devmem11),
     },
 
     /* rpmsg vdev entry */
@@ -275,8 +293,20 @@ struct my_resource_table ti_ipc_remoteproc_ResourceTable = {
 
     {
         TYPE_DEVMEM,
-        DSP_PERIPHERAL_L4PER, L4_PERIPHERAL_L4PER,
-        SZ_16M, 0, 0, "DSP_PERIPHERAL_L4PER",
+        DSP_PERIPHERAL_L4PER1, L4_PERIPHERAL_L4PER1,
+        SZ_2M, 0, 0, "DSP_PERIPHERAL_L4PER1",
+    },
+
+    {
+        TYPE_DEVMEM,
+        DSP_PERIPHERAL_L4PER2, L4_PERIPHERAL_L4PER2,
+        SZ_4M, 0, 0, "DSP_PERIPHERAL_L4PER2",
+    },
+
+    {
+        TYPE_DEVMEM,
+        DSP_PERIPHERAL_L4PER3, L4_PERIPHERAL_L4PER3,
+        SZ_8M, 0, 0, "DSP_PERIPHERAL_L4PER3",
     },
 
     {
index 1b3a3fdd0c79e277d823716ef2da1e32911fd969..fb9ce9623cfbf441b954e0e8176b14f474b1f939 100644 (file)
 #include "rsc_types.h"
 
 /* IPU Memory Map */
-#define L4_44XX_BASE            0x4a000000
+#define L4_DRA7XX_BASE          0x4A000000
 
-#define L4_PERIPHERAL_L4CFG     (L4_44XX_BASE)
+/* L4_CFG & L4_WKUP */
+#define L4_PERIPHERAL_L4CFG     (L4_DRA7XX_BASE)
 #define IPU_PERIPHERAL_L4CFG    0x6A000000
 
-#define L4_PERIPHERAL_L4PER     0x48000000
-#define IPU_PERIPHERAL_L4PER    0x68000000
+#define L4_PERIPHERAL_L4PER1    0x48000000
+#define IPU_PERIPHERAL_L4PER1   0x68000000
+
+#define L4_PERIPHERAL_L4PER2    0x48400000
+#define IPU_PERIPHERAL_L4PER2   0x68400000
+
+#define L4_PERIPHERAL_L4PER3    0x48800000
+#define IPU_PERIPHERAL_L4PER3   0x68800000
 
 #define L4_PERIPHERAL_L4EMU     0x54000000
 #define IPU_PERIPHERAL_L4EMU    0x74000000
@@ -77,7 +84,7 @@
 #define IPU_MEM_TEXT            0x0
 #define IPU_MEM_DATA            0x80000000
 
-#ifdef OMAP5
+#if defined(OMAP5) || defined(VAYU_IPU_1) || defined(VAYU_IPU_2)
 #define IPU_MEM_IOBUFS          0x90000000
 #else
 #define IPU_MEM_IOBUFS          0x88000000
 
 #define IPU_MEM_IPC_VRING_SIZE  SZ_1M
 #define IPU_MEM_IPC_DATA_SIZE   SZ_1M
+
+#ifdef VAYU_IPU_1
+#define IPU_MEM_TEXT_SIZE       (SZ_1M)
+#else
 #define IPU_MEM_TEXT_SIZE       (SZ_1M * 6)
-#ifdef OMAP5
+#endif
+
+#if defined(OMAP5) || defined(VAYU_IPU_2)
 #define IPU_MEM_DATA_SIZE       (SZ_1M * 156)
+#elif defined(VAYU_IPU_1)
+#define IPU_MEM_DATA_SIZE       (SZ_1M * 5)
 #else
 #define IPU_MEM_DATA_SIZE       (SZ_1M * 100)
 #endif
+
 #define IPU_MEM_IOBUFS_SIZE     (SZ_1M * 90)
 
 /*
  * Assign fixed RAM addresses to facilitate a fixed MMU table.
  * PHYS_MEM_IPC_VRING & PHYS_MEM_IPC_DATA MUST be together.
  */
+/* See CMA BASE addresses in Linux side: arch/arm/mach-omap2/remoteproc.c */
 #ifdef OMAP5
 #define PHYS_MEM_IPC_VRING      0x95800000
+#elif defined(VAYU_IPU_1)
+#define PHYS_MEM_IPC_VRING      0x94000000
+#elif defined (VAYU_IPU_2)
+#define PHYS_MEM_IPC_VRING      0x95800000
 #else
 #define PHYS_MEM_IPC_VRING      0x99000000
 #endif
 struct my_resource_table {
     struct resource_table base;
 
-    UInt32 offset[16];  /* Should match 'num' in actual definition */
+    UInt32 offset[18];  /* Should match 'num' in actual definition */
 
     /* rpmsg vdev entry */
     struct fw_rsc_vdev rpmsg_vdev;
@@ -176,6 +197,12 @@ struct my_resource_table {
 
     /* devmem entry */
     struct fw_rsc_devmem devmem10;
+
+    /* devmem entry */
+    struct fw_rsc_devmem devmem11;
+
+    /* devmem entry */
+    struct fw_rsc_devmem devmem12;
 };
 
 #define TRACEBUFADDR (UInt32)&ti_trace_SysMin_Module_State_0_outbuf__A
@@ -185,7 +212,7 @@ struct my_resource_table {
 
 struct my_resource_table ti_ipc_remoteproc_ResourceTable = {
     1,      /* we're the first version that implements this */
-    16,     /* number of entries in the table */
+    18,     /* number of entries in the table */
     0, 0,   /* reserved, must be zero */
     /* offsets to entries */
     {
@@ -205,6 +232,8 @@ struct my_resource_table ti_ipc_remoteproc_ResourceTable = {
         offsetof(struct my_resource_table, devmem8),
         offsetof(struct my_resource_table, devmem9),
         offsetof(struct my_resource_table, devmem10),
+        offsetof(struct my_resource_table, devmem11),
+        offsetof(struct my_resource_table, devmem12),
     },
 
     /* rpmsg vdev entry */
@@ -220,19 +249,19 @@ struct my_resource_table ti_ipc_remoteproc_ResourceTable = {
     {
         TYPE_CARVEOUT,
         IPU_MEM_TEXT, 0,
-        IPU_MEM_TEXT_SIZE, 0, RPROC_MEMREGION_CODE, "IPU_MEM_TEXT",
+        IPU_MEM_TEXT_SIZE, 0, 0, "IPU_MEM_TEXT",
     },
 
     {
         TYPE_CARVEOUT,
         IPU_MEM_DATA, 0,
-        IPU_MEM_DATA_SIZE, 0, RPROC_MEMREGION_DATA, "IPU_MEM_DATA",
+        IPU_MEM_DATA_SIZE, 0, 0, "IPU_MEM_DATA",
     },
 
     {
         TYPE_CARVEOUT,
         IPU_MEM_IPC_DATA, 0,
-        IPU_MEM_IPC_DATA_SIZE, 0, RPROC_MEMREGION_SMEM, "IPU_MEM_IPC_DATA",
+        IPU_MEM_IPC_DATA_SIZE, 0, 0, "IPU_MEM_IPC_DATA",
     },
 
     {
@@ -242,13 +271,13 @@ struct my_resource_table ti_ipc_remoteproc_ResourceTable = {
     {
         TYPE_DEVMEM,
         IPU_MEM_IPC_VRING, PHYS_MEM_IPC_VRING,
-        IPU_MEM_IPC_VRING_SIZE, 0, RPROC_MEMREGION_VRING, "IPU_MEM_IPC_VRING",
+        IPU_MEM_IPC_VRING_SIZE, 0, 0, "IPU_MEM_IPC_VRING",
     },
 
     {
         TYPE_DEVMEM,
         IPU_MEM_IOBUFS, PHYS_MEM_IOBUFS,
-        IPU_MEM_IOBUFS_SIZE, 0, RPROC_MEMREGION_1D, "IPU_MEM_IOBUFS",
+        IPU_MEM_IOBUFS_SIZE, 0, 0, "IPU_MEM_IOBUFS",
     },
 
     {
@@ -277,8 +306,20 @@ struct my_resource_table ti_ipc_remoteproc_ResourceTable = {
 
     {
         TYPE_DEVMEM,
-        IPU_PERIPHERAL_L4PER, L4_PERIPHERAL_L4PER,
-        SZ_16M, 0, 0, "IPU_PERIPHERAL_L4PER",
+        IPU_PERIPHERAL_L4PER1, L4_PERIPHERAL_L4PER1,
+        SZ_2M, 0, 0, "IPU_PERIPHERAL_L4PER1",
+    },
+
+    {
+        TYPE_DEVMEM,
+        IPU_PERIPHERAL_L4PER2, L4_PERIPHERAL_L4PER2,
+        SZ_4M, 0, 0, "IPU_PERIPHERAL_L4PER2",
+    },
+
+    {
+        TYPE_DEVMEM,
+        IPU_PERIPHERAL_L4PER3, L4_PERIPHERAL_L4PER3,
+        SZ_8M, 0, 0, "IPU_PERIPHERAL_L4PER3",
     },
 
     {
index a29746691be8b7cea30bdac0bdce643271cd5153..661c02934a94b69b76e3a3c44735dcec78171976 100644 (file)
 #define TYPE_VDEV        3
 #define TYPE_CRASHDUMP   4
 
-/*
- * Use flags to define memory access for each resource
- * Must match include/linux/rproc_drm.h
- */
-enum rproc_memregion {
-    RPROC_MEMREGION_UNKNOWN,
-    RPROC_MEMREGION_2D,
-    RPROC_MEMREGION_SMEM,
-    RPROC_MEMREGION_CODE,
-    RPROC_MEMREGION_DATA,
-    RPROC_MEMREGION_1D,
-    RPROC_MEMREGION_VRING
-};
-
 /* Common Resource Structure Types */
 struct resource_table {
     UInt32 ver;
@@ -111,7 +97,7 @@ struct fw_rsc_devmem {
     UInt32  pa;
     UInt32  len;
     UInt32  flags;
-    UInt32  memregion;
+    UInt32  reserved;
     Char    name[32];
 };
 
index 660aed01121e54520a14043e6e8a706e36bcbd35..068df2ca4929ae44b5d0766b959c68c06c3536c2 100644 (file)
@@ -87,55 +87,55 @@ extern "C" {
 /*!
  *  @brief      Used as the timeout value to specify wait forever
  */
-#define RPMessage_FOREVER                ~(0)
+#define RPMessage_FOREVER                (~(0))
 
 /*!
    *  @def    RPMessage_S_SUCCESS
  *  @brief  Operation is successful.
  */
-#define RPMessage_S_SUCCESS              0
+#define RPMessage_S_SUCCESS              (0)
 
 /*!
  *  @def    RPMessage_E_FAIL
  *  @brief  Operation is not successful.
  */
-#define RPMessage_E_FAIL                 -1
+#define RPMessage_E_FAIL                 (-1)
 
 /*!
  *  @def    RPMessage_E_MEMORY
  *  @brief  Operation resulted in memory failure.
  */
-#define RPMessage_E_MEMORY               -3
+#define RPMessage_E_MEMORY               (-3)
 
 /*!
  *  @def    RPMessage_E_TIMEOUT
  *  @brief  Operation timed out.
  */
-#define RPMessage_E_TIMEOUT              -6
+#define RPMessage_E_TIMEOUT              (-6)
 
 /*!
  *  @def    RPMessage_E_NOENDPT
  *  @brief  No endpoint for a message.
  */
-#define RPMessage_E_NOENDPT              -7
+#define RPMessage_E_NOENDPT              (-7)
 
 /*!
  *  @def    MessageQ_E_UNBLOCKED
  *  @brief  RPMessage was unblocked
  */
-#define RPMessage_E_UNBLOCKED            -19
+#define RPMessage_E_UNBLOCKED            (-19)
 
 /*!
  *  @def    RPMessage_MAX_RESERVED_ENDPOINT
  *  @brief  Maximum Value for System Reserved Endpoints.
  */
-#define RPMessage_MAX_RESERVED_ENDPOINT  100
+#define RPMessage_MAX_RESERVED_ENDPOINT  (100)
 
 /*!
  *  @def    RPMessage_MAX_RESERVED_ENDPOINT
  *  @brief  Maximum Value for System Reserved Endpoints.
  */
-#define RPMessage_ASSIGN_ANY             0xFFFFFFFF
+#define RPMessage_ASSIGN_ANY             (0xFFFFFFFF)
 /*!
  *  @brief  RPMessage_Handle type
  */
similarity index 52%
rename from packages/ti/platform/vayu/dsp1/Platform.xdc
rename to packages/ti/ipc/tests/GateMPAppCommon.h
index d8ce60efba92bb349254e72e295b4758221b4a43..a1bb77ca83151c2474ed08f5480b61b6dc847b42 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2013, Texas Instruments Incorporated
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-/*!
- * File generated by platform wizard.
+
+/*
+ *  ======== GateMPAppCommon.h ========
  *
  */
 
-metaonly module Platform inherits xdc.platform.IPlatform {
-
-    config ti.platforms.generic.Platform.Instance plat =
-        ti.platforms.generic.Platform.create("plat", {
-            clockRate:      1000,
-            catalogName:    "ti.catalog.c6000",
-            deviceName:     "Vayu",
-            externalMemoryMap: [
-                ["EXT_CODE",  {name: "EXT_CODE",  base: 0x95000000, len: 0x00100000, space: "code", access: "RWX"}],
-                ["EXT_DATA",  {name: "EXT_DATA",  base: 0x95100000, len: 0x00100000, space: "data", access: "RW"}],
-                ["EXT_HEAP",  {name: "EXT_HEAP",  base: 0x95200000, len: 0x00300000, space: "data", access: "RW"}],
-                ["TRACE_BUF", {name: "TRACE_BUF", base: 0x9F000000, len: 0x00060000, space: "data", access: "RW"}],
-                ["EXC_DATA",  {name: "EXC_DATA",  base: 0x9F060000, len: 0x00010000, space: "data", access: "RW"}],
-                ["PM_DATA",   {name: "PM_DATA",   base: 0x9F070000, len: 0x00020000, space: "data", access: "RWX"}],
-            ],
-    });
-
-instance :
-
-    override config string codeMemory = "EXT_CODE";
-    override config string dataMemory = "EXT_DATA";
-    override config string stackMemory = "EXT_DATA";
+#ifndef GateMPAppCommon__include
+#define GateMPAppCommon__include
+#if defined (__cplusplus)
+extern "C" {
+#endif
+
+
+/*
+ *  ======== Application Configuration ========
+ */
+
+/* notify commands 00 - FF */
+#define GATEMPAPP_CMD_MASK            0xFF000000
+
+/* used by host and remote device to synchronize states with each other*/
+#define GATEMPAPP_CMD_SPTR_ADDR       0x10000000
+#define GATEMPAPP_CMD_SPTR_ADDR_ACK   0x12000000
+#define GATEMPAPP_CMD_SHUTDOWN_ACK    0x20000000
+#define GATEMPAPP_CMD_SHUTDOWN        0x21000000
+#define GATEMPAPP_CMD_SYNC            0x30000000
+
+/* GateMP instance created on host */
+#define GATEMP_HOST_NAME             "GATE_MP1"
+/* GateMP instance created on slave */
+#define GATEMP_SLAVE_NAME            "GATE_MP2"
+
+/* queue error message*/
+#define GATEMPAPP_E_FAILURE           0xF0000000
+#define GATEMPAPP_E_UNEXPECTEDMSG     0xF2000000
+
+/* Number of times to lock/unlock */
+#define LOOP_ITR    300
+
+typedef struct {
+    MessageQ_MsgHeader  reserved;
+    UInt32              cmd;
+    UInt32              payload;
+} GateMPApp_Msg;
+
+#define GateMPApp_MsgHeapId           0
+#define GateMPApp_HostMsgQueName      "HOST:MsgQ:01"
+#define GateMPApp_SlaveMsgQueName     "SLAVE:MsgQ:01"
+
+#if defined (__cplusplus)
 }
+#endif /* defined (__cplusplus) */
+#endif /* GateMPAppCommon__include */
index 38f95e65c506b74eb93c266603bc797719855e3e..83062a641cbe5951f824670694dc08cd7f74ab2e 100644 (file)
@@ -165,13 +165,40 @@ int32_t Mx_add(int32_t a, int32_t b)
 /*
  *  ======== Mx_compute ========
  */
-int32_t Mx_compute(Mx_Compute *compute)
+#if defined(SYSLINK_BUILDOS_QNX)
+int32_t Mx_compute_QnX(Mx_Compute *compute)
+#else
+int32_t Mx_compute_Linux(Mx_Compute *compute, int fd, int fdIn, int fdOut)
+#endif
 {
     MmRpc_FxnCtx *fxnCtx;
     MmRpc_Xlt xltAry[2];
     int32_t fxnRet;
     char send_buf[512] = {0};
     int status;
+    MmRpc_BufDesc desc[1];
+    int num = 0;
+
+    /* make the output buffer persistent */
+#if defined(SYSLINK_BUILDOS_QNX)
+    desc[0].ptr.addr = (size_t)compute->outBuf;
+    desc[0].ptr.size = compute->size * sizeof(uint32_t);
+    num = 1;
+
+    status = MmRpc_use(Mx_rpcIpu, MmRpc_BufType_Ptr, num, desc);
+#else
+    desc[0].handle = fdOut;
+    num = 1;
+
+    status = MmRpc_use(Mx_rpcIpu, MmRpc_BufType_Handle, num, desc);
+#endif
+
+    if (status < 0) {
+        printf("mmrpc_test: Error: MmRpc_use failed\n");
+        num = 0;
+        fxnRet = -1;
+        goto leave;
+    }
 
     /* marshall function arguments into the send buffer */
     fxnCtx = (MmRpc_FxnCtx *)send_buf;
@@ -184,7 +211,7 @@ int32_t Mx_compute(Mx_Compute *compute)
 #if defined(SYSLINK_BUILDOS_QNX)
     fxnCtx->params[0].param.ptr.handle = NULL;
 #else
-/*  fxnCtx->params[0].param.ptr.handle = ...; */
+    fxnCtx->params[0].param.ptr.handle = fd;
 #endif
 
     fxnCtx->num_xlts = 2;
@@ -192,18 +219,20 @@ int32_t Mx_compute(Mx_Compute *compute)
 
     fxnCtx->xltAry[0].index = 0;
     fxnCtx->xltAry[0].offset = MmRpc_OFFSET(compute, &compute->inBuf);
+    fxnCtx->xltAry[0].base = (size_t)compute->inBuf;
 #if defined(SYSLINK_BUILDOS_QNX)
     fxnCtx->xltAry[0].handle = NULL;
 #else
-/*  fxnCtx->xltAry[0].handle = ...; */
+    fxnCtx->xltAry[0].handle = fdIn;
 #endif
 
     fxnCtx->xltAry[1].index = 0;
     fxnCtx->xltAry[1].offset = MmRpc_OFFSET(compute, &compute->outBuf);
+    fxnCtx->xltAry[1].base = (size_t)compute->outBuf;
 #if defined(SYSLINK_BUILDOS_QNX)
     fxnCtx->xltAry[1].handle = NULL;
 #else
-/*  fxnCtx->xltAry[1].handle = ...; */
+    fxnCtx->xltAry[1].handle = fdOut;
 #endif
 
     /* invoke the remote function call */
@@ -212,6 +241,22 @@ int32_t Mx_compute(Mx_Compute *compute)
     if (status < 0) {
         printf("mmrpc_test: Error: MmRpc_call failed\n");
         fxnRet = -1;
+        goto leave;
+    }
+
+leave:
+    /* release the output buffer */
+    if (num > 0) {
+#if defined(SYSLINK_BUILDOS_QNX)
+        status = MmRpc_release(Mx_rpcIpu, MmRpc_BufType_Ptr, num, desc);
+#else
+        status = MmRpc_release(Mx_rpcIpu, MmRpc_BufType_Handle, num, desc);
+#endif
+
+        if (status < 0) {
+            printf("mmrpc_test: Error: MmRpc_release failed\n");
+            fxnRet = -1;
+        }
     }
 
     return(fxnRet);
index e14048772c8762509a4596d8b2bbd46b069ba70d..532d923e2c9e6883f9efd70f29c3ef274b7fc261 100644 (file)
@@ -90,12 +90,24 @@ int32_t Mx_triple(uint32_t a);
  */
 int32_t Mx_add(int32_t a, int32_t b);
 
+#if defined(SYSLINK_BUILDOS_QNX)
 /*!
  *  @brief      Sample function which has pointer parameter to
  *              a structure with two embedded pointers.
+ *              QnX version.
  */
-int32_t Mx_compute(Mx_Compute *compute);
+int32_t Mx_compute_QnX(Mx_Compute *compute);
 
+#else /* Linux */
+
+/*!
+ *  @brief      Sample function which has pointer parameter (DMA_BUF) to
+ *              a structure with two embedded pointers.
+ *              Linux version.
+ */
+int32_t Mx_compute_Linux(Mx_Compute *compute, int fd, int fdIn, int fdOut);
+
+#endif
 
 #if defined(__cplusplus)
 }
diff --git a/packages/ti/ipc/tests/NameServerApp.c b/packages/ti/ipc/tests/NameServerApp.c
new file mode 100644 (file)
index 0000000..bb72506
--- /dev/null
@@ -0,0 +1,400 @@
+/*
+ * Copyright (c) 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   NameServerApp.c
+ *
+ *  @brief  Sample application for NameServer module between MPU and Remote Proc
+ *
+ *  ============================================================================
+ */
+
+/* this define must precede inclusion of any xdc header file */
+#define Registry_CURDESC Test__Desc
+#define MODULE_NAME "Server"
+
+/* Standard headers */
+#include <stdio.h>
+
+/* Ipc Standard header */
+#include <xdc/std.h>
+#include <xdc/runtime/Diags.h>
+#include <xdc/runtime/Error.h>
+#include <xdc/runtime/Log.h>
+#include <xdc/runtime/System.h>
+#include <xdc/runtime/Assert.h>
+#include <xdc/runtime/Registry.h>
+
+#include <ti/sysbios/BIOS.h>
+#include <ti/sysbios/knl/Task.h>
+
+#include <ti/ipc/Ipc.h>
+//#include <_NameServer.h>
+
+/* Module level headers */
+#include <ti/ipc/NameServer.h>
+
+
+/** ============================================================================
+ *  Macros and types
+ *  ============================================================================
+ */
+#define NSNAME "MyNS"
+#define NSNAME2 "MyNS2"
+
+/* private data */
+Registry_Desc               Registry_CURDESC;
+
+Void smain (UArg arg0, UArg arg1);
+
+/** ============================================================================
+ *  Globals
+ *  ============================================================================
+ */
+
+Int testNS(NameServer_Handle nsHandle, String name)
+{
+    Int32 status = 0;
+    Ptr ptr;
+    UInt32 val;
+    char key[16];
+    Int i;
+
+    ptr = NameServer_addUInt32(nsHandle, name, 0xdeadbeef);
+    if (ptr == NULL) {
+        Log_print0(Diags_INFO, "Failed to NameServer_addUInt32()\n");
+        return -1;
+    }
+    else {
+        Log_print1(Diags_INFO, "NameServer_addUInt32() returned %p\n", (IArg)ptr);
+    }
+
+    Log_print0(Diags_INFO, "Trying to add same key (should fail)...\n");
+    ptr = NameServer_addUInt32(nsHandle, name, 0xdeadc0de);
+    if (ptr == NULL) {
+        Log_print0(Diags_INFO, " ...got expected Failure from NameServer_addUInt32()\n");
+    }
+    else {
+        Log_print1(Diags_INFO, "    Error: NameServer_addUInt32() returned non-NULL %p (but was expected to fail)\n", (IArg)ptr);
+        return -1;
+    }
+
+    val = 0x00c0ffee;
+    status = NameServer_getUInt32(nsHandle, name, &val, NULL);
+    Log_print2(Diags_INFO, "NameServer_getUInt32() returned %d, val=0x%x (was 0x00c0ffee)\n", status, val);
+
+    Log_print0(Diags_INFO, "Removing 0xdeadbeef w/ NameServer_remove()...\n");
+    status = NameServer_remove(nsHandle, name);
+    if (status < 0) {
+        Log_print1(Diags_INFO, "NameServer_remove() failed: %d\n", status);
+        return -1;
+    }
+
+    ptr = NameServer_addUInt32(nsHandle, name, 0xdeadc0de);
+    if (ptr == NULL) {
+        Log_print0(Diags_INFO, "Error: NameServer_addUInt32() failed\n");
+        return -1;
+    }
+    else {
+        Log_print0(Diags_INFO, "NameServer_addUInt32(0xdeadc0de) succeeded\n");
+    }
+
+    val = 0x00c0ffee;
+    status = NameServer_getUInt32(nsHandle, name, &val, NULL);
+    Log_print2(Diags_INFO, "NameServer_getUInt32() returned %d, val=0x%x (was 0x00c0ffee)\n", status, val);
+
+    Log_print0(Diags_INFO, "Removing 0xdeadc0de w/ NameServer_removeEntry()...\n");
+    status = NameServer_removeEntry(nsHandle, ptr);
+    if (status < 0) {
+        Log_print1(Diags_INFO, "NameServer_remove() failed: %d\n", status);
+        return -1;
+    }
+
+    ptr = NameServer_addUInt32(nsHandle, name, 0x0badc0de);
+    if (ptr == NULL) {
+        Log_print0(Diags_INFO, "Error: NameServer_addUInt32() failed\n");
+        return -1;
+    }
+    else {
+        Log_print0(Diags_INFO, "NameServer_addUInt32(0x0badc0de) succeeded\n");
+    }
+
+    val = 0x00c0ffee;
+    status = NameServer_getUInt32(nsHandle, name, &val, NULL);
+    Log_print2(Diags_INFO, "NameServer_getUInt32() returned %d, val=0x%x (was 0x00c0ffee)\n", status, val);
+
+    status = NameServer_remove(nsHandle, name);
+    if (status < 0) {
+        Log_print0(Diags_INFO, "Error: NameServer_remove() failed\n");
+        return -1;
+    }
+    else {
+        Log_print1(Diags_INFO, "NameServer_remove(%s) succeeded\n", (IArg)name);
+    }
+
+    for (i = 0; i < 10; i++) {
+        sprintf(key, "foobar%d", i);
+
+        ptr = NameServer_addUInt32(nsHandle, key, 0x0badc0de + i);
+        if (ptr == NULL) {
+            Log_print0(Diags_INFO, "Error: NameServer_addUInt32() failed\n");
+            return -1;
+        }
+        else {
+            Log_print2(Diags_INFO, "NameServer_addUInt32(%s, 0x%x) succeeded\n", (IArg)key, 0x0badc0de + i);
+        }
+
+        val = 0x00c0ffee;
+        status = NameServer_getUInt32(nsHandle, key, &val, NULL);
+        Log_print3(Diags_INFO, "NameServer_getUInt32(%s) returned %d, val=0x%x (was 0x00c0ffee)\n", (IArg)key, status, val);
+
+        if (val != (0x0badc0de + i)) {
+            Log_print2(Diags_INFO, "get val (0x%x) != add val (0x%x)!\n", val, 0x0badc0de + i);
+        }
+    }
+
+    for (i = 0; i < 10; i++) {
+        sprintf(key, "foobar%d", i);
+
+        status = NameServer_remove(nsHandle, key);
+        if (status < 0) {
+            Log_print0(Diags_INFO, "Error: NameServer_remove() failed\n");
+            return -1;
+        }
+        else {
+            Log_print1(Diags_INFO, "NameServer_remove(%s) succeeded\n", (IArg)key);
+        }
+    }
+
+    return 0;
+}
+
+/** ============================================================================
+ *  Functions
+ *  ============================================================================
+ */
+Int
+NameServerApp_startup()
+{
+    Int32 status = 0;
+    NameServer_Params params;
+    NameServer_Handle nsHandle;
+    NameServer_Handle nsHandleAlias;
+    NameServer_Handle nsHandle2;
+    Int iteration = 0;
+
+    Log_print0(Diags_INFO, "Entered NameServerApp_startup\n");
+
+/*    status = Ipc_start();
+
+    if (status < 0) {
+        Log_print1(Diags_INFO, "Ipc_start failed: status = %d\n", status);
+        return -1;
+    }
+*/
+//    Log_print0(Diags_INFO, "Calling NameServer_setup()...\n");
+//    NameServer_setup();
+
+again:
+    NameServer_Params_init(&params);
+
+    params.maxValueLen = sizeof(UInt32);
+    params.maxNameLen = 32;
+
+    Log_print1(Diags_INFO, "params.maxValueLen=%d\n", params.maxValueLen);
+    Log_print1(Diags_INFO, "params.maxNameLen=%d\n", params.maxNameLen);
+    Log_print1(Diags_INFO, "params.checkExisting=%d\n", params.checkExisting);
+
+    nsHandle = NameServer_create(NSNAME, &params);
+    if (nsHandle == NULL) {
+        Log_print1(Diags_INFO, "Failed to create NameServer '%s'\n", (IArg)NSNAME);
+        return -1;
+    }
+    else {
+        Log_print1(Diags_INFO, "Created NameServer '%s'\n", (IArg)NSNAME);
+    }
+
+    nsHandleAlias = NameServer_create(NSNAME, &params);
+    if (nsHandleAlias == NULL) {
+        Log_print1(Diags_INFO, "Failed to get handle to NameServer '%s'\n", (IArg)NSNAME);
+        return -1;
+    }
+    else {
+        Log_print1(Diags_INFO, "Got another handle to NameServer '%s'\n", (IArg)NSNAME);
+    }
+
+    NameServer_Params_init(&params);
+
+    params.maxValueLen = sizeof(UInt32);
+    params.maxNameLen = 32;
+    nsHandle2 = NameServer_create(NSNAME2, &params);
+    if (nsHandle2 == NULL) {
+        Log_print1(Diags_INFO, "Failed to create NameServer '%s'\n", (IArg)NSNAME2);
+        return -1;
+    }
+    else {
+        Log_print1(Diags_INFO, "Created NameServer '%s'\n", (IArg)NSNAME2);
+    }
+
+    Log_print0(Diags_INFO, "Testing nsHandle\n");
+    status = testNS(nsHandle, "Key");
+    if (status != 0) {
+        Log_print0(Diags_INFO, "test failed on nsHandle\n");
+        return status;
+    }
+    Log_print0(Diags_INFO, "Testing nsHandle2\n");
+    status = testNS(nsHandle2, "Key");
+    if (status != 0) {
+        Log_print0(Diags_INFO, "test failed on nsHandle2\n");
+        return status;
+    }
+
+    Log_print0(Diags_INFO, "Deleting nsHandle and nsHandle2...\n");
+    NameServer_delete(&nsHandle);
+    NameServer_delete(&nsHandle2);
+
+    /*
+     * Verify that we can still use the alias handle after deleting the
+     * initial handle
+     */
+    Log_print0(Diags_INFO, "Testing nsHandleAlias\n");
+    status = testNS(nsHandleAlias, "Key");
+    if (status != 0) {
+        Log_print0(Diags_INFO, "test failed on nsHandleAlias\n");
+        return status;
+    }
+    Log_print0(Diags_INFO, "Deleting nsHandleAlias...\n");
+    NameServer_delete(&nsHandleAlias);
+
+    iteration++;
+    if (iteration < 2) {
+        goto again;
+    }
+
+//    Log_print0(Diags_INFO, "Calling NameServer_destroy()...\n");
+//    NameServer_destroy();
+
+    Log_print1(Diags_INFO, "Leaving NameServerApp_startup: status = 0x%x\n", status);
+
+    return status;
+}
+
+
+Int
+NameServerApp_execute()
+{
+    Int32 status = 0;
+
+    Log_print0(Diags_INFO, "Entered NameServerApp_execute\n");
+
+    Log_print0(Diags_INFO, "Leaving NameServerApp_execute\n\n");
+
+    return status;
+}
+
+Int
+NameServerApp_shutdown()
+{
+    Int32 status = 0;
+
+    Log_print0(Diags_INFO, "Entered NameServerApp_shutdown()\n");
+
+/*    status = Ipc_stop();
+    if (status < 0) {
+        Log_print1(Diags_INFO, "Ipc_stop failed: status = %d\n", status);
+    }
+*/
+    Log_print0(Diags_INFO, "Leave NameServerApp_shutdown()\n");
+
+    return status;
+}
+
+Int main(Int argc, Char* argv[])
+{
+    Error_Block     eb;
+    Task_Params     taskParams;
+    Registry_Result result;
+
+    Log_print0(Diags_ENTRY, "--> main:");
+
+    /* must initialize the error block before using it */
+    Error_init(&eb);
+
+    /* create main thread (interrupts not enabled in main on BIOS) */
+    Task_Params_init(&taskParams);
+    taskParams.instance->name = "smain";
+    taskParams.stackSize = 0x1000;
+    Task_create(smain, &taskParams, &eb);
+
+    if (Error_check(&eb)) {
+        System_abort("main: failed to create application startup thread");
+    }
+
+    /* register with xdc.runtime to get a diags mask */
+    result = Registry_addModule(&Registry_CURDESC, MODULE_NAME);
+    Assert_isTrue(result == Registry_SUCCESS, (Assert_Id)NULL);
+
+    /* start scheduler, this never returns */
+    BIOS_start();
+
+    /* should never get here */
+    Log_print0(Diags_EXIT, "<-- main:");
+    return (0);
+}
+
+Void smain (UArg arg0, UArg arg1)
+{
+    int status = 0;
+
+    Log_print0(Diags_ENTRY | Diags_INFO, "--> smain:");
+
+    /* turn on Diags_INFO trace */
+    Diags_setMask("Server+F");
+
+    status = NameServerApp_startup();
+    if (status < 0) {
+        goto leave;
+    }
+
+    status = NameServerApp_execute();
+    if (status < 0) {
+        goto leave;
+    }
+
+    status = NameServerApp_shutdown();
+    if (status < 0) {
+        goto leave;
+    }
+
+leave:
+    Log_print1(Diags_EXIT, "<-- smain: %d", (IArg)status);
+    return;
+}
diff --git a/packages/ti/ipc/tests/gatempapp.c b/packages/ti/ipc/tests/gatempapp.c
new file mode 100644 (file)
index 0000000..e8285b4
--- /dev/null
@@ -0,0 +1,457 @@
+/*
+ * Copyright (c) 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.
+ */
+
+/*
+ *  ======== gatempapp.c ========
+ *
+ */
+
+/* this define must precede inclusion of any xdc header file */
+#define Registry_CURDESC Test__Desc
+#define MODULE_NAME "Server"
+
+/* xdctools header files */
+#include <xdc/std.h>
+#include <xdc/runtime/Diags.h>
+#include <xdc/runtime/Error.h>
+#include <xdc/runtime/Log.h>
+#include <xdc/runtime/System.h>
+#include <xdc/runtime/Assert.h>
+#include <xdc/runtime/Registry.h>
+
+/* package header files */
+#include <ti/ipc/Ipc.h>
+#include <ti/sysbios/BIOS.h>
+#include <ti/sysbios/knl/Task.h>
+#include <ti/ipc/MessageQ.h>
+#include <ti/ipc/MultiProc.h>
+#include <ti/ipc/GateMP.h>
+
+/* sytem header files */
+#include <stdlib.h>
+
+/* local header files */
+#include "gatempapp_rsc_table_vayu_dsp.h"
+#include "GateMPAppCommon.h"
+
+#define PHYSICAL_OFFSET  0xBA300000  /* base physical address of shared mem */
+#define VIRTUAL_OFFSET   0x80000000  /* base virtual address of shared mem */
+
+/* module structure */
+typedef struct {
+    UInt16              hostProcId;         /* host processor id */
+    MessageQ_Handle     slaveQue;           /* created locally */
+    GateMP_Handle       hostGateMPHandle;   /* host created gate */
+    GateMP_Handle       slaveGateMPHandle;  /* slave created gate */
+} Server_Module;
+
+/* private data */
+Registry_Desc               Registry_CURDESC;
+static Server_Module        Module;
+
+/* private functions */
+static Void smain(UArg arg0, UArg arg1);
+
+
+/*
+ *  ======== Server_init ========
+ */
+Void Server_init(Void)
+{
+    Registry_Result result;
+
+    /* register with xdc.runtime to get a diags mask */
+    result = Registry_addModule(&Registry_CURDESC, MODULE_NAME);
+    Assert_isTrue(result == Registry_SUCCESS, (Assert_Id)NULL);
+
+    /* initialize module object state */
+    Module.hostProcId = MultiProc_getId("HOST");
+    Module.slaveQue = NULL;
+    Module.hostGateMPHandle = NULL;
+    Module.slaveGateMPHandle = NULL;
+}
+
+
+/*
+ *  ======== Server_create ========
+ */
+Int Server_create()
+{
+    Int                 status = 0;
+    MessageQ_Params     msgqParams;
+    GateMP_Params       gateParams;
+
+    /* enable some log events */
+    Diags_setMask(MODULE_NAME"+EXF");
+
+    /* create GateMP */
+    GateMP_Params_init(&gateParams);
+
+    gateParams.name             = GATEMP_SLAVE_NAME;
+    gateParams.localProtect     = GateMP_LocalProtect_PROCESS;
+    gateParams.remoteProtect    = GateMP_RemoteProtect_SYSTEM;
+
+    Module.slaveGateMPHandle = GateMP_create (&gateParams);
+
+    if (Module.slaveGateMPHandle == NULL) {
+        status = GATEMPAPP_E_FAILURE;
+        Log_print0(Diags_INFO, "Server_create: Failed to create GateMP");
+        goto leave;
+    }
+
+    /* create local message queue (inbound messages) */
+    MessageQ_Params_init(&msgqParams);
+    Module.slaveQue = MessageQ_create(GateMPApp_SlaveMsgQueName, &msgqParams);
+
+    if (Module.slaveQue == NULL) {
+        status = -1;
+        Log_print0(Diags_INFO, "Server_create: Failed to create MessageQ");
+        GateMP_delete(&Module.slaveGateMPHandle);
+        goto leave;
+    }
+
+    Log_print0(Diags_INFO,"Server_create: Slave is ready");
+
+leave:
+    Log_print1(Diags_EXIT, "<-- Server_create: %d", (IArg)status);
+    return (status);
+}
+
+
+
+
+/*
+ *  ======== Server_exec ========
+ */
+Int Server_exec()
+{
+    Int                 status;
+    GateMPApp_Msg *           msg;
+    MessageQ_QueueId    queId;
+    UInt32              physAddr;
+    volatile UInt32 *   intPtr              = 0;
+    Int                 num                 = 0;
+    UInt                i                   = 0;
+    IArg                gateKey             = 0;
+
+    Log_print0(Diags_ENTRY | Diags_INFO, "--> Server_exec:");
+
+    /* wait for inbound message */
+    status = MessageQ_get(Module.slaveQue, (MessageQ_Msg *)&msg,
+        MessageQ_FOREVER);
+
+    if (status < 0) {
+        goto leave;
+    }
+
+    if (msg->cmd != GATEMPAPP_CMD_SPTR_ADDR) {
+        status = GATEMPAPP_E_UNEXPECTEDMSG;
+        goto leave;
+    }
+
+    /* Get physical address of shared memory */
+    physAddr = msg->payload;
+
+    /* translate the physical address to slave virtual addr */
+    intPtr = (volatile UInt32 *)(physAddr - PHYSICAL_OFFSET + VIRTUAL_OFFSET);
+
+    /* process the message */
+    //Log_print1(Diags_INFO, "Server_exec: processed cmd=0x%x", msg->cmd);
+    /* send message back */
+    queId = MessageQ_getReplyQueue(msg); /* type-cast not needed */
+    msg->cmd = GATEMPAPP_CMD_SPTR_ADDR_ACK;
+    MessageQ_put(queId, (MessageQ_Msg)msg);
+
+    Log_print0(Diags_INFO,"Server_exec: Modifying shared variable "
+            "value");
+
+    /* open host-created GateMP */
+    do {
+        status = GateMP_open(GATEMP_HOST_NAME, &Module.hostGateMPHandle);
+    } while (status == GateMP_E_NOTFOUND);
+
+    if (status < 0) {
+        Log_error0("Server_exec: Failed to open host-created GateMP");
+        status = GATEMPAPP_E_FAILURE;
+        goto leave;
+    }
+
+    Log_print0(Diags_INFO,"Server_exec: Opened GateMP successfully");
+
+    Log_print0(Diags_INFO,"Server_exec: Using host-created gate");
+    for (i = 0;i < LOOP_ITR; i++) {
+
+        /* modify the shared variable as long as no one else is currently
+         * accessing it
+         */
+
+        /* enter GateMP */
+        gateKey = GateMP_enter(Module.hostGateMPHandle);
+
+        /* randomly modify the shared variable */
+        if ( rand() % 2) {
+            *intPtr -= 1;
+        }
+        else {
+            *intPtr += 1;
+        }
+
+        /* copy shared variable value */
+        num = *intPtr;
+
+        Log_print2(Diags_INFO, "Server_exec: Current shared variable "
+                "value %d, read value=%d", *intPtr, num);
+
+        if (*intPtr != num) {
+            Log_print0(Diags_INFO, "Server_exec: mismatch in variable value." \
+                "Test failed.");
+            status = GATEMPAPP_E_FAILURE;
+            goto leave;
+        }
+
+        /* leave Gate */
+        GateMP_leave(Module.hostGateMPHandle, gateKey);
+    }
+
+    /* wait for sync message before we switch gates */
+    status = MessageQ_get(Module.slaveQue, (MessageQ_Msg *)&msg,
+        MessageQ_FOREVER);
+    if (status < 0) {
+        goto leave;
+    }
+
+    if (msg->cmd != GATEMPAPP_CMD_SYNC) {
+        status = GATEMPAPP_E_UNEXPECTEDMSG;
+        goto leave;
+    }
+
+    queId = MessageQ_getReplyQueue(msg);
+    MessageQ_put(queId, (MessageQ_Msg)msg);
+
+    Log_print0(Diags_INFO,"Server_exec: Using slave-created gate");
+
+    for (i = 0;i < LOOP_ITR; i++) {
+
+        /* modify the shared variable as long as no one else is currently
+         * accessing it
+         */
+
+        /* enter GateMP */
+        gateKey = GateMP_enter(Module.slaveGateMPHandle);
+
+        /* randomly modify the shared variable */
+        if ( rand() % 2) {
+            *intPtr -= 1;
+        }
+        else {
+            *intPtr += 1;
+        }
+
+        /* copy shared variable value */
+        num = *intPtr;
+
+        Log_print2(Diags_INFO, "Server_exec: Current "
+                "value=%d, read value=%d", *intPtr, num);
+
+        if (*intPtr != num) {
+            Log_print0(Diags_INFO, "Server_exec: mismatch in variable value." \
+                "Test failed.");
+            status = GATEMPAPP_E_FAILURE;
+            goto leave;
+        }
+
+        /* leave Gate */
+        GateMP_leave(Module.slaveGateMPHandle, gateKey);
+    }
+
+leave:
+    if (Module.hostGateMPHandle) {
+        GateMP_close(&Module.hostGateMPHandle);
+    }
+
+    Log_print1(Diags_EXIT, "<-- Server_exec: %d", (IArg)status);
+    return(status);
+}
+
+/*
+ *  ======== Server_delete ========
+ */
+Int Server_delete()
+{
+    Int         status;
+    GateMPApp_Msg *           msg;
+    MessageQ_QueueId    queId;
+
+    Log_print0(Diags_ENTRY, "--> Server_delete:");
+
+    /* wait for inbound message */
+    status = MessageQ_get(Module.slaveQue, (MessageQ_Msg *)&msg,
+        MessageQ_FOREVER);
+
+    if (status < 0) {
+        goto leave;
+    }
+    Log_print0(Diags_ENTRY, "--> Server_delete: got msg");
+    if (msg->cmd != GATEMPAPP_CMD_SHUTDOWN) {
+        status = GATEMPAPP_E_UNEXPECTEDMSG;
+        goto leave;
+    }
+
+    /* close host GateMP */
+    GateMP_close(&Module.hostGateMPHandle);
+    Log_print0(Diags_ENTRY, "Server_delete: host GateMP closed");
+
+    /* send message back to say that GateMP has been cleaned up */
+    queId = MessageQ_getReplyQueue(msg); /* type-cast not needed */
+    msg->cmd = GATEMPAPP_CMD_SHUTDOWN_ACK;
+    MessageQ_put(queId, (MessageQ_Msg)msg);
+
+    /* delete the video message queue */
+    status = MessageQ_delete(&Module.slaveQue);
+    if (status < 0) {
+        Log_print0(Diags_ENTRY, "Server_delete: MessageQ_delete failed");
+        goto leave;
+    }
+
+    Log_print0(Diags_ENTRY, "Server_delete: MessageQ deleted");
+
+    /* delete slave GateMP */
+    status = GateMP_delete(&Module.slaveGateMPHandle);
+    if (status < 0) {
+        Log_print0(Diags_ENTRY, "Server_delete: GateMP_delete failed");
+        goto leave;
+    }
+
+    Log_print0(Diags_ENTRY, "Server_delete: slave GateMP deleted");
+
+leave:
+    if (status < 0) {
+        Log_error1("Server_delete: error=0x%x", (IArg)status);
+    }
+
+    /* disable log events */
+    Log_print1(Diags_EXIT, "<-- Server_delete: %d", (IArg)status);
+    Diags_setMask(MODULE_NAME"-EXF");
+
+    return(status);
+}
+
+/*
+ *  ======== Server_exit ========
+ */
+
+Void Server_exit(Void)
+{
+    /*
+     * Note that there isn't a Registry_removeModule() yet:
+     *     https://bugs.eclipse.org/bugs/show_bug.cgi?id=315448
+     *
+     * ... but this is where we'd call it.
+     */
+}
+
+
+/*
+ *  ======== main ========
+ */
+Int main(Int argc, Char* argv[])
+{
+    Error_Block     eb;
+    Task_Params     taskParams;
+
+    Log_print0(Diags_ENTRY, "--> main:");
+
+    /* must initialize the error block before using it */
+    Error_init(&eb);
+
+    /* create main thread (interrupts not enabled in main on BIOS) */
+    Task_Params_init(&taskParams);
+    taskParams.instance->name = "smain";
+    taskParams.stackSize = 0x1000;
+    Task_create(smain, &taskParams, &eb);
+
+    if (Error_check(&eb)) {
+        System_abort("main: failed to create application startup thread");
+    }
+
+    /* start scheduler, this never returns */
+    BIOS_start();
+
+    /* should never get here */
+    Log_print0(Diags_EXIT, "<-- main:");
+    return (0);
+}
+
+
+/*
+ *  ======== smain ========
+ */
+Void smain(UArg arg0, UArg arg1)
+{
+    Int                 status = 0;
+
+    Log_print0(Diags_ENTRY | Diags_INFO, "--> smain:");
+
+    /* initialize modules */
+    Server_init();
+
+    /* turn on Diags_INFO trace */
+    Diags_setMask("Server+F");
+
+    /* server setup phase */
+    status = Server_create();
+
+    if (status < 0) {
+        goto leave;
+    }
+
+    /* server execute phase */
+    status = Server_exec();
+
+    if (status < 0) {
+        goto leave;
+    }
+
+    /* server shutdown phase */
+    status = Server_delete();
+
+    if (status < 0) {
+        goto leave;
+    }
+
+    /* finalize modules */
+    Server_exit();
+
+leave:
+    Log_print1(Diags_EXIT, "<-- smain: %d", (IArg)status);
+    return;
+}
diff --git a/packages/ti/ipc/tests/gatempapp.cfg b/packages/ti/ipc/tests/gatempapp.cfg
new file mode 100644 (file)
index 0000000..f68fabc
--- /dev/null
@@ -0,0 +1,194 @@
+/* root of the configuration object model */
+var Program = xdc.useModule('xdc.cfg.Program');
+
+/* application uses the following modules and packages */
+xdc.useModule('xdc.runtime.Assert');
+xdc.useModule('xdc.runtime.Diags');
+xdc.useModule('xdc.runtime.Error');
+xdc.useModule('xdc.runtime.Log');
+xdc.useModule('xdc.runtime.Registry');
+
+xdc.useModule('ti.sysbios.knl.Semaphore');
+xdc.useModule('ti.sysbios.knl.Task');
+
+
+xdc.loadPackage('ti.sdo.ipc.family.vayu');
+xdc.useModule('ti.sdo.ipc.family.vayu.InterruptDsp');
+xdc.loadPackage('ti.ipc.rpmsg');
+xdc.loadPackage('ti.ipc.family.vayu');
+
+
+/*
+ *  ======== IPC Configuration ========
+ */
+xdc.loadPackage('ti.ipc.ipcmgr');
+var BIOS        = xdc.useModule('ti.sysbios.BIOS');
+BIOS.addUserStartupFunction('&IpcMgr_ipcStartup');
+BIOS.addUserStartupFunction('&IpcMgr_callIpcStart');
+
+/* describe the processors in the system */
+var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
+MultiProc.setConfig("DSP1", ["HOST", "IPU2", "IPU1", "DSP2", "DSP1"]);
+
+/* GateMP host support */
+var GateMP = xdc.useModule('ti.sdo.ipc.GateMP');
+GateMP.hostSupport = true;
+
+/* shared region configuration */
+var SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');
+
+/* configure SharedRegion #0 (IPC) */
+var SR0Mem = Program.cpu.memoryMap["SR_0"];
+
+SharedRegion.setEntryMeta(0,
+    new SharedRegion.Entry({
+        name:           "SR0",
+        base:           SR0Mem.base,
+        len:            SR0Mem.len,
+        ownerProcId:    MultiProc.getIdMeta("DSP1"),
+        cacheEnable:    true,
+        isValid:        true
+    })
+);
+
+/* Override the default resource table with my own to add SR0 */
+var Resource = xdc.useModule('ti.ipc.remoteproc.Resource');
+Resource.customTable = true;
+
+var Cache = xdc.useModule('ti.sysbios.family.c66.Cache');
+Cache.setMarMeta(0xa0000000, 0x02000000, Cache.Mar_DISABLE);
+var L1cache = new Cache.Size();
+L1cache.l1dSize = Cache.L1Size_0K;
+
+/*
+ *  ======== SYS/BIOS Configuration ========
+ */
+if (Program.build.profile == "debug") {
+    BIOS.libType = BIOS.LibType_Debug;
+} else {
+    BIOS.libType = BIOS.LibType_Custom;
+}
+
+
+/* no rts heap */
+Program.argSize = 100;  /* minimum size */
+Program.stack = 0x1000;
+
+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;
+
+/* default memory heap */
+var Memory = xdc.useModule('xdc.runtime.Memory');
+Memory.defaultHeapSize = 0x20000;
+
+/* create a heap for MessageQ messages */
+var HeapBuf = xdc.useModule('ti.sysbios.heaps.HeapBuf');
+var params = new HeapBuf.Params;
+params.align = 8;
+params.blockSize = 512;
+params.numBlocks = 256;
+var msgHeap = HeapBuf.create(params);
+
+var MessageQ  = xdc.useModule('ti.sdo.ipc.MessageQ');
+MessageQ.registerHeapMeta(msgHeap, 0);
+
+var VirtioSetup = xdc.useModule('ti.ipc.transports.TransportRpmsgSetup');
+//MessageQ.SetupTransportProxy = VirtioSetup;
+
+/* Setup NameServer remote proxy */
+var NameServer = xdc.useModule("ti.sdo.utils.NameServer");
+var NsRemote = xdc.useModule("ti.ipc.namesrv.NameServerRemoteRpmsg");
+NameServer.SetupProxy = NsRemote;
+
+/* Enable Memory Translation module that operates on the BIOS Resource Table */
+var Resource = xdc.useModule('ti.ipc.remoteproc.Resource');
+Resource.loadSegment = "EXT_CODE"
+
+
+/*  Use SysMin because trace buffer address is required for Linux/QNX
+ *  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  = 0x10000;
+
+Program.sectMap[".tracebuf"] = "TRACE_BUF";
+Program.sectMap[".errorbuf"] = "EXC_DATA";
+
+var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+Clock.tickSource = Clock.TickSource_NULL;
+
+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;
+
+
+/*
+ *  ======== Power Management Configuration ========
+ */
+/* Modules used in Power Management */
+xdc.loadPackage('ti.pm');
+
+/* Idle function that periodically flushes the unicache */
+var Idle = xdc.useModule('ti.sysbios.knl.Idle');
+Idle.addFunc('&VirtQueue_cacheWb');
+
+
+/*
+ *  ======== Instrumentation Configuration ========
+ */
+
+/* system logger */
+var LoggerSys = xdc.useModule('xdc.runtime.LoggerSys');
+var LoggerSysParams = new LoggerSys.Params();
+var Defaults = xdc.useModule('xdc.runtime.Defaults');
+
+/* 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;
+
+/* enable runtime Diags_setMask() for non-XDC spec'd modules */
+var Diags = xdc.useModule('xdc.runtime.Diags');
+Diags.setMaskEnabled = true;
+
+/* override diags mask for selected modules */
+xdc.useModule('xdc.runtime.Main');
+Diags.setMaskMeta("xdc.runtime.Main",
+    Diags.ENTRY | Diags.EXIT | Diags.INFO, Diags.RUNTIME_ON);
+Diags.setMaskMeta("ti.ipc.transports.TransportRpmsg",
+    Diags.INFO|Diags.USER1|Diags.STATUS, Diags.ALWAYS_ON);
+Diags.setMaskMeta("ti.ipc.namesrv.NameServerRemoteRpmsg",
+    Diags.INFO, Diags.ALWAYS_ON);
+
+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.ALWAYS_ON;
+Registry.common$.diags_USER1 = Diags.ALWAYS_ON;
+Registry.common$.diags_LIFECYCLE = Diags.ALWAYS_ON;
+Registry.common$.diags_STATUS = Diags.ALWAYS_ON;
+
+VirtioSetup.common$.diags_INFO = Diags.ALWAYS_ON;
+
+var Main = xdc.useModule('xdc.runtime.Main');
+Main.common$.diags_ASSERT = Diags.ALWAYS_ON;
+Main.common$.diags_INTERNAL = Diags.ALWAYS_ON;
+
+/* enable exception callstack backtrace */
+var Hwi = xdc.useModule('ti.sysbios.family.c64p.Hwi');
+if (Program.build.profile == "debug") {
+    Hwi.enableException = true;
+}
diff --git a/packages/ti/ipc/tests/gatempapp_rsc_table_vayu_dsp.h b/packages/ti/ipc/tests/gatempapp_rsc_table_vayu_dsp.h
new file mode 100644 (file)
index 0000000..b55788c
--- /dev/null
@@ -0,0 +1,319 @@
+/*
+ * Copyright (c) 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.
+ */
+
+/*
+ *  ======== gatempapp_rsc_table_vayu_dsp.h ========
+ *
+ *  Define the resource table entries for all DSP cores. This will be
+ *  incorporated into corresponding base images, and used by the remoteproc
+ *  on the host-side to allocated/reserve resources.
+ *
+ */
+
+#ifndef _RSC_TABLE_DSP_H_
+#define _RSC_TABLE_DSP_H_
+
+#include <ti/ipc/remoteproc/rsc_types.h>
+
+/* DSP Memory Map */
+#define L4_44XX_BASE            0x4A000000
+
+#define L4_PERIPHERAL_L4CFG     (L4_44XX_BASE)
+#define DSP_PERIPHERAL_L4CFG    0x4A000000
+
+#define L4_PERIPHERAL_L4PER     0x48000000
+#define DSP_PERIPHERAL_L4PER    0x48000000
+
+#define L4_PERIPHERAL_L4EMU     0x54000000
+#define DSP_PERIPHERAL_L4EMU    0x54000000
+
+#define L3_PERIPHERAL_DMM       0x4E000000
+#define DSP_PERIPHERAL_DMM      0x4E000000
+
+#define L3_PERIPHERAL_ISS       0x52000000
+#define DSP_PERIPHERAL_ISS      0x52000000
+
+#define L3_TILER_MODE_0_1       0x60000000
+#define DSP_TILER_MODE_0_1      0x60000000
+
+#define L3_TILER_MODE_2         0x70000000
+#define DSP_TILER_MODE_2        0x70000000
+
+#define L3_TILER_MODE_3         0x78000000
+#define DSP_TILER_MODE_3        0x78000000
+
+#define DSP_MEM_TEXT            0x95000000
+/* Co-locate alongside TILER region for easier flushing */
+#define DSP_MEM_IOBUFS          0x80000000
+#define DSP_MEM_DATA            0x95100000
+#define DSP_MEM_HEAP            0x95200000
+
+//0x85900000
+#define DSP_SR0_VIRT            0xBFC00000
+#define DSP_SR0                 0xBFC00000
+
+#define DSP_MEM_IPC_DATA        0x9F000000
+#define DSP_MEM_IPC_VRING       0xA0000000
+#define DSP_MEM_RPMSG_VRING0    0xA0000000
+#define DSP_MEM_RPMSG_VRING1    0xA0004000
+#define DSP_MEM_VRING_BUFS0     0xA0040000
+#define DSP_MEM_VRING_BUFS1     0xA0080000
+
+#define DSP_MEM_IPC_VRING_SIZE  SZ_1M
+#define DSP_MEM_IPC_DATA_SIZE   SZ_1M
+#define DSP_MEM_TEXT_SIZE       SZ_1M
+#define DSP_MEM_DATA_SIZE       SZ_1M
+#define DSP_MEM_HEAP_SIZE       (SZ_1M * 3)
+#define DSP_MEM_IOBUFS_SIZE     (SZ_1M * 89)
+#define DSP_SR0_SIZE            (SZ_1M * 1)
+
+/*
+ * Assign fixed RAM addresses to facilitate a fixed MMU table.
+ */
+/* This address is derived from current IPU & ION carveouts */
+#ifdef OMAP5
+#define PHYS_MEM_IPC_VRING      0x95000000
+#else
+#define PHYS_MEM_IPC_VRING      0x98800000
+#endif
+
+/* Need to be identical to that of IPU */
+#define PHYS_MEM_IOBUFS         0xBA300000
+
+/*
+ * Sizes of the virtqueues (expressed in number of buffers supported,
+ * and must be power of 2)
+ */
+#define DSP_RPMSG_VQ0_SIZE      256
+#define DSP_RPMSG_VQ1_SIZE      256
+
+/* flip up bits whose indices represent features we support */
+#define RPMSG_DSP_C0_FEATURES         1
+
+struct my_resource_table {
+    struct resource_table base;
+
+    UInt32 offset[17];  /* Should match 'num' in actual definition */
+
+    /* rpmsg vdev entry */
+    struct fw_rsc_vdev rpmsg_vdev;
+    struct fw_rsc_vdev_vring rpmsg_vring0;
+    struct fw_rsc_vdev_vring rpmsg_vring1;
+
+    /* text carveout entry */
+    struct fw_rsc_carveout text_cout;
+
+    /* data carveout entry */
+    struct fw_rsc_carveout data_cout;
+
+    /* heap carveout entry */
+    struct fw_rsc_carveout heap_cout;
+
+    /* ipcdata carveout entry */
+    struct fw_rsc_carveout ipcdata_cout;
+
+    /* trace entry */
+    struct fw_rsc_trace trace;
+
+    /* devmem entry */
+    struct fw_rsc_devmem devmem0;
+
+    /* devmem entry */
+    struct fw_rsc_devmem devmem1;
+
+    /* devmem entry */
+    struct fw_rsc_devmem devmem2;
+
+    /* devmem entry */
+    struct fw_rsc_devmem devmem3;
+
+    /* devmem entry */
+    struct fw_rsc_devmem devmem4;
+
+    /* devmem entry */
+    struct fw_rsc_devmem devmem5;
+
+    /* devmem entry */
+    struct fw_rsc_devmem devmem6;
+
+    /* devmem entry */
+    struct fw_rsc_devmem devmem7;
+
+    /* devmem entry */
+    struct fw_rsc_devmem devmem8;
+
+    /* devmem entry */
+    struct fw_rsc_devmem devmem9;
+
+    /* devmem entry */
+    struct fw_rsc_devmem devmem10;
+
+};
+
+extern char ti_trace_SysMin_Module_State_0_outbuf__A;
+#define TRACEBUFADDR (UInt32)&ti_trace_SysMin_Module_State_0_outbuf__A
+
+#pragma DATA_SECTION(ti_ipc_remoteproc_ResourceTable, ".resource_table")
+#pragma DATA_ALIGN(ti_ipc_remoteproc_ResourceTable, 4096)
+
+struct my_resource_table ti_ipc_remoteproc_ResourceTable = {
+    1,      /* we're the first version that implements this */
+    17,     /* number of entries in the table */
+    0, 0,   /* reserved, must be zero */
+    /* offsets to entries */
+    {
+        offsetof(struct my_resource_table, rpmsg_vdev),
+        offsetof(struct my_resource_table, text_cout),
+        offsetof(struct my_resource_table, data_cout),
+        offsetof(struct my_resource_table, heap_cout),
+        offsetof(struct my_resource_table, ipcdata_cout),
+        offsetof(struct my_resource_table, trace),
+        offsetof(struct my_resource_table, devmem0),
+        offsetof(struct my_resource_table, devmem1),
+        offsetof(struct my_resource_table, devmem2),
+        offsetof(struct my_resource_table, devmem3),
+        offsetof(struct my_resource_table, devmem4),
+        offsetof(struct my_resource_table, devmem5),
+        offsetof(struct my_resource_table, devmem6),
+        offsetof(struct my_resource_table, devmem7),
+        offsetof(struct my_resource_table, devmem8),
+        offsetof(struct my_resource_table, devmem9),
+        offsetof(struct my_resource_table, devmem10),
+    },
+
+    /* rpmsg vdev entry */
+    {
+        TYPE_VDEV, VIRTIO_ID_RPMSG, 0,
+        RPMSG_DSP_C0_FEATURES, 0, 0, 0, 2, { 0, 0 },
+        /* no config data */
+    },
+    /* the two vrings */
+    { DSP_MEM_RPMSG_VRING0, 4096, DSP_RPMSG_VQ0_SIZE, 1, 0 },
+    { DSP_MEM_RPMSG_VRING1, 4096, DSP_RPMSG_VQ1_SIZE, 2, 0 },
+
+    {
+        TYPE_CARVEOUT,
+        DSP_MEM_TEXT, 0,
+        DSP_MEM_TEXT_SIZE, 0, 0, "DSP_MEM_TEXT",
+    },
+
+    {
+        TYPE_CARVEOUT,
+        DSP_MEM_DATA, 0,
+        DSP_MEM_DATA_SIZE, 0, 0, "DSP_MEM_DATA",
+    },
+
+    {
+        TYPE_CARVEOUT,
+        DSP_MEM_HEAP, 0,
+        DSP_MEM_HEAP_SIZE, 0, 0, "DSP_MEM_HEAP",
+    },
+
+    {
+        TYPE_CARVEOUT,
+        DSP_MEM_IPC_DATA, 0,
+        DSP_MEM_IPC_DATA_SIZE, 0, 0, "DSP_MEM_IPC_DATA",
+    },
+
+    {
+        TYPE_TRACE, TRACEBUFADDR, 0x8000, 0, "trace:dsp",
+    },
+
+    {
+        TYPE_DEVMEM,
+        DSP_MEM_IPC_VRING, PHYS_MEM_IPC_VRING,
+        DSP_MEM_IPC_VRING_SIZE, 0, 0, "DSP_MEM_IPC_VRING",
+    },
+
+    {
+        TYPE_DEVMEM,
+        DSP_MEM_IOBUFS, PHYS_MEM_IOBUFS,
+        DSP_MEM_IOBUFS_SIZE, 0, 0, "DSP_MEM_IOBUFS",
+    },
+
+    {
+        TYPE_DEVMEM,
+        DSP_TILER_MODE_0_1, L3_TILER_MODE_0_1,
+        SZ_256M, 0, 0, "DSP_TILER_MODE_0_1",
+    },
+
+    {
+        TYPE_DEVMEM,
+        DSP_TILER_MODE_2, L3_TILER_MODE_2,
+        SZ_128M, 0, 0, "DSP_TILER_MODE_2",
+    },
+
+    {
+        TYPE_DEVMEM,
+        DSP_TILER_MODE_3, L3_TILER_MODE_3,
+        SZ_128M, 0, 0, "DSP_TILER_MODE_3",
+    },
+
+    {
+        TYPE_DEVMEM,
+        DSP_PERIPHERAL_L4CFG, L4_PERIPHERAL_L4CFG,
+        SZ_16M, 0, 0, "DSP_PERIPHERAL_L4CFG",
+    },
+
+    {
+        TYPE_DEVMEM,
+        DSP_PERIPHERAL_L4PER, L4_PERIPHERAL_L4PER,
+        SZ_16M, 0, 0, "DSP_PERIPHERAL_L4PER",
+    },
+
+    {
+        TYPE_DEVMEM,
+        DSP_PERIPHERAL_L4EMU, L4_PERIPHERAL_L4EMU,
+        SZ_16M, 0, 0, "DSP_PERIPHERAL_L4EMU",
+    },
+
+    {
+        TYPE_DEVMEM,
+        DSP_PERIPHERAL_DMM, L3_PERIPHERAL_DMM,
+        SZ_1M, 0, 0, "DSP_PERIPHERAL_DMM",
+    },
+
+    {
+        TYPE_DEVMEM,
+        DSP_PERIPHERAL_ISS, L3_PERIPHERAL_ISS,
+        SZ_256K, 0, 0, "DSP_PERIPHERAL_ISS",
+    },
+
+    {
+        TYPE_DEVMEM,
+        DSP_SR0_VIRT, DSP_SR0,
+        DSP_SR0_SIZE, 0, 0, "DSP_SR0",
+    },
+
+};
+
+#endif /* _RSC_TABLE_DSP_H_ */
index b22135c4c0e9c186769030cab028746d74d606ad..605446b0dd1b911838560663d32f2d5a33e1ce07 100644 (file)
 
 /* IPC Headers */
 #include <ti/ipc/Std.h>
-#include <ti/ipc/Ipc.h>
 
 #if defined(SYSLINK_BUILDOS_QNX)
+#include <ti/ipc/Ipc.h>
 #include <ti/shmemallocator/SharedMemoryAllocatorUsr.h>
+#else  /* Linux HLOS */
+#include <omap/omap_drm.h>
+#include <libdrm/omap_drmif.h>
+#include <errno.h>
+#include <string.h>
 #endif
 
 #include "Mx.h"
 #define PROC_ID_DFLT 1
 
 /*
- *  ======== main ========
+ * These callCompute() functions separated per HLOS due to very different
+ * HLOS specific shared memory buffer allocation methods.
  */
-int main(int argc, char **argv)
+
+#if defined(SYSLINK_BUILDOS_QNX)
+
+static int callCompute_QnX()
 {
-    int status;
-    int i;
-    int32_t ret;
-    uint32_t val;
-    UInt16 procId = PROC_ID_DFLT;
     Mx_Compute *compute;
-#if defined(SYSLINK_BUILDOS_QNX)
     shm_buf shmCompute, shmInBuf, shmOutBuf;
-#endif
+    int status = 0;
+    int size;
+    int32_t ret;
+    uint32_t val;
+    int i;
 
-    printf("mmrpc_test: --> main\n");
+    /* allocate a compute structure in shared memory */
+    SHM_alloc(sizeof(Mx_Compute), &shmCompute);
+    compute = (Mx_Compute *)(shmCompute.vir_addr);
 
-    /* Parse Args: */
-    switch (argc) {
-        case 1:
-           /* use defaults */
-           break;
-        case 2:
-           procId   = atoi(argv[1]);
-           break;
-        default:
-           printf("Usage: %s [<ProcId>]\n", argv[0]);
-           printf("\tDefaults: ProcId: %d\n", PROC_ID_DFLT);
-           exit(0);
+    if (compute == NULL) {
+        /* temporary: memory alloc not implemented on Linux */
+        fprintf(stderr, "failed to map omap_bo to user space\n");
+        goto leave;
     }
 
-    /* Need to start IPC for MultiProc */
-    status = Ipc_start();
-    if (status < 0) {
-        printf("Ipc_start failed: status = %d\n", status);
-        return (0);
-    }
+    /* initialize compute structure */
+    compute->coef = 0x80400000;
+    compute->key = 0xABA0;
+    compute->size = 0x1000;
+    compute->inBuf = NULL;
+    compute->outBuf = NULL;
 
-    /* initialize Mx module (setup rpc connection) */
-    status = Mx_initialize(procId);
+    /* allocate an input buffer in shared memory */
+    size = compute->size * sizeof(uint32_t);
+    SHM_alloc(size, &shmInBuf);
+    compute->inBuf = (uint32_t *)(shmInBuf.vir_addr);
 
-    if (status < 0) {
+    if (compute->inBuf == NULL) {
+        printf("mmrpc_test: Error: compute->inBuf == NULL\n");
+        status = -1;
         goto leave;
     }
 
-    /* invoke Mx functions */
-    ret = Mx_triple(11);
-    printf("mmrpc_test: Mx_triple(11), ret=%d\n", ret);
+    /* fill input buffer with seed value */
+    for (i = 0; i < compute->size; i++) {
+        compute->inBuf[i] = 0x2010;
+    }
 
-    if (ret < 0) {
+    /* allocate an output buffer in shared memory */
+    SHM_alloc(size, &shmOutBuf);
+    compute->outBuf = (uint32_t *)(shmOutBuf.vir_addr);
+
+    if (compute->outBuf == NULL) {
+        printf("mmrpc_test: Error: compute->outBuf == NULL\n");
         status = -1;
         goto leave;
     }
 
-    ret = Mx_triple(111);
-    printf("mmrpc_test: Mx_triple(111), ret=%d\n", ret);
+    /* clear output buffer */
+    for (i = 0; i < compute->size; i++) {
+        compute->outBuf[i] = 0;
+    }
+
+    /* print some debug info */
+    printf("mmrpc_test: calling Mx_compute(0x%x)\n", (unsigned int)compute);
+    printf("mmrpc_test: compute->coef=0x%x\n", compute->coef);
+    printf("mmrpc_test: compute->key=0x%x\n", compute->key);
+    printf("mmrpc_test: compute->size=0x%x\n", compute->size);
+    printf("mmrpc_test: compute->inBuf=0x%x\n", (unsigned int)compute->inBuf);
+    printf("mmrpc_test: compute->outBuf=0x%x\n", (unsigned int)compute->outBuf);
+
+    /* process the buffer */
+    ret = Mx_compute_QnX(compute);
 
     if (ret < 0) {
         status = -1;
+        printf("mmrpc_test: Error: Mx_Compute() failed\n");
         goto leave;
     }
 
-    ret = Mx_add(44, 66);
-    printf("mmrpc_test: Mx_add(44, 66), ret=%d\n", ret);
+    printf("mmrpc_test: after Mx_compute(0x%x)\n", (unsigned int)compute);
+    printf("mmrpc_test: compute->coef=0x%x\n", compute->coef);
+    printf("mmrpc_test: compute->key=0x%x\n", compute->key);
+    printf("mmrpc_test: compute->size=0x%x\n", compute->size);
+    printf("mmrpc_test: compute->inBuf=0x%x\n", (unsigned int)compute->inBuf);
+    printf("mmrpc_test: compute->outBuf=0x%x\n", (unsigned int)compute->outBuf);
+    printf("mmrpc_test: compute->inBuf[0]=0x%x\n",
+            (unsigned int)compute->inBuf[0]);
+    printf("mmrpc_test: compute->outBuf[0]=0x%x\n",
+            (unsigned int)compute->outBuf[0]);
 
-    if (ret < 0) {
-        status = -1;
+    /* check the output buffer */
+    for (i = 0; i < compute->size; i++) {
+        val = compute->outBuf[i] | compute->coef;
+        if (compute->outBuf[i] != val) {
+            status = -1;
+            printf("mmrpc_test: Error: incorrect outBuf\n");
+            break;
+        }
+    }
+
+leave:
+    SHM_release(&shmOutBuf);
+    SHM_release(&shmInBuf);
+    SHM_release(&shmCompute);
+
+    return (status);
+}
+
+#else /* Linux */
+
+static int callCompute_Linux()
+{
+    Mx_Compute *compute = NULL;
+    int drmFd = 0;
+    struct omap_device *dev = NULL;
+    struct omap_bo *compute_bo = NULL;<