Merge remote-tracking branch 'origin/3.22' into ipc-next
authorChris Ring <cring@ti.com>
Fri, 11 Jul 2014 05:19:11 +0000 (22:19 -0700)
committerChris Ring <cring@ti.com>
Fri, 11 Jul 2014 05:19:11 +0000 (22:19 -0700)
24 files changed:
ipc-qnx.mak
packages/ti/ipc/mm/MmRpc.c
packages/ti/ipc/mm/MmRpc.h
packages/ti/ipc/mm/MmServiceMgr.c
packages/ti/ipc/mm/MmServiceMgr.h
packages/ti/ipc/tests/messageq_common.cfg.xs
packages/ti/ipc/tests/package.bld
packages/ti/ipc/tests/ping_rpmsg_common.cfg.xs
packages/ti/ipc/tests/rpc_task.c
packages/ti/sdo/ipc/family/vayu/InterruptIpu.xs
packages/ti/sdo/ipc/family/vayu/NotifySetup.c
packages/ti/sdo/ipc/family/vayu/NotifySetup.xdt
packages/ti/sdo/ipc/family/vayu/NotifySetup.xs
packages/ti/srvmgr/omaprpc/OmapRpc.c
packages/ti/srvmgr/omaprpc/OmapRpc.h
products.mak
qnx/Makefile
qnx/src/ipc3x_dev/ti/syslink/build/Qnx/lib/common.mk
qnx/src/ipc3x_dev/ti/syslink/build/Qnx/resmgr/common.mk
qnx/src/ipc3x_dev/ti/syslink/family/omap5430/ipu/ipu_pm.c
qnx/src/ipc3x_dev/ti/syslink/inc/ti/ipc/rpmsg_rpc.h
qnx/src/ipc3x_dev/ti/syslink/ipc/hlos/knl/Ipc.c
qnx/src/ipc3x_dev/ti/syslink/rpmsg-rpc/rpmsg-rpc.c
qnx/src/ipc3x_dev/ti/syslink/samples/hlos/rpmsg-rpc-stress/usr/rpmsg-rpc-stress.use

index 9025702023596a711115a193f831726ef0ed729f..a90e52116b9430adb116587a59b25fdb59f5ade7 100644 (file)
@@ -55,9 +55,16 @@ all: .qnx
 .qnx,%: PATH:=$(QNX_PATH):$(PATH)
 .qnx,%:
        @echo "building Qnx user libraries for \"$(PLATFORM)\" platform..."
+ifneq ("$(QNX_CFLAGS)","")
+       @make -C qnx \
+                IPC_REPO=`pwd` \
+                PLATFORM=$(PLATFORM) \
+                QNX_CFLAGS=$(QNX_CFLAGS)
+else
        @make -C qnx \
                 IPC_REPO=`pwd` \
                 PLATFORM=$(PLATFORM)
+endif
 
 clean:
        @echo "cleaning Qnx user libraries ..."
index 0256c67b04051ca0966d6b91a10362bec1c92ff1..9474875cd14c3cc1efb940df3c3834a3be6d13c0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2012-2014, Texas Instruments Incorporated
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -354,6 +354,18 @@ int MmRpc_use(MmRpc_Handle handle, MmRpc_BufType type, int num,
     return(stat);
 }
 
