summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: b42f6fd)
raw | patch | inline | side by side (parent: b42f6fd)
author | Ramsey Harris <ramsey@ti.com> | |
Wed, 26 Nov 2014 23:52:42 +0000 (15:52 -0800) | ||
committer | Robert Tivy <rtivy@ti.com> | |
Wed, 26 Nov 2014 23:56:54 +0000 (15:56 -0800) |
Added new ITransport base class interface. New INetworkTransport
interface. MessageQ is now able to register multiple transport
instances. Dummy network transport to work around RTSC bug.
interface. MessageQ is now able to register multiple transport
instances. Dummy network transport to work around RTSC bug.
12 files changed:
packages/ti/sdo/ipc/MessageQ.c | patch | blob | history | |
packages/ti/sdo/ipc/MessageQ.xdc | patch | blob | history | |
packages/ti/sdo/ipc/MessageQ.xs | patch | blob | history | |
packages/ti/sdo/ipc/interfaces/IMessageQTransport.xdc | patch | blob | history | |
packages/ti/sdo/ipc/interfaces/INetworkTransport.xdc | [new file with mode: 0644] | patch | blob |
packages/ti/sdo/ipc/interfaces/INetworkTransportDummy.xdc | [new file with mode: 0644] | patch | blob |
packages/ti/sdo/ipc/interfaces/ITransport.xdc | [new file with mode: 0644] | patch | blob |
packages/ti/sdo/ipc/interfaces/package.xdc | patch | blob | history | |
packages/ti/sdo/ipc/transports/TransportNetworkDummy.c | [new file with mode: 0644] | patch | blob |
packages/ti/sdo/ipc/transports/TransportNetworkDummy.xdc | [new file with mode: 0644] | patch | blob |
packages/ti/sdo/ipc/transports/package.bld | patch | blob | history | |
packages/ti/sdo/ipc/transports/package.xdc | patch | blob | history |
index 3a4df0de6b8b07207c172260a7b20a609d8cf14e..2e9422e43025730fb771ffd054d8303f0159ff9c 100644 (file)
#include <ti/sysbios/hal/Hwi.h>
#include <ti/sysbios/syncs/SyncSem.h>
+#include <ti/sdo/ipc/interfaces/ITransport.h>
#include <ti/sdo/ipc/interfaces/IMessageQTransport.h>
+#include <ti/sdo/ipc/interfaces/INetworkTransport.h>
#include <ti/sdo/utils/List.h>
/* must be included after the internal header file for now */
UInt16 srcProc;
#endif
ti_sdo_ipc_MessageQ_Object *obj;
+ Int tid;
+ ITransport_Handle baseTrans;
+ INetworkTransport_Handle netTrans;
Assert_isTrue((msg != NULL), ti_sdo_ipc_MessageQ_A_invalidMsg);
msg->dstId = (UInt16)(queueId);
msg->dstProc = (UInt16)(queueId >> 16);
- if (dstProcId != MultiProc_self()) {
+ /* extract the transport ID from the message header */
+ tid = MessageQ_getTransportId(msg);
+
+ /* if recipient is local, use direct message delivery */
+ if (dstProcId == MultiProc_self()) {
+ /* Assert queueId is valid */
+ Assert_isTrue((UInt16)queueId < MessageQ_module->numQueues,
+ ti_sdo_ipc_MessageQ_A_invalidQueueId);
+
+ /* It is a local MessageQ */
+ obj = MessageQ_module->queues[(UInt16)(queueId)];
+
+ /* Assert object is not NULL */
+ Assert_isTrue(obj != NULL, ti_sdo_ipc_MessageQ_A_invalidObj);
+
+ if ((msg->flags & MessageQ_PRIORITYMASK) == MessageQ_URGENTPRI) {
+ listHandle = ti_sdo_ipc_MessageQ_Instance_State_highList(obj);
+ List_putHead(listHandle, (List_Elem *)msg);
+ }
+ else {
+ if ((msg->flags & MessageQ_PRIORITYMASK) == MessageQ_NORMALPRI) {
+ listHandle = ti_sdo_ipc_MessageQ_Instance_State_normalList(obj);
+ }
+ else {
+ listHandle = ti_sdo_ipc_MessageQ_Instance_State_highList(obj);
+ }
+ /* put on the queue */
+ List_put(listHandle, (List_Elem *)msg);
+ }
+
+ ISync_signal(obj->synchronizer);
+
+ status = MessageQ_S_SUCCESS;
+
+ if ((ti_sdo_ipc_MessageQ_traceFlag) ||
+ (msg->flags & ti_sdo_ipc_MessageQ_TRACEMASK) != 0) {
+ Log_write4(ti_sdo_ipc_MessageQ_LM_putLocal, (UArg)(msg),
+ (UArg)(msg->seqNum), (UArg)(msg->srcProc), (UArg)(obj));
+ }
+ }
+
+ /* if transport ID is zero, use primary transport array */
+ else if (tid == 0) {
/* assert that dstProcId is valid */
Assert_isTrue(dstProcId < ti_sdo_utils_MultiProc_numProcessors,
ti_sdo_ipc_MessageQ_A_procIdInvalid);
status = MessageQ_E_FAIL;
}
}
- else {
- /* Assert queueId is valid */
- Assert_isTrue((UInt16)queueId < MessageQ_module->numQueues,
- ti_sdo_ipc_MessageQ_A_invalidQueueId);
- /* It is a local MessageQ */
- obj = MessageQ_module->queues[(UInt16)(queueId)];
-
- /* Assert object is not NULL */
- Assert_isTrue(obj != NULL, ti_sdo_ipc_MessageQ_A_invalidObj);
+ /* use a registered transport to deliver the message */
+ else {
+ baseTrans = MessageQ_module->regTrans[tid].transport;
- if ((msg->flags & MessageQ_PRIORITYMASK) == MessageQ_URGENTPRI) {
- listHandle = ti_sdo_ipc_MessageQ_Instance_State_highList(obj);
- List_putHead(listHandle, (List_Elem *)msg);
- }
- else {
- if ((msg->flags & MessageQ_PRIORITYMASK) == MessageQ_NORMALPRI) {
- listHandle = ti_sdo_ipc_MessageQ_Instance_State_normalList(obj);
- }
- else {
- listHandle = ti_sdo_ipc_MessageQ_Instance_State_highList(obj);
- }
- /* put on the queue */
- List_put(listHandle, (List_Elem *)msg);
+ if (baseTrans == NULL) {
+ /* raise error */
+ status = MessageQ_E_FAIL;
+ goto leave;
}
- ISync_signal(obj->synchronizer);
+ switch (MessageQ_module->regTrans[tid].type) {
- status = MessageQ_S_SUCCESS;
+ case ti_sdo_ipc_MessageQ_TransportType_INetworkTransport:
+ netTrans = INetworkTransport_Handle_downCast(baseTrans);
- if ((ti_sdo_ipc_MessageQ_traceFlag) ||
- (msg->flags & ti_sdo_ipc_MessageQ_TRACEMASK) != 0) {
- Log_write4(ti_sdo_ipc_MessageQ_LM_putLocal, (UArg)(msg),
- (UArg)(msg->seqNum), (UArg)(msg->srcProc), (UArg)(obj));
+ if (INetworkTransport_put(netTrans, msg)) {
+ status = MessageQ_S_SUCCESS;
+ }
+ else {
+ status = MessageQ_E_FAIL;
+ }
+ break;
}
}
+leave:
return (status);
}
Hwi_restore(key);
}
+/*
+ * ======== ti_sdo_ipc_MessageQ_registerTransportId ========
+ */
+Bool ti_sdo_ipc_MessageQ_registerTransportId(UInt tid, ITransport_Handle inst)
+{
+ ti_sdo_ipc_MessageQ_TransportType type;
+
+ /* validate transport ID */
+ if ((tid < 1) || (tid > 7)) {
+ /* raise error */
+ return (FALSE);
+ }
+
+ /* don't overwrite an existing transport */
+ if (MessageQ_module->regTrans[tid].transport != NULL) {
+ /* raise error */
+ return (FALSE);
+ }
+
+ /* determine the transport type */
+ if (INetworkTransport_Handle_downCast(inst) != NULL) {
+ type = ti_sdo_ipc_MessageQ_TransportType_INetworkTransport;
+ }
+ else {
+ /* raise error */
+ return (FALSE);
+ }
+
+ /* register the transport instance */
+ MessageQ_module->regTrans[tid].transport = inst;
+ MessageQ_module->regTrans[tid].type = type;
+ return (TRUE);
+}
+
+/*
+ * ======== ti_sdo_ipc_MessageQ_registerTransportId ========
+ */
+Bool ti_sdo_ipc_MessageQ_unregisterTransportId(UInt tid)
+{
+ /* forget the registered transport instance */
+ MessageQ_module->regTrans[tid].transport = NULL;
+ MessageQ_module->regTrans[tid].type =
+ ti_sdo_ipc_MessageQ_TransportType_Invalid;
+
+ return (TRUE);
+}
+
+
/*
*************************************************************************
* Instance functions
@@ -761,6 +846,10 @@ Int ti_sdo_ipc_MessageQ_Instance_init(ti_sdo_ipc_MessageQ_Object *obj, String na
List_Handle listHandle;
SyncSem_Handle syncSemHandle;
MessageQ_QueueIndex queueIndex;
+ Int tid;
+ Int status;
+ ITransport_Handle baseTrans;
+ INetworkTransport_Handle netTrans;
/* lock */
key = IGateProvider_enter(MessageQ_module->gate);
@@ -865,6 +954,33 @@ Int ti_sdo_ipc_MessageQ_Instance_init(ti_sdo_ipc_MessageQ_Object *obj, String na
}
}
+ /* notify all registered transports about the new queue */
+ for (tid = 1; tid <= 7; tid++) {
+ if (MessageQ_module->regTrans[tid].transport == NULL) {
+ continue;
+ }
+ baseTrans = MessageQ_module->regTrans[tid].transport;
+
+ switch (MessageQ_module->regTrans[tid].type) {
+
+ case ti_sdo_ipc_MessageQ_TransportType_INetworkTransport:
+ netTrans = INetworkTransport_Handle_downCast(baseTrans);
+
+ if (INetworkTransport_bind(netTrans, obj->queue)) {
+ status = MessageQ_S_SUCCESS;
+ }
+ else {
+ status = MessageQ_E_FAIL;
+ }
+ break;
+ }
+
+ /* check for failure */
+ if (status < 0) {
+ /* TODO add error handling */
+ }
+ }
+
return (0);
}
UInt key;
MessageQ_QueueIndex index = (MessageQ_QueueIndex)(obj->queue);
List_Handle listHandle;
+ Int tid;
+ ITransport_Handle baseTrans;
+ INetworkTransport_Handle netTrans;
/* Requested queueId was not available. Nothing was done in the init */
if (status == 5) {
return;
}
+ /* notify all registered transports that given queue is being deleted */
+ for (tid = 1; tid <= 7; tid++) {
+ if (MessageQ_module->regTrans[tid].transport == NULL) {
+ continue;
+ }
+ baseTrans = MessageQ_module->regTrans[tid].transport;
+
+ switch (MessageQ_module->regTrans[tid].type) {
+
+ case ti_sdo_ipc_MessageQ_TransportType_INetworkTransport:
+ netTrans = INetworkTransport_Handle_downCast(baseTrans);
+
+ if (INetworkTransport_unbind(netTrans, obj->queue)) {
+ status = MessageQ_S_SUCCESS;
+ }
+ else {
+ status = MessageQ_E_FAIL;
+ }
+ break;
+ }
+
+ /* check for failure */
+ if (status < 0) {
+ /* TODO add error handling */
+ }
+ }
+
if (obj->syncSemHandle != NULL) {
SyncSem_delete(&obj->syncSemHandle);
}
index 882c0b3e8beb5f2b56ea5381869623a2e0ace92b..4b420a2788b6e447ca928bac51dc633190c64320 100644 (file)
import ti.sysbios.syncs.SyncSem;
+import ti.sdo.ipc.interfaces.ITransport;
import ti.sdo.ipc.interfaces.IMessageQTransport;
import ti.sdo.utils.NameServer;
import ti.sdo.utils.List;
*/
Void unregisterTransport(UInt16 procId, UInt priority);
+ /*!
+ * ======== registerTransportId ========
+ * Register the transport instance for the given ID
+ */
+ Bool registerTransportId(UInt tid, ITransport.Handle inst);
+
+ /*!
+ * ======== unregisterTransportId ========
+ * Unregister the transport for the given ID
+ */
+ Bool unregisterTransportId(UInt tid);
+
instance:
/*!
UInt16 procId;
};
+ enum TransportType {
+ TransportType_IMessageQTransport,
+ TransportType_INetworkTransport,
+ TransportType_Invalid
+ };
+
+ struct RegisteredTransport {
+ ITransport.Handle transport;
+ TransportType type;
+ };
+
/*!
* ======== nameSrvPrms ========
* This Params object is used for temporary storage of the
FreeHookFxn freeHookFxn;
Bool canFreeQueues;
UInt16 seqNum;
+ RegisteredTransport regTrans[8];
};
}
index 8417abf9c12dae820fc0b038948a6ce61f3676fd..b91222e0553ed7e7827e7032f38362c5ab8f2bf8 100644 (file)
List = xdc.useModule("ti.sdo.utils.List");
MultiProc = xdc.useModule("ti.sdo.utils.MultiProc");
NameServer = xdc.useModule('ti.sdo.utils.NameServer');
- GateThread = xdc.useModule("xdc.runtime.knl.GateThread");
- SyncSem = xdc.useModule("ti.sysbios.syncs.SyncSem");
+ GateThread = xdc.useModule('xdc.runtime.knl.GateThread');
+ SyncSem = xdc.useModule('ti.sysbios.syncs.SyncSem');
+
+ xdc.useModule('ti.sdo.ipc.interfaces.ITransport');
+ xdc.useModule('ti.sdo.ipc.interfaces.IMessageQTransport');
+ xdc.useModule('ti.sdo.ipc.interfaces.INetworkTransport');
+ xdc.useModule('ti.sdo.ipc.transports.TransportNetworkDummy');
/* Plug the SetupTransportProxy for the MessageQ transport */
if (MessageQ.SetupTransportProxy == null) {
* ======== module$static$init ========
* Initialize module values.
*/
-function module$static$init(mod, params)
+function module$static$init(state, mod)
{
/* initialize the NameServer param to be used now or later */
- MessageQ.nameSrvPrms.maxRuntimeEntries = params.maxRuntimeEntries;
- MessageQ.nameSrvPrms.tableSection = params.tableSection;
- MessageQ.nameSrvPrms.maxNameLen = params.maxNameLen;
+ MessageQ.nameSrvPrms.maxRuntimeEntries = mod.maxRuntimeEntries;
+ MessageQ.nameSrvPrms.tableSection = mod.tableSection;
+ MessageQ.nameSrvPrms.maxNameLen = mod.maxNameLen;
/*
* Get the current number of created static instances of this module.
/* create NameServer here only if no static instances are created */
if (instCount == 0) {
- mod.nameServer = NameServer.create("MessageQ",
- MessageQ.nameSrvPrms);
+ state.nameServer = NameServer.create("MessageQ", MessageQ.nameSrvPrms);
}
else {
- mod.nameServer = null;
+ state.nameServer = null;
}
/*
* Also pre-allocate if numReservedEntries is not zero.
* maxRuntimeEntries < numReservedEntries is caught in validate.
*/
- mod.numQueues = this.$instances.length;
- if (params.maxRuntimeEntries != NameServer.ALLOWGROWTH) {
- mod.numQueues += params.maxRuntimeEntries;
+ state.numQueues = this.$instances.length;
+ if (mod.maxRuntimeEntries != NameServer.ALLOWGROWTH) {
+ state.numQueues += mod.maxRuntimeEntries;
}
- else if (params.numReservedEntries != 0){
- mod.numQueues += params.numReservedEntries;
+ else if (mod.numReservedEntries != 0){
+ state.numQueues += mod.numReservedEntries;
}
- mod.queues.length = mod.numQueues;
- mod.canFreeQueues = false;
- mod.freeHookFxn = params.freeHookFxn;
+ state.queues.length = state.numQueues;
+ state.canFreeQueues = false;
+ state.freeHookFxn = mod.freeHookFxn;
- if (params.nameTableGate == null) {
- mod.gate = null;
+ if (mod.nameTableGate == null) {
+ state.gate = null;
}
else {
- mod.gate = params.nameTableGate;
+ state.gate = mod.nameTableGate;
}
var messsageQParams = new this.Params;
/* Initial the seqNum used for tracing */
- mod.seqNum = 0;
+ state.seqNum = 0;
/* Set the length of the heaps array */
- mod.numHeaps = params.numHeaps;
- mod.heaps.length = mod.numHeaps;
+ state.numHeaps = mod.numHeaps;
+ state.heaps.length = state.numHeaps;
/* Initialize the heaps array to null */
- for (var i = 0; i < mod.heaps.length; i++) {
- mod.heaps[i] = null;
+ for (var i = 0; i < state.heaps.length; i++) {
+ state.heaps[i] = null;
}
/*
* Sort the static heaps by heap id into the heaps array
*/
- for (var i = 0; i < params.staticHeaps.length; i++) {
+ for (var i = 0; i < mod.staticHeaps.length; i++) {
/* Make sure the id is not too big */
- if (params.staticHeaps[i].heapId >= mod.numHeaps) {
- MessageQ.$logError("Out of range heapId (" +
- params.staticHeaps[i].heapId +
- "). Max heapId is " + (params.numHeaps - 1) +
- " (MessageQ.numHeaps - 1).", this);
+ if (mod.staticHeaps[i].heapId >= state.numHeaps) {
+ MessageQ.$logError("Out of range heapId ("
+ + mod.staticHeaps[i].heapId + "). Max heapId is "
+ + (mod.numHeaps - 1) + " (MessageQ.numHeaps - 1).", this);
}
/* Make sure the same id is not used twice */
- if (mod.heaps[params.staticHeaps[i].heapId] != null) {
- MessageQ.$logError("Cannot register multiple heaps to heapId " +
- params.staticHeaps[i].heapId + ".", this);
+ if (state.heaps[mod.staticHeaps[i].heapId] != null) {
+ MessageQ.$logError("Cannot register multiple heaps to heapId "
+ + mod.staticHeaps[i].heapId + ".", this);
}
- mod.heaps[params.staticHeaps[i].heapId] = params.staticHeaps[i].heap;
+ state.heaps[mod.staticHeaps[i].heapId] = mod.staticHeaps[i].heap;
}
/* Set the length of the transport array */
- mod.transports.length = MultiProc.numProcessors;
+ state.transports.length = MultiProc.numProcessors;
/* Initialize all the transports to null */
- for (var i = 0; i < mod.transports.length; i++) {
- mod.transports[i][0] = null;
- mod.transports[i][1] = null;
+ for (var i = 0; i < state.transports.length; i++) {
+ state.transports[i][0] = null;
+ state.transports[i][1] = null;
}
/*
* Sort the static Transports by processor id into the
* transport array
*/
- for (var i = 0; i < params.staticTransports.length; i++) {
+ for (var i = 0; i < mod.staticTransports.length; i++) {
/* Make sure the procId is not too big */
- if (params.staticTransports[i].procId >= MultiProc.numProcessors) {
- MessageQ.$logError("MessageQ Out of range procId (" +
- params.staticTransports[i].procId +
- "). Max procId is " +
- (MultiProc.numProcessors) +
- " (MultiProc.numProcessors).", this);
+ if (mod.staticTransports[i].procId >= MultiProc.numProcessors) {
+ MessageQ.$logError("MessageQ Out of range procId ("
+ + mod.staticTransports[i].procId + "). Max procId is "
+ + (MultiProc.numProcessors) + " (MultiProc.numProcessors).",
+ this);
}
/* Make sure the same id is not used twice */
- if (mod.transports[params.staticTransports[i].procId] != null) {
- MessageQ.$logError("Cannot register multiple transports to one" +
- " remote processor " +
- params.staticTransports[i].procId + ".", this);
+ if (state.transports[mod.staticTransports[i].procId] != null) {
+ MessageQ.$logError("Cannot register multiple transports to one"
+ + " remote processor " + mod.staticTransports[i].procId
+ + ".", this);
}
- mod.transports[params.staticTransports[i].procId] =
- params.staticTransports[i].transport;
+ state.transports[mod.staticTransports[i].procId] =
+ mod.staticTransports[i].transport;
+ }
+
+ /* initialize the registered transport array */
+ for (var i = 0; i < state.regTrans.length; i++) {
+ state.regTrans[i].transport = null;
+ state.regTrans[i].type = mod.TransportType_Invalid;
}
}
diff --git a/packages/ti/sdo/ipc/interfaces/IMessageQTransport.xdc b/packages/ti/sdo/ipc/interfaces/IMessageQTransport.xdc
index 2d2ef14515d969b09e87337d1a48929e1b24dfed..7a4f236cc6b3c2711dbc21e41e25ec0474a940ef 100644 (file)
/*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * 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
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+
/*
* ======== IMessageQTransport.xdc ========
- *
*/
+package ti.sdo.ipc.interfaces;
/*!
* ======== IMessageQTransport ========
* the transport implementation can use.
*/
-interface IMessageQTransport
-{
+interface IMessageQTransport inherits ITransport {
/*!
* Transport return values
*
diff --git a/packages/ti/sdo/ipc/interfaces/INetworkTransport.xdc b/packages/ti/sdo/ipc/interfaces/INetworkTransport.xdc
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * 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.
+ */
+
+/*
+ * ======== INetworkTransport.xdc ========
+ */
+package ti.sdo.ipc.interfaces;
+
+/*!
+ * ======== INetworkTransport ========
+ * Interface for the network type of transports
+ */
+
+interface INetworkTransport inherits ITransport {
+
+instance:
+
+ /*!
+ * ======== create ========
+ * Create a transport instance
+ */
+ create();
+
+ /*!
+ * ======== bind ========
+ * Bind a resource for the given queueId
+ */
+ Int bind(UInt32 queueId);
+
+ /*!
+ * ======== unbind ========
+ * Unbind a resource for the given queueId
+ */
+ Int unbind(UInt32 queueId);
+
+ /*!
+ * ======== put ========
+ * Send the message over the given transport instance
+ */
+ @DirectCall
+ Bool put(Ptr msg);
+}
diff --git a/packages/ti/sdo/ipc/interfaces/INetworkTransportDummy.xdc b/packages/ti/sdo/ipc/interfaces/INetworkTransportDummy.xdc
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ */
+
+/*
+ * ======== INetworkTransportDummy.xdc ========
+ */
+package ti.sdo.ipc.interfaces;
+
+/*!
+ * ======== INetworkTransport ========
+ * Interface for the network type of transports
+ */
+
+interface INetworkTransportDummy inherits INetworkTransport {
+
+}
diff --git a/packages/ti/sdo/ipc/interfaces/ITransport.xdc b/packages/ti/sdo/ipc/interfaces/ITransport.xdc
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 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.
+ */
+
+/*
+ * ======== ITransport.xdc ========
+ */
+package ti.sdo.ipc.interfaces;
+
+/*!
+ * ======== ITransport ========
+ * Base interface for all message transports
+ */
+@DirectCall
+interface ITransport {
+
+instance:
+
+}
diff --git a/packages/ti/sdo/ipc/interfaces/package.xdc b/packages/ti/sdo/ipc/interfaces/package.xdc
index aa0238a1dfc1e2b3a3e5c90b1276eb0dab5506b2..fbf6067b013ebbd2a22b3adaead496d5cc834775 100644 (file)
/*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2014 Texas Instruments Incorporated - http://www.ti.com
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* Contains interfaces for communication between processors.
*/
-package ti.sdo.ipc.interfaces [1,0,0,0] {
+package ti.sdo.ipc.interfaces [1,0,1] {
interface INotifyDriver;
interface INotifySetup;
interface IGateMPSupport;
+ interface ITransport;
interface IMessageQTransport;
+ interface INetworkTransport;
interface ITransportSetup;
}
diff --git a/packages/ti/sdo/ipc/transports/TransportNetworkDummy.c b/packages/ti/sdo/ipc/transports/TransportNetworkDummy.c
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 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.
+ */
+
+/*
+ * ======== TransportNetworkDummy.c ========
+ */
+
+#include <xdc/std.h>
+#include <xdc/runtime/Error.h>
+
+#include "package/internal/TransportNetworkDummy.xdc.h"
+
+/*
+ * ======== TransportNetworkDummy_Instance_init ========
+ */
+Void TransportNetworkDummy_Instance_init(TransportNetworkDummy_Object *obj,
+ const TransportNetworkDummy_Params *params)
+{
+ /* ... */
+}
+
+/*
+ * ======== TransportNetworkDummy_bind ========
+ */
+Int TransportNetworkDummy_bind(TransportNetworkDummy_Object *obj, UInt32 qid)
+{
+ return (0);
+}
+
+/*
+ * ======== TransportNetworkDummy_unbind ========
+ */
+Int TransportNetworkDummy_unbind(TransportNetworkDummy_Object *obj, UInt32 qid)
+{
+ return (0);
+}
+
+/*
+ * ======== TransportNetworkDummy_put ========
+ */
+Bool TransportNetworkDummy_put(TransportNetworkDummy_Object *obj, Ptr msg)
+{
+ return (TRUE);
+}
diff --git a/packages/ti/sdo/ipc/transports/TransportNetworkDummy.xdc b/packages/ti/sdo/ipc/transports/TransportNetworkDummy.xdc
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 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.
+ */
+
+/*
+ * ======== TransportNetworkDummy.xdc ========
+ */
+
+
+/*!
+ * ======== TransportNetworkDummy ========
+ * Dummy implementation to avoid RTSC bug
+ */
+
+module TransportNetworkDummy inherits ti.sdo.ipc.interfaces.INetworkTransport
+{
+
+}
diff --git a/packages/ti/sdo/ipc/transports/package.bld b/packages/ti/sdo/ipc/transports/package.bld
index 882553573caa7ffc14f8fb7f02594dde7411c27e..fe46970cec4e22c7236940c2ecd4ce4083826dab 100644 (file)
/*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2014 Texas Instruments Incorporated - http://www.ti.com
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
"TransportShmCircSetup.c",
"TransportShmNotify.c",
"TransportShmNotifySetup.c",
- "TransportNullSetup.c"
+ "TransportNullSetup.c",
+ "TransportNetworkDummy.c"
];
/* if not building a product release, build package libraries */
diff --git a/packages/ti/sdo/ipc/transports/package.xdc b/packages/ti/sdo/ipc/transports/package.xdc
index 2ac0b36fdde01bd91b13279ff8c16eea97f7d79c..352ff376f8f6e4a47b6868c22f17561763b422c6 100644 (file)
/*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2014 Texas Instruments Incorporated - http://www.ti.com
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
module TransportShmNotify;
module TransportShmNotifySetup;
module TransportNullSetup;
+ module TransportNetworkDummy;
}