/* * 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_ */