+#if defined(SYSLINK_BUILDOS_QNX)
+/*
+ *  ======== MmRcp_getId ========
+ */
+uint32_t MmRpc_getId(MmRpc_Handle handle)
+{
+    MmRpc_Object *obj = (MmRpc_Object *)handle;
+
+    return obj->connect.id;
+}
+#endif
+
 #if defined(KERNEL_INSTALL_DIR) || defined(IPC_BUILDOS_ANDROID)
 /*
  *  ======== MmRpc_bufHandle ========
index feee339acb2eea18a3a126ca128f414d4209b516..88d1973496ee0a59dc21a4f2a221682e56d6010a 100644 (file)
@@ -318,6 +318,20 @@ int MmRpc_release(MmRpc_Handle handle, MmRpc_BufType type, int num,
 int MmRpc_use(MmRpc_Handle handle, MmRpc_BufType type, int num,
         MmRpc_BufDesc *desc);
 
+/*!
+ *  @brief      Get the id of an MmRpc instance
+ *              (currently only supported in QNX)
+ *
+ *  @param[in]  handle   Service handle returned by MmRpc_create()
+ *
+ *  @retval     32-bit id corresponding to the MmRpc instance
+ *
+ *  @remark     This returns the id corresponding to the MmRpc instance.
+ *              This id can be used to identify the MmRpc instance
+ *              on the slave core during instance deletion.
+ */
+uint32_t MmRpc_getId(MmRpc_Handle handle);
+
 /*!
  *  @brief      Initialize the instance create parameter structure
  *
index 8e55a3dd1db320d464212afe1b2ee1288a4fe7d6..94207ed3bf5699a242fae0b00c784f2eb41f998d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Texas Instruments Incorporated
+ * Copyright (c) 2013-2014, Texas Instruments Incorporated
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -94,7 +94,6 @@ Void MmServiceMgr_exit(Void)
 Int MmServiceMgr_register(const String name, RcmServer_Params *rcmParams,
         MmType_FxnSigTab *fxnSigTab, MmServiceMgr_DelFxn delFxn)
 {
-#if 1
     Int status = MmServiceMgr_S_SUCCESS;
     OmapRpc_Handle handle;
 
@@ -106,114 +105,24 @@ Int MmServiceMgr_register(const String name, RcmServer_Params *rcmParams,
     }
 
     return(status);
-#else
-    Int status = MmServiceMgr_S_SUCCESS;
-    MmServiceMgr_Client *obj;
-    RcmServer_FxnDesc *fxnAry;
-    Int func;
-
-    System_printf("MmServiceMgr_register: -->\n");
-
-    obj = Memory_calloc(NULL, sizeof(MmServiceMgr_Client), 0, NULL);
-
-    if (obj == NULL) {
-        System_printf("MmServiceMgr_register: Error: out of memory\n");
-        status = MmServiceMgr_E_FAIL;
-        goto leave;
-    }
-
-    /* Temporary: make a local copy of server create params in order
-     * to add one more function to the function table. Will be removed.
-     */
-    memcpy(&obj->rcmParams, rcmParams, sizeof(RcmServer_Params));
-    obj->rcmParams.fxns.length = rcmParams->fxns.length + 1;
-
-    obj->rcmParams.fxns.elem = Memory_calloc(NULL, obj->rcmParams.fxns.length *
-            sizeof(RcmServer_FxnDesc), 0, NULL);
-
-    if (obj->rcmParams.fxns.elem == NULL) {
-        System_printf("MmServiceMgr_register: Error: out of memory\n");
-        status = MmServiceMgr_E_FAIL;
-        goto leave;
-    }
-
-    /* Temporary: make a local copy of signature array in order
-     * to add the "first function" signature. Will be removed.
-     */
-    obj->aryLen = aryLen + 1;
-
-    obj->sigAry = Memory_calloc(NULL, obj->aryLen *
-            sizeof(OmapRpc_FuncSignature), 0, NULL);
-
-    if (obj->sigAry == NULL) {
-        System_printf("MmServiceMgr_register: Error: out of memory\n");
-        status = MmServiceMgr_E_FAIL;
-        goto leave;
-    }
-
-    /* Temporary: insert the "first function" in slot 0, then copy
-     * in the caller's functions. Eventually, the create function will be
-     * removed.
-     */
-    obj->rcmParams.fxns.elem[0].name =
-            OmapRpc_Stringerize(OmapRpc_GetSvrMgrHandle);
-    obj->rcmParams.fxns.elem[0].addr.createFxn =
-            (RcmServer_MsgCreateFxn)OmapRpc_GetSvrMgrHandle;
-    strncpy(obj->sigAry[0].name, obj->rcmParams.fxns.elem[0].name,
-            OMAPRPC_MAX_CHANNEL_NAMELEN);
-    obj->sigAry[0].numParam = 0;
-
-    fxnAry = rcmParams->fxns.elem;
-
-    for (func = 0; func < rcmParams->fxns.length; func++) {
-        obj->rcmParams.fxns.elem[func+1].name = fxnAry[func].name;
-        obj->rcmParams.fxns.elem[func+1].addr.fxn = fxnAry[func].addr.fxn;
-
-        memcpy(&obj->sigAry[func+1], &sigAry[func],
-                sizeof(OmapRpc_FuncSignature));
-    }
-
-    if (!ServiceMgr_register(name, &obj->rcmParams)) {
-        System_printf("MmServiceMgr_register: Error: service register failed, "
-                "status=%d\n");
-        status = MmServiceMgr_E_FAIL;
-        goto leave;
-    }
-
-leave:
-    if (status < 0) {
-        if ((obj != NULL) && (obj->sigAry != NULL)) {
-            Memory_free(NULL, obj->sigAry,
-                    obj->aryLen * sizeof(OmapRpc_FuncDeclaration));
-        }
-        if ((obj != NULL) && (obj->rcmParams.fxns.elem != NULL)) {
-            Memory_free(NULL, obj->rcmParams.fxns.elem,
-                    obj->rcmParams.fxns.length * sizeof(RcmServer_FxnDesc));
-        }
-        if (obj != NULL) {
-            Memory_free(NULL, obj, sizeof(MmServiceMgr_Client));
-        }
-    }
-
-    System_printf("MmServiceMgr_register: <--, status=%d\n", status);
-    return(status);
-#endif
 }
 
-#if 0
+
 /*
- *  ======== MmServiceMgr_start ========
+ *  ======== MmServiceMgr_register2 ========
  */
-Int MmServiceMgr_start(const String name, Int aryLen,
-        OmapRpc_FuncSignature *sigAry)
+Int MmServiceMgr_register2(const String name, RcmServer_Params *rcmParams,
+        MmType_FxnSigTab *fxnSigTab, MmServiceMgr_DelFxn2 delFxn)
 {
-    extern Int OmapRpc_start(const String name, Int port, Int aryLen,
-        OmapRpc_FuncSignature *sigAry);
-
     Int status = MmServiceMgr_S_SUCCESS;
+    OmapRpc_Handle handle;
+
+    handle = OmapRpc_createChannel2(name, MultiProc_getId("HOST"),
+            MmServiceMgr_PORT, rcmParams, fxnSigTab, delFxn);
 
-    OmapRpc_start(name, MmServiceMgr_PORT, aryLen, sigAry);
+    if (handle == NULL) {
+        status = MmServiceMgr_E_FAIL;
+    }
 
     return(status);
 }
