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