Home | History | Annotate | Download | only in inc
      1 /*
      2  * dspbridge/mpu_api/inc/DSPNode.h
      3  *
      4  * DSP-BIOS Bridge driver support functions for TI OMAP processors.
      5  *
      6  * Copyright (C) 2007 Texas Instruments, Inc.
      7  *
      8  * This program is free software; you can redistribute it and/or modify it
      9  * under the terms of the GNU Lesser General Public License as published
     10  * by the Free Software Foundation version 2.1 of the License.
     11  *
     12  * This program is distributed .as is. WITHOUT ANY WARRANTY of any kind,
     13  * whether express or implied; without even the implied warranty of
     14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     15  * Lesser General Public License for more details.
     16  */
     17 
     18 /*
     19  *  ======== DSPNode.h ========
     20  *  Description:
     21  *      This is the header for the DSP/BIOS Bridge node module.
     22  *
     23  *  Public Functions:
     24  *      DSPNode_Allocate
     25  *      DSPNode_AllocMsgBuf
     26  *      DSPNode_ChangePriority
     27  *      DSPNode_Connect
     28  *      DSPNode_ConnectEx
     29  *      DSPNode_Create
     30  *      DSPNode_Delete
     31  *      DSPNode_FreeMsgBuf
     32  *      DSPNode_GetAttr
     33  *      DSPNode_GetMessage
     34  *      DSPNode_Pause
     35  *      DSPNode_PutMessage
     36  *      DSPNode_RegisterNotify
     37  *      DSPNode_Run
     38  *      DSPNode_Terminate
     39  *
     40  *  Notes:
     41  *
     42  *! Revision History:
     43  *! ================
     44  *! 23-Nov-2002 gp: Comment change: uEventMask now referred to as a "type".
     45  *!                 Comment cleanup, correspondence to db_api.doc.
     46  *! 12-Dec-2001 ag  DSP_ENOTIMPL added to DSPNode_Connect().
     47  *! 11-Sep-2001 ag  Added new error codes.
     48  *! 23-Apr-2001 jeh Added pStatus parameter to DSPNode_Terminate.
     49  *! 16-Feb-2001 jeh Added new error codes.
     50  *! 13-Feb-2001 kc: DSP/BIOS Bridge name updates.
     51  *! 27-Oct-2000 jeh Updated to version 0.9 API spec.
     52  *! 07-Sep-2000 jeh Changed type HANDLE in DSPNode_RegisterNotify to
     53  *!                 DSP_HNOTIFICATION. Added DSP_STRMATTR parameter to
     54  *!                 DSPNode_Connect().
     55  *! 27-Jul-2000 rr: Updated to ver 0.8 of DSPAPI.
     56  *! 27-Jun-2000 rr: Created from DBAPI.h
     57  */
     58 
     59 #ifndef DSPNode_
     60 #define DSPNode_
     61 
     62 #ifdef __cplusplus
     63 extern "C" {
     64 #endif
     65 
     66 /*
     67  *  ======== DSPNode_Allocate ========
     68  *  Purpose:
     69  *      Allocate data structures for controlling and communicating with a node
     70  *      on a specific DSP processor.
     71  *  Parameters:
     72  *      hProcessor:         The processor handle.
     73  *      pNodeID:            Ptr to DSP_UUID for the node.
     74  *      pArgs:              Ptr to optional node arguments.
     75  *      pAttrIn:            Ptr to optional node attributes.
     76  *      phNode:             Ptr to location to store node handle on return.
     77  *  Returns:
     78  *      DSP_SOK:            Success.
     79  *      DSP_EPOINTER:       One of the input parameters pointers is invalid.
     80  *      DSP_EHANDLE:        Invalid processor handle.
     81  *      DSP_EMEMORY:        Memory is not available to allocate a node
     82  *      DSP_EUUID:          The node with the specified UUID is not registered.
     83  *      DSP_EWRONGSTATE:    The specified processor is in the wrong state
     84  *                          (not running)
     85  *      DSP_ERANGE:         The iPriority field specified in pAttrIn is out
     86  *                          of range.
     87  *      DSP_EFAIL:          General failure.
     88  */
     89 extern DBAPI
     90 DSPNode_Allocate(DSP_HPROCESSOR hProcessor,
     91 		 IN CONST struct DSP_UUID * pNodeID,
     92 		 IN CONST OPTIONAL struct DSP_CBDATA * pArgs,
     93 		 IN OPTIONAL struct DSP_NODEATTRIN * pAttrIn,
     94 		 OUT DSP_HNODE * phNode);
     95 
     96 /*
     97  *  ======== DSPNode_AllocMsgBuf ========
     98  *  Purpose:
     99  *      Allocate and prepare a buffer whose descriptor will be passed to a DSP
    100  *      Node within a (DSP_MSG) message
    101  *  Parameters:
    102  *      hNode:              The node handle.
    103  *      uSize:              The size of the buffer (GPP bytes) to be allocated.
    104  *      pAttr:              Pointer to a DSP_BUFFERATTR structure.
    105  *      pBuffer:            Location to store the address of the allocated
    106  *                          buffer on output.
    107  *  Returns:
    108  *      DSP_SOK:            Success.
    109  *      DSP_EHANDLE:        Invalid node handle.
    110  *      DSP_EMEMORY:        Insufficent memory.
    111  *      DSP_EPOINTER:       pBuffer is not a valid address.
    112  *      DSP_EFAIL:          General Failure.
    113  *      DSP_EALIGNMENT:     Alignment value not supported.(Must be 0, 1, 2, 4)
    114  *      DSP_EBADSEGID:      Invalid Segment Id.
    115  *      DSP_ESIZE:          Invalid Size. Must be greater than zero.
    116  */
    117 	extern DBAPI DSPNode_AllocMsgBuf(DSP_HNODE hNode, UINT uSize,
    118 					 IN OPTIONAL struct DSP_BUFFERATTR * pAttr,
    119 					 OUT BYTE ** pBuffer);
    120 
    121 /*
    122  *  ======== DSPNode_ChangePriority ========
    123  *  Purpose:
    124  *      Change a task node's runtime priority within the DSP RTOS.
    125  *  Parameters:
    126  *      hNode:              The node handle.
    127  *      iPriority:          New runtime priority level.
    128  *  Returns:
    129  *      DSP_SOK:            Success.
    130  *      DSP_EHANDLE:        Invalid node handle.
    131  *      DSP_ERANGE:         iPriority is out of range.
    132  *      DSP_ENODETYPE:      Operation is invalid for this node type.
    133  *      DSP_ETIMEOUT:       A timeout occured before DSP responded.
    134  *      DSP_ERESTART:       A critical error occurred and the DSP is being
    135  *                          restarted.
    136  *      DSP_EWRONGSTATE:    The node is not allocated, paused, or running.
    137  *      DSP_EFAIL:          Unable to change the priority level.
    138  */
    139 	extern DBAPI DSPNode_ChangePriority(DSP_HNODE hNode, INT iPriority);
    140 
    141 /*
    142  *  ======== DSPNode_Connect ========
    143  *  Purpose:
    144  *      Make a stream connection, either between two nodes on a DSP,
    145  *      or between a node on a DSP and the GPP.
    146  *  Parameters:
    147  *      hNode:                  The first node handle.
    148  *      uStream:                Output stream index on first node (0 based).
    149  *      hOtherNode:             The second node handle.
    150  *      uOtherStream:           Input stream index on second node (0 based).
    151  *      pAttrs:                 Stream attributes. If NULL, defaults used.
    152  *  Returns:
    153  *      DSP_SOK:                Success.
    154  *      DSP_EHANDLE:            Invalid node handle.
    155  *      DSP_EMEMORY:            GPP memory allocation failure.
    156  *      DSP_EALREADYCONNCECTED: One of the specified connections has already
    157  *                              been made.
    158  *      DSP_EWRONGSTATE:        The node is not in the NODE_ALLOCATED state.
    159  *      DSP_EVALUE:             A Stream index is not valid.
    160  *      DSP_ENOMORECONNECTIONS: No more connections are allowed
    161  *      DSP_EFAIL:              Unable to make connection.
    162  *      DSP_ENOTIMPL:           Stream mode valid but not supported.
    163  *      DSP_ESTRMMODE           Illegal Stream mode specified.
    164  *
    165  */
    166 	extern DBAPI DSPNode_Connect(DSP_HNODE hNode, UINT uStream,
    167 				     DSP_HNODE hOtherNode, UINT uOtherStream,
    168 				     IN OPTIONAL struct DSP_STRMATTR * pAttr);
    169 
    170 /*
    171  *  ======== DSPNode_ConnectEx ========
    172  *  Purpose:
    173  *      Make a stream connection, either between two nodes on a DSP,
    174  *      or between a node on a DSP and the GPP.
    175  *  Parameters:
    176  *      hNode:                  The first node handle.
    177  *      uStream:                Output stream index on first node (0 based).
    178  *      hOtherNode:             The second node handle.
    179  *      uOtherStream:           Input stream index on second node (0 based).
    180  *      pAttrs:                 Stream attributes. If NULL, defaults used.
    181  *      pConnParam:             A pointer to a DSP_CBDATA structure that defines
    182  *                              connection parameter for device nodes to pass to DSP side.
    183  *                              If the value of this parameter is NULL, then this API behaves
    184  *                              like DSPNode_Connect. This parameter will have length of the
    185  *                              string and the null terminated string in DSP_CBDATA struct.
    186  *                              This can be extended in future to pass binary data.
    187  *
    188  *  Returns:
    189  *      DSP_SOK:                Success.
    190  *      DSP_EHANDLE:            Invalid node handle.
    191  *      DSP_EMEMORY:            GPP memory allocation failure.
    192  *      DSP_EALREADYCONNCECTED: One of the specified connections has already
    193  *                              been made.
    194  *      DSP_EWRONGSTATE:        The node is not in the NODE_ALLOCATED state.
    195  *      DSP_EVALUE:             A Stream index is not valid.
    196  *      DSP_ENOMORECONNECTIONS: No more connections are allowed
    197  *      DSP_EFAIL:              Unable to make connection.
    198  *      DSP_ENOTIMPL:           Stream mode valid but not supported.
    199  *      DSP_ESTRMMODE           Illegal Stream mode specified.
    200  *
    201  */
    202 	extern DBAPI DSPNode_ConnectEx(DSP_HNODE hNode, UINT uStream,
    203 				       DSP_HNODE hOtherNode, UINT uOtherStream,
    204 				       IN OPTIONAL struct DSP_STRMATTR * pAttr,
    205 				       IN OPTIONAL struct DSP_CBDATA * pConnParam);
    206 
    207 /*
    208  *  ======== DSPNode_Create ========
    209  *  Purpose:
    210  *      Create a node in a pre-run (i.e., inactive) state on its DSP processor.
    211  *  Parameters:
    212  *      hNode:              The node handle.
    213  *  Returns:
    214  *      DSP_SOK:            Success.
    215  *      DSP_EHANDLE:        Invalid node handle.
    216  *      DSP_ESYMBOL:        Create function, or iAlg, not found in the COFF file
    217  *      DSP_WRONGSTATE:     Operation is invalid for the current node state.
    218  *      DSP_ETASK:          Unable to create the task or process on the DSP.
    219  *      DSP_EMEMORY:        Memory Allocation failure on the DSP.
    220  *      DSP_ERESOURCE:      A requested resource is not available.
    221  *      DSP_EMULINST:       Multiple instances are not allowed.
    222  *      DSP_ENOTFOUND:      A specified entity was not found.
    223  *      DSP_EOUTOFIO:       An I/O resource is not available.
    224  *      DSP_ESTREAM:        Stream creation failure on the DSP.
    225  *      DSP_ETIMEOUT:       A timeout occurred before the DSP responded.
    226  *      DSP_ERESTART:       A critical error has occurred and the DSP is
    227  *                          being restarted.
    228  *      DSP_EOVERLAYMEMORY: Overlay region for this phase in use by another node
    229  *      DSP_EUSER1-16:      A node-specific failure occurred on the DSP.
    230  *      DSP_EFAIL:          Unable to Create the node.
    231  *  Details:
    232  */
    233 
    234 	extern DBAPI DSPNode_Create(DSP_HNODE hNode);
    235 
    236 /*
    237  *  ======== DSPNode_Delete ========
    238  *  Purpose:
    239  *      Delete all DSP-side and GPP-side resources for the node.
    240  *  Parameters:
    241  *      hNode:              The node handle.
    242  *  Returns:
    243  *      DSP_SOK:            Success.
    244  *      DSP_EHANDLE:        Invalid node handle.
    245  *      DSP_EDELETE:        A Deletion failure occured.
    246  *      DSP_EFREE:          A DSP memory free operation failed.
    247  *      DSP_EIOFREE:        A DSP I/O free operation failed.
    248  *      DSP_ETIMEOUT:       Timeout occured before the DSP responded.
    249  *      DSP_ERESTART:       A critical error has occurred and the DSP is
    250  *                          being restarted.
    251  *      DSP_EUSER1-16:      A node-specific failure occurred on the DSP.
    252  *      DSP_EOVERLAYMEMORY: Overlay region for this phase in use by another node
    253  *      DSP_EFAIL:          Unable to delete the node.
    254  *      DSP_ESYMBOL:        Delete function not found in the COFF file.
    255  */
    256 	extern DBAPI DSPNode_Delete(DSP_HNODE hNode);
    257 
    258 /*
    259  *  ======== DSPNode_FreeMsgBuf ========
    260  *  Purpose:
    261  *      Free a message buffer previously allocated by DSPNode_AllocMsgBuf..
    262  *  Parameters:
    263  *      hNode:              The node handle.
    264  *      pBuffer:            (Address) Buffer allocated by DSP_AllocMsgBuf.
    265  *      pAttr:              Same buffer attributes passed to DSP_AllocMsgBuf.
    266  *  Returns:
    267  *      DSP_SOK:            Success.
    268  *      DSP_EHANDLE:        Invalid node handle.
    269  *      DSP_EPOINTER:       pBuffer is not valid.
    270  *      DSP_EBADSEGID:      Invalid Segment Id.
    271  *      DSP_EFAIL:          Failure to free the buffer.
    272  */
    273 	extern DBAPI DSPNode_FreeMsgBuf(DSP_HNODE hNode, IN BYTE * pBuffer,
    274 					IN OPTIONAL struct DSP_BUFFERATTR * pAttr);
    275 
    276 /*
    277  *  ======== DSPNode_GetAttr ========
    278  *  Purpose:
    279  *      Copy the current attributes of the specified node.
    280  *  Parameters:
    281  *      hNode:              The node handle.
    282  *      pAttr:              Location to store the node attributes.
    283  *      uAttrSize:          The size of structure.
    284  *  Returns:
    285  *      DSP_SOK:            Success.
    286  *      DSP_EHANDLE:        Invalid node handle.
    287  *      DSP_EPOINTER:       Parameter pAttr is not valid.
    288  *      DSP_EFAIL:          Unable to retrieve node attributes.
    289  *      DSP_ESIZE:          The size of the specified DSP_NODEATTR structure
    290  *                          is too small to hold all node information.
    291  */
    292 	extern DBAPI DSPNode_GetAttr(DSP_HNODE hNode,
    293 				     OUT struct DSP_NODEATTR * pAttr, UINT uAttrSize);
    294 
    295 /*
    296  *  ======== DSPNode_GetMessage ========
    297  *  Purpose:
    298  *      Retrieve an event message from a task node.
    299  *  Parameters:
    300  *      hNode:              The node handle.
    301  *      pMessage:           The message structure.
    302  *      uTimeout:           Timeout to wait for message.
    303  *  Returns:
    304  *      DSP_SOK:            Success.
    305  *      DSP_EHANDLE:        Invalid node handle.
    306  *      DSP_EPOINTER:       Parameter pMessage is not valid.
    307  *      DSP_ENODETYPE:      Messages cannot be retrieved from this type of
    308  *                          node (eg a device node).
    309  *      DSP_ETIMEOUT:       A timeout occurred and there is no message ready.
    310  *      DSP_ERESTART:       A critical error has occurred and the DSP is
    311  *                          being restarted.
    312  *      DSP_EFAIL:          An error occurred trying to retrieve a message.
    313  *      DSP_ETRANSLATE      Message contains a shared memory buffer and unable
    314  *                          to map buffer to process.
    315  */
    316 	extern DBAPI DSPNode_GetMessage(DSP_HNODE hNode, OUT struct DSP_MSG * pMessage,
    317 					UINT uTimeout);
    318 
    319 /*
    320  *  ======== DSPNode_Pause ========
    321  *  Purpose:
    322  *      Temporarily suspend execution of a task node that is
    323  *      currently running on a DSP.
    324  *  Parameters:
    325  *      hNode:              The node handle.
    326  *  Returns:
    327  *      DSP_SOK:            Success.
    328  *      DSP_EHANDLE:        Invalid node handle.
    329  *      DSP_ENODETYPE:      Invalid operation for this node type.
    330  *      DSP_ETIMEOUT:       A timeout occured before the DSP responded.
    331  *      DSP_EWRONGSTATE:    Operation is invalid for the current node state.
    332  *      DSP_ERESTART:       A critical error has occurred and the DSP is
    333  *                          being restarted.
    334  *      DSP_EFAIL:          General failure.
    335  */
    336 	extern DBAPI DSPNode_Pause(DSP_HNODE hNode);
    337 
    338 /*
    339  *  ======== DSPNode_PutMessage ========
    340  *  Purpose:
    341  *      Send an event message to a task node.
    342  *  Parameters:
    343  *      hNode:              The node handle.
    344  *      pMessage:           The message structure.
    345  *      uTimeout:           Timeout (msecs) waiting for message to be queued.
    346  *  Returns:
    347  *      DSP_SOK:            Success.
    348  *      DSP_EHANDLE:        Invalid node handle.
    349  *      DSP_EPOINTER:       Parameter pMessage is not valid.
    350  *      DSP_ENODETYPE:      Invalid operation for this node type
    351  *      DSP_EWRONGSTATE:    Node is in an invalid state to send a message.
    352  *      DSP_ETIMEOUT:       Time out occured.
    353  *      DSP_ERESTART:       A critical error has occurred and the DSP is
    354  *                          being restarted.
    355  *      DSP_ETRANSLATE      The shared memory buffer contained in the message
    356  *                          could not be mapped into the clients address space.
    357  *      DSP_EFAIL:          General failure.
    358  */
    359 	extern DBAPI DSPNode_PutMessage(DSP_HNODE hNode,
    360 					IN CONST struct DSP_MSG * pMessage,
    361 					UINT uTimeout);
    362 
    363 /*
    364  *  ======== DSPNode_RegisterNotify ========
    365  *  Purpose:
    366  *      Register to be notified of specific events for this node.
    367  *  Parameters:
    368  *      hNode:              The node handle.
    369  *      uEventMask:         Type of event about which to be notified.
    370  *      uNotifyType:        Type of notification to be sent.
    371  *      hNotification:      Handle of DSP_NOTIFICATION object.
    372  *  Returns:
    373  *      DSP_SOK:            Success.
    374  *      DSP_EHANDLE:        Invalid node handle or hNotification.
    375  *      DSP_EVALUE:         Invalid uEventMask.
    376  *      DSP_ENOTIMP:        The specifed uNotifyType is not supported.
    377  *      DSP_EFAIL:          Unable to register for notification.
    378  */
    379 	extern DBAPI DSPNode_RegisterNotify(DSP_HNODE hNode, UINT uEventMask,
    380 					    UINT uNotifyType,
    381 					    struct DSP_NOTIFICATION* hNotification);
    382 
    383 /*
    384  *  ======== DSPNode_Run ========
    385  *  Purpose:
    386  *      Start a node running, or resume execution of a previously paused node.
    387  *  Parameters:
    388  *      hNode:              The node handle.
    389  *  Returns:
    390  *      DSP_SOK:            Success.
    391  *      DSP_EHANDLE:        Invalid node handle.
    392  *      DSP_ENODETYPE:      Invalid operation for this type of node.
    393  *      DSP_ESYMBOL:        Execute function not found in the COFF file.
    394  *      DSP_EWRONGSTATE:    The node is not in the Created or Paused state.
    395  *      DSP_ETIMEOUT:       A timeout occured before the DSP responded.
    396  *      DSP_ERESTART:       A critical error has occurred and the DSP is
    397  *                          being restarted.
    398  *      DSP_EOVERLAYMEMORY: Overlay region for this phase in use by another node
    399  *      DSP_EFAIL:          Unable to start or resume execution.
    400  */
    401 	extern DBAPI DSPNode_Run(DSP_HNODE hNode);
    402 
    403 /*
    404  *  ======== DSPNode_Terminate ========
    405  *  Purpose:
    406  *      Signal a task or xDAIS socket node running on a DSP processor that
    407  *      it should exit its execute-phase function.
    408  *  Parameters:
    409  *      hNode:              Handle of node to terminate.
    410  *      pStatus:            Location to execute-phase function return value.
    411  *                          Possible values are between DSP_EUSER1-16.
    412  *  Returns:
    413  *      DSP_SOK:            Success.
    414  *      DSP_EHANDLE:        Invalid node handle.
    415  *      DSP_ENODETYPE:      Invalid operation for this type of node.
    416  *      DSP_EWRONGSTATE:    The node is not in the Created or Paused state.
    417  *      DSP_ETIMEOUT:       A timeout occured before the DSP responded.
    418  *      DSP_ERESTART:       A critical error has occurred and the DSP is
    419  *                          being restarted.
    420  *      DSP_EFAIL:          Unable to Terminate the node.
    421  */
    422 	extern DBAPI DSPNode_Terminate(DSP_HNODE hNode, DSP_STATUS * pStatus);
    423 
    424 
    425 
    426 /*
    427  *  ======== DSPNode_GetUUIDProps ========
    428  *  Purpose:
    429  *      Fetch the Node Properties from the DCD/DOF file, give the UUID
    430  *  Parameters:
    431  *      hProcessor:         The processor handle.
    432  *      pNodeID:            Ptr to DSP_UUID for the node.
    433  *      pNodeProps:         Ptr to location to store node properties.
    434  *  Returns:
    435  *      DSP_SOK:            Success.
    436  *      DSP_EPOINTER:       One of the input parameters pointers is invalid.
    437  *      DSP_EHANDLE:        Invalid processor handle.
    438  *      DSP_EMEMORY:        Memory is not available to allocate a node
    439  *      DSP_EUUID:          The node with the specified UUID is not registered.
    440  *      DSP_EWRONGSTATE:    The specified processor is in the wrong state
    441  *                          (not running)
    442  *      DSP_ERANGE:         The iPriority field specified in pAttrIn is out
    443  *                          of range.
    444  *      DSP_EFAIL:          General failure.
    445  */
    446 	extern DBAPI DSPNode_GetUUIDProps(DSP_HPROCESSOR hProcessor,
    447 				      IN CONST struct DSP_UUID * pNodeID,
    448 				      OUT struct DSP_NDBPROPS * pNodeProps);
    449 #ifdef __cplusplus
    450 }
    451 #endif
    452 #endif				/* DSPNode_ */
    453