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