173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Copyright 2001-2008 Texas Instruments - http://www.ti.com/
373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *
473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Licensed under the Apache License, Version 2.0 (the "License");
573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  you may not use this file except in compliance with the License.
673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  You may obtain a copy of the License at
773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *
873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *     http://www.apache.org/licenses/LICENSE-2.0
973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *
1073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Unless required by applicable law or agreed to in writing, software
1173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  distributed under the License is distributed on an "AS IS" BASIS,
1273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  See the License for the specific language governing permissions and
1473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  limitations under the License.
1573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
1673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
1773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
1873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
1973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
2073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== nldrdefs.h ========
2173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  DSP-BIOS Bridge driver support functions for TI OMAP processors.
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