host_bios: Add host_bios simple buffer example
authorSam Nelson <sam.nelson@ti.com>
Tue, 14 Feb 2017 02:27:01 +0000 (21:27 -0500)
committerSam Nelson <sam.nelson@ti.com>
Wed, 15 Feb 2017 03:22:40 +0000 (22:22 -0500)
Example demonstrate big size data buffers exchanged between cores

Signed-off-by: Sam Nelson <sam.nelson@ti.com>
28 files changed:
host_bios/simple_buffer_example/dsp/Dsp.cfg [new file with mode: 0644]
host_bios/simple_buffer_example/dsp/MainDsp.c [new file with mode: 0644]
host_bios/simple_buffer_example/dsp/Server.c [new file with mode: 0644]
host_bios/simple_buffer_example/dsp/Server.h [new file with mode: 0644]
host_bios/simple_buffer_example/dsp/makefile [new file with mode: 0644]
host_bios/simple_buffer_example/host/.makefile.swp [new file with mode: 0644]
host_bios/simple_buffer_example/host/App.c [new file with mode: 0644]
host_bios/simple_buffer_example/host/App.h [new file with mode: 0644]
host_bios/simple_buffer_example/host/Host.cfg [new file with mode: 0644]
host_bios/simple_buffer_example/host/MainHost.c [new file with mode: 0644]
host_bios/simple_buffer_example/host/evmK2E/board.cfg.xs [new file with mode: 0644]
host_bios/simple_buffer_example/host/evmK2G/board.cfg.xs [new file with mode: 0644]
host_bios/simple_buffer_example/host/evmK2H/board.cfg.xs [new file with mode: 0644]
host_bios/simple_buffer_example/host/evmK2K/board.cfg.xs [new file with mode: 0644]
host_bios/simple_buffer_example/host/idkAM572x/board.cfg.xs [new file with mode: 0644]
host_bios/simple_buffer_example/host/makefile [new file with mode: 0644]
host_bios/simple_buffer_example/makefile [new file with mode: 0644]
host_bios/simple_buffer_example/products.mak [new file with mode: 0644]
host_bios/simple_buffer_example/readme.txt [new file with mode: 0644]
host_bios/simple_buffer_example/shared/66AK2E/config.bld [new file with mode: 0644]
host_bios/simple_buffer_example/shared/66AK2G/config.bld [new file with mode: 0644]
host_bios/simple_buffer_example/shared/AppCommon.h [new file with mode: 0644]
host_bios/simple_buffer_example/shared/DRA7XX/config.bld [new file with mode: 0644]
host_bios/simple_buffer_example/shared/TCI6636/config.bld [new file with mode: 0644]
host_bios/simple_buffer_example/shared/TCI6638/config.bld [new file with mode: 0644]
host_bios/simple_buffer_example/shared/ipc.cfg.xs [new file with mode: 0644]
makefile [new file with mode: 0755]
readme.txt

