173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * dspbridge/mpu_api/inc/nldrdefs.h 373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP-BIOS Bridge driver support functions for TI OMAP processors. 573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Copyright (C) 2007 Texas Instruments, Inc. 773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * This program is free software; you can redistribute it and/or modify it 973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * under the terms of the GNU Lesser General Public License as published 1073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * by the Free Software Foundation version 2.1 of the License. 1173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 1273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * This program is distributed .as is. WITHOUT ANY WARRANTY of any kind, 1373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * whether express or implied; without even the implied warranty of 1473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Lesser General Public License for more details. 1673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 1773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 1873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 1973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 2073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 2173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== nldrdefs.h ======== 2273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Description: 2373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Global Dynamic + static/overlay Node loader (NLDR) constants and types. 2473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 2573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! Revision History 2673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! ================ 2773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 07-Apr-2003 map Consolidated dldrdefs.h into nldrdefs.h 2873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 05-Aug-2002 jeh Created. 2973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 3073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 3173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifndef NLDRDEFS_ 3273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#define NLDRDEFS_ 3373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 3473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef __cplusplus 3573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavinextern "C" { 3673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif 3773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 3873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <dbdcddef.h> 3973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <devdefs.h> 4073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 4173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#define NLDR_MAXPATHLENGTH 255 4273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* NLDR Objects: */ 4373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin struct NLDR_OBJECT; 4473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin /*typedef struct NLDR_OBJECT *NLDR_HOBJECT;*/ 4573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin struct NLDR_NODEOBJECT; 4673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin /*typedef struct NLDR_NODEOBJECT *NLDR_HNODE;*/ 4773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 4873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 4973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== NLDR_LOADTYPE ======== 5073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Load types for a node. Must match values in node.h55. 5173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 5273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin typedef enum NLDR_LOADTYPE { 5373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_STATICLOAD, /* Linked in base image, not overlay */ 5473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_DYNAMICLOAD, /* Dynamically loaded node */ 5573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_OVLYLOAD /* Linked in base image, overlay node */ 5673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } NLDR_LOADTYPE; 5773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 5873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 5973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== NLDR_OVLYFXN ======== 6073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Causes code or data to be copied from load address to run address. This 6173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * is the "COD_WRITEFXN" that gets passed to the DBLL_Library and is used as 6273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * the ZL write function. 6373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 6473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 6573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pPrivRef: Handle to identify the node. 6673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ulDspRunAddr: Run address of code or data. 6773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ulDspLoadAddr: Load address of code or data. 6873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ulNumBytes: Number of (GPP) bytes to copy. 6973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * nMemSpace: RMS_CODE or RMS_DATA. 7073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 7173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ulNumBytes: Success. 7273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 0: Failure. 7373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 7473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 7573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 7673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin typedef ULONG(CDECL * NLDR_OVLYFXN) (PVOID pPrivRef, ULONG ulDspRunAddr, 7773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin ULONG ulDspLoadAddr, 7873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin ULONG ulNumBytes, UINT nMemSpace); 7973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 8073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 8173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== NLDR_WRITEFXN ======== 8273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Write memory function. Used for dynamic load writes. 8373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 8473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pPrivRef: Handle to identify the node. 8573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ulDspAddr: Address of code or data. 8673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pBuf: Code or data to be written 8773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ulNumBytes: Number of (GPP) bytes to write. 8873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * nMemSpace: DBLL_DATA or DBLL_CODE. 8973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 9073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ulNumBytes: Success. 9173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 0: Failure. 9273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 9373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 9473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 9573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin typedef ULONG(CDECL * NLDR_WRITEFXN) (PVOID pPrivRef, 9673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin ULONG ulDspAddr, PVOID pBuf, 9773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin ULONG ulNumBytes, UINT nMemSpace); 9873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 9973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 10073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== NLDR_ATTRS ======== 10173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Attributes passed to NLDR_Create function. 10273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 10373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin struct NLDR_ATTRS { 10473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_OVLYFXN pfnOvly; 10573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_WRITEFXN pfnWrite; 10673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin USHORT usDSPWordSize; 10773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin USHORT usDSPMauSize; 10873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } ; 10973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 11073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 11173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== NLDR_PHASE ======== 11273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Indicates node create, delete, or execute phase function. 11373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 11473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin typedef enum { 11573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_CREATE, 11673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_DELETE, 11773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_EXECUTE, 11873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_NOPHASE 11973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } NLDR_PHASE; 12073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 12173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 12273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Typedefs of loader functions imported from a DLL, or defined in a 12373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * function table. 12473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 12573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 12673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 12773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== NLDR_Allocate ======== 12873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Allocate resources to manage the loading of a node on the DSP. 12973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 13073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 13173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * hNldr: Handle of loader that will load the node. 13273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pPrivRef: Handle to identify the node. 13373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pNodeProps: Pointer to a DCD_NODEPROPS for the node. 13473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * phNldrNode: Location to store node handle on output. This handle 13573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * will be passed to NLDR_Load/NLDR_Unload. 13673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pfPhaseSplit: pointer to boolean variable referenced in node.c 13773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 13873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP_SOK: Success. 13973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP_EMEMORY: Insufficient memory on GPP. 14073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 14173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * NLDR_Init() called. 14273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Valid hNldr. 14373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pNodeProps != NULL. 14473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * phNldrNode != NULL. 14573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 14673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP_SOK: IsValidNode(*phNldrNode). 14773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * error: *phNldrNode == NULL. 14873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 14973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin typedef DSP_STATUS(*NLDR_ALLOCATEFXN) (struct NLDR_OBJECT* hNldr, 15073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin PVOID pPrivRef, 15173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin IN CONST struct DCD_NODEPROPS *pNodeProps, 15273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin OUT struct NLDR_NODEOBJECT* * phNldrNode, 15373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin OUT bool * pfPhaseSplit); 15473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 15573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 15673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== NLDR_Create ======== 15773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Create a loader object. This object handles the loading and unloading of 15873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * create, delete, and execute phase functions of nodes on the DSP target. 15973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 16073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 16173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * phNldr: Location to store loader handle on output. 16273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * hDevObject: Device for this processor. 16373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pAttrs: Loader attributes. 16473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 16573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP_SOK: Success; 16673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP_EMEMORY: Insufficient memory for requested resources. 16773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 16873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * NLDR_Init() called. 16973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * phNldr != NULL. 17073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * hDevObject != NULL. 17173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pAttrs != NULL. 17273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 17373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP_SOK: Valid *phNldr. 17473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * error: *phNldr == NULL. 17573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 17673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin typedef DSP_STATUS(*NLDR_CREATEFXN) (OUT struct NLDR_OBJECT* * phNldr, 17773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin struct DEV_OBJECT* hDevObject, 17873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin IN CONST struct NLDR_ATTRS * pAttrs); 17973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 18073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 18173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== NLDR_Delete ======== 18273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Delete the NLDR loader. 18373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 18473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 18573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * hNldr: Node manager object. 18673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 18773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 18873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * NLDR_Init() called. 18973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Valid hNldr. 19073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 19173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * hNldr invalid 19273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 19373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin typedef VOID(*NLDR_DELETEFXN) (struct NLDR_OBJECT* hNldr); 19473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 19573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 19673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== NLDR_Exit ======== 19773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Discontinue usage of NLDR module. 19873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 19973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 20073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 20173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 20273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * NLDR_Init() successfully called before. 20373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 20473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Any resources acquired in NLDR_Init() will be freed when last NLDR 20573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * client calls NLDR_Exit(). 20673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 20773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin typedef VOID(*NLDR_EXITFXN) (); 20873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 20973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 21073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== NLDR_Free ======== 21173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Free resources allocated in NLDR_Allocate. 21273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 21373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 21473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * hNldrNode: Handle returned from NLDR_Allocate(). 21573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 21673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 21773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * NLDR_Init() called. 21873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Valid hNldrNode. 21973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 22073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 22173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin typedef VOID(*NLDR_FREEFXN) (struct NLDR_NODEOBJECT* hNldrNode); 22273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 22373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 22473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== NLDR_GetFxnAddr ======== 22573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Get address of create, delete, or execute phase function of a node on 22673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * the DSP. 22773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 22873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 22973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * hNldrNode: Handle returned from NLDR_Allocate(). 23073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pstrFxn: Name of function. 23173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pulAddr: Location to store function address. 23273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 23373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP_SOK: Success. 23473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP_ESYMBOL: Address of function not found. 23573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 23673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * NLDR_Init() called. 23773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Valid hNldrNode. 23873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pulAddr != NULL; 23973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pstrFxn != NULL; 24073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 24173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 24273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin typedef DSP_STATUS(*NLDR_GETFXNADDRFXN) (struct NLDR_NODEOBJECT* hNldrNode, 24373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin PSTR pstrFxn, ULONG * pulAddr); 24473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 24573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 24673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== NLDR_Init ======== 24773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Initialize the NLDR module. 24873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 24973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 25073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 25173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * TRUE if initialization succeeded, FALSE otherwise. 25273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 25373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 25473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin typedef bool(*NLDR_INITFXN) (); 25573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 25673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 25773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== NLDR_Load ======== 25873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Load create, delete, or execute phase function of a node on the DSP. 25973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 26073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 26173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * hNldrNode: Handle returned from NLDR_Allocate(). 26273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * phase: Type of function to load (create, delete, or execute). 26373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 26473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP_SOK: Success. 26573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP_EMEMORY: Insufficient memory on GPP. 26673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP_EOVERLAYMEMORY: Can't overlay phase because overlay memory 26773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * is already in use. 26873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP_EDYNLOAD: Failure in dynamic loader library. 26973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP_EFWRITE: Failed to write phase's code or date to target. 27073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 27173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * NLDR_Init() called. 27273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Valid hNldrNode. 27373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 27473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 27573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin typedef DSP_STATUS(*NLDR_LOADFXN) (struct NLDR_NODEOBJECT* hNldrNode, 27673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_PHASE phase); 27773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 27873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 27973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== NLDR_Unload ======== 28073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Unload create, delete, or execute phase function of a node on the DSP. 28173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 28273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 28373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * hNldrNode: Handle returned from NLDR_Allocate(). 28473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * phase: Node function to unload (create, delete, or execute). 28573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 28673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP_SOK: Success. 28773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP_EMEMORY: Insufficient memory on GPP. 28873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 28973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * NLDR_Init() called. 29073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Valid hNldrNode. 29173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 29273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 29373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin typedef DSP_STATUS(*NLDR_UNLOADFXN) (struct NLDR_NODEOBJECT* hNldrNode, 29473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_PHASE phase); 29573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 29673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 29773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== NLDR_FXNS ======== 29873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 29973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin struct NLDR_FXNS { 30073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_ALLOCATEFXN pfnAllocate; 30173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_CREATEFXN pfnCreate; 30273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_DELETEFXN pfnDelete; 30373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_EXITFXN pfnExit; 30473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_FREEFXN pfnFree; 30573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_GETFXNADDRFXN pfnGetFxnAddr; 30673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_INITFXN pfnInit; 30773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_LOADFXN pfnLoad; 30873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin NLDR_UNLOADFXN pfnUnload; 30973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } ; 31073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 31173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef __cplusplus 31273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin} 31373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif 31473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif /* NLDRDEFS_ */ 315