-#endif
index 813b03170c41699cfe6e81a8d75d83a3d5378364..f0a7b5b6a1f38329ac40f07ec07ec21caecc6727 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Texas Instruments Incorporated
+ * Copyright (c) 2013-2014, Texas Instruments Incorporated
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -62,7 +62,7 @@ extern "C" {
 #define MmServiceMgr_E_FAIL (-1)
 
 typedef Void (*MmServiceMgr_DelFxn)(Void);
-
+typedef Void (*MmServiceMgr_DelFxn2)(UInt32);
 
 /*!
  *  @brief      Initialize the MmServiceMgr module
@@ -83,6 +83,14 @@ Void MmServiceMgr_exit(Void);
 Int MmServiceMgr_register(const String name, RcmServer_Params *params,
         MmType_FxnSigTab *fxnSigTab, MmServiceMgr_DelFxn delFxn);
 
+/*!
+ *  @brief      Register a new service, when using MmServiceMgr_DelFxn2
+ *              as delete function type
+ *
+ */
+Int MmServiceMgr_register2(const String name, RcmServer_Params *params,
+        MmType_FxnSigTab *fxnSigTab, MmServiceMgr_DelFxn2 delFxn);
+
 /*! @cond */
 /*!
  *  @brief      Start the service manager listener task
index ce502ddd9a16cec7e704d4cdf86b20a04e177326..4d56e5b7b2bb5c95d86b6f055905b6d8f931b948 100644 (file)
@@ -33,7 +33,7 @@
 var Memory = xdc.useModule('xdc.runtime.Memory');
 var Semaphore = xdc.useModule('ti.sysbios.knl.Semaphore');
 var BIOS = xdc.useModule('ti.sysbios.BIOS');
-BIOS.heapSize = 0x20000;
+BIOS.heapSize = 0x10000;
 BIOS.libType = BIOS.LibType_Custom;
 
 var Task = xdc.useModule('ti.sysbios.knl.Task');
@@ -203,7 +203,7 @@ else if (Program.platformName.match(/simKepler/) ||
     /* TBD: Update for Kepler: */
     Cache.setMarMeta(0xA0000000, 0x1FFFFFF, 0);
 
-    Program.global.sysMinBufSize = 0x8000;
+    Program.global.sysMinBufSize = 0x2000;
     SysMin.bufSize  =  Program.global.sysMinBufSize;
 
     /* Enable Memory Translation module that operates on the Resource Table */
@@ -236,7 +236,7 @@ var HeapBuf = xdc.useModule('ti.sysbios.heaps.HeapBuf');
 var params = new HeapBuf.Params;
 params.align = 8;
 params.blockSize = 512;
-params.numBlocks = 256;
+params.numBlocks = 64;
 var msgHeap = HeapBuf.create(params);
 
 var MessageQ  = xdc.useModule('ti.sdo.ipc.MessageQ');
index 38092d76320b1f960996a076e9116f3ae6a6a059..36319771c883cae70f7aa9266a6a311a6ea0041e 100644 (file)
@@ -579,10 +579,13 @@ for (var i = 0; i < Build.targets.length; i++) {
                }).addObjects(["messageq_single.c"]);
        }
 