diff --git a/host_bios/simple_buffer_example/dsp/Dsp.cfg b/host_bios/simple_buffer_example/dsp/Dsp.cfg
new file mode 100644 (file)
index 0000000..7521f7b
--- /dev/null
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) 2017 Texas Instruments Incorporated - http://www.ti.com
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ *  ======== Core0.cfg ========
+ */
+
+/* root of the configuration object model */
+var Program = xdc.useModule('xdc.cfg.Program');
+var cfgArgs = Program.build.cfgArgs;
+var RB = (cfgArgs.profile == "release" ? true : false);
+
+/* 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.sdo.utils.MultiProc');
+
+xdc.useModule('ti.sysbios.knl.Task');
+
+/*
+ *  ======== IPC Configuration ========
+ */
+xdc.global.SR0_cacheEnable = true;
+xdc.global.SR1_cacheEnable = true;
+xdc.global.procName = cfgArgs.procname;
+var ipc_cfg = xdc.loadCapsule("../shared/ipc.cfg.xs");
+
+/* make SR_0 non-cacheable */
+var Cache = xdc.useModule('ti.sysbios.family.c66.Cache');
+Cache.setMarMeta(ipc_cfg.SR0Mem.base, ipc_cfg.SR0Mem.len, Cache.Mar_ENABLE);
+
+/* make SR_1 cacheable */
+/* NOTE: The cache settings can be set independantly if partitioned correctly 
+    But if not correctly partitioned may result in issues */
+var Cache = xdc.useModule('ti.sysbios.family.c66.Cache');
+//Cache.setMarMeta(ipc_cfg.SR1Mem.base, ipc_cfg.SR1Mem.len, Cache.Mar_DISABLE);
+Cache.setMarMeta(ipc_cfg.SR1Mem.base, ipc_cfg.SR1Mem.len, Cache.Mar_ENABLE);
+
+/* select ipc libraries */
+var Build = xdc.useModule('ti.sdo.ipc.Build');
+Build.libType = (RB ? Build.LibType_NonInstrumented : Build.LibType_Debug);
+Build.assertsEnabled = (RB ? false : true);
+Build.logsEnabled = (RB ? false : true);
+
+/*
+ *  ======== SYS/BIOS Configuration ========
+ */
+
+/* no rts heap */
+Program.heap = 0;
+Program.argSize = 100;  /* minimum size */
+Program.stack = 0x1000;
+
+/* create a default heap */
+var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+var heapMemParams = new HeapMem.Params();
+heapMemParams.size = 0x8000;
+
+var Memory = xdc.useModule('xdc.runtime.Memory');
+Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+
+/* configure System module */
+var SysMin = xdc.useModule('xdc.runtime.SysMin');
+SysMin.bufSize = 0x1000;
+SysMin.flushAtExit = false;
+
+var System = xdc.useModule('xdc.runtime.System');
+System.SupportProxy = SysMin;
+
+var BIOS = xdc.useModule('ti.sysbios.BIOS');
+BIOS.libType = (RB ? BIOS.LibType_NonInstrumented : BIOS.LibType_Instrumented);
+// BIOS.libType = BIOS.LibType_Custom;
+// BIOS.libType = BIOS.LibType_Debug;
+
+/*
+ *  ======== Miscellaneous Configuration ========
+ */
+
+/* set default diags mask */
+var Diags = xdc.useModule('xdc.runtime.Diags');
+var Defaults = xdc.useModule('xdc.runtime.Defaults');
+
+Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
+Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
+Defaults.common$.diags_INTERNAL  = (RB ? Diags.ALWAYS_OFF : Diags.ALWAYS_ON);
+Defaults.common$.diags_ASSERT    = (RB ? Diags.ALWAYS_OFF : Diags.ALWAYS_ON);
+Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
+Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
+Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
+Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
+Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
+Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
+Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
+Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
+Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+
+/* 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
+);
+
+var Registry = xdc.useModule('xdc.runtime.Registry');
+Registry.common$.diags_ENTRY    = Diags.RUNTIME_OFF;
+Registry.common$.diags_EXIT     = Diags.RUNTIME_OFF;
+Registry.common$.diags_INFO     = Diags.RUNTIME_OFF;
+Registry.common$.diags_ANALYSIS = Diags.RUNTIME_OFF;
+Registry.common$.diags_USER1    = Diags.RUNTIME_OFF;
+
+/* create a logger instance */
+var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
+var loggerBufP = new LoggerBuf.Params();
+loggerBufP.numEntries = 256;  /* 256 entries = 8 KB of memory */
+loggerBufP.bufType = LoggerBuf.BufType_FIXED;
+
+var appLogger = LoggerBuf.create(loggerBufP);
+appLogger.instance.name = "AppLog";
+Defaults.common$.logger = appLogger;
diff --git a/host_bios/simple_buffer_example/dsp/MainDsp.c b/host_bios/simple_buffer_example/dsp/MainDsp.c
new file mode 100644 (file)
index 0000000..f247b4f
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+ * Copyright (c) 2017 Texas Instruments Incorporated - http://www.ti.com
+ * 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.
+ */
+
+/*
+ *  ======== MainCore0.c ========
+ */
+//#define CONSOLE_PRINT
+#ifdef CONSOLE_PRINT
+/* Standard header files */
+#include <stdio.h>
+#endif
+/* 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>
+
+/* package header files */
+#include <ti/ipc/Ipc.h>
+#include <ti/ipc/MultiProc.h>
+
+#include <ti/sysbios/BIOS.h>
+#include <ti/sysbios/knl/Task.h>
+
+/* local header files */
+#include "Server.h"
+
+/* private functions */
+Void Server_taskFxn(UArg arg0, UArg arg1);
+
+/*
+ *  ======== main ========
+ */
+int main(int argc, char* argv[])
+{
+    Error_Block     eb;
+    Task_Params     taskParams;
+
+    Log_print0(Diags_ENTRY, "main: -->");
+
+    /* create main thread (interrupts not enabled in main on BIOS) */
+    Task_Params_init(&taskParams);
+    taskParams.instance->name = "Server_taskFxn";
+    taskParams.arg0 = (UArg)argc;
+    taskParams.arg1 = (UArg)argv;
+    taskParams.stackSize = 0x1000;
+    Error_init(&eb);
+
+    Task_create(Server_taskFxn, &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);
+}
+
+/*
+ *  ======== Server_taskFxn ========
+ */
+Void Server_taskFxn(UArg arg0, UArg arg1)
+{
+    Int     status;
+    UInt16  remoteProcId;
+
+    Log_print0(Diags_INFO, "Server_taskFxn: -->");
+
+    /*
+     *  initialize the ipc layer
+     */
+    status = Ipc_start();
+
+    if (status < 0) {
+        System_abort("Ipc_start failed\n");
+    }
+
+    remoteProcId = MultiProc_getId("HOST");
+    if (remoteProcId == MultiProc_INVALIDID) {
+        System_abort("Improper MultiProc ID\n");
+    }
+    do {
+        status = Ipc_attach(remoteProcId);
+
+    } while ((status < 0) && (status == Ipc_E_NOTREADY));
+
+    Log_print0(Diags_INFO, "Server_taskFxn: ipc ready");
+
+    /* initialize the server module */
+    Server_init();
+    Diags_setMask("Server+F"); /* turn on some trace */
+
+    /* create a server instance */
+    status = Server_create();
+
+    if (status < 0) {
+        goto leave;
+    }
+
+    /* start the server */
+    status = Server_exec();
+
+    if (status < 0) {
+        goto leave;
+    }
+
+    /* finalize the server */
+    status = Server_delete();
+
+    if (status < 0) {
+        goto leave;
+    }
+
+    /* finalize the server module */
+    Server_exit();
+
+leave:
+    Log_print1(Diags_INFO, "Server_taskFxn: <-- status=%d", (IArg)status);
+#ifdef CONSOLE_PRINT 
+    if (status < 0)
+        printf("\n DSP: Test Failed \n");
+    else
+        printf("\n DSP: Test Passed \n");
+#endif
+    return;
+}
diff --git a/host_bios/simple_buffer_example/dsp/Server.c b/host_bios/simple_buffer_example/dsp/Server.c
new file mode 100644 (file)
index 0000000..2bb3cfb
--- /dev/null
@@ -0,0 +1,288 @@
+/*
+ * Copyright (c) 2017, 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.
+ */
+
+/*
+ *  ======== Server.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/Assert.h>
+#include <xdc/runtime/Diags.h>
+#include <xdc/runtime/Log.h>
+#include <xdc/runtime/Registry.h>
+
+#include <stdio.h>
+
+/* package header files */
+#include <ti/ipc/MessageQ.h>
+#include <ti/ipc/MultiProc.h>
+#include <ti/ipc/SharedRegion.h>
+#include <ti/ipc/HeapMemMP.h>
+#include <ti/sysbios/hal/Cache.h>
+#include <xdc/runtime/IHeap.h>
+#include <xdc/runtime/Memory.h>
+
+#include <ti/sysbios/BIOS.h>
+#include <ti/sysbios/knl/Task.h>
+
+/* local header files */
+#include "../shared/AppCommon.h"
+
+/* module header file */
+#include "Server.h"
+
+/* module structure */
+typedef struct {
+    UInt16              hostProcId;         // host processor id
+    MessageQ_Handle     slaveQue;           // created locally
+} Server_Module;
+
+/* private data */
+Registry_Desc               Registry_CURDESC;
+static Server_Module        Module;
+
+/*
+ *  ======== 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");
+}
+
+/*
+ *  ======== Server_create ========
+ */
+Int Server_create()
+{
+    Int                 status = 0;
+    MessageQ_Params     msgqParams;
+    char                msgqName[32];
+
+    /* enable some log events */
+    Diags_setMask(MODULE_NAME"+EXF");
+
+    /* create local message queue (inbound messages) */
+    MessageQ_Params_init(&msgqParams);
+    sprintf(msgqName, App_SlaveMsgQueName, MultiProc_getName(MultiProc_self()));
+    Module.slaveQue = MessageQ_create(msgqName, &msgqParams);
+
+    if (Module.slaveQue == NULL) {
+        status = -1;
+        goto leave;
+    }
+
+    Log_print0(Diags_INFO,"Server_create: server is ready");
+
+leave:
+    Log_print1(Diags_EXIT, "<-- Server_create: %d", (IArg)status);
+    return (status);
+}
+
+/*
+ *  ======== Server_exec ========
+ */
+Int Server_exec()
+{
+    Int                 status;
+    Bool                running = TRUE;
+    App_Msg *           msg;
+    MessageQ_QueueId    queId;
+    UInt16  regionId;
+    IHeap_Handle srHeap;
+    Memory_Stats stats;
+    HeapMemMP_ExtendedStats extStats;
+    Uint32 *bigDataPtr;
+    Int j;
+    UInt32 errorCount=0;
+
+    Log_print0(Diags_ENTRY | Diags_INFO, "--> Server_exec:");
+
+    while (running) {
+
+        /* wait for inbound message */
+        status = MessageQ_get(Module.slaveQue, (MessageQ_Msg *)&msg,
+            MessageQ_FOREVER);
+
+        if (status < 0) {
+            goto leave;
+        }
+        switch (msg->cmd) {
+        case App_CMD_SHARED_REGION_INIT:
+            regionId = msg->regionId;
+            /* NOTE: Alternatively the Shared region can be created here by using id, base, length right here */
+            Log_print1(Diags_INFO, "Server_taskFxn: SR_1 region Id=%d",msg->regionId);
+            srHeap = (IHeap_Handle)SharedRegion_getHeap(regionId);
+            if (srHeap != NULL)
+            {
+                HeapMemMP_getStats((HeapMemMP_Handle)srHeap, &stats);
+                Log_print3(Diags_INFO, "Server_taskFxn: SR_1 heap, totalSize=%d,totalFreeSize=%d,largestFreeSize=%d", (IArg)stats.totalSize, (IArg)stats.totalFreeSize, (IArg)stats.largestFreeSize);
+                HeapMemMP_getExtendedStats((HeapMemMP_Handle)srHeap, &extStats);
+                Log_print2(Diags_INFO, "Server_taskFxn: SR_1 heap, buf=0x%x,size=%d", (IArg)extStats.buf, (IArg)extStats.size);
+            }
+            else
+            {
+                Log_print0(Diags_INFO, "Server_taskFxn: SR_1, srHeap=NULL");
+            }    
+        break;
+
+        case App_CMD_BIGDATA:
+#ifdef DEBUG
+            Log_print1(Diags_ENTRY | Diags_INFO, "msg->cmd=App_CMD_BIGDATA,msg->ptr=0x%x",
+                (IArg)msg->u.bigDataBuffer.sharedPtr);
+#endif
+            if (msg->u.bigDataBuffer.sharedPtr) {
+                /* Translate Address to local address */
+                bigDataPtr =  SharedRegion_getPtr(msg->u.bigDataBuffer.sharedPtr);
+                
+                /* If enabled Invalidate Cache */
+                if (SharedRegion_isCacheEnabled(msg->regionId)) {
+                    Cache_inv(bigDataPtr,
+                        msg->u.bigDataBuffer.size, Cache_Type_ALL, TRUE);
+                }
+#ifdef DEBUG
+                /* print message from buffer */
+                Log_print1(Diags_INFO, " Received message %d", msg->id);
+                Log_print0(Diags_INFO, " First 8 bytes: ");
+                for ( j = 0; j < 8 && j < msg->u.bigDataBuffer.size/sizeof(uint32_t); j+=4)
+                    Log_print4(Diags_INFO, "0x%x, 0x%x, 0x%x, 0x%x",
+                        bigDataPtr[j], bigDataPtr[j+1], bigDataPtr[j+2], bigDataPtr[j+3]);
+                Log_print0(Diags_INFO, " Last 8 bytes: ");
+                for ( j = (msg->u.bigDataBuffer.size/sizeof(uint32_t))-8 ;
+                     j < msg->u.bigDataBuffer.size/sizeof(uint32_t); j+=4)
+                    Log_print4(Diags_INFO, "0x%x, 0x%x, 0x%x, 0x%x",
+                        bigDataPtr[j], bigDataPtr[j+1], bigDataPtr[j+2], bigDataPtr[j+3]);
+#endif
+                /* Check values to see expected results */
+                for( j=0; j < msg->u.bigDataBuffer.size/sizeof(uint32_t); j++) {
+                    if ( bigDataPtr[j] != (msg->id+j) ) {
+                        errorCount++;
+                    }
+                }
+
+                /* Fill new data */
+                for ( j=0; j < msg->u.bigDataBuffer.size/sizeof(uint32_t); j++)
+                    bigDataPtr[j] = msg->id + 10 +j;
+
+                /* Writeback if cache enabled */
+                if (SharedRegion_isCacheEnabled(msg->regionId)) {
+                    Cache_wb(bigDataPtr,
+                        msg->u.bigDataBuffer.size, Cache_Type_ALL, TRUE);
+                }
+                msg->u.bigDataBuffer.sharedPtr = SharedRegion_getSRPtr(bigDataPtr, msg->regionId);
+             }
+
+        break;
+
+        case App_CMD_SHUTDOWN:
+            running = FALSE;
+        break;
+
+        default:
+        break;
+        }
+
+        /* 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 */
+        MessageQ_put(queId, (MessageQ_Msg)msg);
+    } /* while (running) */
+
+leave:
+    /* Print error count if non-zero */
+    if (errorCount) {
+        Log_print1(Diags_INFO, "Server_exec: Error Count %d", errorCount);
+        status = -1;
+    }
+    else
+        Log_print0(Diags_INFO, "Server_exec: Data check clean");
+
+    Log_print1(Diags_EXIT, "<-- Server_exec: %d", (IArg)status);
+    return(status);
+}
+
+/*
+ *  ======== Server_delete ========
+ */
+
+Int Server_delete()
+{
+    Int         status;
+
+    Log_print0(Diags_ENTRY, "--> Server_delete:");
+
+    /* delete the video message queue */
+    status = MessageQ_delete(&Module.slaveQue);
+
+    if (status < 0) {
+        goto leave;
+    }
+
+leave:
+    if (status < 0) {
+        Log_error1("Server_finish: 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.
+     */
+}
diff --git a/host_bios/simple_buffer_example/dsp/Server.h b/host_bios/simple_buffer_example/dsp/Server.h
new file mode 100644 (file)
index 0000000..bf92284
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+#  Copyright (c) 2017 Texas Instruments Incorporated - http://www.ti.com
+ * 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.
+ */
+
+/*
+ *  ======== Server.h ========
+ */
+
+#ifndef Server__include
+#define Server__include
+
+#if defined (__cplusplus)
+extern "C" {
+#endif
+
+
+Void Server_init(Void);
+Void Server_exit(Void);
+
+Int Server_create(Void);
+Int Server_exec(Void);
+Int Server_delete(Void);
+
+
+#if defined (__cplusplus)
+}
+#endif /* defined (__cplusplus) */
+#endif /* Server__include */
diff --git a/host_bios/simple_buffer_example/dsp/makefile b/host_bios/simple_buffer_example/dsp/makefile
new file mode 100644 (file)
index 0000000..8b0b78c
--- /dev/null
@@ -0,0 +1,152 @@
+#
+#  Copyright (c) 2017 Texas Instruments Incorporated - http://www.ti.com
+#  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.
+#
+
+#
+#  ======== makefile ========
+#
+
+EXBASE = ..
+include $(EXBASE)/products.mak
+
+srcs = MainDsp.c Server.c
+objs = $(addprefix bin/$(PLATFORM)/$(PROFILE)/obj/,$(patsubst %.c,%.oe66,$(srcs)))
+CONFIG = bin/$(PROFILE)/configuro
+
+PKGPATH := $(BIOS_INSTALL_DIR)/packages
+PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
+PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
+
+-include $(addprefix bin/$(PLATFORM)/$(PROFILE)/obj/,$(patsubst %.c,%.oe66.dep,$(srcs)))
+
+.PRECIOUS: %/compiler.opt %/linker.cmd
+
+all: release
+
+debug:
+       echo Building debug
+       $(MAKE) PROFILE=debug server_dsp.x
+
+release:
+       $(MAKE) PROFILE=release server_dsp.x
+
+server_dsp.x: bin/$(PLATFORM)/$(PROFILE)/server_dsp.xe66
+       echo executing server_dsp.x
+
+bin/$(PLATFORM)/$(PROFILE)/server_dsp.xe66: $(objs) $(libs) $(CONFIG)/linker.cmd
+       @$(ECHO) "#"
+       @$(ECHO) "# Making $@ ..."
+       $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
+
+bin/$(PLATFORM)/$(PROFILE)/obj/%.oe66: %.c $(CONFIG)/compiler.opt
+       @$(ECHO) "#"
+       @$(ECHO) "# Making $@ ..."
+       $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
+
+%/compiler.opt: %/linker.cmd ;
+%/linker.cmd: Dsp.cfg ../shared/$(PLATFORM)/config.bld
+       @$(ECHO) "#"
+       @$(ECHO) "# Making $@ ..."
+       $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))" \
+            xdc.tools.configuro -o $(CONFIG) \
+            -t ti.targets.elf.C66 \
+            -c $(ti.targets.elf.C66) \
+            -p $(DSP_PLATFORM) \
+            -b ../shared/$(PLATFORM)/config.bld -r $(PROFILE) \
+            --cfgArgs "{ \
+                procnamelist: [$(PROC_NAME_LIST)], \
+                procname: \"$(PROC_DSP_NAME)\", \
+                profile: \"$(PROFILE)\" \
+            }" \
+            Dsp.cfg
+
+install:
+       @$(ECHO) "#"
+       @$(ECHO) "# Making $@ ..."
+       @$(MKDIR) $(EXEC_DIR)/debug
+       $(CP) bin/$(PLATFORM)/debug/server_dsp.xe66 $(EXEC_DIR)/debug
+       @$(MKDIR) $(EXEC_DIR)/release
+       $(CP) bin/$(PLATFORM)/release/server_dsp.xe66 $(EXEC_DIR)/release
+
+help:
+       @$(ECHO) "make                   # build executable"
+       @$(ECHO) "make clean             # clean everything"
+
+clean::
+       $(RMDIR) bin
+
+#  ======== install validation ========
+ifeq (install,$(MAKECMDGOALS))
+ifeq (,$(EXEC_DIR))
+$(error must specify EXEC_DIR)
+endif
+endif
+
+#  ======== toolchain macros ========
+CGTOOLS = $(ti.targets.elf.C66)
+
+CC = $(CGTOOLS)/bin/cl6x -c
+LD = $(CGTOOLS)/bin/cl6x -z
+
+CPPFLAGS =
+CFLAGS = -qq -pdsw225 -ppd=$@.dep -ppa $(CCPROFILE_$(PROFILE)) -@$(CONFIG)/compiler.opt -I.
+
+LDFLAGS = -w -q -c -m $(@D)/obj/$(@F).map
+LDLIBS = -l $(CGTOOLS)/lib/rts6600_elf.lib
+
+CCPROFILE_debug = -D_DEBUG_=1 --symdebug:dwarf
+CCPROFILE_release = -O2
+
+#  ======== standard macros ========
+ifneq (,$(wildcard $(XDC_INSTALL_DIR)/xdc.exe))
+    # use these on Windows
+    CP      = $(XDC_INSTALL_DIR)/bin/cp
+    ECHO    = $(XDC_INSTALL_DIR)/bin/echo
+    MKDIR   = $(XDC_INSTALL_DIR)/bin/mkdir -p
+    RM      = $(XDC_INSTALL_DIR)/bin/rm -f
+    RMDIR   = $(XDC_INSTALL_DIR)/bin/rm -rf
+else
+    # use these on Linux
+    CP      = cp
+    ECHO    = echo
+    MKDIR   = mkdir -p
+    RM      = rm -f
+    RMDIR   = rm -rf
+endif
+
+#  ======== create output directories ========
+ifneq (clean,$(MAKECMDGOALS))
+ifneq (,$(PROFILE))
+ifeq (,$(wildcard bin/$(PLATFORM)/$(PROFILE)/obj))
+    $(shell $(MKDIR) -p bin/$(PLATFORM)/$(PROFILE)/obj)
+endif
+endif
+endif
diff --git a/host_bios/simple_buffer_example/host/.makefile.swp b/host_bios/simple_buffer_example/host/.makefile.swp
new file mode 100644 (file)
index 0000000..47618e9
Binary files /dev/null and b/host_bios/simple_buffer_example/host/.makefile.swp differ
diff --git a/host_bios/simple_buffer_example/host/App.c b/host_bios/simple_buffer_example/host/App.c
new file mode 100644 (file)
index 0000000..3cac50b
--- /dev/null
@@ -0,0 +1,442 @@
+/*
+ * Copyright (c) 2017 Texas Instruments Incorporated - http://www.ti.com
+ * 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.
+ */
+
+/*
+ *  ======== App.c ========
+ */
+
+/* package header files */
+#include <xdc/std.h>
+#include <xdc/runtime/Diags.h>
+#include <xdc/runtime/Error.h>
+#include <xdc/runtime/IHeap.h>
+#include <xdc/runtime/Log.h>
+#include <xdc/runtime/Memory.h>
+#include <xdc/runtime/System.h>
+
+#include <ti/ipc/Ipc.h>
+#include <ti/ipc/MessageQ.h>
+#include <ti/ipc/MultiProc.h>
+#include <ti/ipc/SharedRegion.h>
+
+#include <ti/sysbios/heaps/HeapBuf.h>
+#include <ti/sysbios/knl/Task.h>
+#include <ti/ipc/HeapMemMP.h>
+#include <ti/sysbios/hal/Cache.h>
+
+/* local header files */
+#include "../shared/AppCommon.h"
+#include "App.h"
+
+/* round up the value 'size' to the next 'align' boundary */
+#define ROUNDUP(size, align) \
+    (UInt32)(((UInt32)(size) + ((UInt32)(align) - 1)) & ~((UInt32)(align) - 1))
+
+#define NUM_MSGS 4
+
+/* module structure */
+typedef struct {
+    MessageQ_Handle     hostQue;    // created locally
+    MessageQ_QueueId    slaveQue;   // opened remotely
+    UInt16              heapId;     // MessageQ heapId
+    HeapBuf_Handle      heap;       // message heap
+    Int                 msgSize;    // aligned size of message
+    Int                 poolSize;   // size of message pool
+    Ptr                 store;      // memory store for message pool
+} App_Module;
+
+/* private data */
+static App_Module Module;
+
+
+/*
+ *  ======== App_create ========
+ */
+
+Int App_create(UInt16 remoteProcId)
+{
+    Int                 status = 0;
+    Int                 align;
+    Error_Block         eb;
+    IHeap_Handle        srHeap;
+    HeapBuf_Params      heapParams;
+    MessageQ_Params     msgqParams;
+    char                msgqName[32];
+
+    Log_print0(Diags_INFO, "App_create: -->");
+
+    /* setting default values */
+    Module.hostQue = NULL;
+    Module.slaveQue = MessageQ_INVALIDMESSAGEQ;
+    Module.heapId = App_MsgHeapId;
+    Module.msgSize = 0;
+
+    /* compute message size to fill entire cache lines */
+    align = SharedRegion_getCacheLineSize(0);
+    Module.msgSize = ROUNDUP(sizeof(App_Msg), align);
+
+    /* compute message pool size */
+    Module.poolSize = Module.msgSize * NUM_MSGS;
+
+    /* acquire message pool memory */
+    srHeap = (IHeap_Handle)SharedRegion_getHeap(0);
+    Module.store = Memory_alloc(srHeap, Module.poolSize, align, NULL);
+
+    /* create a heap in shared memory for message pool */
+    HeapBuf_Params_init(&heapParams);
+    heapParams.blockSize = Module.msgSize;
+    heapParams.numBlocks = NUM_MSGS;
+    heapParams.bufSize = Module.poolSize;
+    heapParams.align = align;
+    heapParams.buf = Module.store;
+    Error_init(&eb);
+
+    Module.heap = HeapBuf_create(&heapParams, &eb);
+
+    if (Module.heap == NULL) {
+        Log_error0("App_create: failed creating message pool");
+        status = -1;
+        goto leave;
+    }
+
+    /* bind message pool to heapId */
+    MessageQ_registerHeap((Ptr)(Module.heap), App_MsgHeapId);
+
+    /* create local message queue (inbound messages) */
+    MessageQ_Params_init(&msgqParams);
+
+    Module.hostQue = MessageQ_create(NULL, &msgqParams);
+
+    if (Module.hostQue == NULL) {
+        Log_error0("App_create: failed creating MessageQ");
+        status = -1;
+        goto leave;
+    }
+
+    /* open the remote message queue */
+    System_sprintf(msgqName, App_SlaveMsgQueName,
+            MultiProc_getName(remoteProcId));
+
+    do {
+        status = MessageQ_open(msgqName, &Module.slaveQue);
+        Task_sleep(1);
+    } while (status == MessageQ_E_NOTFOUND);
+
+    if (status < 0) {
+        Log_error0("App_create: failed opening MessageQ");
+        goto leave;
+    }
+
+    Log_print0(Diags_INFO, "App_create: Host is ready");
+
+leave:
+    Log_print1(Diags_INFO, "App_create: <-- status=%d", (IArg)status);
+    return(status);
+}
+
+
+/*
+ *  ======== App_delete ========
+ */
+Int App_delete(Void)
+{
+    Int             status;
+    IHeap_Handle    srHeap;
+
+    Log_print0(Diags_INFO, "App_delete: -->");
+
+    /* close remote resources */
+    status = MessageQ_close(&Module.slaveQue);
+
+    if (status < 0) {
+        goto leave;
+    }
+
+    /* delete the host message queue */
+    status = MessageQ_delete(&Module.hostQue);
+
+    if (status < 0) {
+        goto leave;
+    }
+
+    /* unregister message pool heap */
+    MessageQ_unregisterHeap(App_MsgHeapId);
+
+    /* delete the message pool heap */
+    HeapBuf_delete(&Module.heap);
+
+    /* release message pool memory */
+    srHeap = (IHeap_Handle)SharedRegion_getHeap(0);
+    Memory_free(srHeap, Module.store, Module.poolSize);
+
+leave:
+    Log_print1(Diags_INFO, "App_delete: <-- status=%d", (IArg)status);
+    return(status);
+}
+
+
+/*
+ *  ======== App_exec ========
+ */
+Int App_exec(Void)
+{
+    Int         status;
+    App_Msg *   msg;
+    Uint32 *bigDataPtr;
+    SharedRegion_SRPtr bigDataSharedPtr;
+    Int16 i,j;
+    UInt16  regionId1;
+    Memory_Stats stats;
+    HeapMemMP_ExtendedStats extStats;
+    SharedRegion_Entry *pSrEntry;
+    HeapMemMP_Params heapMemMp_params;
+    HeapMemMP_Handle sr1Heap;
+    Uint16 regionId;
+    HeapMemMP_Handle srHeap;
+    UInt32 errorCount=0;
+    
+    Log_print0(Diags_INFO, "App_exec: -->");
+
+    // obtain information about heap (if any) in SR_1
+    regionId1 = SharedRegion_getIdByName("SR_1");
+    Log_print1(Diags_INFO, "App_taskFxn: SR_1 region Id=%d",regionId1);
+    sr1Heap = SharedRegion_getHeap(regionId1);
+    if (sr1Heap != NULL)
+    {
+        /* SR has predefined heap */
+        HeapMemMP_getStats((HeapMemMP_Handle)sr1Heap, &stats);
+        Log_print3(Diags_INFO, "App_taskFxn: SR_1 heap, totalSize=%d,totalFreeSize=%d,largestFreeSize=%d", (IArg)stats.totalSize, (IArg)stats.totalFreeSize, (IArg)stats.largestFreeSize);
+        HeapMemMP_getExtendedStats((HeapMemMP_Handle)sr1Heap, &extStats);
+        Log_print2(Diags_INFO, "App_taskFxn: SR_1 heap, buf=0x%x,size=%d", (IArg)extStats.buf, (IArg)extStats.size);
+        Log_error0("App_taskFxn: Error: Example assumes shared region without preconfigured heap");
+        status = -1;
+        goto leave;
+    }
+    else
+    {
+        Log_print0(Diags_INFO, "App_taskFxn: SR_1, sr1Heap=NULL");
+        
+        pSrEntry = SharedRegion_getEntryPtr(regionId1);
+        Log_print1(Diags_INFO, "App_taskFxn: SR_1, len=%d", pSrEntry->len);
+
+        // Create HeapMP at run-time
+        HeapMemMP_Params_init(&heapMemMp_params);
+        heapMemMp_params.name = "sr1HeapMemMp";
+        heapMemMp_params.sharedAddr = pSrEntry->base;
+        heapMemMp_params.sharedBufSize = ROUNDUP(pSrEntry->len, pSrEntry->cacheLineSize); 
+        heapMemMp_params.gate = NULL;
+        sr1Heap = HeapMemMP_create(&heapMemMp_params);
+        if (!sr1Heap) {
+            Log_error0("srHeap creation failed");
+            status = -1;
+            goto leave;
+        }
+        HeapMemMP_getStats((HeapMemMP_Handle)sr1Heap, &stats);
+        Log_print3(Diags_INFO, "App_taskFxn: SR_1 heap, totalSize=%d,totalFreeSize=%d,largestFreeSize=%d", (IArg)stats.totalSize, (IArg)stats.totalFreeSize, (IArg)stats.largestFreeSize);
+        HeapMemMP_getExtendedStats((HeapMemMP_Handle)sr1Heap, &extStats);
+        Log_print2(Diags_INFO, "App_taskFxn: SR_1 heap, buf=0x%x,size=%d", (IArg)extStats.buf, (IArg)extStats.size);
+    }
+
+    srHeap = sr1Heap;
+    regionId = regionId1;
+
+    /* fill process pipeline */
+    for (i = 1; i <= 3; i++) {
+        Log_print1(Diags_INFO, "App_exec: sending message %d", (IArg)i);
+
+        /* allocate message */
+        msg = (App_Msg *)MessageQ_alloc(Module.heapId, Module.msgSize);
+
+        if (msg == NULL) {
+            status = -1;
+            goto leave;
+        }
+
+        /* set the return address in the message header */
+        MessageQ_setReplyQueue(Module.hostQue, (MessageQ_Msg)msg);
+
+        if ( i == 1) {
+            /* fill in message payload */
+            msg->cmd = App_CMD_SHARED_REGION_INIT;
+            msg->id = i;
+            msg->regionId = regionId;
+            /* Passing the local shared memory address to the remote */
+            /* Actually this can be any allocated buffer for the used for the heap */
+            msg->u.sharedRegionInitCfg.base = (intptr_t)(pSrEntry->base);
+            msg->u.sharedRegionInitCfg.size = (UInt64)(pSrEntry->len);
+        } else {
+            /* fill in message payload */
+            msg->cmd = App_CMD_NOP;
+            msg->id = i;
+       }
+
+        /* send message */
+        MessageQ_put(Module.slaveQue, (MessageQ_Msg)msg);
+    }
+
+    /* process steady state (keep pipeline full) */
+    for (i = 4; i <= 18; i++) {
+
+        /* wait for return message */
+        status = MessageQ_get(Module.hostQue, (MessageQ_Msg *)&msg,
+            MessageQ_FOREVER);
+
+        if (status < 0) {
+            goto leave;
+        }
+
+        /* extract message payload */
+
+        if ((msg->cmd == App_CMD_BIGDATA) && (msg->u.bigDataBuffer.sharedPtr) ) {
+
+            /* Translate to local address */
+            bigDataPtr = (Uint32 *)SharedRegion_getPtr(msg->u.bigDataBuffer.sharedPtr);
+
+            /* If shared region is configured for cache enabled do cache operation */
+            if (SharedRegion_isCacheEnabled(msg->regionId)) {
+                Cache_inv(bigDataPtr,
+                    msg->u.bigDataBuffer.size, Cache_Type_ALL, TRUE);
+            }
+#ifdef DEBUG
+            /* print data from big data buffer */
+            Log_print1(Diags_INFO, " Received back buffer %d", msg->id);
+            Log_print0(Diags_INFO, " First 8 bytes: ");
+            for ( j = 0; j < 8 && j < msg->u.bigDataBuffer.size/sizeof(uint32_t); j+=4)
+                Log_print4(Diags_INFO, "0x%x, 0x%x, 0x%x, 0x%x",
+                    bigDataPtr[j], bigDataPtr[j+1], bigDataPtr[j+2], bigDataPtr[j+3]);
+            Log_print0(Diags_INFO, " Last 8 bytes: ");
+            for ( j = (msg->u.bigDataBuffer.size/sizeof(uint32_t))-8 ;
+                 j < msg->u.bigDataBuffer.size/sizeof(uint32_t); j+=4)
+                Log_print4(Diags_INFO, "0x%x, 0x%x, 0x%x, 0x%x",
+                    bigDataPtr[j], bigDataPtr[j+1], bigDataPtr[j+2], bigDataPtr[j+3]);
+#endif
+            /* Check values to see expected results */
+            for( j=0; j < msg->u.bigDataBuffer.size/sizeof(uint32_t); j++) {
+                if ( bigDataPtr[j] != (msg->id+10+j) ) {
+                    errorCount++;
+                }
+            }
+
+            /* Free big data buffer */
+            HeapMemMP_free(srHeap, bigDataPtr, msg->u.bigDataBuffer.size);
+        }
+
+        /* free the message */
+        MessageQ_free((MessageQ_Msg)msg);
+
+        Log_print1(Diags_INFO, "App_exec: message received, sending message %d",
+                (IArg)i);
+
+        /* allocate message */
+        msg = (App_Msg *)MessageQ_alloc(Module.heapId, Module.msgSize);
+
+        if (msg == NULL) {
+            status = -1;
+            goto leave;
+        }
+
+        /* set the return address in the message header */
+        MessageQ_setReplyQueue(Module.hostQue, (MessageQ_Msg)msg);
+
+        /* fill in message payload */
+        if (i == 18) {
+            /* Last message will tell the slave to shutdown */
+            msg->cmd = App_CMD_SHUTDOWN;
+            msg->id = i;
+        } else if (i < 15) {
+            msg->cmd = App_CMD_BIGDATA;
+            msg->id = i;
+
+            /* Allocate buffer from HeapMemMP */
+            bigDataPtr = (Uint32 *)(HeapMemMP_alloc(srHeap, BIGDATA_SIZE, BIGDATA_ALIGN));
+
+            if ( ! bigDataPtr ) {
+                status = -1;
+                goto leave;
+            }
+
+            /* Fill Big data buffer */
+            for(j=0; j< BIGDATA_SIZE/sizeof(uint32_t); j++) {
+               bigDataPtr[j] = j+i;
+            }
+
+            /* Cache write back data buffer */
+            if (SharedRegion_isCacheEnabled(regionId)) {
+                Cache_wb(bigDataPtr, BIGDATA_SIZE, Cache_Type_ALL, TRUE);
+            }
+
+            /* Translate Address to Shared address */
+            bigDataSharedPtr = SharedRegion_getSRPtr(bigDataPtr, regionId);
+
+            msg->u.bigDataBuffer.sharedPtr = bigDataSharedPtr;
+            msg->u.bigDataBuffer.size = BIGDATA_SIZE;
+            msg->regionId = regionId;
+        }
+        else {
+            msg->cmd = App_CMD_NOP;
+            msg->id = i;
+        }
+
+        /* send message */
+        MessageQ_put(Module.slaveQue, (MessageQ_Msg)msg);
+    }
+
+    /* drain process pipeline */
+    for (i = 1; i <= 3; i++) {
+        Log_print0(Diags_INFO, "App_exec: message received");
+
+        /* wait for return message */
+        status = MessageQ_get(Module.hostQue, (MessageQ_Msg *)&msg,
+            MessageQ_FOREVER);
+
+        if (status < 0) {
+            goto leave;
+        }
+
+        /* extract message payload */
+
+        /* free the message */
+        MessageQ_free((MessageQ_Msg)msg);
+    }
+
+leave:
+    /* Print error count if non-zero */
+    if (errorCount) {
+        Log_print1(Diags_INFO, "App_exec: Error Count %d", errorCount);
+        status = -1;
+    }
+    else
+        Log_print0(Diags_INFO, "App_exec: Data check clean");
+
+    Log_print1(Diags_INFO, "App_exec: <-- status=%d", (IArg)status);
+    return(status);
+}
diff --git a/host_bios/simple_buffer_example/host/App.h b/host_bios/simple_buffer_example/host/App.h
new file mode 100644 (file)
index 0000000..6ad8a6c
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2017 Texas Instruments Incorporated - http://www.ti.com
+ * 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.
+ */
+
+/*
+ *  ======== App.h ========
+ *
+ */
+
+#ifndef App__include
+#define App__include
+#if defined (__cplusplus)
+extern "C" {
+#endif
+
+Int App_create(UInt16 remoteProcId);
+Int App_delete();
+Int App_exec();
+
+
+#if defined (__cplusplus)
+}
+#endif /* defined (__cplusplus) */
+#endif /* App__include */
diff --git a/host_bios/simple_buffer_example/host/Host.cfg b/host_bios/simple_buffer_example/host/Host.cfg
new file mode 100644 (file)
index 0000000..35fcfd7
--- /dev/null
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2017 Texas Instruments Incorporated - http://www.ti.com
+ * 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.
+ */
+
+/*
+ *  ======== Host.cfg ========
+ */
+
+/* root of the configuration object model */
+var Program = xdc.useModule('xdc.cfg.Program');
+var cfgArgs = Program.build.cfgArgs;
+var RB = (cfgArgs.profile == "release" ? true : false);
+
+/* application uses the following modules and packages */
+xdc.useModule('xdc.runtime.Diags');
+xdc.useModule('xdc.runtime.Error');
+xdc.useModule('xdc.runtime.IHeap');
+xdc.useModule('xdc.runtime.Log');
+xdc.useModule('xdc.runtime.Memory');
+xdc.useModule('xdc.runtime.System');
+
+xdc.useModule('ti.sdo.ipc.Ipc');
+xdc.useModule('ti.sdo.ipc.MessageQ');
+xdc.useModule('ti.sdo.ipc.SharedRegion');
+xdc.useModule('ti.sdo.utils.MultiProc');
+
+xdc.useModule('ti.sysbios.heaps.HeapBuf');
+xdc.useModule('ti.sysbios.knl.Task');
+
+
+/*
+ *  ======== IPC Configuration ========
+ */
+xdc.global.SR0_cacheEnable = true;
+xdc.global.SR1_cacheEnable = true;
+xdc.global.procName = cfgArgs.procname;
+var ipc_cfg = xdc.loadCapsule("../shared/ipc.cfg.xs");
+
+/* select ipc libraries */
+var Build = xdc.useModule('ti.sdo.ipc.Build');
+Build.libType = (RB ? Build.LibType_NonInstrumented : Build.LibType_Debug);
+Build.assertsEnabled = (RB ? false : true);
+Build.logsEnabled = (RB ? false : true);
+
+/*
+ *  ======== SYS/BIOS Configuration ========
+ */
+
+/* no rts heap */
+Program.heap = 0;
+Program.argSize = 100;  /* minimum size */
+Program.stack = 0x1000;
+
+/* create a default heap */
+var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+var heapMemParams = new HeapMem.Params();
+heapMemParams.size = 0x8000;
+
+var Memory = xdc.useModule('xdc.runtime.Memory');
+Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+
+var SysMin = xdc.useModule('xdc.runtime.SysMin');
+SysMin.bufSize = 0x1000;
+SysMin.flushAtExit = false;
+
+var System = xdc.useModule('xdc.runtime.System');
+System.SupportProxy = SysMin;
+
+var BIOS = xdc.useModule('ti.sysbios.BIOS');
+BIOS.libType = (RB ? BIOS.LibType_NonInstrumented : BIOS.LibType_Instrumented);
+// BIOS.libType = BIOS.LibType_Custom;
+// BIOS.libType = BIOS.LibType_Debug;
+
+
+/*
+ *  ======== Miscellaneous Configuration ========
+ */
+
+/* set default diags mask */
+var Diags = xdc.useModule('xdc.runtime.Diags');
+var Defaults = xdc.useModule('xdc.runtime.Defaults');
+
+Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
+Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
+Defaults.common$.diags_INTERNAL  = (RB ? Diags.ALWAYS_OFF : Diags.ALWAYS_ON);
+Defaults.common$.diags_ASSERT    = (RB ? Diags.ALWAYS_OFF : Diags.ALWAYS_ON);
+Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
+Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
+Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
+Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
+Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
+Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
+Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
+Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
+Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+
+/* 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
+);
+
+var Registry = xdc.useModule('xdc.runtime.Registry');
+Registry.common$.diags_ENTRY    = Diags.RUNTIME_OFF;
+Registry.common$.diags_EXIT     = Diags.RUNTIME_OFF;
+Registry.common$.diags_INFO     = Diags.RUNTIME_OFF;
+Registry.common$.diags_ANALYSIS = Diags.RUNTIME_OFF;
+Registry.common$.diags_USER1    = Diags.RUNTIME_OFF;
+
+/* create a logger instance */
+var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
+var loggerBufP = new LoggerBuf.Params();
+loggerBufP.numEntries = 256;  /* 256 entries = 8 KB of memory */
+loggerBufP.bufType = LoggerBuf.BufType_FIXED;
+
+var appLogger = LoggerBuf.create(loggerBufP);
+appLogger.instance.name = "AppLog";
+Defaults.common$.logger = appLogger;
+
+var board_cfg = xdc.loadCapsule(cfgArgs.boardname+"/board.cfg.xs");
diff --git a/host_bios/simple_buffer_example/host/MainHost.c b/host_bios/simple_buffer_example/host/MainHost.c
new file mode 100644 (file)
index 0000000..ec09d67
--- /dev/null
@@ -0,0 +1,177 @@
+/*
+ * Copyright (c) 2017 Texas Instruments Incorporated - http://www.ti.com
+ * 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.
+ */
+
+/*
+ *  ======== Main[object Object].c ========
+ */
+
+/* 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>
+
+/* package header files */
+#include <ti/ipc/Ipc.h>
+#include <ti/ipc/MultiProc.h>
+
+#include <ti/sysbios/BIOS.h>
+#include <ti/sysbios/knl/Task.h>
+
+/* Board and UART header files */
+#include "ti/board/board.h"
+#include <ti/drv/uart/UART_stdio.h>
+
+/* local header files */
+#include "App.h"
+
+/* private functions */
+Void App_taskFxn(UArg arg0, UArg arg1);
+
+#define HOST_UART_PRINT
+#ifdef HOST_UART_PRINT
+#define host_printf(X) UART_printf(X)
+#else
+#define host_printf(X)
+#endif
+
+/*
+ *  ======== main ========
+ */
+int main(int argc, char* argv[])
+{
+    Error_Block     eb;
+    Task_Params     taskParams;
+
+    Log_print0(Diags_ENTRY, "main: -->");
+
+    /* create main thread (interrupts not enabled in main on BIOS) */
+    Task_Params_init(&taskParams);
+    taskParams.instance->name = "App_taskFxn";
+    taskParams.arg0 = (UArg)argc;
+    taskParams.arg1 = (UArg)argv;
+    taskParams.stackSize = 0x1000;
+    Error_init(&eb);
+
+    Task_create(App_taskFxn, &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);
+}
+
+/*
+ *  ======== App_taskFxn ========
+ */
+Void App_taskFxn(UArg arg0, UArg arg1)
+{
+    Int     status;
+    UInt16  remoteProcId;
+#ifdef HOST_UART_PRINT
+    Board_STATUS boardStatus;
+    Board_initCfg boardCfg;
+
+    boardCfg = BOARD_INIT_UNLOCK_MMR
+               | BOARD_INIT_UART_STDIO
+               | BOARD_INIT_MODULE_CLOCK
+#if !defined(k2e) && !defined(C6678)
+               | BOARD_INIT_PINMUX_CONFIG
+#endif
+    ;
+   boardStatus = Board_init(boardCfg);
+    if (boardStatus < 0) {
+        status = -1;
+        goto leave;
+    }
+#endif
+    Log_print0(Diags_INFO, "App_taskFxn: -->");
+
+    /*
+     *  initialize the ipc layer
+     */
+    status = Ipc_start();
+
+    if (status < 0) {
+        System_abort("Ipc_start failed\n");
+    }
+
+    remoteProcId = MultiProc_getId(SERVER);
+    if (remoteProcId == MultiProc_INVALIDID) {
+        System_abort("Improper MultiProc ID\n");
+    }
+    do {
+        status = Ipc_attach(remoteProcId);
+
+    } while ((status < 0) && (status == Ipc_E_NOTREADY));
+
+    Log_print0(Diags_INFO, "App_taskFxn: ipc ready");
+
+    /* application create phase */
+    status = App_create(remoteProcId);
+
+    if (status < 0) {
+        goto leave;
+    }
+
+    /* application execute phase */
+    status = App_exec();
+
+    if (status < 0) {
+        goto leave;
+    }
+
+    /* application delete phase */
+    status = App_delete();
+
+    if (status < 0) {
+        goto leave;
+    }
+
+leave:
+    Log_print1(Diags_INFO, "App_taskFxn: <-- status=%d", (IArg)status);
+
+#ifdef HOST_UART_PRINT
+    if (status < 0)
+        host_printf("\n Host: Test Failed \n");
+    else
+        host_printf("\n Host: Test Passed \n");
+#endif
+    return;
+}
diff --git a/host_bios/simple_buffer_example/host/evmK2E/board.cfg.xs b/host_bios/simple_buffer_example/host/evmK2E/board.cfg.xs
new file mode 100644 (file)
index 0000000..286152a
--- /dev/null
@@ -0,0 +1,68 @@
+var CpIntc =   xdc.useModule('ti.sysbios.family.arm.a15.tci66xx.CpIntc');
+
+var devType = "k2e"
+
+/* Load the OSAL package */ 
+var osType = "tirtos"
+var Osal = xdc.useModule('ti.osal.Settings');
+Osal.osType = osType;
+Osal.socType = devType;
+
+/*use CSL package*/
+var Csl = xdc.loadPackage('ti.csl');
+Csl.Settings.deviceType = devType;
+
+/* Load the uart package */
+var Uart = xdc.loadPackage('ti.drv.uart');
+Uart.Settings.socType = devType;
+
+/* Load the I2C package */
+var I2c                         = xdc.loadPackage('ti.drv.i2c');
+I2c.Settings.socType = devType;
+
+/* Load the Board package and set the board name */
+var Board = xdc.loadPackage('ti.board');
+Board.Settings.boardName = "evmK2E";
+
+/* ================ Cache configuration ================ */
+var Cache  = xdc.useModule('ti.sysbios.family.arm.a15.Cache');
+
+/* Enable the cache */
+Cache.enableCache = true;
+
+/* ================ MMU configuration ================ */
+var Mmu = xdc.useModule('ti.sysbios.family.arm.a15.Mmu');
+
+/* Enable the MMU (Required for L1/L2 data caching) */
+Mmu.enableMMU = true;
+
+/* descriptor attribute structure */
+var peripheralAttrs = new Mmu.DescriptorAttrs();
+
+Mmu.initDescAttrsMeta(peripheralAttrs);
+
+peripheralAttrs.type = Mmu.DescriptorType_BLOCK;  // BLOCK descriptor
+peripheralAttrs.noExecute = true;                 // not executable
+peripheralAttrs.accPerm = 0;                      // read/write at PL1
+peripheralAttrs.attrIndx = 1;                     // MAIR0 Byte1 describes
+                                                      // memory attributes for
+                                                      // each BLOCK MMU entry
+
+/* Define the base address of the 2 MB page
+   the peripheral resides in.
+*/
+var peripheralBaseAddrs = [ 
+  { base: 0x4ae00000, size: 0x00100000 },  // PRM
+  { base: 0x02530C00, size: 0x00000400 },  // UART 0 regs
+  { base: 0x02531000, size: 0x00000400 }   // UART 1 regs
+];
+
+/* Configure the corresponding MMU page descriptor accordingly */
+for (var i =0; i < peripheralBaseAddrs.length; i++)
+{
+  for (var j = 0; j < peripheralBaseAddrs[i].size; j += 0x200000)
+  {
+      var addr = peripheralBaseAddrs[i].base + j;
+      Mmu.setSecondLevelDescMeta(addr, addr, peripheralAttrs);
+  }
+}
diff --git a/host_bios/simple_buffer_example/host/evmK2G/board.cfg.xs b/host_bios/simple_buffer_example/host/evmK2G/board.cfg.xs
new file mode 100644 (file)
index 0000000..8ae962c
--- /dev/null
@@ -0,0 +1,68 @@
+var CpIntc =   xdc.useModule('ti.sysbios.family.arm.a15.tci66xx.CpIntc');
+
+var devType = "k2g"
+
+/* Load the OSAL package */ 
+var osType = "tirtos"
+var Osal = xdc.useModule('ti.osal.Settings');
+Osal.osType = osType;
+Osal.socType = devType;
+
+/*use CSL package*/
+var Csl = xdc.loadPackage('ti.csl');
+Csl.Settings.deviceType = devType;
+
+/* Load the uart package */
+var Uart = xdc.loadPackage('ti.drv.uart');
+Uart.Settings.socType = devType;
+
+/* Load the I2C package */
+var I2c                         = xdc.loadPackage('ti.drv.i2c');
+I2c.Settings.socType = devType;
+
+/* Load the Board package and set the board name */
+var Board = xdc.loadPackage('ti.board');
+Board.Settings.boardName = "evmK2G";
+
+/* ================ Cache configuration ================ */
+var Cache  = xdc.useModule('ti.sysbios.family.arm.a15.Cache');
+
+/* Enable the cache */
+Cache.enableCache = true;
+
+/* ================ MMU configuration ================ */
+var Mmu = xdc.useModule('ti.sysbios.family.arm.a15.Mmu');
+
+/* Enable the MMU (Required for L1/L2 data caching) */
+Mmu.enableMMU = true;
+
+/* descriptor attribute structure */
+var peripheralAttrs = new Mmu.DescriptorAttrs();
+
+Mmu.initDescAttrsMeta(peripheralAttrs);
+
+peripheralAttrs.type = Mmu.DescriptorType_BLOCK;  // BLOCK descriptor
+peripheralAttrs.noExecute = true;                 // not executable
+peripheralAttrs.accPerm = 0;                      // read/write at PL1
+peripheralAttrs.attrIndx = 1;                     // MAIR0 Byte1 describes
+                                                      // memory attributes for
+                                                      // each BLOCK MMU entry
+
+/* Define the base address of the 2 MB page
+   the peripheral resides in.
+*/
+var peripheralBaseAddrs = [ 
+  { base: 0x4ae00000, size: 0x00100000 },  // PRM
+  { base: 0x02530C00, size: 0x00000400 },  // UART 0 regs
+  { base: 0x02531000, size: 0x00000400 }   // UART 1 regs
+];
+
+/* Configure the corresponding MMU page descriptor accordingly */
+for (var i =0; i < peripheralBaseAddrs.length; i++)
+{
+  for (var j = 0; j < peripheralBaseAddrs[i].size; j += 0x200000)
+  {
+      var addr = peripheralBaseAddrs[i].base + j;
+      Mmu.setSecondLevelDescMeta(addr, addr, peripheralAttrs);
+  }
+}
diff --git a/host_bios/simple_buffer_example/host/evmK2H/board.cfg.xs b/host_bios/simple_buffer_example/host/evmK2H/board.cfg.xs
new file mode 100644 (file)
index 0000000..9b41372
--- /dev/null
@@ -0,0 +1,68 @@
+var CpIntc =   xdc.useModule('ti.sysbios.family.arm.a15.tci66xx.CpIntc');
+
+var devType = "k2h"
+
+/* Load the OSAL package */ 
+var osType = "tirtos"
+var Osal = xdc.useModule('ti.osal.Settings');
+Osal.osType = osType;
+Osal.socType = devType;
+
+/*use CSL package*/
+var Csl = xdc.loadPackage('ti.csl');
+Csl.Settings.deviceType = devType;
+
+/* Load the uart package */
+var Uart = xdc.loadPackage('ti.drv.uart');
+Uart.Settings.socType = devType;
+
+/* Load the I2C package */
+var I2c                         = xdc.loadPackage('ti.drv.i2c');
+I2c.Settings.socType = devType;
+
+/* Load the Board package and set the board name */
+var Board = xdc.loadPackage('ti.board');
+Board.Settings.boardName = "evmK2H";
+
+/* ================ Cache configuration ================ */
+var Cache  = xdc.useModule('ti.sysbios.family.arm.a15.Cache');
+
+/* Enable the cache */
+Cache.enableCache = true;
+
+/* ================ MMU configuration ================ */
+var Mmu = xdc.useModule('ti.sysbios.family.arm.a15.Mmu');
+
+/* Enable the MMU (Required for L1/L2 data caching) */
+Mmu.enableMMU = true;
+
+/* descriptor attribute structure */
+var peripheralAttrs = new Mmu.DescriptorAttrs();
+
+Mmu.initDescAttrsMeta(peripheralAttrs);
+
+peripheralAttrs.type = Mmu.DescriptorType_BLOCK;  // BLOCK descriptor
+peripheralAttrs.noExecute = true;                 // not executable
+peripheralAttrs.accPerm = 0;                      // read/write at PL1
+peripheralAttrs.attrIndx = 1;                     // MAIR0 Byte1 describes
+                                                      // memory attributes for
+                                                      // each BLOCK MMU entry
+
+/* Define the base address of the 2 MB page
+   the peripheral resides in.
+*/
+var peripheralBaseAddrs = [ 
+  { base: 0x4ae00000, size: 0x00100000 },  // PRM
+  { base: 0x02530C00, size: 0x00000400 },  // UART 0 regs
+  { base: 0x02531000, size: 0x00000400 }   // UART 1 regs
+];
+
+/* Configure the corresponding MMU page descriptor accordingly */
+for (var i =0; i < peripheralBaseAddrs.length; i++)
+{
+  for (var j = 0; j < peripheralBaseAddrs[i].size; j += 0x200000)
+  {
+      var addr = peripheralBaseAddrs[i].base + j;
+      Mmu.setSecondLevelDescMeta(addr, addr, peripheralAttrs);
+  }
+}
diff --git a/host_bios/simple_buffer_example/host/evmK2K/board.cfg.xs b/host_bios/simple_buffer_example/host/evmK2K/board.cfg.xs
new file mode 100644 (file)
index 0000000..54ddc72
--- /dev/null
@@ -0,0 +1,68 @@
+var CpIntc =   xdc.useModule('ti.sysbios.family.arm.a15.tci66xx.CpIntc');
+
+var devType = "k2k"
+
+/* Load the OSAL package */ 
+var osType = "tirtos"
+var Osal = xdc.useModule('ti.osal.Settings');
+Osal.osType = osType;
+Osal.socType = devType;
+
+/*use CSL package*/
+var Csl = xdc.loadPackage('ti.csl');
+Csl.Settings.deviceType = devType;
+
+/* Load the uart package */
+var Uart = xdc.loadPackage('ti.drv.uart');
+Uart.Settings.socType = devType;
+
+/* Load the I2C package */
+var I2c                         = xdc.loadPackage('ti.drv.i2c');
+I2c.Settings.socType = devType;
+
+/* Load the Board package and set the board name */
+var Board = xdc.loadPackage('ti.board');
+Board.Settings.boardName = "evmK2K";
+
+/* ================ Cache configuration ================ */
+var Cache  = xdc.useModule('ti.sysbios.family.arm.a15.Cache');
+
+/* Enable the cache */
+Cache.enableCache = true;
+
+/* ================ MMU configuration ================ */
+var Mmu = xdc.useModule('ti.sysbios.family.arm.a15.Mmu');
+
+/* Enable the MMU (Required for L1/L2 data caching) */
+Mmu.enableMMU = true;
+
+/* descriptor attribute structure */
+var peripheralAttrs = new Mmu.DescriptorAttrs();
+
+Mmu.initDescAttrsMeta(peripheralAttrs);
+
+peripheralAttrs.type = Mmu.DescriptorType_BLOCK;  // BLOCK descriptor
+peripheralAttrs.noExecute = true;                 // not executable
+peripheralAttrs.accPerm = 0;                      // read/write at PL1
+peripheralAttrs.attrIndx = 1;                     // MAIR0 Byte1 describes
+                                                      // memory attributes for
+                                                      // each BLOCK MMU entry
+
+/* Define the base address of the 2 MB page
+   the peripheral resides in.
+*/
+var peripheralBaseAddrs = [ 
+  { base: 0x4ae00000, size: 0x00100000 },  // PRM
+  { base: 0x02530C00, size: 0x00000400 },  // UART 0 regs
+  { base: 0x02531000, size: 0x00000400 }   // UART 1 regs
+];
+
+/* Configure the corresponding MMU page descriptor accordingly */
+for (var i =0; i < peripheralBaseAddrs.length; i++)
+{
+  for (var j = 0; j < peripheralBaseAddrs[i].size; j += 0x200000)
+  {
+      var addr = peripheralBaseAddrs[i].base + j;
+      Mmu.setSecondLevelDescMeta(addr, addr, peripheralAttrs);
+  }
+}
diff --git a/host_bios/simple_buffer_example/host/idkAM572x/board.cfg.xs b/host_bios/simple_buffer_example/host/idkAM572x/board.cfg.xs
new file mode 100644 (file)
index 0000000..7469134
--- /dev/null
@@ -0,0 +1,54 @@
+
+var socType = "am572x";
+
+/*use CSL package*/
+var Csl = xdc.loadPackage('ti.csl');
+Csl.Settings.deviceType = socType;
+
+/* Load the osal package -- required by board & interrupt example */
+var osType = "tirtos"
+var Osal = xdc.loadPackage('ti.osal');
+Osal.Settings.osType = osType;
+
+/* Load the I2C package  - required by board */
+var I2c = xdc.loadPackage('ti.drv.i2c');
+I2c.Settings.socType = socType;
+
+/* Load the uart package -- required by board */
+var Uart = xdc.loadPackage('ti.drv.uart');
+Uart.Settings.socType = socType;
+
+/* Load the Board package and set the board name */
+var Board = xdc.loadPackage('ti.board');
+Board.Settings.boardName = "idkAM572x";
+
+/* ================ Cache configuration ================ */
+var Cache  = xdc.useModule('ti.sysbios.family.arm.a15.Cache');
+
+/* Enable the cache */
+Cache.enableCache = true;
+
+/* ================ MMU configuration ================ */
+var Mmu = xdc.useModule('ti.sysbios.family.arm.a15.Mmu');
+
+/* Enable the MMU (Required for L1 data caching) */
+Mmu.enableMMU = true;
+
+var attrs = new Mmu.DescriptorAttrs();
+Mmu.initDescAttrsMeta(attrs);
+attrs.type = Mmu.DescriptorType_BLOCK;
+attrs.noExecute = true;
+attrs.accPerm = 0;       // R/W at PL1
+attrs.attrIndx = 3;       // Use MAIR0 Byte2
+Mmu.setMAIRMeta(3, 0x04);
+Mmu.setSecondLevelDescMeta(0x43200000, 0x43200000, attrs);
+
+/* Set IO Delay configuration areas as non-cache */
+attrs.attrIndx = 1;
+Mmu.setSecondLevelDescMeta(0x4844a000, 0x4844a000, attrs);
+Mmu.setSecondLevelDescMeta(0x4ae07d00, 0x4ae07d00, attrs);
+
+/* ================ Memory sections configuration ================ */
+Program.sectMap["BOARD_IO_DELAY_DATA"] = "OCMC_RAM1";
+Program.sectMap["BOARD_IO_DELAY_CODE"] = "OCMC_RAM1";
+
diff --git a/host_bios/simple_buffer_example/host/makefile b/host_bios/simple_buffer_example/host/makefile
new file mode 100644 (file)
index 0000000..0ecc120
--- /dev/null
@@ -0,0 +1,156 @@
+#
+#  Copyright (c) 2012-2014 Texas Instruments Incorporated - http://www.ti.com
+#  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.
+#
+
+#
+#  ======== makefile ========
+#
+
+EXBASE = ..
+include $(EXBASE)/products.mak
+
+srcs = MainHost.c App.c
+objs = $(addprefix bin/$(PLATFORM)/$(PROFILE)/obj/,$(patsubst %.c,%.oa15fg,$(srcs)))
+CONFIG = bin/$(PLATFORM)/$(PROFILE)/configuro
+
+-include $(addprefix bin/$(PLATFORM)/$(PROFILE)/obj/,$(patsubst %.c,%.oa15fg.dep,$(srcs)))
+
+.PRECIOUS: %/compiler.opt %/linker.cmd
+
+all: release
+#all: debug
+
+release:
+       $(MAKE) PROFILE=release app_host.x
+
+debug:
+       $(MAKE) PROFILE=debug app_host.x
+
+app_host.x: bin/$(PLATFORM)/$(PROFILE)/app_host.xa15fg
+bin/$(PLATFORM)/$(PROFILE)/app_host.xa15fg: $(objs) $(libs) $(CONFIG)/linker.cmd
+       @$(ECHO) "#"
+       @$(ECHO) "# Making $@ ..."
+       $(LD) -o $@ $(LDFLAGS) $(objs) $(libs) -Wl,-T,$(CONFIG)/linker.cmd \
+               -lgcc -lc -lm -lnosys $(LDLIBS)
+
+bin/$(PLATFORM)/$(PROFILE)/obj/%.oa15fg: %.c $(CONFIG)/compiler.opt
+       @$(ECHO) "#"
+       @$(ECHO) "# Making $@ ..."
+       $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
+
+%/compiler.opt: %/linker.cmd ;
+%/linker.cmd: Host.cfg ../shared/$(PLATFORM)/config.bld
+       @$(ECHO) "#"
+       @$(ECHO) "# Making $@ ..."
+       $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))" \
+            xdc.tools.configuro -o $(CONFIG) \
+            -t gnu.targets.arm.A15F \
+            -c $(gnu.targets.arm.A15F) \
+            -p $(HOST_PLATFORM) \
+            -b ../shared/$(PLATFORM)/config.bld -r release \
+            --cfgArgs "{ \
+                procnamelist: [$(PROC_NAME_LIST)], \
+                procname: \"$(PROC_HOST_NAME)\", \
+                boardname: \"$(BOARD_NAME)\", \
+                profile: \"$(PROFILE)\" \
+            }" \
+           Host.cfg
+
+install:
+       @$(ECHO) "#"
+       @$(ECHO) "# Making $@ ..."
+#      @$(MKDIR) $(EXEC_DIR)/debug
+#      $(CP) bin/$(PLATFORM)/debug/app_host.xa15fg $(EXEC_DIR)/debug
+       @$(MKDIR) $(EXEC_DIR)/release
+       $(CP) bin/$(PLATFORM)/release/app_host.xa15fg $(EXEC_DIR)/release
+
+help:
+       @$(ECHO) "make                   # build executable"
+       @$(ECHO) "make clean             # clean everything"
+
+clean::
+       $(RMDIR) bin
+
+PKGPATH := $(BIOS_INSTALL_DIR)/packages
+PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
+PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
+PKGPATH := $(PKGPATH)+$(PDK_INSTALL_DIR)
+
+
+#  ======== install validation ========
+ifeq (install,$(MAKECMDGOALS))
+ifeq (,$(EXEC_DIR))
+$(error must specify EXEC_DIR)
+endif
+endif
+
+#  ======== toolchain macros ========
+CC = $(gnu.targets.arm.A15F)/bin/arm-none-eabi-gcc -c -MD -MF $@.dep
+LD = $(gnu.targets.arm.A15F)/bin/arm-none-eabi-gcc
+
+CPPFLAGS = -Dfar= -D__DYNAMIC_REENT__
+CFLAGS = -Wall -Wunused -Wunknown-pragmas -ffunction-sections -fdata-sections $(CCPROFILE_$(PROFILE)) @$(CONFIG)/compiler.opt -I.
+CFLAGS += -DSERVER=\"$(SERVER)\"
+
+LDFLAGS = $(LDPROFILE_$(PROFILE)) -mfloat-abi=hard -nostartfiles -Wl,-static -Wl,--gc-sections -Wl,-Map=$(@D)/obj/$(@F).map
+LDLIBS = -L$(BIOS_INSTALL_DIR)/packages/gnu/targets/arm/libs/install-native/arm-none-eabi/lib/fpu
+
+CCPROFILE_debug = -g -ggdb -D_DEBUG_=1
+CCPROFILE_release = -O2
+
+LDPROFILE_debug = -g -ggdb
+LDPROFILE_release =
+
+#  ======== standard macros ========
+ifneq (,$(wildcard $(XDC_INSTALL_DIR)/bin/echo.exe))
+    # use these on Windows
+    CP      = $(XDC_INSTALL_DIR)/bin/cp
+    ECHO    = $(XDC_INSTALL_DIR)/bin/echo
+    MKDIR   = $(XDC_INSTALL_DIR)/bin/mkdir -p
+    RM      = $(XDC_INSTALL_DIR)/bin/rm -f
+    RMDIR   = $(XDC_INSTALL_DIR)/bin/rm -rf
+else
+    # use these on Linux
+    CP      = cp
+    ECHO    = echo
+    MKDIR   = mkdir -p
+    RM      = rm -f
+    RMDIR   = rm -rf
+endif
+
+#  ======== create output directories ========
+ifneq (clean,$(MAKECMDGOALS))
+ifneq (,$(PROFILE))
+ifeq (,$(wildcard bin/$(PROFILE)/obj))
+    $(shell $(MKDIR) -p bin/$(PLATFORM)/$(PROFILE)/obj)
+endif
+endif
+endif
diff --git a/host_bios/simple_buffer_example/makefile b/host_bios/simple_buffer_example/makefile
new file mode 100644 (file)
index 0000000..8c5127a
--- /dev/null
@@ -0,0 +1,157 @@
+#
+#  Copyright (c) 2017 Texas Instruments Incorporated - http://www.ti.com
+#  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.
+#
+
+#
+#  ======== makefile ========
+#
+
+# edit PROCLIST list to control how many executables to build
+
+ifeq ($(PLATFORM),DRA7XX)
+PROCLIST = host dsp
+#PROCLIST = host ipu 
+PROC_HOST_NAME = "HOST"
+PROC_DSP_NAME = "DSP1"
+#PROC_IPU_NAME = "IPU1"
+PROC_NAME_LIST = "\\\"$(PROC_HOST_NAME)\\\", \\\"$(PROC_DSP_NAME)\\\""
+#PROC_NAME_LIST = "\\\"$(PROC_HOST_NAME)\\\", \\\"$(PROC_IPU_NAME)\\\""
+DSP_PLATFORM = ti.platforms.evmDRA7XX:dsp
+HOST_PLATFORM = ti.platforms.evmDRA7XX:host
+IPU_PLATFORM = ti.platforms.evmDRA7XX:ipu
+SERVER = "$(PROC_DSP_NAME)"
+BOARD_NAME = "idkAM572x"
+else ifeq ($(PLATFORM),TCI6638)
+PROCLIST = host dsp
+PROC_HOST_NAME = "HOST"
+PROC_DSP_NAME = "CORE0"
+PROC_NAME_LIST = "\\\"$(PROC_HOST_NAME)\\\", \\\"$(PROC_DSP_NAME)\\\""
+DSP_PLATFORM = ti.platforms.evmTCI6638K2K:dsp
+HOST_PLATFORM = ti.platforms.evmTCI6638K2K:host
+SERVER = "$(PROC_DSP_NAME)"
+BOARD_NAME = "evmK2K"
+else ifeq ($(PLATFORM),TCI6636)
+PROCLIST = host dsp
+PROC_HOST_NAME = "HOST"
+PROC_DSP_NAME = "CORE0"
+PROC_NAME_LIST = "\\\"$(PROC_HOST_NAME)\\\", \\\"$(PROC_DSP_NAME)\\\""
+DSP_PLATFORM = ti.platforms.evmTCI6636K2H:dsp
+HOST_PLATFORM = ti.platforms.evmTCI6636K2H:host
+SERVER = "$(PROC_DSP_NAME)"
+BOARD_NAME = "evmK2H"
+else ifeq ($(PLATFORM),66AK2G)
+PROCLIST = host dsp
+PROC_HOST_NAME = "HOST"
+PROC_DSP_NAME = "CORE0"
+PROC_NAME_LIST = "\\\"$(PROC_HOST_NAME)\\\", \\\"$(PROC_DSP_NAME)\\\""
+DSP_PLATFORM = ti.platforms.evmTCI66AK2G02:dsp
+HOST_PLATFORM = ti.platforms.evmTCI66AK2G02:host
+BOARD_NAME = "evmK2G"
+SERVER = "$(PROC_DSP_NAME)"
+else ifeq ($(PLATFORM),66AK2E)
+PROCLIST = host dsp
+PROC_HOST_NAME = "HOST"
+PROC_DSP_NAME = "CORE0"
+PROC_NAME_LIST = "\\\"$(PROC_HOST_NAME)\\\", \\\"$(PROC_DSP_NAME)\\\""
+DSP_PLATFORM = ti.platforms.evmC66AK2E:dsp
+HOST_PLATFORM = ti.platforms.evmC66AK2E:host
+BOARD_NAME = "evmK2E"
+SERVER = "$(PROC_DSP_NAME)"
+endif
+
+EXBASE = .
+include $(EXBASE)/products.mak
+.PHONY: $(PROCLIST)
+
+.PHONY: install
+
+all: $(PROCLIST)
+
+$(PROCLIST):
+       @$(ECHO) "#"
+       @$(ECHO) "# Making $@ ..."
+       $(MAKE) -C $@ PROCLIST="$(PROCLIST)" \
+               DSP_PLATFORM=$(DSP_PLATFORM) \
+               HOST_PLATFORM=$(HOST_PLATFORM) \
+               PROC_HOST_NAME="$(PROC_HOST_NAME)" \
+               PROC_DSP_NAME="$(PROC_DSP_NAME)" \
+               PROC_NAME_LIST=$(PROC_NAME_LIST) \
+               BOARD_NAME="$(BOARD_NAME)" \
+               SERVER="$(SERVER)"
+
+#              IPU_PLATFORM=$(IPU_PLATFORM) \
+#              PROC_IPU_NAME="$(PROC_IPU_NAME)" \
+
+help:
+       @$(ECHO) "make                                  # build executables"
+       @$(ECHO) "make clean                            # clean everything"
+       @$(ECHO) "make install EXEC_DIR=/.../testbench  # install folder"
+
+# setup install goal
+ifeq (install,$(MAKECMDGOALS))
+ifeq (,$(EXEC_DIR))
+EXEC_DIR=$(CURDIR)/install
+endif
+override EXEC_DIR:=$(EXEC_DIR)/simple_buffer_example
+endif
+
+install: $(PROCLIST) $(addsuffix _install,$(PROCLIST))
+$(addsuffix _install,$(PROCLIST)):
+       @$(ECHO) "#"
+       @$(ECHO) "# Making $@ ..."
+       @$(MKDIR) $(EXEC_DIR)/debug
+       @$(MKDIR) $(EXEC_DIR)/release
+       $(MAKE) -C $(subst _install,,$@) EXEC_DIR=$(EXEC_DIR) install
+
+clean: $(addsuffix _clean,$(PROCLIST))
+       $(RMDIR) install
+
+$(addsuffix _clean,$(PROCLIST)):
+       $(MAKE) -C $(subst _clean,,$@) clean
+
+#  ======== standard macros ========
+ifneq (,$(wildcard $(XDC_INSTALL_DIR)/xdc.exe))
+    # use these on Windows
+    CP      = $(XDC_INSTALL_DIR)/bin/cp
+    ECHO    = $(XDC_INSTALL_DIR)/bin/echo
+    INSTALL = $(XDC_INSTALL_DIR)/bin/cp
+    MKDIR   = $(XDC_INSTALL_DIR)/bin/mkdir -p
+    RM      = $(XDC_INSTALL_DIR)/bin/rm -f
+    RMDIR   = $(XDC_INSTALL_DIR)/bin/rm -rf
+else
+    # use these on Linux
+    CP      = cp
+    ECHO    = echo
+    INSTALL = install
+    MKDIR   = mkdir -p
+    RM      = rm -f
+    RMDIR   = rm -rf
+endif
diff --git a/host_bios/simple_buffer_example/products.mak b/host_bios/simple_buffer_example/products.mak
new file mode 100644 (file)
index 0000000..71624b3
--- /dev/null
@@ -0,0 +1,65 @@
+#
+#  Copyright (c) 2017 Texas Instruments Incorporated - http://www.ti.com
+#  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.
+#
+
+#
+#  ======== products.mak ========
+#
+#
+# By default, the necessary build variables are assigned via
+# top level makefile.  If you want to
+# override these variables, or are building this example without
+# top level makefile uncomment and assign the variables
+# below.
+
+#DEPOT = _your_depot_folder_
+
+#PLATFORM = 
+
+#### BIOS-side dependencies ####
+#BIOS_INSTALL_DIR       = $(DEPOT)/_your_bios_install_
+#IPC_INSTALL_DIR        = $(DEPOT)/_your_ipc_install_
+#XDC_INSTALL_DIR        = $(DEPOT)/_your_xdctools_install_
+#PDK_INSTALL_DIR        = $(DEPOT)/_your_pdk_install_
+
+#### BIOS-side toolchains ####
+#gnu.targets.arm.A15F   = $(DEPOT)/_your_gnu_arm_codegen_install_
+#ti.targets.elf.C66     = $(DEPOT)/_your_ti_dsp_codegen_install_
+
+# Use this goal to print your product variables.
+.show:
+       @echo "PLATFORM              = $(PLATFORM)"
+       @echo "BIOS_INSTALL_DIR      = $(BIOS_INSTALL_DIR)"
+       @echo "IPC_INSTALL_DIR       = $(IPC_INSTALL_DIR)"
+       @echo "XDC_INSTALL_DIR       = $(XDC_INSTALL_DIR)"
+       @echo "PDK_INSTALL_DIR       = $(PDK_INSTALL_DIR)"
+       @echo "gnu.targets.arm.A15F  = $(gnu.targets.arm.A15F)"
+       @echo "ti.targets.elf.C66    = $(ti.targets.elf.C66)"
diff --git a/host_bios/simple_buffer_example/readme.txt b/host_bios/simple_buffer_example/readme.txt
new file mode 100644 (file)
index 0000000..5c1a1f4
--- /dev/null
@@ -0,0 +1,38 @@
+#
+#  ======== readme.txt ========
+#
+
+BigdataIPC example
+
+
+Program Logic:
+Initially, the host sends first message with shared memory init information
+ followed by  2 more dummy messages to slave core ( all three messages sent in
+ sequence without waiting for reply).
+Independantly, the slave processor receives messages and  sends back reply
+ back for each of the messages to the host.
+Then the host receives one message from the slave and sends a message with
+ Big data buffer allocated from the Big data heap and filled with an
+ incrementing pattern. (This process is repeated with 10 Big data Buffer
+ messages). Each of these Messages are received by slave and the values
+ in the buffers are updated with a modified incrementing pattern
+ and sent back to the host.
+
+Note the Slave and Host processors checks the expected incrementing
+ pattern for errors.
+
+At this point only 7 Big data buffer messages would have been received.
+Then the host sends two dummy messages plus one  shutdown message to the slave
+ core when receiving the remaining three Big data buffer messages.
+The slave core on receiving the shutdown message, shuts itself down and
+ reinitializes itself for future runs.
+
+Then the host receives back the remaining returned messages before shutting
+ down.
+
+Build_procedure
+---------------
+Build is structured to be initiated from the Processor SDK top level makefile.
+
+If you want to override the components or do a local build, then the product.mak
+need to be modified to supply the path names of the different components.
diff --git a/host_bios/simple_buffer_example/shared/66AK2E/config.bld b/host_bios/simple_buffer_example/shared/66AK2E/config.bld
new file mode 100644 (file)
index 0000000..857e4a7
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2017 Texas Instruments Incorporated - http://www.ti.com
+ * 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.
+ */
+
+/*
+ *  ======== config.bld ========
+ *
+ */
+var Build = xdc.useModule('xdc.bld.BuildEnvironment');
+
+/*  Memory Map for ti.platforms.evm6638
+ *
+ *    Address          Size             Comment
+ *  -------------------------------------------------------------
+ *    8000_0000     80_0000  (  8 MB)   CORE0_PROG (code, data)
+ *    8080_0000    380_0000  ( 56 MB)   --------
+ *    8400_0000     80_0000  (  8 MB)   HOST_PROG (code, data)
+ *    8480_0000     20_0000  (  2 MB)   SR_0 (ipc)
+ *    84a0_0000   3a60_0000  (182 MB)   SR_1 ( Big data )
+ */
+
+var SR_0 = {
+        name: "SR_0", space: "data", access: "RW",
+        base: 0x84800000, len: 0x200000,
+        comment: "SR#0 Memory (2 MB)"
+    };
+
+var SR_1 = {
+        name: "SR_1", space: "data", access: "RW",
+        base: 0x84a00000, len: 0x3a600000,
+        comment: "SR#1 Memory (> 2 GB )"
+    };
+
+Build.platformTable["ti.platforms.evmC66AK2E:dsp"] = {
+    externalMemoryMap: [
+        [ "DSP_PROG", {
+            name: "DSP_PROG", space: "code/data", access: "RWX",
+            base: 0x80000000, len: 0x800000,
+            comment: "DSP Program Memory (8 MB)"
+        }],
+        [ "SR_0", SR_0 ], 
+        [ "SR_1", SR_1 ]
+    ],
+    codeMemory: "DSP_PROG",
+    dataMemory: "DSP_PROG",
+    stackMemory: "DSP_PROG"
+};
+
+Build.platformTable["ti.platforms.evmC66AK2E:host"] = {
+    externalMemoryMap: [
+        [ "HOST_PROG", {
+            name: "HOST_PROG", space: "code/data", access: "RWX",
+            base: 0x84000000, len: 0x800000,
+            comment: "HOST Program Memory (8 MB)"
+        }],
+        [ "SR_0", SR_0 ], 
+        [ "SR_1", SR_1 ]
+    ],
+    codeMemory:  "HOST_PROG",
+    dataMemory:  "HOST_PROG",
+    stackMemory: "HOST_PROG"
+};
+
+/*
+ *  ======== ti.targets.elf.C66 ========
+ */
+var C66 = xdc.useModule('ti.targets.elf.C66');
+C66.ccOpts.suffix += " -mi10 -mo -pdr -pden -pds=238 -pds=880 -pds1110 ";
+Build.targets.$add(C66);
diff --git a/host_bios/simple_buffer_example/shared/66AK2G/config.bld b/host_bios/simple_buffer_example/shared/66AK2G/config.bld
new file mode 100644 (file)
index 0000000..d2a878e
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2017 Texas Instruments Incorporated - http://www.ti.com
+ * 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.
+ */
+
+/*
+ *  ======== config.bld ========
+ *
+ */
+var Build = xdc.useModule('xdc.bld.BuildEnvironment');
+
+/*  Memory Map for ti.platforms.evm6638
+ *
+ *    Address          Size             Comment
+ *  -------------------------------------------------------------
+ *    8000_0000     80_0000  (  8 MB)   CORE0_PROG (code, data)
+ *    8080_0000    380_0000  ( 56 MB)   --------
+ *    8400_0000     80_0000  (  8 MB)   HOST_PROG (code, data)
+ *    8480_0000     20_0000  (  2 MB)   SR_0 (ipc)
+ *    84a0_0000   3a60_0000  (182 MB)   SR_1 ( Big data )
+ */
+
+var SR_0 = {
+        name: "SR_0", space: "data", access: "RW",
+        base: 0x84800000, len: 0x200000,
+        comment: "SR#0 Memory (2 MB)"
+    };
+
+var SR_1 = {
+        name: "SR_1", space: "data", access: "RW",
+        base: 0x84a00000, len: 0x3a600000,
+        comment: "SR#1 Memory (> 2 GB )"
+    };
+
+Build.platformTable["ti.platforms.evmTCI66AK2G02:dsp"] = {
+    externalMemoryMap: [
+        [ "DSP_PROG", {
+            name: "DSP_PROG", space: "code/data", access: "RWX",
+            base: 0x80000000, len: 0x800000,
+            comment: "DSP Program Memory (8 MB)"
+        }],
+        [ "SR_0", SR_0 ], 
+        [ "SR_1", SR_1 ]
+    ],
+    codeMemory: "DSP_PROG",
+    dataMemory: "DSP_PROG",
+    stackMemory: "DSP_PROG"
+};
+
+Build.platformTable["ti.platforms.evmTCI66AK2G02:host"] = {
+    externalMemoryMap: [
+        [ "HOST_PROG", {
+            name: "HOST_PROG", space: "code/data", access: "RWX",
+            base: 0x84000000, len: 0x800000,
+            comment: "HOST Program Memory (8 MB)"
+        }],
+        [ "SR_0", SR_0 ], 
+        [ "SR_1", SR_1 ]
+    ],
+    codeMemory:  "HOST_PROG",
+    dataMemory:  "HOST_PROG",
+    stackMemory: "HOST_PROG"
+};
+
+/*
+ *  ======== ti.targets.elf.C66 ========
+ */
+var C66 = xdc.useModule('ti.targets.elf.C66');
+C66.ccOpts.suffix += " -mi10 -mo -pdr -pden -pds=238 -pds=880 -pds1110 ";
+Build.targets.$add(C66);
diff --git a/host_bios/simple_buffer_example/shared/AppCommon.h b/host_bios/simple_buffer_example/shared/AppCommon.h
new file mode 100644 (file)
index 0000000..f257249
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2017, 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.
+ */
+
+/*
+ *  ======== AppCommon.h ========
+ *
+ */
+
+#ifndef AppCommon__include
+#define AppCommon__include
+#if defined (__cplusplus)
+extern "C" {
+#endif
+
+/*
+ *  ======== Application Configuration ========
+ */
+
+/* notify commands 00 - FF */
+#define App_CMD_MASK                   0xFF000000
+#define App_CMD_NOP                    0x00000000
+#define App_CMD_SHARED_REGION_INIT     0x00000001
+#define App_CMD_BIGDATA                0x00000002
+#define App_CMD_SHUTDOWN               0x02000000
+
+typedef struct {
+    SharedRegion_SRPtr  sharedPtr;
+    UInt32              size;
+} BigDataBuffer;
+
+typedef struct {
+    UInt64              base;
+    UInt64              size;
+} SharedRegionInitCfg;
+
+typedef struct {
+    MessageQ_MsgHeader  reserved;
+    UInt32              cmd;
+    Int32               id;
+    UInt16              regionId;
+    union {
+        SharedRegionInitCfg sharedRegionInitCfg;
+        BigDataBuffer bigDataBuffer;
+    } u;
+} App_Msg;
+
+#define App_MsgHeapId           0
+#define App_HostMsgQueName      "HOST:MsgQ:01"
+#define App_SlaveMsgQueName     "%s:MsgQ:01"  /* %s is each slave's Proc Name */
+
+#define BIGDATA_SIZE 16384
+
+#define BIGDATA_ALIGN 1
+
+#if defined (__cplusplus)
+}
+#endif /* defined (__cplusplus) */
+#endif /* AppCommon__include */
diff --git a/host_bios/simple_buffer_example/shared/DRA7XX/config.bld b/host_bios/simple_buffer_example/shared/DRA7XX/config.bld
new file mode 100644 (file)
index 0000000..605e05d
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2017 Texas Instruments Incorporated - http://www.ti.com
+ * 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.
+ */
+
+/*
+ *  ======== config.bld ========
+ *
+ */
+var Build = xdc.useModule('xdc.bld.BuildEnvironment');
+
+/*  Memory Map
+ *
+ *    Address          Size             Comment
+ *  -------------------------------------------------------------
+ *    8000_0000     80_0000  (  8 MB)   DSP_PROG (code, data)
+ *    8080_0000    380_0000  ( 56 MB)   --------
+ *    8400_0000     80_0000  (  8 MB)   HOST_PROG (code, data)
+ *    8480_0000     20_0000  (  2 MB)   SR_0 (ipc)
+ *    84a0_0000   3a60_0000  (182 MB)   SR_1 ( Big data )
+ */
+
+var SR_0 = {
+        name: "SR_0", space: "data", access: "RW",
+        base: 0x84800000, len: 0x200000,
+        comment: "SR#0 Memory (2 MB)"
+    };
+
+var SR_1 = {
+        name: "SR_1", space: "data", access: "RW",
+        base: 0x84a00000, len: 0x3a600000,
+        comment: "SR#1 Memory (> 2 GB )"
+    };
+
+Build.platformTable["ti.platforms.evmDRA7XX:dsp"] = {
+    externalMemoryMap: [
+        [ "DSP_PROG", {
+            name: "DSP_PROG", space: "code/data", access: "RWX",
+            base: 0x80000000, len: 0x800000,
+            comment: "DSP Program Memory (8 MB)"
+        }],
+        [ "SR_0", SR_0 ], 
+        [ "SR_1", SR_1 ]
+    ],
+    codeMemory: "DSP_PROG",
+    dataMemory: "DSP_PROG",
+    stackMemory: "DSP_PROG"
+};
+
+Build.platformTable["ti.platforms.evmDRA7XX:host"] = {
+    externalMemoryMap: [
+        [ "HOST_PROG", {
+            name: "HOST_PROG", space: "code/data", access: "RWX",
+            base: 0x84000000, len: 0x800000,
+            comment: "HOST Program Memory (8 MB)"
+        }],
+        [ "SR_0", SR_0 ], 
+        [ "SR_1", SR_1 ]
+    ],
+    codeMemory:  "HOST_PROG",
+    dataMemory:  "HOST_PROG",
+    stackMemory: "HOST_PROG"
+};
+
+/*
+ *  ======== ti.targets.elf.C66 ========
+ */
+var C66 = xdc.useModule('ti.targets.elf.C66');
+C66.ccOpts.suffix += " -mi10 -mo -pdr -pden -pds=238 -pds=880 -pds1110 ";
+Build.targets.$add(C66);
diff --git a/host_bios/simple_buffer_example/shared/TCI6636/config.bld b/host_bios/simple_buffer_example/shared/TCI6636/config.bld
new file mode 100644 (file)
index 0000000..7927215
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2017 Texas Instruments Incorporated - http://www.ti.com
+ * 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.
+ */
+
+/*
+ *  ======== config.bld ========
+ *
+ */
+var Build = xdc.useModule('xdc.bld.BuildEnvironment');
+
+/*  Memory Map for ti.platforms.evm6638
+ *
+ *    Address          Size             Comment
+ *  -------------------------------------------------------------
+ *    8000_0000     80_0000  (  8 MB)   CORE0_PROG (code, data)
+ *    8080_0000    380_0000  ( 56 MB)   --------
+ *    8400_0000     80_0000  (  8 MB)   HOST_PROG (code, data)
+ *    8480_0000     20_0000  (  2 MB)   SR_0 (ipc)
+ *    84a0_0000   3a60_0000  (182 MB)   SR_1 ( Big data )
+ */
+
+var SR_0 = {
+        name: "SR_0", space: "data", access: "RW",
+        base: 0x84800000, len: 0x200000,
+        comment: "SR#0 Memory (2 MB)"
+    };
+
+var SR_1 = {
+        name: "SR_1", space: "data", access: "RW",
+        base: 0x84a00000, len: 0x3a600000,
+        comment: "SR#1 Memory (> 2 GB )"
+    };
+
+Build.platformTable["ti.platforms.evmTCI6636K2H:dsp"] = {
+    externalMemoryMap: [
+        [ "DSP_PROG", {
+            name: "DSP_PROG", space: "code/data", access: "RWX",
+            base: 0x80000000, len: 0x800000,
+            comment: "DSP Program Memory (8 MB)"
+        }],
+        [ "SR_0", SR_0 ], 
+        [ "SR_1", SR_1 ]
+    ],
+    codeMemory: "DSP_PROG",
+    dataMemory: "DSP_PROG",
+    stackMemory: "DSP_PROG"
+};
+
+Build.platformTable["ti.platforms.evmTCI6636K2H:host"] = {
+    externalMemoryMap: [
+        [ "HOST_PROG", {
+            name: "HOST_PROG", space: "code/data", access: "RWX",
+            base: 0x84000000, len: 0x800000,
+            comment: "HOST Program Memory (8 MB)"
+        }],
+        [ "SR_0", SR_0 ], 
+        [ "SR_1", SR_1 ]
+    ],
+    codeMemory:  "HOST_PROG",
+    dataMemory:  "HOST_PROG",
+    stackMemory: "HOST_PROG"
+};
+
+/*
+ *  ======== ti.targets.elf.C66 ========
+ */
+var C66 = xdc.useModule('ti.targets.elf.C66');
+C66.ccOpts.suffix += " -mi10 -mo -pdr -pden -pds=238 -pds=880 -pds1110 ";
+Build.targets.$add(C66);
diff --git a/host_bios/simple_buffer_example/shared/TCI6638/config.bld b/host_bios/simple_buffer_example/shared/TCI6638/config.bld
new file mode 100644 (file)
index 0000000..04f4269
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2017 Texas Instruments Incorporated - http://www.ti.com
+ * 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.
+ */
+
+/*
+ *  ======== config.bld ========
+ *
+ */
+var Build = xdc.useModule('xdc.bld.BuildEnvironment');
+
+/*  Memory Map for ti.platforms.evm6638
+ *
+ *    Address          Size             Comment
+ *  -------------------------------------------------------------
+ *    8000_0000     80_0000  (  8 MB)   CORE0_PROG (code, data)
+ *    8080_0000    380_0000  ( 56 MB)   --------
+ *    8400_0000     80_0000  (  8 MB)   HOST_PROG (code, data)
+ *    8480_0000     20_0000  (  2 MB)   SR_0 (ipc)
+ *    84a0_0000   3a60_0000  (182 MB)   SR_1 ( Big data )
+ */
+
+var SR_0 = {
+        name: "SR_0", space: "data", access: "RW",
+        base: 0x84800000, len: 0x200000,
+        comment: "SR#0 Memory (2 MB)"
+    };
+
+var SR_1 = {
+        name: "SR_1", space: "data", access: "RW",
+        base: 0x84a00000, len: 0x3a600000,
+        comment: "SR#1 Memory (> 2 GB )"
+    };
+
+Build.platformTable["ti.platforms.evmTCI6638K2K:dsp"] = {
+    externalMemoryMap: [
+        [ "DSP_PROG", {
+            name: "DSP_PROG", space: "code/data", access: "RWX",
+            base: 0x80000000, len: 0x800000,
+            comment: "DSP Program Memory (8 MB)"
+        }],
+        [ "SR_0", SR_0 ], 
+        [ "SR_1", SR_1 ]
+    ],
+    codeMemory: "DSP_PROG",
+    dataMemory: "DSP_PROG",
+    stackMemory: "DSP_PROG"
+};
+
+Build.platformTable["ti.platforms.evmTCI6638K2K:host"] = {
+    externalMemoryMap: [
+        [ "HOST_PROG", {
+            name: "HOST_PROG", space: "code/data", access: "RWX",
+            base: 0x84000000, len: 0x800000,
+            comment: "HOST Program Memory (8 MB)"
+        }],
+        [ "SR_0", SR_0 ], 
+        [ "SR_1", SR_1 ]
+    ],
+    codeMemory:  "HOST_PROG",
+    dataMemory:  "HOST_PROG",
+    stackMemory: "HOST_PROG"
+};
+
+/*
+ *  ======== ti.targets.elf.C66 ========
+ */
+var C66 = xdc.useModule('ti.targets.elf.C66');
+C66.ccOpts.suffix += " -mi10 -mo -pdr -pden -pds=238 -pds=880 -pds1110 ";
+Build.targets.$add(C66);
diff --git a/host_bios/simple_buffer_example/shared/ipc.cfg.xs b/host_bios/simple_buffer_example/shared/ipc.cfg.xs
new file mode 100644 (file)
index 0000000..843005d
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2017 Texas Instruments Incorporated - http://www.ti.com
+ * 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.
+ */
+
+/*
+ *  ======== ipc.cfg.xs ========
+ */
+
+/* root of the configuration object model */
+var Program = xdc.useModule('xdc.cfg.Program');
+var cfgArgs = Program.build.cfgArgs;
+
+/* configure processor names */
+var procNameAry =  cfgArgs.procnamelist;
+
+var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
+MultiProc.setConfig(xdc.global.procName, procNameAry);
+
+/* ipc configuration */
+var Ipc = xdc.useModule('ti.sdo.ipc.Ipc');
+Ipc.procSync = Ipc.ProcSync_PAIR;
+Ipc.sr0MemorySetup = 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:           "SR_0",
+        base:           SR0Mem.base,
+        len:            SR0Mem.len,
+        ownerProcId:    0,
+        isValid:        true,
+        cacheEnable:    xdc.global.SR0_cacheEnable
+    })
+);
+
+/* configure SharedRegion #1 for Big data*/
+var SR1Mem = Program.cpu.memoryMap["SR_1"];
+
+SharedRegion.setEntryMeta(1,
+    new SharedRegion.Entry({
+        name:           "SR_1",
+        base:           SR1Mem.base,
+        len:            SR1Mem.len,
+        ownerProcId:    0,
+        isValid:        true,
+        cacheEnable:    xdc.global.SR1_cacheEnable,
+        createHeap:     false
+    })
+);
diff --git a/makefile b/makefile
new file mode 100755 (executable)
index 0000000..3449e4e
--- /dev/null
+++ b/makefile
@@ -0,0 +1,58 @@
+#
+#  Copyright (c) 2017, 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.
+#
+
+#
+#  ======== makefile ========
+#
+
+.PHONY: host_bios/simple_buffer_example
+
+all: host_bios
+
+host_bios: host_bios/simple_buffer_example
+
+host_bios/simple_buffer_example:
+       echo "#"
+       echo "# Making $@..."
+       $(MAKE) -C $@ all
+
+help:
+       @echo "make all        # build all examples"
+       @echo "make host_bios  # build all examples"
+       @echo "make clean      # clean all examples (does not delete them)"
+       @echo "make       # clean all examples (does not delete them)"
+       @echo ""
+
+clean::
+       @echo "#"
+       @echo "# Cleaning host_$(HOSTOS) examples..."
+       $(MAKE) -C host_bios/simple_buffer_example clean
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..294a159f4fe7f85332edd4ddc229704fc0bfcc88 100644 (file)
@@ -0,0 +1,18 @@
+#
+#  ======== readme.txt ========
+#
+
+BigdataIPC examples
+
+These examples are created to show case how to share big data buffers
+between cores in a multicore system
+
+host_bios: Examples here assume host running TI RTOS
+
+simple_buffer_example: This example demonstrates simple buffer exchange
+       between cores
+
+
+Build procedure
+==============
+These examples are designed to be build from the top level makefile