/*
* Copyright 2001-2008 Texas Instruments - http://www.ti.com/
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* ======== DSPNode.h ========
* DSP-BIOS Bridge driver support functions for TI OMAP processors.
* Description:
* This is the header for the DSP/BIOS Bridge node module.
*
* Public Functions:
* DSPNode_Allocate
* DSPNode_AllocMsgBuf
* DSPNode_ChangePriority
* DSPNode_Connect
* DSPNode_ConnectEx
* DSPNode_Create
* DSPNode_Delete
* DSPNode_FreeMsgBuf
* DSPNode_GetAttr
* DSPNode_GetMessage
* DSPNode_Pause
* DSPNode_PutMessage
* DSPNode_RegisterNotify
* DSPNode_Run
* DSPNode_Terminate
*
* Notes:
*
*! Revision History:
*! ================
*! 23-Nov-2002 gp: Comment change: uEventMask now referred to as a "type".
*! Comment cleanup, correspondence to db_api.doc.
*! 12-Dec-2001 ag DSP_ENOTIMPL added to DSPNode_Connect().
*! 11-Sep-2001 ag Added new error codes.
*! 23-Apr-2001 jeh Added pStatus parameter to DSPNode_Terminate.
*! 16-Feb-2001 jeh Added new error codes.
*! 13-Feb-2001 kc: DSP/BIOS Bridge name updates.
*! 27-Oct-2000 jeh Updated to version 0.9 API spec.
*! 07-Sep-2000 jeh Changed type HANDLE in DSPNode_RegisterNotify to
*! DSP_HNOTIFICATION. Added DSP_STRMATTR parameter to
*! DSPNode_Connect().
*! 27-Jul-2000 rr: Updated to ver 0.8 of DSPAPI.
*! 27-Jun-2000 rr: Created from DBAPI.h
*/
#ifndef DSPNode_
#define DSPNode_
#ifdef __cplusplus
extern "C" {
#endif
/*
* ======== DSPNode_Allocate ========
* Purpose:
* Allocate data structures for controlling and communicating with a node
* on a specific DSP processor.
* Parameters:
* hProcessor: The processor handle.
* pNodeID: Ptr to DSP_UUID for the node.
* pArgs: Ptr to optional node arguments.
* pAttrIn: Ptr to optional node attributes.
* phNode: Ptr to location to store node handle on return.
* Returns:
* DSP_SOK: Success.
* DSP_EPOINTER: One of the input parameters pointers is invalid.
* DSP_EHANDLE: Invalid processor handle.
* DSP_EMEMORY: Memory is not available to allocate a node
* DSP_EUUID: The node with the specified UUID is not registered.
* DSP_EWRONGSTATE: The specified processor is in the wrong state
* (not running)
* DSP_ERANGE: The iPriority field specified in pAttrIn is out
* of range.
* DSP_EFAIL: General failure.
*/
extern DBAPI
DSPNode_Allocate(DSP_HPROCESSOR hProcessor,
IN CONST struct DSP_UUID * pNodeID,
IN CONST OPTIONAL struct DSP_CBDATA * pArgs,
IN OPTIONAL struct DSP_NODEATTRIN * pAttrIn,
OUT DSP_HNODE * phNode);
/*
* ======== DSPNode_AllocMsgBuf ========
* Purpose:
* Allocate and prepare a buffer whose descriptor will be passed to a DSP
* Node within a (DSP_MSG) message
* Parameters:
* hNode: The node handle.
* uSize: The size of the buffer (GPP bytes) to be allocated.
* pAttr: Pointer to a DSP_BUFFERATTR structure.
* pBuffer: Location to store the address of the allocated
* buffer on output.
* Returns:
* DSP_SOK: Success.
* DSP_EHANDLE: Invalid node handle.
* DSP_EMEMORY: Insufficent memory.
* DSP_EPOINTER: pBuffer is not a valid address.
* DSP_EFAIL: General Failure.
* DSP_EALIGNMENT: Alignment value not supported.(Must be 0, 1, 2, 4)
* DSP_EBADSEGID: Invalid Segment Id.
* DSP_ESIZE: Invalid Size. Must be greater than zero.
*/
extern DBAPI DSPNode_AllocMsgBuf(DSP_HNODE hNode, UINT uSize,
IN OPTIONAL struct DSP_BUFFERATTR * pAttr,
OUT BYTE ** pBuffer);
/*
* ======== DSPNode_ChangePriority ========
* Purpose:
* Change a task node's runtime priority within the DSP RTOS.
* Parameters:
* hNode: The node handle.
* iPriority: New runtime priority level.
* Returns:
* DSP_SOK: Success.
* DSP_EHANDLE: Invalid node handle.
* DSP_ERANGE: iPriority is out of range.
* DSP_ENODETYPE: Operation is invalid for this node type.
* DSP_ETIMEOUT: A timeout occured before DSP responded.
* DSP_ERESTART: A critical error occurred and the DSP is being
* restarted.
* DSP_EWRONGSTATE: The node is not allocated, paused, or running.
* DSP_EFAIL: Unable to change the priority level.
*/
extern DBAPI DSPNode_ChangePriority(DSP_HNODE hNode, INT iPriority);
/*
* ======== DSPNode_Connect ========
* Purpose:
* Make a stream connection, either between two nodes on a DSP,
* or between a node on a DSP and the GPP.
* Parameters:
* hNode: The first node handle.
* uStream: Output stream index on first node (0 based).
* hOtherNode: The second node handle.
* uOtherStream: Input stream index on second node (0 based).
* pAttrs: Stream attributes. If NULL, defaults used.
* Returns:
* DSP_SOK: Success.
* DSP_EHANDLE: Invalid node handle.
* DSP_EMEMORY: GPP memory allocation failure.
* DSP_EALREADYCONNCECTED: One of the specified connections has already
* been made.
* DSP_EWRONGSTATE: The node is not in the NODE_ALLOCATED state.
* DSP_EVALUE: A Stream index is not valid.
* DSP_ENOMORECONNECTIONS: No more connections are allowed
* DSP_EFAIL: Unable to make connection.
* DSP_ENOTIMPL: Stream mode valid but not supported.
* DSP_ESTRMMODE Illegal Stream mode specified.
*
*/
extern DBAPI DSPNode_Connect(DSP_HNODE hNode, UINT uStream,
DSP_HNODE hOtherNode, UINT uOtherStream,
IN OPTIONAL struct DSP_STRMATTR * pAttr);
/*
* ======== DSPNode_ConnectEx ========
* Purpose:
* Make a stream connection, either between two nodes on a DSP,
* or between a node on a DSP and the GPP.
* Parameters:
* hNode: The first node handle.
* uStream: Output stream index on first node (0 based).
* hOtherNode: The second node handle.
* uOtherStream: Input stream index on second node (0 based).
* pAttrs: Stream attributes. If NULL, defaults used.
* pConnParam: A pointer to a DSP_CBDATA structure that defines
* connection parameter for device nodes to pass to DSP side.
* If the value of this parameter is NULL, then this API behaves
* like DSPNode_Connect. This parameter will have length of the
* string and the null terminated string in DSP_CBDATA struct.
* This can be extended in future to pass binary data.
*
* Returns:
* DSP_SOK: Success.
* DSP_EHANDLE: Invalid node handle.
* DSP_EMEMORY: GPP memory allocation failure.
* DSP_EALREADYCONNCECTED: One of the specified connections has already
* been made.
* DSP_EWRONGSTATE: The node is not in the NODE_ALLOCATED state.
* DSP_EVALUE: A Stream index is not valid.
* DSP_ENOMORECONNECTIONS: No more connections are allowed
* DSP_EFAIL: Unable to make connection.
* DSP_ENOTIMPL: Stream mode valid but not supported.
* DSP_ESTRMMODE Illegal Stream mode specified.
*
*/
extern DBAPI DSPNode_ConnectEx(DSP_HNODE hNode, UINT uStream,
DSP_HNODE hOtherNode, UINT uOtherStream,
IN OPTIONAL struct DSP_STRMATTR * pAttr,
IN OPTIONAL struct DSP_CBDATA * pConnParam);
/*
* ======== DSPNode_Create ========
* Purpose:
* Create a node in a pre-run (i.e., inactive) state on its DSP processor.
* Parameters:
* hNode: The node handle.
* Returns:
* DSP_SOK: Success.
* DSP_EHANDLE: Invalid node handle.
* DSP_ESYMBOL: Create function, or iAlg, not found in the COFF file
* DSP_WRONGSTATE: Operation is invalid for the current node state.
* DSP_ETASK: Unable to create the task or process on the DSP.
* DSP_EMEMORY: Memory Allocation failure on the DSP.
* DSP_ERESOURCE: A requested resource is not available.
* DSP_EMULINST: Multiple instances are not allowed.
* DSP_ENOTFOUND: A specified entity was not found.
* DSP_EOUTOFIO: An I/O resource is not available.
* DSP_ESTREAM: Stream creation failure on the DSP.
* DSP_ETIMEOUT: A timeout occurred before the DSP responded.
* DSP_ERESTART: A critical error has occurred and the DSP is
* being restarted.
* DSP_EOVERLAYMEMORY: Overlay region for this phase in use by another node
* DSP_EUSER1-16: A node-specific failure occurred on the DSP.
* DSP_EFAIL: Unable to Create the node.
* Details:
*/
extern DBAPI DSPNode_Create(DSP_HNODE hNode);
/*
* ======== DSPNode_Delete ========
* Purpose:
* Delete all DSP-side and GPP-side resources for the node.
* Parameters:
* hNode: The node handle.
* Returns:
* DSP_SOK: Success.
* DSP_EHANDLE: Invalid node handle.
* DSP_EDELETE: A Deletion failure occured.
* DSP_EFREE: A DSP memory free operation failed.
* DSP_EIOFREE: A DSP I/O free operation failed.
* DSP_ETIMEOUT: Timeout occured before the DSP responded.
* DSP_ERESTART: A critical error has occurred and the DSP is
* being restarted.
* DSP_EUSER1-16: A node-specific failure occurred on the DSP.
* DSP_EOVERLAYMEMORY: Overlay region for this phase in use by another node
* DSP_EFAIL: Unable to delete the node.
* DSP_ESYMBOL: Delete function not found in the COFF file.
*/
extern DBAPI DSPNode_Delete(DSP_HNODE hNode);
/*
* ======== DSPNode_FreeMsgBuf ========
* Purpose:
* Free a message buffer previously allocated by DSPNode_AllocMsgBuf..
* Parameters:
* hNode: The node handle.
* pBuffer: (Address) Buffer allocated by DSP_AllocMsgBuf.
* pAttr: Same buffer attributes passed to DSP_AllocMsgBuf.
* Returns:
* DSP_SOK: Success.
* DSP_EHANDLE: Invalid node handle.
* DSP_EPOINTER: pBuffer is not valid.
* DSP_EBADSEGID: Invalid Segment Id.
* DSP_EFAIL: Failure to free the buffer.
*/
extern DBAPI DSPNode_FreeMsgBuf(DSP_HNODE hNode, IN BYTE * pBuffer,
IN OPTIONAL struct DSP_BUFFERATTR * pAttr);
/*
* ======== DSPNode_GetAttr ========
* Purpose:
* Copy the current attributes of the specified node.
* Parameters:
* hNode: The node handle.
* pAttr: Location to store the node attributes.
* uAttrSize: The size of structure.
* Returns:
* DSP_SOK: Success.
* DSP_EHANDLE: Invalid node handle.
* DSP_EPOINTER: Parameter pAttr is not valid.
* DSP_EFAIL: Unable to retrieve node attributes.
* DSP_ESIZE: The size of the specified DSP_NODEATTR structure
* is too small to hold all node information.
*/
extern DBAPI DSPNode_GetAttr(DSP_HNODE hNode,
OUT struct DSP_NODEATTR * pAttr, UINT uAttrSize);
/*
* ======== DSPNode_GetMessage ========
* Purpose:
* Retrieve an event message from a task node.
* Parameters:
* hNode: The node handle.
* pMessage: The message structure.
* uTimeout: Timeout to wait for message.
* Returns:
* DSP_SOK: Success.
* DSP_EHANDLE: Invalid node handle.
* DSP_EPOINTER: Parameter pMessage is not valid.
* DSP_ENODETYPE: Messages cannot be retrieved from this type of
* node (eg a device node).
* DSP_ETIMEOUT: A timeout occurred and there is no message ready.
* DSP_ERESTART: A critical error has occurred and the DSP is
* being restarted.
* DSP_EFAIL: An error occurred trying to retrieve a message.
* DSP_ETRANSLATE Message contains a shared memory buffer and unable
* to map buffer to process.
*/
extern DBAPI DSPNode_GetMessage(DSP_HNODE hNode, OUT struct DSP_MSG * pMessage,
UINT uTimeout);
/*
* ======== DSPNode_Pause ========
* Purpose:
* Temporarily suspend execution of a task node that is
* currently running on a DSP.
* Parameters:
* hNode: The node handle.
* Returns:
* DSP_SOK: Success.
* DSP_EHANDLE: Invalid node handle.
* DSP_ENODETYPE: Invalid operation for this node type.
* DSP_ETIMEOUT: A timeout occured before the DSP responded.
* DSP_EWRONGSTATE: Operation is invalid for the current node state.
* DSP_ERESTART: A critical error has occurred and the DSP is
* being restarted.
* DSP_EFAIL: General failure.
*/
extern DBAPI DSPNode_Pause(DSP_HNODE hNode);
/*
* ======== DSPNode_PutMessage ========
* Purpose:
* Send an event message to a task node.
* Parameters:
* hNode: The node handle.
* pMessage: The message structure.
* uTimeout: Timeout (msecs) waiting for message to be queued.
* Returns:
* DSP_SOK: Success.
* DSP_EHANDLE: Invalid node handle.
* DSP_EPOINTER: Parameter pMessage is not valid.
* DSP_ENODETYPE: Invalid operation for this node type
* DSP_EWRONGSTATE: Node is in an invalid state to send a message.
* DSP_ETIMEOUT: Time out occured.
* DSP_ERESTART: A critical error has occurred and the DSP is
* being restarted.
* DSP_ETRANSLATE The shared memory buffer contained in the message
* could not be mapped into the clients address space.
* DSP_EFAIL: General failure.
*/
extern DBAPI DSPNode_PutMessage(DSP_HNODE hNode,
IN CONST struct DSP_MSG * pMessage,
UINT uTimeout);
/*
* ======== DSPNode_RegisterNotify ========
* Purpose:
* Register to be notified of specific events for this node.
* Parameters:
* hNode: The node handle.
* uEventMask: Type of event about which to be notified.
* uNotifyType: Type of notification to be sent.
* hNotification: Handle of DSP_NOTIFICATION object.
* Returns:
* DSP_SOK: Success.
* DSP_EHANDLE: Invalid node handle or hNotification.
* DSP_EVALUE: Invalid uEventMask.
* DSP_ENOTIMP: The specifed uNotifyType is not supported.
* DSP_EFAIL: Unable to register for notification.
*/
extern DBAPI DSPNode_RegisterNotify(DSP_HNODE hNode, UINT uEventMask,
UINT uNotifyType,
struct DSP_NOTIFICATION* hNotification);
/*
* ======== DSPNode_Run ========
* Purpose:
* Start a node running, or resume execution of a previously paused node.
* Parameters:
* hNode: The node handle.
* Returns:
* DSP_SOK: Success.
* DSP_EHANDLE: Invalid node handle.
* DSP_ENODETYPE: Invalid operation for this type of node.
* DSP_ESYMBOL: Execute function not found in the COFF file.
* DSP_EWRONGSTATE: The node is not in the Created or Paused state.
* DSP_ETIMEOUT: A timeout occured before the DSP responded.
* DSP_ERESTART: A critical error has occurred and the DSP is
* being restarted.
* DSP_EOVERLAYMEMORY: Overlay region for this phase in use by another node
* DSP_EFAIL: Unable to start or resume execution.
*/
extern DBAPI DSPNode_Run(DSP_HNODE hNode);
/*
* ======== DSPNode_Terminate ========
* Purpose:
* Signal a task or xDAIS socket node running on a DSP processor that
* it should exit its execute-phase function.
* Parameters:
* hNode: Handle of node to terminate.
* pStatus: Location to execute-phase function return value.
* Possible values are between DSP_EUSER1-16.
* Returns:
* DSP_SOK: Success.
* DSP_EHANDLE: Invalid node handle.
* DSP_ENODETYPE: Invalid operation for this type of node.
* DSP_EWRONGSTATE: The node is not in the Created or Paused state.
* DSP_ETIMEOUT: A timeout occured before the DSP responded.
* DSP_ERESTART: A critical error has occurred and the DSP is
* being restarted.
* DSP_EFAIL: Unable to Terminate the node.
*/
extern DBAPI DSPNode_Terminate(DSP_HNODE hNode, DSP_STATUS * pStatus);
/*
* ======== DSPNode_GetUUIDProps ========
* Purpose:
* Fetch the Node Properties from the DCD/DOF file, give the UUID
* Parameters:
* hProcessor: The processor handle.
* pNodeID: Ptr to DSP_UUID for the node.
* pNodeProps: Ptr to location to store node properties.
* Returns:
* DSP_SOK: Success.
* DSP_EPOINTER: One of the input parameters pointers is invalid.
* DSP_EHANDLE: Invalid processor handle.
* DSP_EMEMORY: Memory is not available to allocate a node
* DSP_EUUID: The node with the specified UUID is not registered.
* DSP_EWRONGSTATE: The specified processor is in the wrong state
* (not running)
* DSP_ERANGE: The iPriority field specified in pAttrIn is out
* of range.
* DSP_EFAIL: General failure.
*/
extern DBAPI DSPNode_GetUUIDProps(DSP_HPROCESSOR hProcessor,
IN CONST struct DSP_UUID * pNodeID,
OUT struct DSP_NDBPROPS * pNodeProps);
#ifdef __cplusplus
}
#endif
#endif /* DSPNode_ */