-        /* NameServerApp */
-        Pkg.addExecutable(name + "/NameServerApp", targ, platform, {
-            cfgScript: "nameserverapp",
-        }).addObjects(["NameServerApp.c"]);
+        /* TODO: NameServerApp.xe66 too big for K2E's 512 KB L2SRAM */
+        if (!platform.match(/^ti.platforms.evmC66AK2E/)) {
+            /* NameServerApp */
+            Pkg.addExecutable(name + "/NameServerApp", targ, platform, {
+                cfgScript: "nameserverapp",
+            }).addObjects(["NameServerApp.c"]);
+        }
 
         /* nano_test - demonstrates passing ptrs using CMEM */
         if (platform.match(/^ti\.platforms\.evmOMAPL138\:DSP/)) {
index a98ecc671dcfb3ad48731b7486dc87484a41b9fb..9e3a908f5e8bc6e91534a2bdff16c87a4a46e8c0 100644 (file)
@@ -33,7 +33,7 @@
 var Memory = xdc.useModule('xdc.runtime.Memory');
 var Semaphore = xdc.useModule('ti.sysbios.knl.Semaphore');
 var BIOS = xdc.useModule('ti.sysbios.BIOS');
-BIOS.heapSize = 0x20000;
+BIOS.heapSize = 0x10000;
 //BIOS.libType = BIOS.LibType_Custom;
 
 var Idle = xdc.useModule('ti.sysbios.knl.Idle');
index 190eb84f5bbeee4f4ae221f60333e3e2537f620a..cf5f06f052c6af257c929e71660bddd5beccc75f 100644 (file)
@@ -146,9 +146,10 @@ static MmType_FxnSigTab rpc_fxnSigTab = {
 static RcmServer_Params rpc_Params;
 
 
-Void RPC_SKEL_SrvDelNotification(Void)
+Void RPC_SKEL_SrvDelNotification(Uint32 id)
 {
-    System_printf("RPC_SKEL_SrvDelNotification: Nothing to cleanup\n");
+    System_printf("RPC_SKEL_SrvDelNotification: Nothing to cleanup for "
+        "MmRpc instance id=%d\n", id);
 }
 
 static Int32 RPC_SKEL_Init2(UInt32 size, UInt32 *data)
@@ -371,7 +372,7 @@ void register_MxServer(void)
                    MultiProc_self());
 
     /* register an example service */
-    status = MmServiceMgr_register(mMServerName, &rpc_Params, &rpc_fxnSigTab,
+    status = MmServiceMgr_register2(mMServerName, &rpc_Params, &rpc_fxnSigTab,
             RPC_SKEL_SrvDelNotification);
 
     if (status < 0) {
index 44d310d9ee8eb1774709a7ae82b1f17e667b5b43..90dff397c6ab4e9ad99d4aa433e0f5c1eee79856 100644 (file)
@@ -53,8 +53,6 @@ function module$use()
 
     var TableInit = xdc.useModule("ti.sdo.ipc.family.vayu.TableInit");
 
-    xdc.useModule("ti.sdo.ipc.family.vayu.NotifySetup");
-
     /* Initisalize procIdTable */
     TableInit.initProcId(this);
 
index 0da08cfba2670f7c5411d4c7d3cd08422732a46b..603efa3b952c9937620d2cef1d1c480a666b6c53 100644 (file)
@@ -38,7 +38,6 @@
 #include <xdc/runtime/Error.h>
 #include <xdc/runtime/Startup.h>
 
-#include <ti/sdo/ipc/Ipc.h>
 #include <ti/sdo/ipc/_Notify.h>
 #include <ti/sdo/ipc/family/vayu/NotifyDriverMbx.h>
 #include <ti/sdo/ipc/notifyDrivers/NotifyDriverShm.h>
@@ -484,7 +483,7 @@ Void NotifySetup_plugHwi(UInt16 remoteProcId, Int cpuIntrNum,
     || defined(xdc_target__isaCompatible_v7A)
 
     /* compute table index for given source and destination */
-    idx = (srcVirtId * NotifySetup_NUM_CORES) + MultiProc_self();
+    idx = (srcVirtId * NotifySetup_NUM_CORES) + VIRTID(MultiProc_self());
 
     /* compute mailbox index */
     mbxIdx = MBX_BASEADDR_IDX(idx);
@@ -584,7 +583,7 @@ Void NotifySetup_unplugHwi(UInt16 remoteProcId, Int cpuIntrNum)
     || defined(xdc_target__isaCompatible_v7A)
 
     /* decrement plug count */
-    idx = (srcVirtId * NotifySetup_NUM_CORES) + MultiProc_self();
+    idx = (srcVirtId * NotifySetup_NUM_CORES) + VIRTID(MultiProc_self());
     mbxIdx = MBX_BASEADDR_IDX(idx);
     NotifySetup_module->numPlugged[mbxIdx]--;
 
index 880d213ed8525c65138499aa0bfd608c93fc629d..2d3d37d02df3f52d06f29a1f45d9ffcf2cf455d4 100644 (file)
@@ -71,7 +71,7 @@ Int `pkg`_NotifySetup_attach(UInt16 remoteProcId, Ptr sharedAddr)
 SizeT `pkg`_NotifySetup_sharedMemReq(UInt16 remoteProcId, Ptr sharedAddr)
 {
     `pkg`_NotifySetup_Driver driver;
-    SizeT memReq;
+    SizeT memReq = 0;
 
     driver = `pkg`_NotifySetup_driverType(remoteProcId);
 
index d9f3967bf8b77f0a51dbee4186c6dbac28b640e4..04270296976981c6e9edbc49ae7afc73349fd008 100644 (file)
@@ -96,9 +96,6 @@ function module$use()
         xdc.useModule('ti.sysbios.family.shared.vayu.IntXbar');
     }
 
-    xdc.useModule('ti.sdo.ipc.Ipc');
-    xdc.useModule('ti.sdo.ipc.Notify');
-
     /* initialize procIdTable */
     TableInit.initProcId(this);
 
@@ -265,12 +262,18 @@ function module$use()
         }
     }
 
-    /* load notify drivers into configuration model */
-    if (this.$private.driverMask & this.Driver_SHAREDMEMORY) {
-        xdc.useModule('ti.sdo.ipc.notifyDrivers.NotifyDriverShm');
-    }
-    if (this.$private.driverMask & this.Driver_MAILBOX) {
-        xdc.useModule('ti.sdo.ipc.family.vayu.NotifyDriverMbx');
+    /*  If Notify module is already used, then load notify drivers into
+     *  configuration model. Do *not* useModule the Notify module. Some
+     *  applications require this notify driver but do *not* want the
+     *  ti.sdo.ipc package to be loaded.
+     */
+    if (xdc.module('ti.sdo.ipc.Notify').$used) {
+        if (this.$private.driverMask & this.Driver_SHAREDMEMORY) {
+            xdc.useModule('ti.sdo.ipc.notifyDrivers.NotifyDriverShm');
+        }
+        if (this.$private.driverMask & this.Driver_MAILBOX) {
+            xdc.useModule('ti.sdo.ipc.family.vayu.NotifyDriverMbx');
+        }
     }
 }
 
index 41e1fa7d8362067445313330c1332ba22f95e327..65c585accfee43cb08664246df0d875b5f46fb40 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2012-2014, Texas Instruments Incorporated
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 #include "OmapRpc.h"
 
 typedef struct OmapRpc_Object {
-    Char                    channelName[OMAPRPC_MAX_CHANNEL_NAMELEN];
-    UInt16                  dstProc;
-    UInt32                  port;
-    RPMessage_Handle        msgq;
-    UInt32                  localEndPt;
-    Task_Handle             taskHandle;
-    Bool                    shutdown;
-    Semaphore_Handle        exitSem;
-    OmapRpc_SrvDelNotifyFxn srvDelCB;
-    RcmServer_Params        rcmParams;
-    UInt32                  numFuncs;
-    OmapRpc_FuncSignature  *funcSigs;
+    Char                     channelName[OMAPRPC_MAX_CHANNEL_NAMELEN];
+    UInt16                   dstProc;
+    UInt32                   port;
+    RPMessage_Handle         msgq;
+    UInt32                   localEndPt;
+    Task_Handle              taskHandle;
+    Bool                     shutdown;
+    Semaphore_Handle         exitSem;
+    OmapRpc_SrvDelNotifyFxn  srvDelCB;
+    OmapRpc_SrvDelNotifyFxn2 srvDelCB2;
+    RcmServer_Params         rcmParams;
+    UInt32                   numFuncs;
+    OmapRpc_FuncSignature   *funcSigs;
 } OmapRpc_Object;
 
+static OmapRpc_Handle _OmapRpc_createChannel(String channelName, UInt16 dstProc,
+        UInt32 port, RcmServer_Params *rcmParams, MmType_FxnSigTab *fxnSigTab);
+
 Int32 OmapRpc_GetSvrMgrHandle(Void *srvc, Int32 num, Int32 *params)
 {
     System_printf("OMAPRPC: Calling RCM Service Manager Create Function!\n");
@@ -167,6 +171,9 @@ static Void omapRpcTask(UArg arg0, UArg arg1)
                 if (obj->srvDelCB != NULL) {
                     obj->srvDelCB();
                 }
+                else if (obj->srvDelCB2 != NULL) {
+                    obj->srvDelCB2(handle->endpointAddress);
+                }
 
                 /* don't clear out the old data... */
                 System_printf("OMAPRPC: destroying instance addr: %d\n",
@@ -260,15 +267,45 @@ static Void omapRpcTask(UArg arg0, UArg arg1)
 /*
  *  ======== OmapRpc_createChannel ========
  */
-#if 0
-OmapRpc_Handle OmapRpc_createChannel(String channelName, UInt16 dstProc,
-        UInt32 port, UInt32 numFuncs, OmapRpc_FuncDeclaration *fxns,
-        OmapRpc_SrvDelNotifyFxn srvDelCBFunc)
-#else
 OmapRpc_Handle OmapRpc_createChannel(String channelName, UInt16 dstProc,
         UInt32 port, RcmServer_Params *rcmParams, MmType_FxnSigTab *fxnSigTab,
         OmapRpc_SrvDelNotifyFxn srvDelCBFunc)
-#endif
+{
+    OmapRpc_Object * obj;
+
+    obj = _OmapRpc_createChannel(channelName, dstProc, port, rcmParams,
+        fxnSigTab);
+    if (obj != NULL) {
+        obj->srvDelCB = srvDelCBFunc;
+    }
+
+    return (obj);
+}
+
+/*
+ *  ======== OmapRpc_createChannel2 ========
+ */
+OmapRpc_Handle OmapRpc_createChannel2(String channelName, UInt16 dstProc,
+        UInt32 port, RcmServer_Params *rcmParams, MmType_FxnSigTab *fxnSigTab,
+        OmapRpc_SrvDelNotifyFxn2 srvDelCBFunc2)
+{
+    OmapRpc_Object * obj;
+
+    obj = _OmapRpc_createChannel(channelName, dstProc, port, rcmParams,
+        fxnSigTab);
+    if (obj != NULL) {
+        obj->srvDelCB2 = srvDelCBFunc2;
+    }
+
+    return (obj);
+}
+
+
+/*
+ *  ======== _OmapRpc_createChannel ========
+ */
+static OmapRpc_Handle _OmapRpc_createChannel(String channelName, UInt16 dstProc,
+        UInt32 port, RcmServer_Params *rcmParams, MmType_FxnSigTab *fxnSigTab)
 {
     Task_Params taskParams;
     UInt32      func;
@@ -311,7 +348,6 @@ OmapRpc_Handle OmapRpc_createChannel(String channelName, UInt16 dstProc,
     obj->port = port;
     strncpy(obj->channelName, channelName, OMAPRPC_MAX_CHANNEL_NAMELEN-1);
     obj->channelName[OMAPRPC_MAX_CHANNEL_NAMELEN-1]='\0';
-    obj->srvDelCB = srvDelCBFunc;
     obj->funcSigs = Memory_alloc(NULL, obj->numFuncs *
             sizeof(OmapRpc_FuncSignature), 0, NULL);
 
index c39a1e74f17fcaced1465adfbad7b5ea938129eb..3491693ef859292a6d42bb8284083cf8678a78a8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2012-2014, Texas Instruments Incorporated
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -157,6 +157,7 @@ typedef enum OmapRpc_ErrorType {
 
 typedef struct OmapRpc_CreateInstance {
     Char name[OMAPRPC_MAX_INST_NAMELEN];
+    UInt32 id;
 } OmapRpc_CreateInstance;
 
 typedef struct OmapRpc_ChannelInfo {
@@ -274,16 +275,19 @@ typedef struct OmapRpc_FuncDeclaration {
 
 typedef struct OmapRpc_Object *OmapRpc_Handle;
 typedef Void (*OmapRpc_SrvDelNotifyFxn)(Void);
+typedef Void (*OmapRpc_SrvDelNotifyFxn2)(UInt32);
 
-#if 0
-OmapRpc_Handle OmapRpc_createChannel(String channelName, UInt16 dstProc,
-        UInt32 port, UInt32 numFuncs, OmapRpc_FuncDeclaration* fxns,
-        OmapRpc_SrvDelNotifyFxn func);
-#else
 OmapRpc_Handle OmapRpc_createChannel(String channelName, UInt16 dstProc,
         UInt32 port, RcmServer_Params *rcmParams, MmType_FxnSigTab *fxnSigTab,
         OmapRpc_SrvDelNotifyFxn srvDelCBFunc);
-#endif
+
+/*
+ * OmapRpc_createChannel2
+ * Same as OmapRpc_createChannel but with OmapRpc_SrvDelNotifyFxn2
+ */
+OmapRpc_Handle OmapRpc_createChannel2(String channelName, UInt16 dstProc,
+        UInt32 port, RcmServer_Params *rcmParams, MmType_FxnSigTab *fxnSigTab,
+        OmapRpc_SrvDelNotifyFxn2 srvDelCBFunc);
 
 Int OmapRpc_deleteChannel(OmapRpc_Handle handle);
 
index 33fbdcea07676f4f6b423271f8e6c34954ac2705..757935597d407e64fd75714815c9fce45d0f4b9e 100644 (file)
@@ -82,6 +82,9 @@ CMEM_INSTALL_DIR =
 #
 QNX_INSTALL_DIR =
 
+# Optional: Any additional compile options
+#
+QNX_CFLAGS =
 
 #################### IPC Bios ####################
 
index 5ff806c198f73f25d2f1f9db164e4c81f9c34f13..59fdf66f69f654362fd75b1bc85cdf6213cb0175 100644 (file)
@@ -54,7 +54,7 @@ tests: libs
 
 ipc3x_dev: utils
        @cd src/ipc3x_dev; \
-            make SYSLINK_PLATFORM=$(SYSLINK_PLATFORM) SMP=1
+            make SYSLINK_PLATFORM=$(SYSLINK_PLATFORM) SMP=1 QNX_CFLAGS=$(QNX_CFLAGS)
 
 install:
        @cd src/ipc3x_dev; make SYSLINK_PLATFORM=$(SYSLINK_PLATFORM) \
index a19b51b32271518c6ebf945223f6c2356341473c..38ebfa34bb562d258d1bce726e01b599c23d2aec 100644 (file)
@@ -60,7 +60,7 @@ EXTRA_SRCVPATH+=$(SYSLINK_ROOT)/ti/syslink/ipc/hlos/usr \
 
 #Using the default build rules TODO: to selective pick and choose the compiler/linker/archiver & build rules
 include $(MKFILES_ROOT)/qtargets.mk
-CCOPTS += -DSYSLINK_BUILDOS_QNX -DSYSLINK_BUILD_DEBUG
+CCOPTS += -DSYSLINK_BUILDOS_QNX -DSYSLINK_BUILD_DEBUG $(QNX_CFLAGS)
 ifeq ("$(SYSLINK_DEBUG)", "1")
 #enable debug build
 CCOPTS += -g -O0
index bbc467d145891d829305878eff591eebe59298e8..5b34d2511e5cf532353b0842000fe6ebfd862774 100644 (file)
@@ -41,7 +41,7 @@ PINFO DESCRIPTION=IPC Resource Manager
 endef
 NAME=ipc
 
-CCOPTS += -DSYSLINK_BUILDOS_QNX -DSYSLINK_BUILD_DEBUG -DSYSLINK_BUILD_HLOS
+CCOPTS += -DSYSLINK_BUILDOS_QNX -DSYSLINK_BUILD_DEBUG -DSYSLINK_BUILD_HLOS $(QNX_CFLAGS)
 
 ifeq ("$(SYSLINK_DEBUG)", "1")
 #enable debug build
index 9ff332c09bcf119a6511369ffaf6f671b32c66a4..9c3e2bf8df14770e91042a94b62eb52215820171 100644 (file)
@@ -122,7 +122,6 @@ extern pthread_mutex_t syslink_hib_mutex;
 extern pthread_cond_t syslink_hib_cond;
 
 #undef BENELLI_SELF_HIBERNATION
-#define BENELLI_WATCHDOG_TIMER
 
 /* A9 state flag 0000 | 0000 Benelli internal use*/
 #define CORE0_PROC_DOWN        0x00010000
@@ -542,7 +541,7 @@ void unmap_gpt_regs(void)
     GPT6ClkCtrl = NULL;
 }
 
-#ifdef BENELLI_WATCHDOG_TIMER
+#ifndef IPC_DISABLE_WATCHDOG
 
 /* Interrupt clear function*/
 static Bool ipu_pm_clr_gptimer_interrupt(Ptr fxnArgs)
@@ -1952,7 +1951,7 @@ int ipu_pm_save_ctx(int proc_id)
         }
 
         if (core1_loaded) {
-#ifdef BENELLI_WATCHDOG_TIMER
+#ifndef IPC_DISABLE_WATCHDOG
             save_gpt_context(GPTIMER_11);
             ipu_pm_gpt_stop(GPTIMER_11);
             ipu_pm_gpt_disable(GPTIMER_11);
@@ -1970,7 +1969,7 @@ int ipu_pm_save_ctx(int proc_id)
             GT_0trace(curTrace, GT_4CLASS, "Sleep CORE1");
         }
 
-#ifdef BENELLI_WATCHDOG_TIMER
+#ifndef IPC_DISABLE_WATCHDOG
         save_gpt_context(GPTIMER_9);
         ipu_pm_gpt_stop(GPTIMER_9);
         ipu_pm_gpt_disable(GPTIMER_9);
@@ -2087,7 +2086,7 @@ int ipu_pm_restore_ctx(int proc_id)
             goto error;
         }
 
-#ifdef BENELLI_WATCHDOG_TIMER
+#ifndef IPC_DISABLE_WATCHDOG
         ipu_pm_gpt_enable(GPTIMER_9);
         restore_gpt_context(GPTIMER_9);
         ipu_pm_gpt_start(GPTIMER_9);
@@ -2108,7 +2107,7 @@ int ipu_pm_restore_ctx(int proc_id)
         }
 
         if (core1_loaded) {
-#ifdef BENELLI_WATCHDOG_TIMER
+#ifndef IPC_DISABLE_WATCHDOG
             ipu_pm_gpt_enable(GPTIMER_11);
             restore_gpt_context(GPTIMER_11);
             ipu_pm_gpt_start(GPTIMER_11);
@@ -2166,7 +2165,7 @@ int ipu_pm_restore_ctx(int proc_id)
 int ipu_pm_attach(int proc_id)
 {
     int retval = EOK;
-#ifdef BENELLI_WATCHDOG_TIMER
+#ifndef IPC_DISABLE_WATCHDOG
     OsalIsr_Params isrParams;
 #endif
 
@@ -2176,7 +2175,7 @@ int ipu_pm_attach(int proc_id)
 
     if (proc_id == MultiProc_getId(CORE0)) {
         ipu_pm_state.loaded_procs |= CORE0_LOADED;
-#ifdef BENELLI_WATCHDOG_TIMER
+#ifndef IPC_DISABLE_WATCHDOG
         ipu_pm_gpt_enable(GPTIMER_9);
         isrParams.checkAndClearFxn = ipu_pm_clr_gptimer_interrupt;
         isrParams.fxnArgs = (Ptr)GPTIMER_9;
@@ -2199,7 +2198,7 @@ int ipu_pm_attach(int proc_id)
     else if (proc_id == MultiProc_getId("CORE1")) {
 #endif
         ipu_pm_state.loaded_procs |= CORE1_LOADED;
-#ifdef BENELLI_WATCHDOG_TIMER
+#ifndef IPC_DISABLE_WATCHDOG
         ipu_pm_gpt_enable(GPTIMER_11);
         isrParams.checkAndClearFxn = ipu_pm_clr_gptimer_interrupt;
         isrParams.fxnArgs = (Ptr)GPTIMER_11;
@@ -2220,7 +2219,7 @@ int ipu_pm_attach(int proc_id)
     }
     else if (proc_id == MultiProc_getId("DSP")) {
         ipu_pm_state.loaded_procs |= DSP_LOADED;
-#ifdef BENELLI_WATCHDOG_TIMER
+#ifndef IPC_DISABLE_WATCHDOG
         ipu_pm_gpt_enable(GPTIMER_6);
         isrParams.checkAndClearFxn = ipu_pm_clr_gptimer_interrupt;
         isrParams.fxnArgs = (Ptr)GPTIMER_6;
@@ -2244,7 +2243,7 @@ int ipu_pm_attach(int proc_id)
         retval = ProcMgr_open(&ipu_pm_state.proc_handles[proc_id], proc_id);
 
     if (retval < 0) {
-#ifdef BENELLI_WATCHDOG_TIMER
+#ifndef IPC_DISABLE_WATCHDOG
         if (proc_id == MultiProc_getId(CORE0)) {
             if (ipu_pm_state.gpt9IsrObject) {
                 OsalIsr_uninstall(ipu_pm_state.gpt9IsrObject);
@@ -2303,7 +2302,7 @@ int ipu_pm_detach(int proc_id)
 #endif
 
     if (proc_id == MultiProc_getId(CORE0)) {
-#ifdef BENELLI_WATCHDOG_TIMER
+#ifndef IPC_DISABLE_WATCHDOG
         OsalIsr_uninstall(ipu_pm_state.gpt9IsrObject);
         OsalIsr_delete(&ipu_pm_state.gpt9IsrObject);
         ipu_pm_state.gpt9IsrObject = NULL;
@@ -2315,7 +2314,7 @@ int ipu_pm_detach(int proc_id)
     }
     else if (proc_id == MultiProc_getId("CORE1")) {
 #endif
-#ifdef BENELLI_WATCHDOG_TIMER
+#ifndef IPC_DISABLE_WATCHDOG
         OsalIsr_uninstall(ipu_pm_state.gpt11IsrObject);
         OsalIsr_delete(&ipu_pm_state.gpt11IsrObject);
         ipu_pm_state.gpt11IsrObject = NULL;
@@ -2325,7 +2324,7 @@ int ipu_pm_detach(int proc_id)
         ipu_pm_state.loaded_procs &= ~CORE1_LOADED;
     }
     else if (proc_id == MultiProc_getId("DSP")) {
-#ifdef BENELLI_WATCHDOG_TIMER
+#ifndef IPC_DISABLE_WATCHDOG
         OsalIsr_uninstall(ipu_pm_state.gpt6IsrObject);
         OsalIsr_delete(&ipu_pm_state.gpt6IsrObject);
         ipu_pm_state.gpt6IsrObject = NULL;
index e37c74f0ab0817c8498c1cfcbe43ee42e5792987..f17468f5fc8a25951f4845719ed03c687d5862aa 100644 (file)
@@ -1,7 +1,8 @@
 /*
  * Remote Processor Procedure Call Driver
  *
- * Copyright(c) 2012-2013 Texas Instruments. All rights reserved.
+ * Copyright (c) 2012-2014 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
@@ -53,11 +54,11 @@ struct rppc_buf_fds {
 /*
  * ioctl definitions
  */
-#define RPPC_IOC_MAGIC         'r'
-#define RPPC_IOC_CREATE                _IOW(RPPC_IOC_MAGIC, 1, struct rppc_create_instance)
+#define RPPC_IOC_MAGIC    'r'
+#define RPPC_IOC_CREATE   _IOWR(RPPC_IOC_MAGIC, 1, struct rppc_create_instance)
 #define RPPC_IOC_BUFREGISTER    _IOW(RPPC_IOC_MAGIC, 2, struct rppc_buf_fds)
 #define RPPC_IOC_BUFUNREGISTER  _IOW(RPPC_IOC_MAGIC, 3, struct rppc_buf_fds)
-#define RPPC_IOC_MAXNR         (4)
+#define RPPC_IOC_MAXNR      (4)
 
 #define RPPC_MAX_PARAMETERS    (10)
 #define RPPC_MAX_TRANSLATIONS  (1024)
@@ -205,15 +206,16 @@ struct rppc_packet {
 
 //#ifdef __KERNEL__
 
-#define RPPC_MAX_NUM_FUNCS             (1024)
-#define RPPC_MAX_CHANNEL_NAMELEN       (64)
-#define RPPC_MAX_FUNC_NAMELEN          (64)
-#define RPPC_MAX_NUM_PARAMS            (10)
-#define RPPC_MAX_INST_NAMELEN          (48)
+#define RPPC_MAX_NUM_FUNCS          (1024)
+#define RPPC_MAX_CHANNEL_NAMELEN    (64)
+#define RPPC_MAX_FUNC_NAMELEN       (64)
+#define RPPC_MAX_NUM_PARAMS         (10)
+#define RPPC_MAX_INST_NAMELEN       (48)
 
 /* Added below definition for use with CREATE ioctl in QNX */
 struct rppc_create_instance {
-       char name[RPPC_MAX_CHANNEL_NAMELEN];
+    char name[RPPC_MAX_CHANNEL_NAMELEN];
+    uint32_t  id;  /* id for this instance */
 };
 
 /**
index 08010f7a7f0facdb107c937237af4e1c492ea6f0..d6998c0e386906c5f561000fb66d495961e0b5d7 100644 (file)
@@ -213,7 +213,7 @@ Int Ipc_attach (UInt16 remoteProcId)
         }
 #endif
 
-#if defined(SYSLINK_PLATFORM_VAYU)
+#if !defined(IPC_DISABLE_WATCHDOG) && defined(SYSLINK_PLATFORM_VAYU)
         if (status >= 0) {
             status = gpt_wdt_attach(remoteProcId);
             if (status < 0) {
@@ -260,7 +260,7 @@ Int Ipc_detach (UInt16 remoteProcId)
         status = ipu_pm_detach (remoteProcId);
 #endif
 
-#if defined(SYSLINK_PLATFORM_VAYU)
+#if !defined(IPC_DISABLE_WATCHDOG) && defined(SYSLINK_PLATFORM_VAYU)
         status = gpt_wdt_detach(remoteProcId);
 #endif
 
index 28432a8b8a31aa122bb5976b0512d453bc903e36..8d8806badd07de22ededb47809050e65c927510c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright (c) 2013, Texas Instruments Incorporated
+ *  Copyright (c) 2013-2014, Texas Instruments Incorporated
  *
  *  Redistribution and use in source and binary forms, with or without
  *  modification, are permitted provided that the following conditions
@@ -669,7 +669,9 @@ _rpmsg_rpc_create(resmgr_context_t *ctp, io_devctl_t *msg, rpmsg_rpc_ocb_t *ocb)
 {
     Int status = EOK;
     struct rppc_create_instance * cargs =
-                    (struct rppc_create_instance *)(_DEVCTL_DATA (msg->i));
+        (struct rppc_create_instance *)(_DEVCTL_DATA (msg->i));
+    struct rppc_create_instance * out =
+        (struct rppc_create_instance *) (_DEVCTL_DATA (msg->o));
     struct rppc_msg_header * msg_hdr = NULL;
     rpmsg_rpc_object * rpc = ocb->rpc;
     Char * msg_data = NULL;
@@ -708,7 +710,10 @@ _rpmsg_rpc_create(resmgr_context_t *ctp, io_devctl_t *msg, rpmsg_rpc_ocb_t *ocb)
             status = OsalSemaphore_pend(rpmsg_rpc_state.sem, 5000);
             if (rpc->created == TRUE) {
                 msg->o.ret_val = EOK;
-                status = (_RESMGR_PTR(ctp, &msg->o, sizeof(msg->o)));
+                /* Use the remote endpoint address to identify this instance */
+                out->id = rpc->remoteAddr;
+                status = (_RESMGR_PTR(ctp, &msg->o, sizeof(msg->o) +
+                    sizeof(struct rppc_create_instance)));
             }
             else if (status < 0) {
                 GT_0trace(curTrace, GT_4CLASS, "Semaphore pend failed.");
index 9d60edd2ab1202773103e4a7d8ad9ce5466b94d6..61fa6bff2e71654a332c30dfa16bf480c01533b1 100644 (file)
@@ -25,6 +25,8 @@ Syntax:
                     1: MMU Fault (data read access) (default)
                     2: MMU Fault (data write access)
                     3: MMU Fault (program access)
+                    4: Exception
+                    5: Watchdog timeout
 
 Examples:
   rpmsg-rpc-stress -t 1                 Runs the Multi-SrvMgr test with 1