| /* |
| * dspbridge/mpu_api/inc/nldrdefs.h |
| * |
| * DSP-BIOS Bridge driver support functions for TI OMAP processors. |
| * |
| * Copyright (C) 2007 Texas Instruments, Inc. |
| * |
| * This program is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU Lesser General Public License as published |
| * by the Free Software Foundation version 2.1 of the License. |
| * |
| * This program is distributed .as is. WITHOUT ANY WARRANTY of any kind, |
| * whether express or implied; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| */ |
| |
| |
| |
| /* |
| * ======== nldrdefs.h ======== |
| * Description: |
| * Global Dynamic + static/overlay Node loader (NLDR) constants and types. |
| * |
| *! Revision History |
| *! ================ |
| *! 07-Apr-2003 map Consolidated dldrdefs.h into nldrdefs.h |
| *! 05-Aug-2002 jeh Created. |
| */ |
| |
| #ifndef NLDRDEFS_ |
| #define NLDRDEFS_ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #include <dbdcddef.h> |
| #include <devdefs.h> |
| |
| #define NLDR_MAXPATHLENGTH 255 |
| /* NLDR Objects: */ |
| struct NLDR_OBJECT; |
| /*typedef struct NLDR_OBJECT *NLDR_HOBJECT;*/ |
| struct NLDR_NODEOBJECT; |
| /*typedef struct NLDR_NODEOBJECT *NLDR_HNODE;*/ |
| |
| /* |
| * ======== NLDR_LOADTYPE ======== |
| * Load types for a node. Must match values in node.h55. |
| */ |
| typedef enum NLDR_LOADTYPE { |
| NLDR_STATICLOAD, /* Linked in base image, not overlay */ |
| NLDR_DYNAMICLOAD, /* Dynamically loaded node */ |
| NLDR_OVLYLOAD /* Linked in base image, overlay node */ |
| } NLDR_LOADTYPE; |
| |
| /* |
| * ======== NLDR_OVLYFXN ======== |
| * Causes code or data to be copied from load address to run address. This |
| * is the "COD_WRITEFXN" that gets passed to the DBLL_Library and is used as |
| * the ZL write function. |
| * |
| * Parameters: |
| * pPrivRef: Handle to identify the node. |
| * ulDspRunAddr: Run address of code or data. |
| * ulDspLoadAddr: Load address of code or data. |
| * ulNumBytes: Number of (GPP) bytes to copy. |
| * nMemSpace: RMS_CODE or RMS_DATA. |
| * Returns: |
| * ulNumBytes: Success. |
| * 0: Failure. |
| * Requires: |
| * Ensures: |
| */ |
| typedef ULONG(CDECL * NLDR_OVLYFXN) (PVOID pPrivRef, ULONG ulDspRunAddr, |
| ULONG ulDspLoadAddr, |
| ULONG ulNumBytes, UINT nMemSpace); |
| |
| /* |
| * ======== NLDR_WRITEFXN ======== |
| * Write memory function. Used for dynamic load writes. |
| * Parameters: |
| * pPrivRef: Handle to identify the node. |
| * ulDspAddr: Address of code or data. |
| * pBuf: Code or data to be written |
| * ulNumBytes: Number of (GPP) bytes to write. |
| * nMemSpace: DBLL_DATA or DBLL_CODE. |
| * Returns: |
| * ulNumBytes: Success. |
| * 0: Failure. |
| * Requires: |
| * Ensures: |
| */ |
| typedef ULONG(CDECL * NLDR_WRITEFXN) (PVOID pPrivRef, |
| ULONG ulDspAddr, PVOID pBuf, |
| ULONG ulNumBytes, UINT nMemSpace); |
| |
| /* |
| * ======== NLDR_ATTRS ======== |
| * Attributes passed to NLDR_Create function. |
| */ |
| struct NLDR_ATTRS { |
| NLDR_OVLYFXN pfnOvly; |
| NLDR_WRITEFXN pfnWrite; |
| USHORT usDSPWordSize; |
| USHORT usDSPMauSize; |
| } ; |
| |
| /* |
| * ======== NLDR_PHASE ======== |
| * Indicates node create, delete, or execute phase function. |
| */ |
| typedef enum { |
| NLDR_CREATE, |
| NLDR_DELETE, |
| NLDR_EXECUTE, |
| NLDR_NOPHASE |
| } NLDR_PHASE; |
| |
| /* |
| * Typedefs of loader functions imported from a DLL, or defined in a |
| * function table. |
| */ |
| |
| /* |
| * ======== NLDR_Allocate ======== |
| * Allocate resources to manage the loading of a node on the DSP. |
| * |
| * Parameters: |
| * hNldr: Handle of loader that will load the node. |
| * pPrivRef: Handle to identify the node. |
| * pNodeProps: Pointer to a DCD_NODEPROPS for the node. |
| * phNldrNode: Location to store node handle on output. This handle |
| * will be passed to NLDR_Load/NLDR_Unload. |
| * pfPhaseSplit: pointer to boolean variable referenced in node.c |
| * Returns: |
| * DSP_SOK: Success. |
| * DSP_EMEMORY: Insufficient memory on GPP. |
| * Requires: |
| * NLDR_Init() called. |
| * Valid hNldr. |
| * pNodeProps != NULL. |
| * phNldrNode != NULL. |
| * Ensures: |
| * DSP_SOK: IsValidNode(*phNldrNode). |
| * error: *phNldrNode == NULL. |
| */ |
| typedef DSP_STATUS(*NLDR_ALLOCATEFXN) (struct NLDR_OBJECT* hNldr, |
| PVOID pPrivRef, |
| IN CONST struct DCD_NODEPROPS *pNodeProps, |
| OUT struct NLDR_NODEOBJECT* * phNldrNode, |
| OUT bool * pfPhaseSplit); |
| |
| /* |
| * ======== NLDR_Create ======== |
| * Create a loader object. This object handles the loading and unloading of |
| * create, delete, and execute phase functions of nodes on the DSP target. |
| * |
| * Parameters: |
| * phNldr: Location to store loader handle on output. |
| * hDevObject: Device for this processor. |
| * pAttrs: Loader attributes. |
| * Returns: |
| * DSP_SOK: Success; |
| * DSP_EMEMORY: Insufficient memory for requested resources. |
| * Requires: |
| * NLDR_Init() called. |
| * phNldr != NULL. |
| * hDevObject != NULL. |
| * pAttrs != NULL. |
| * Ensures: |
| * DSP_SOK: Valid *phNldr. |
| * error: *phNldr == NULL. |
| */ |
| typedef DSP_STATUS(*NLDR_CREATEFXN) (OUT struct NLDR_OBJECT* * phNldr, |
| struct DEV_OBJECT* hDevObject, |
| IN CONST struct NLDR_ATTRS * pAttrs); |
| |
| /* |
| * ======== NLDR_Delete ======== |
| * Delete the NLDR loader. |
| * |
| * Parameters: |
| * hNldr: Node manager object. |
| * Returns: |
| * Requires: |
| * NLDR_Init() called. |
| * Valid hNldr. |
| * Ensures: |
| * hNldr invalid |
| */ |
| typedef VOID(*NLDR_DELETEFXN) (struct NLDR_OBJECT* hNldr); |
| |
| /* |
| * ======== NLDR_Exit ======== |
| * Discontinue usage of NLDR module. |
| * |
| * Parameters: |
| * Returns: |
| * Requires: |
| * NLDR_Init() successfully called before. |
| * Ensures: |
| * Any resources acquired in NLDR_Init() will be freed when last NLDR |
| * client calls NLDR_Exit(). |
| */ |
| typedef VOID(*NLDR_EXITFXN) (); |
| |
| /* |
| * ======== NLDR_Free ======== |
| * Free resources allocated in NLDR_Allocate. |
| * |
| * Parameters: |
| * hNldrNode: Handle returned from NLDR_Allocate(). |
| * Returns: |
| * Requires: |
| * NLDR_Init() called. |
| * Valid hNldrNode. |
| * Ensures: |
| */ |
| typedef VOID(*NLDR_FREEFXN) (struct NLDR_NODEOBJECT* hNldrNode); |
| |
| /* |
| * ======== NLDR_GetFxnAddr ======== |
| * Get address of create, delete, or execute phase function of a node on |
| * the DSP. |
| * |
| * Parameters: |
| * hNldrNode: Handle returned from NLDR_Allocate(). |
| * pstrFxn: Name of function. |
| * pulAddr: Location to store function address. |
| * Returns: |
| * DSP_SOK: Success. |
| * DSP_ESYMBOL: Address of function not found. |
| * Requires: |
| * NLDR_Init() called. |
| * Valid hNldrNode. |
| * pulAddr != NULL; |
| * pstrFxn != NULL; |
| * Ensures: |
| */ |
| typedef DSP_STATUS(*NLDR_GETFXNADDRFXN) (struct NLDR_NODEOBJECT* hNldrNode, |
| PSTR pstrFxn, ULONG * pulAddr); |
| |
| /* |
| * ======== NLDR_Init ======== |
| * Initialize the NLDR module. |
| * |
| * Parameters: |
| * Returns: |
| * TRUE if initialization succeeded, FALSE otherwise. |
| * Ensures: |
| */ |
| typedef bool(*NLDR_INITFXN) (); |
| |
| /* |
| * ======== NLDR_Load ======== |
| * Load create, delete, or execute phase function of a node on the DSP. |
| * |
| * Parameters: |
| * hNldrNode: Handle returned from NLDR_Allocate(). |
| * phase: Type of function to load (create, delete, or execute). |
| * Returns: |
| * DSP_SOK: Success. |
| * DSP_EMEMORY: Insufficient memory on GPP. |
| * DSP_EOVERLAYMEMORY: Can't overlay phase because overlay memory |
| * is already in use. |
| * DSP_EDYNLOAD: Failure in dynamic loader library. |
| * DSP_EFWRITE: Failed to write phase's code or date to target. |
| * Requires: |
| * NLDR_Init() called. |
| * Valid hNldrNode. |
| * Ensures: |
| */ |
| typedef DSP_STATUS(*NLDR_LOADFXN) (struct NLDR_NODEOBJECT* hNldrNode, |
| NLDR_PHASE phase); |
| |
| /* |
| * ======== NLDR_Unload ======== |
| * Unload create, delete, or execute phase function of a node on the DSP. |
| * |
| * Parameters: |
| * hNldrNode: Handle returned from NLDR_Allocate(). |
| * phase: Node function to unload (create, delete, or execute). |
| * Returns: |
| * DSP_SOK: Success. |
| * DSP_EMEMORY: Insufficient memory on GPP. |
| * Requires: |
| * NLDR_Init() called. |
| * Valid hNldrNode. |
| * Ensures: |
| */ |
| typedef DSP_STATUS(*NLDR_UNLOADFXN) (struct NLDR_NODEOBJECT* hNldrNode, |
| NLDR_PHASE phase); |
| |
| /* |
| * ======== NLDR_FXNS ======== |
| */ |
| struct NLDR_FXNS { |
| NLDR_ALLOCATEFXN pfnAllocate; |
| NLDR_CREATEFXN pfnCreate; |
| NLDR_DELETEFXN pfnDelete; |
| NLDR_EXITFXN pfnExit; |
| NLDR_FREEFXN pfnFree; |
| NLDR_GETFXNADDRFXN pfnGetFxnAddr; |
| NLDR_INITFXN pfnInit; |
| NLDR_LOADFXN pfnLoad; |
| NLDR_UNLOADFXN pfnUnload; |
| } ; |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| #endif /* NLDRDEFS_ */ |