173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * dspbridge/src/api/linux/DSPNode.c
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 *  ======== DSPNode.c ========
2173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Description:
2273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      This is the source for the DSP/BIOS Bridge API node module. The
2373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      parameters are validated at the API level, but the bulk of the
2473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      work is done at the driver level through the RM NODE module.
2573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *
2673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Public Functions:
2773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      DSPNode_Allocate
2873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      DSPNode_AllocMsgBuf
2973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      DSPNode_ChangePriority
3073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      DSPNode_Connect
3173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      DSPNode_ConnectEx
3273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      DSPNode_Create
3373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      DSPNode_Delete
3473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      DSPNode_FreeMsgBuf
3573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      DSPNode_GetAttr
3673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      DSPNode_GetMessage
3773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      DSPNode_Pause
3873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      DSPNode_PutMessage
3973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      DSPNode_RegisterNotify
4073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      DSPNode_Run
4173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      DSPNode_Terminate
4273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *
4373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! Revision History
4473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! ================
4573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 14-Mar-2002 map Set *pBuffer to null before returning error status in
4673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *!		            DSPNode_AllocMsgBuf.
4773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 01-Oct-2001 rr  CMM error codes are converted to DSP_STATUS in
4873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *!                 DSPNode_Allocate.
4973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 11-Sep-2001 ag  Zero-copy message support.
5073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 08-Jun-2001 jeh Fixed priority range check in DSPNode_ChangePriority.
5173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 23-Apr-2001 jeh Added pStatus parameter to DSPNode_Terminate.
5273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 06-Feb-2001 kc: Added check for alignment value in DSPNode_AllocMsgBuf
5373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 08-Dec-2000 ag  Added alignment to DSPNode_AllocMsgBuf().
5473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 05-Dec-2000 ag  Added SM support to DSPNode_[Alloc][Free]MsgBuf().
5573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 09-Nov-2000 rr: Code cleaned up. Use of IsValidEvent/Mask Macros.
5673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 27-Oct-2000 jeh Updated to version 0.9 of API spec.
5773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 07-Sep-2000 jeh Changed type HANDLE in DSPNode_RegisterNotify to
5873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *!                 DSP_HNOTIFICATION. Added DSP_STRMATTR param to
5973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *!                 DSPNode_Connect.
6073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 04-Aug-2000 rr: Name changed to DSPNode.c
6173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 27-Jul-2000 rr: Types updated to ver 0.8 API.
6273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 18-Jul-2000 rr: Node calls into the Class driver.
6373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *!                 Only parameters are validated here.
6473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 17-May-2000 rr: DSPNode_Connect checks for GHPPNODE.
6573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 15-May-2000 gp: Made input args to DSPNode_Allocate() CONST.
6673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *!                 Return DSP_ENOTIMPL from DSPNode_ChangePriority().
6773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 02-May-2000 rr: Reg functions use SERVICES.
6873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 12-Apr-2000 ww: Created based on DirectDSP API specification, Version 0.6.
6973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *
7073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
7173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
7273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*  ----------------------------------- Host OS */
7373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <host_os.h>
7473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <stdlib.h>
7573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <malloc.h>
7673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
7773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*  ----------------------------------- DSP/BIOS Bridge */
7873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <dbdefs.h>
7973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <errbase.h>
8073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
8173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*  ----------------------------------- Trace & Debug */
8273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <dbg.h>
8373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <dbg_zones.h>
8473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
8573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*  ----------------------------------- Resource Manager */
8673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <memry.h>
8773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
8873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*  ----------------------------------- Others */
8973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <dsptrap.h>
9073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
9173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*  ----------------------------------- This */
9273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include "_dbdebug.h"
9373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include "_dbpriv.h"
9473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
9573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <DSPNode.h>
9673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
9773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef DEBUG_BRIDGE_PERF
9873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <perfutils.h>
9973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif
10073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
10173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*  ----------------------------------- Globals */
10273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavinextern int hMediaFile;		/* class driver handle */
10373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
10473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* Declared here, not to users */
10573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDSP_STATUS GetNodeType(DSP_HNODE hNode, DSP_NODETYPE *pNodeType);
10673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
10773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
10873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== DSPNode_Allocate ========
10973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Purpose:
11073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      Allocate data structures for controlling and communicating
11173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      with a node on a specific DSP processor..
11273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
11373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPNode_Allocate(DSP_HPROCESSOR hProcessor,
11473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		 IN CONST struct DSP_UUID *pNodeID,
11573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		 IN CONST OPTIONAL struct DSP_CBDATA *pArgs,
11673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		 IN OPTIONAL struct DSP_NODEATTRIN *pAttrIn,
11773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		 OUT DSP_HNODE *phNode)
11873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{
11973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DSP_STATUS status = DSP_SOK;
12073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	Trapped_Args tempStruct;
12173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct CMM_OBJECT *hCmm;		/* shared memory mngr handle */
12273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct CMM_INFO pInfo;		/* Used for virtual space allocation */
12373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	PVOID pVirtBase;
12473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct DSP_BUFFERATTR bufAttr;
12573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin    DSP_NODETYPE nodeType;
12673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin    struct DSP_NDBPROPS    nodeProps;
12773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin    UINT            heapSize = 0;
12873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin    PVOID           pGPPVirtAddr = NULL;
12973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin    UINT            uProfileID;
13073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("NODE: DSPNode_Allocate:\r\n")));
13173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (!hProcessor) {
13273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EHANDLE;
13373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR,
13473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			(TEXT("NODE: DSPNode_Allocate: "
13573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				"hProcessor is Invalid \r\n")));
13673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		goto func_cont;
13773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
13873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (!(pNodeID) || !(phNode)) {
13973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EPOINTER;
14073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT("NODE: DSPNode_Allocate: "
14173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			"Invalid pointer in the Input\r\n")));
14273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		goto func_cont;
14373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
14473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	/* First get the NODE properties, allocate, reserve
14573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				memory for Node heap */
14673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (pAttrIn) {
14773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSPNode_GetUUIDProps(hProcessor, pNodeID, &nodeProps);
14873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		pAttrIn->pGPPVirtAddr = NULL;
14973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if (DSP_SUCCEEDED(status)) {
15073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			uProfileID = pAttrIn->uProfileID;
15173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			DEBUGMSG(DSPAPI_ZONE_FUNCTION,
15273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					("DSPNodeAllocate: User requested"
15373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin						  "node heap profile \n"));
15473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			if (uProfileID < nodeProps.uCountProfiles)
15573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				heapSize =
15673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				nodeProps.aProfiles[uProfileID].ulHeapSize;
15773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			if (heapSize) {
15873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				/* allocate heap memory */
15973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				/* Make heap size multiple of page size * */
16073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				heapSize = PG_ALIGN_HIGH(heapSize, PG_SIZE_4K);
16173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				/* align memory on cache line boundary * */
16273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				pGPPVirtAddr = memalign(GEM_CACHE_LINE_SIZE,
16373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin							heapSize);
16473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				DEBUGMSG(DSPAPI_ZONE_FUNCTION,
16573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					("DSPNodeAllocate: Node heap memory"
16673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin							  "addr, size \n"));
16773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				if ((pGPPVirtAddr == NULL))
16873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					status = DSP_EMEMORY;
16973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				pAttrIn->uHeapSize = heapSize;
17073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				pAttrIn->pGPPVirtAddr = pGPPVirtAddr;
17173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			}
17273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		} else {
17373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT(
17473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				"NODE:DSPNode_Allocate: Failed to get Node "
17573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				"UUID properties \r\n")));
17673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		}
17773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
17873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (DSP_SUCCEEDED(status)) {
17973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Set up the structure  Call DSP Trap */
18073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_NODE_ALLOCATE.hProcessor = hProcessor;
18173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_NODE_ALLOCATE.pNodeID =
18273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin						(struct DSP_UUID *)pNodeID;
18373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_NODE_ALLOCATE.pArgs =
18473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin						(struct DSP_CBDATA *)pArgs;
18573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_NODE_ALLOCATE.pAttrIn =
18673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					(struct DSP_NODEATTRIN *)pAttrIn;
18773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_NODE_ALLOCATE.phNode = phNode;
18873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSPTRAP_Trap(&tempStruct, CMD_NODE_ALLOCATE_OFFSET);
18973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
19073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavinfunc_cont:
19173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	 /* If 1st SM segment is configured then allocate and map it to
19273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		this process.*/
19373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (!DSP_SUCCEEDED(status)) {
19473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if (pGPPVirtAddr)
19573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			free(pGPPVirtAddr);
19673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		return status;
19773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
19873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	tempStruct.ARGS_CMM_GETHANDLE.hProcessor = hProcessor;
19973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	tempStruct.ARGS_CMM_GETHANDLE.phCmmMgr = &hCmm;
20073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	status = DSPTRAP_Trap(&tempStruct, CMD_CMM_GETHANDLE_OFFSET);
20173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (DSP_SUCCEEDED(status)) {
20273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Get SM segment info from CMM */
20373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_CMM_GETINFO.hCmmMgr = hCmm;
20473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_CMM_GETINFO.pCmmInfo = &pInfo;
20573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSPTRAP_Trap(&tempStruct, CMD_CMM_GETINFO_OFFSET);
20673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if (DSP_FAILED(status)) {
20773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSP_EFAIL;
20873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT(
20973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			"NODE: DSPNode_Allocate: "
21073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			"Failed to get SM segment\r\n")));
21173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		} else
21273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSP_SOK;
21373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
21473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} else {
21573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EFAIL;
21673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT(
21773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			"NODE: DSPNode_Allocate:Failed to CMM handle\r\n")));
21873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
219cbd96ffef4bc147078d4dafa64e27a38cba16289James Dong	if (!DSP_SUCCEEDED(status)) {
220cbd96ffef4bc147078d4dafa64e27a38cba16289James Dong		free(pGPPVirtAddr);
22173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		return status;
222cbd96ffef4bc147078d4dafa64e27a38cba16289James Dong	}
22373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
22473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	GetNodeType(*phNode, &nodeType);
22573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if ((nodeType != NODE_DEVICE) && (pInfo.ulNumGPPSMSegs > 0)) {
22673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Messaging uses 1st segment */
22773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if ((pInfo.segInfo[0].dwSegBasePa != 0) &&
22873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		    (pInfo.segInfo[0].ulTotalSegSize) > 0) {
22973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			pVirtBase = mmap(NULL, pInfo.segInfo[0].ulTotalSegSize,
23073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				 PROT_READ | PROT_WRITE, MAP_SHARED |
23173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				 MAP_LOCKED, hMediaFile,
23273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				 pInfo.segInfo[0].dwSegBasePa);
23373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			if (!pVirtBase) {
23473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT("NODE: "
23573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				"DSPNode_Allocate:Virt alloc failed\r\n")));
23673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				status = DSP_EMEMORY;
23773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				/* Clean up */
23873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				tempStruct.ARGS_NODE_DELETE.hNode = *phNode;
23973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				DSPTRAP_Trap(&tempStruct,
24073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					CMD_NODE_DELETE_OFFSET);
24173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				return status;
24273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			}
24373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* set node translator's virt addr range for seg */
24473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			bufAttr.uAlignment = 0;
24573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			bufAttr.uSegment = 1 | MEMRY_SETVIRTUALSEGID;
24673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			bufAttr.cbStruct = 0;
24773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSPNode_AllocMsgBuf(*phNode,
24873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					pInfo.segInfo[0].ulTotalSegSize,
24973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					&bufAttr, (BYTE **)&pVirtBase);
25073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			if (DSP_FAILED(status)) {
25173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				/* If failed to set segment, unmap */
25273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				munmap(pVirtBase,
25373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					pInfo.segInfo[0].ulTotalSegSize);
25473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				/* Clean up */
25573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				tempStruct.ARGS_NODE_DELETE.hNode = *phNode;
25673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				DSPTRAP_Trap(&tempStruct,
25773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					CMD_NODE_DELETE_OFFSET);
25873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			}
25973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		}
26073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
26173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin    return status;
26273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin}
26373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
26473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
26573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== DSPNode_AllocMsgBuf ========
26673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
26773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPNode_AllocMsgBuf(DSP_HNODE hNode, UINT uSize,
26873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		   IN OPTIONAL struct DSP_BUFFERATTR *pAttr, OUT BYTE **pBuffer)
26973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{
27073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DSP_STATUS status = DSP_SOK;
27173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	Trapped_Args tempStruct;
27273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DEBUGMSG(DSPAPI_ZONE_FUNCTION,
27373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		(TEXT("NODE: DSPNode_AllocMsgBuf:\r\n")));
27473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
27573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (uSize == 0) {
27673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_ESIZE;
27773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if (pBuffer)
27873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			*pBuffer = NULL;
27973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
28073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} else if (hNode) {
28173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if (pBuffer) {
28273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Set up the structure */
28373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_ALLOCMSGBUF.hNode = hNode;
28473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_ALLOCMSGBUF.uSize = uSize;
28573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_ALLOCMSGBUF.pAttr = pAttr;
28673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Va Base */
28773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_ALLOCMSGBUF.pBuffer = pBuffer;
28873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Call DSP Trap */
28973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSPTRAP_Trap(&tempStruct,
29073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				CMD_NODE_ALLOCMSGBUF_OFFSET);
29173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			if (DSP_SUCCEEDED(status)) {
29273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				if (*pBuffer == NULL) {
29373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					DEBUGMSG(DSPAPI_ZONE_FUNCTION,
29473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					(TEXT("NODE: DSPNode_AllocMsgBuf: "
29573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					"No SM\r\n")));
29673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					status = DSP_EMEMORY;	/* No SM */
29773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				}
29873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			} else
29973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				*pBuffer = NULL;
30073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
30173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		} else {
30273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Invalid pointer */
30373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSP_EPOINTER;
30473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT("NODE: "
30573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			"DSPNode_AllocBuf: Invalid pointer in the Input\r\n")));
30673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		}
30773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} else {
30873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Invalid handle */
30973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EHANDLE;
31073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT("NODE: DSPNode_AllocMsgBuf: "
31173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin						"hNode is Invalid \r\n")));
31273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if (pBuffer)
31373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			*pBuffer = NULL;
31473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
31573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
31673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
31773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	return status;
31873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin}
31973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
32073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
32173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== DSPNode_ChangePriority ========
32273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Purpose:
32373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      Change a task node's runtime priority within the DSP RTOS.
32473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
32573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPNode_ChangePriority(DSP_HNODE hNode, INT iPriority)
32673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{
32773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DSP_STATUS status = DSP_SOK;
32873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	Trapped_Args tempStruct;
32973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
33073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DEBUGMSG(DSPAPI_ZONE_FUNCTION,
33173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			(TEXT("NODE: DSPNode_ChangePriority:\r\n")));
33273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
33373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (hNode) {
33473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Set up the structure */
33573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if (iPriority >= DSP_NODE_MIN_PRIORITY &&
33673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		    iPriority <= DSP_NODE_MAX_PRIORITY) {
33773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Call DSP Trap */
33873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_CHANGEPRIORITY.hNode = hNode;
33973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_CHANGEPRIORITY.iPriority =
34073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin							iPriority;
34173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSPTRAP_Trap(&tempStruct,
34273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					CMD_NODE_CHANGEPRIORITY_OFFSET);
34373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		} else
34473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSP_ERANGE;
34573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
34673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} else {
34773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Invalid pointer */
34873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EHANDLE;
34973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR,
35073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			(TEXT("NODE: DSPNode_ChangePriority: "
35173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			"hNode is Invalid \r\n")));
35273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
35373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
35473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	return status;
35573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin}
35673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
35773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
35873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== DSPNode_Connect ========
35973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Purpose:
36073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      Make a stream connection, either between two nodes on a DSP,
36173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      or between a node on a DSP and the GPP.
36273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
36373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPNode_Connect(DSP_HNODE hNode, UINT uStream, DSP_HNODE hOtherNode,
36473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		UINT uOtherStream, IN OPTIONAL struct DSP_STRMATTR *pAttrs)
36573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{
36673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	return DSPNode_ConnectEx(hNode, uStream, hOtherNode, uOtherStream,
36773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				 pAttrs, NULL);
36873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin}
36973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
37073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
37173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== DSPNode_ConnectEx ========
37273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Purpose:
37373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      Make a stream connection, either between two nodes on a DSP,
37473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      or between a node on a DSP and the GPP.
37573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
37673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPNode_ConnectEx(DSP_HNODE hNode, UINT uStream, DSP_HNODE hOtherNode,
37773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		  UINT uOtherStream, IN OPTIONAL struct DSP_STRMATTR *pAttrs,
37873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		  IN OPTIONAL struct DSP_CBDATA *pConnParam)
37973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{
38073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DSP_STATUS status = DSP_SOK;
38173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	Trapped_Args tempStruct;
38273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
38373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("NODE: DSPNode_ConnectEx:\r\n")));
38473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
38573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if ((hNode) && (hOtherNode)) {
38673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Set up the structure */
38773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Call DSP Trap */
38873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_NODE_CONNECT.hNode = hNode;
38973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_NODE_CONNECT.uStream = uStream;
39073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_NODE_CONNECT.hOtherNode = hOtherNode;
39173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_NODE_CONNECT.uOtherStream = uOtherStream;
39273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_NODE_CONNECT.pAttrs = pAttrs;
39373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_NODE_CONNECT.pConnParam = pConnParam;
39473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSPTRAP_Trap(&tempStruct, CMD_NODE_CONNECT_OFFSET);
39573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} else {
39673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Invalid pointer */
39773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EHANDLE;
39873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT("NODE: DSPNode_Connect: "
39973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		"hNode or hOtherNode is Invalid Handle\r\n")));
40073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
40173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
40273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	return status;
40373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin}
40473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
40573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
40673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== DSPNode_Create ========
40773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Purpose:
40873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      Create a node in a pre-run (i.e., inactive) state on its
40973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *		DSP processor.
41073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
41173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPNode_Create(DSP_HNODE hNode)
41273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{
41373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DSP_STATUS status = DSP_SOK;
41473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	Trapped_Args tempStruct;
41573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef DEBUG_BRIDGE_PERF
41673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct timeval tv_beg;
41773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct timeval tv_end;
41873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct timezone tz;
41973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	int timeRetVal = 0;
42073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
42173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	timeRetVal = getTimeStamp(&tv_beg);
42273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif
42373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
42473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
42573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("NODE: DSPNode_Create:\r\n")));
42673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
42773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (hNode) {
42873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Set up the structure */
42973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Call DSP Trap */
43073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_NODE_CREATE.hNode = hNode;
43173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSPTRAP_Trap(&tempStruct, CMD_NODE_CREATE_OFFSET);
43273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} else {
43373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Invalid pointer */
43473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EHANDLE;
43573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR,
43673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		(TEXT("NODE: DSPNode_Create: hNode is Invalid Handle\r\n")));
43773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
43873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
43973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef DEBUG_BRIDGE_PERF
44073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	timeRetVal = getTimeStamp(&tv_end);
44173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	PrintStatistics(&tv_beg, &tv_end, "DSPNode_Create", 0);
44273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
44373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif
44473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
44573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	return status;
44673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin}
44773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
44873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
44973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== DSPNode_Delete ========
45073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Purpose:
45173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      Delete all DSP-side and GPP-side resources for the node.
45273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
45373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPNode_Delete(DSP_HNODE hNode)
45473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{
45573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DSP_STATUS status = DSP_SOK;
45673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	Trapped_Args tempStruct;
45773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	BYTE *pVirtBase = NULL;
45873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct DSP_BUFFERATTR bufAttr;
45973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct CMM_OBJECT *hCmm;		/* shared memory mngr handle */
46073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct CMM_INFO pInfo;		/* Used for virtual space allocation */
46173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DSP_NODETYPE nodeType;
46273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct DSP_NODEATTR    nodeAttr;
46373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef DEBUG_BRIDGE_PERF
46473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct timeval tv_beg;
46573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct timeval tv_end;
46673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct timezone tz;
46773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	int timeRetVal = 0;
46873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
46973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	timeRetVal = getTimeStamp(&tv_beg);
47073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif
47173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
47273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("NODE: DSPNode_Delete:\r\n")));
47373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (!hNode) {
47473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Invalid pointer */
47573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EHANDLE;
47673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT("NODE: DSPNode_Delete: "
47773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					"hNode is Invalid Handle\r\n")));
47873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		return status;
47973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
48073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	/* Get segment size.
48173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	 >0 is SM segment. Get default SM Mgr*/
48273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	tempStruct.ARGS_CMM_GETHANDLE.hProcessor = NULL;
48373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	tempStruct.ARGS_CMM_GETHANDLE.phCmmMgr = &hCmm;
48473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	status = DSPTRAP_Trap(&tempStruct, CMD_CMM_GETHANDLE_OFFSET);
48573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (DSP_SUCCEEDED(status)) {
48673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Get SM segment info from CMM */
48773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_CMM_GETINFO.hCmmMgr = hCmm;
48873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_CMM_GETINFO.pCmmInfo = &pInfo;
48973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSPTRAP_Trap(&tempStruct, CMD_CMM_GETINFO_OFFSET);
49073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if (DSP_FAILED(status)) {
49173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSP_EFAIL;
49273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			DEBUGMSG(DSPAPI_ZONE_ERROR,
49373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				(TEXT("NODE: DSPNode_Delete:"
49473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					" Failed to get SM segment\r\n")));
49573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		} else
49673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSP_SOK;
49773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
49873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} else {
49973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EFAIL;
50073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT("NODE: DSPNode_Delete: "
50173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					"Failed to CMM handle\r\n")));
50273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
50373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (!DSP_SUCCEEDED(status)) {
50473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EBADSEGID;	/* no SM segments*/
50573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		return status;
50673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
50773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin    status = DSPNode_GetAttr(hNode, &nodeAttr, sizeof(nodeAttr));
50873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	GetNodeType(hNode, &nodeType);
50973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (nodeType != NODE_DEVICE) {
51073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/*segInfo index starts at 0.These checks may not be required*/
51173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if ((pInfo.segInfo[0].dwSegBasePa != 0) &&
51273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		    (pInfo.segInfo[0].ulTotalSegSize) > 0) {
51373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* get node translator's virtual address range
51473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			   so we can free it */
51573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			bufAttr.uAlignment = 0;
51673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			bufAttr.uSegment = 1 | MEMRY_GETVIRTUALSEGID;
51773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			DSPNode_AllocMsgBuf(hNode, 1, &bufAttr, &pVirtBase);
51873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Free virtual space */
51973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			if (!pVirtBase)
52073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				goto loop_end;
52173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
52273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			if (munmap(pVirtBase,
52373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					pInfo.segInfo[0].ulTotalSegSize)) {
52473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				status = DSP_EFAIL;
52573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			}
52673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		}
52773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
52873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavinloop_end:
52973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (DSP_SUCCEEDED(status)) {
53073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Set up the structure Call DSP Trap */
53173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_NODE_DELETE.hNode = hNode;
53273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSPTRAP_Trap(&tempStruct, CMD_NODE_DELETE_OFFSET);
53373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Free any node heap memory */
53473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if (nodeAttr.inNodeAttrIn.pGPPVirtAddr) {
53573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("DSPNodeDelete:"
53673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					"Freeing Node heap addr \n")));
53773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			free(nodeAttr.inNodeAttrIn.pGPPVirtAddr);
53873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		}
53973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
54073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef DEBUG_BRIDGE_PERF
54173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	timeRetVal = getTimeStamp(&tv_end);
54273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	PrintStatistics(&tv_beg, &tv_end, "DSPNode_Delete", 0);
54373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif
54473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
54573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	return status;
54673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin}
54773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
54873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
54973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== DSPNode_FreeMsgBuf ========
55073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
55173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPNode_FreeMsgBuf(DSP_HNODE hNode, IN BYTE *pBuffer,
55273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				IN OPTIONAL struct DSP_BUFFERATTR *pAttr)
55373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{
55473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DSP_STATUS status = DSP_SOK;
55573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	Trapped_Args tempStruct;
55673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
55773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("NODE: DSPNode_FreeMsgBuf:\r\n")));
55873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
55973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (hNode) {
56073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if (pBuffer) {
56173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Set up the structure */
56273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Call DSP Trap */
56373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_FREEMSGBUF.hNode = hNode;
56473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_FREEMSGBUF.pBuffer = pBuffer;
56573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_FREEMSGBUF.pAttr = pAttr;
56673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSPTRAP_Trap(&tempStruct,
56773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				CMD_NODE_FREEMSGBUF_OFFSET);
56873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			if (DSP_FAILED(status)) {
56973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("NODE: "
57073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin						"DSPNode_FreeMsgBuf:"
57173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin						"Failed to Free SM buf\r\n")));
57273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			}
57373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		} else {
57473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Invalid parameter */
57573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSP_EPOINTER;
57673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			DEBUGMSG(DSPAPI_ZONE_ERROR,
57773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				(TEXT("NODE: DSPNode_FreeMsgBuf: "
57873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				"Invalid pointer in the Input\r\n")));
57973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		}
58073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} else {
58173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Invalid pointer */
58273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EHANDLE;
58373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR,
58473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				(TEXT("NODE: DSPNode_FreeMsgBuf: "
58573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				"hNode is Invalid \r\n")));
58673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
58773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
58873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	return status;
58973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin}
59073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
59173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
59273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== DSPNode_GetAttr ========
59373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Purpose:
59473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      Copy the current attributes of the specified node.
59573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
59673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPNode_GetAttr(DSP_HNODE hNode, OUT struct DSP_NODEATTR *pAttr,
59773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		UINT uAttrSize)
59873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{
59973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DSP_STATUS status = DSP_SOK;
60073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	Trapped_Args tempStruct;
60173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
60273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("NODE: DSPNode_GetAttr:\r\n")));
60373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
60473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (hNode) {
60573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if (pAttr) {
60673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			if (uAttrSize >= sizeof(struct DSP_NODEATTR)) {
60773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				/* Set up the structure */
60873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				/* Call DSP Trap */
60973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				tempStruct.ARGS_NODE_GETATTR.hNode = hNode;
61073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				tempStruct.ARGS_NODE_GETATTR.pAttr = pAttr;
61173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				tempStruct.ARGS_NODE_GETATTR.uAttrSize =
61273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin								uAttrSize;
61373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				status = DSPTRAP_Trap(&tempStruct,
61473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					CMD_NODE_GETATTR_OFFSET);
61573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			} else {
61673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				status = DSP_ESIZE;
61773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				DEBUGMSG(DSPAPI_ZONE_ERROR,
61873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					(TEXT("NODE: DSPNode_GetAttr: "
61973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					"Size is too small \r\n")));
62073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			}
62173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		} else {
62273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Invalid parameter */
62373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSP_EPOINTER;
62473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			DEBUGMSG(DSPAPI_ZONE_ERROR,
62573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				(TEXT("NODE: DSPNode_GetAttr: "
62673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				"Invalid pointer in the Input\r\n")));
62773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		}
62873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} else {
62973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Invalid pointer */
63073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EHANDLE;
63173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR,
63273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			(TEXT("NODE: DSPNode_GetAttr: "
63373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			"hNode is Invalid \r\n")));
63473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
63573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
63673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	return status;
63773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin}
63873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
63973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
64073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== DSPNode_GetMessage ========
64173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Purpose:
64273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      Retrieve an event message from a task node.
64373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
64473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPNode_GetMessage(DSP_HNODE hNode, OUT struct DSP_MSG *pMessage,
64573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				UINT uTimeout)
64673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{
64773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DSP_STATUS status = DSP_SOK;
64873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	Trapped_Args tempStruct;
64973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef DEBUG_BRIDGE_PERF
65073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct timeval tv_beg;
65173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct timeval tv_end;
65273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct timezone tz;
65373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	int timeRetVal = 0;
65473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
65573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	timeRetVal = getTimeStamp(&tv_beg);
65673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
65773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif
65873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
65973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("NODE: DSPNode_GetMessage:\r\n")));
66073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
66173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (hNode) {
66273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if (pMessage) {
66373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Set up the structure */
66473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Call DSP Trap */
66573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_GETMESSAGE.hNode = hNode;
66673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_GETMESSAGE.pMessage = pMessage;
66773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_GETMESSAGE.uTimeout = uTimeout;
66873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSPTRAP_Trap(&tempStruct,
66973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				CMD_NODE_GETMESSAGE_OFFSET);
67073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		} else {
67173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSP_EPOINTER;
67273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			DEBUGMSG(DSPAPI_ZONE_ERROR,
67373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				(TEXT("NODE: DSPNode_GetMessage:"
67473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				"pMessage is Invalid \r\n")));
67573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		}
67673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} else {
67773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EHANDLE;
67873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR,
67973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			(TEXT("NODE: DSPNode_GetMessage: "
68073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			"hNode is Invalid \r\n")));
68173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
68273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef DEBUG_BRIDGE_PERF
68373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	timeRetVal = getTimeStamp(&tv_end);
68473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	PrintStatistics(&tv_beg, &tv_end, "DSPNode_GetMessage", 0);
68573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif
68673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
68773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
68873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	return status;
68973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin}
69073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
69173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
69273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== GetNodeType ========
69373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Purpose:
69473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      Return the node type
69573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
69673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDSP_STATUS GetNodeType(DSP_HNODE hNode, DSP_NODETYPE *pNodeType)
69773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{
69873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	/*DSP_STATUS status;*/
69973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DSP_STATUS status = DSP_SOK;
70073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct DSP_NODEATTR nodeAttr;
70173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
70273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("GetNodeType:\r\n")));
70373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
70473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (hNode) {
70573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSPNode_GetAttr(hNode, &nodeAttr, sizeof(nodeAttr));
70673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if (DSP_SUCCEEDED(status)) {
70773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			*pNodeType =
70873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			nodeAttr.iNodeInfo.nbNodeDatabaseProps.uNodeType;
70973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		}
71073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} else {
71173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EHANDLE;
71273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT("GetNodeType: "
71373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					"hNode is Invalid \r\n")));
71473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
71573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
71673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	return status;
71773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin}
71873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
71973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
72073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== DSPNode_Pause ========
72173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Purpose:
72273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      Temporarily suspend execution of a node that is currently running
72373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      on a DSP.
72473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
72573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPNode_Pause(DSP_HNODE hNode)
72673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{
72773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DSP_STATUS status = DSP_SOK;
72873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	Trapped_Args tempStruct;
72973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
73073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("NODE: DSPNode_Pause:\r\n")));
73173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
73273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (hNode) {
73373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Set up the structure */
73473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Call DSP Trap */
73573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_NODE_PAUSE.hNode = hNode;
73673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSPTRAP_Trap(&tempStruct, CMD_NODE_PAUSE_OFFSET);
73773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} else {
73873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Invalid pointer */
73973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EHANDLE;
74073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT("NODE: DSPNode_Pause: "
74173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				"hNode is Invalid Handle\r\n")));
74273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
74373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
74473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	return status;
74573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin}
74673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
74773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
74873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== DSPNode_PutMessage ========
74973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Purpose:
75073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      Send an event message to a task node.
75173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
75273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPNode_PutMessage(DSP_HNODE hNode, IN CONST struct DSP_MSG *pMessage,
75373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin						UINT uTimeout)
75473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{
75573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DSP_STATUS status = DSP_SOK;
75673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	Trapped_Args tempStruct;
75773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef DEBUG_BRIDGE_PERF
75873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct timeval tv_beg;
75973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct timeval tv_end;
76073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	struct timeval tz;
76173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	int timeRetVal = 0;
76273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
76373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	timeRetVal = getTimeStamp(&tv_beg);
76473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif
76573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
76673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("NODE: DSPNode_PutMessage:\r\n")));
76773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
76873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (hNode) {
76973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if (pMessage) {
77073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Set up the structure */
77173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Call DSP Trap */
77273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_PUTMESSAGE.hNode = hNode;
77373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_PUTMESSAGE.pMessage =
77473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin						(struct DSP_MSG *)pMessage;
77573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_PUTMESSAGE.uTimeout = uTimeout;
77673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSPTRAP_Trap(&tempStruct,
77773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				CMD_NODE_PUTMESSAGE_OFFSET);
77873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		} else {
77973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSP_EPOINTER;
78073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			DEBUGMSG(DSPAPI_ZONE_ERROR,
78173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				(TEXT("NODE: DSPNode_PutMessage: "
78273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin						"pMessage is Invalid \r\n")));
78373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		}
78473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} else {
78573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Invalid pointer */
78673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EHANDLE;
78773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR,
78873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			(TEXT("NODE: DSPNode_PutMessage: "
78973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					"hNode is Invalid \r\n")));
79073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
79173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef DEBUG_BRIDGE_PERF
79273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	timeRetVal = getTimeStamp(&tv_end);
79373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	PrintStatistics(&tv_beg, &tv_end, "DSPNode_PutMessage", 0);
79473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif
79573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
79673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
79773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	return status;
79873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin}
79973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
80073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
80173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== DSPNode_RegisterNotify ========
80273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Purpose:
80373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      Register to be notified of specific events for this node.
80473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
80573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI
80673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDSPNode_RegisterNotify(DSP_HNODE hNode, UINT uEventMask,
80773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		       UINT uNotifyType, struct DSP_NOTIFICATION *hNotification)
80873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{
80973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DSP_STATUS status = DSP_SOK;
81073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	Trapped_Args tempStruct;
81173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
81273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DEBUGMSG(DSPAPI_ZONE_FUNCTION,
81373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			(TEXT("NODE: DSPNode_RegisterNotify:\r\n")));
81473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
81573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if ((hNode) && (hNotification)) {
81673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if (IsValidNodeEvent(uEventMask)) {
81773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			if (IsValidNotifyMask(uNotifyType)) {
81873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				/* Set up the structure */
81973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				/* Call DSP Trap */
82073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				tempStruct.ARGS_NODE_REGISTERNOTIFY.hNode =
82173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin							hNode;
82273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				tempStruct.ARGS_NODE_REGISTERNOTIFY.uEventMask =
82373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin							uEventMask;
82473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				tempStruct.ARGS_NODE_REGISTERNOTIFY\
82573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					.uNotifyType = uNotifyType;
82673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				tempStruct.ARGS_NODE_REGISTERNOTIFY\
82773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					.hNotification = hNotification;
82873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
82973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				status = DSPTRAP_Trap(&tempStruct,
83073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin						CMD_NODE_REGISTERNOTIFY_OFFSET);
83173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			} else {
83273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				status = DSP_ENOTIMPL;
83373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				DEBUGMSG(DSPAPI_ZONE_ERROR,
83473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					(TEXT("NODE: DSPNode_RegisterNotify: "
83573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					"Invalid Notification Mask \r\n")));
83673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			}
83773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		} else {
83873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSP_EVALUE;
83973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			DEBUGMSG(DSPAPI_ZONE_ERROR,
84073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				(TEXT("NODE: DSPNode_RegisterNotify:"
84173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin						"Invalid Event type\r\n")));
84273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		}
84373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} else {
84473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Invalid pointer */
84573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EHANDLE;
84673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR,
84773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			(TEXT("NODE: DSPNode_RegisterNotify: "
84873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				"hNode is Invalid \r\n")));
84973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
85073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
85173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	return status;
85273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin}
85373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
85473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
85573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== DSPNode_Run ========
85673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Purpose:
85773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      Start a task node running.
85873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
85973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPNode_Run(DSP_HNODE hNode)
86073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{
86173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DSP_STATUS status = DSP_SOK;
86273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	Trapped_Args tempStruct;
86373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
86473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("NODE: DSPNode_Run:\r\n")));
86573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
86673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (hNode) {
86773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Set up the structure */
86873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Call DSP Trap */
86973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		tempStruct.ARGS_NODE_RUN.hNode = hNode;
87073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSPTRAP_Trap(&tempStruct, CMD_NODE_RUN_OFFSET);
87173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} else {
87273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Invalid pointer */
87373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EHANDLE;
87473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT("NODE: DSPNode_Run: "
87573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					"hNode is Invalid Handle\r\n")));
87673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
87773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
87873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	return status;
87973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin}
88073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
88173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
88273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== DSPNode_Terminate ========
88373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Purpose:
88473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      Signal a task node running on a  DSP processor that it should
88573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      exit its execute-phase function.
88673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
88773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPNode_Terminate(DSP_HNODE hNode, DSP_STATUS *pStatus)
88873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{
88973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DSP_STATUS status = DSP_SOK;
89073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	Trapped_Args tempStruct;
89173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
89273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("NODE: DSPNode_Terminate:\r\n")));
89373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
89473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (hNode) {
89573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* !DSP_ValidWritePtr means it is a valid write ptr */
89673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if (!DSP_ValidWritePtr(pStatus, sizeof(DSP_STATUS))) {
89773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Set up the structure */
89873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Call DSP Trap */
89973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_TERMINATE.hNode = hNode;
90073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_TERMINATE.pStatus = pStatus;
90173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSPTRAP_Trap(&tempStruct,
90273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				CMD_NODE_TERMINATE_OFFSET);
90373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		} else
90473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSP_EPOINTER;
90573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
90673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} else {
90773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Invalid pointer */
90873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EHANDLE;
90973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR,
91073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			(TEXT("NODE: DSPNode_Terminate: "
91173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					"hNode is Invalid Handle\r\n")));
91273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
91373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
91473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	return status;
91573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin}
91673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
91773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
91873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/*
91973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  ======== DSPNode_GetUUIDProps ========
92073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *  Purpose:
92173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *      Get Node properties from DCD/DOF file given the UUID
92273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */
92373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPNode_GetUUIDProps(DSP_HPROCESSOR hProcessor,
92473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		IN CONST struct DSP_UUID *pNodeID,
92573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		 OUT struct DSP_NDBPROPS *pNodeProps)
92673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{
92773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DSP_STATUS status = DSP_SOK;
92873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	Trapped_Args tempStruct;
92973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
93073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	DEBUGMSG(DSPAPI_ZONE_FUNCTION,
93173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				(TEXT("NODE:DSPNode_GetUUIDProps:\r\n")));
93273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
93373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	if (hProcessor) {
93473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		if ((pNodeID) && (pNodeProps)) {
93573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Set up the structure */
93673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Call DSP Trap */
93773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_GETUUIDPROPS.hProcessor =
93873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin						hProcessor;
93973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_GETUUIDPROPS.pNodeID =
94073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin						(struct DSP_UUID *)pNodeID;
94173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			tempStruct.ARGS_NODE_GETUUIDPROPS.pNodeProps =
94273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					(struct DSP_NDBPROPS *) pNodeProps;
94373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSPTRAP_Trap(&tempStruct,
94473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				CMD_NODE_GETUUIDPROPS_OFFSET);
94573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		} else {
94673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			/* Invalid parameter */
94773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			status = DSP_EPOINTER;
94873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			DEBUGMSG(DSPAPI_ZONE_ERROR,
94973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				(TEXT("NODE: DSPNode_GetUUIDProps: "
95073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin				       "Invalid pointer in the Input\r\n")));
95173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		}
95273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	} else {
95373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		/* Invalid pointer */
95473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		status = DSP_EHANDLE;
95573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin		DEBUGMSG(DSPAPI_ZONE_ERROR,
95673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin			(TEXT("NODE: DSPNode_GetUUIDProps: "
95773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin					"hProcessor is Invalid \r\n")));
95873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	}
95973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
96073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin	return status;
96173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin}
96273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin
963