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