173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * dspbridge/src/api/linux/DSPProcessor_OEM.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 * ======== DSPProcessor_OEM.c ======== 2073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Description: 2173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * This is the source for the DSP/BIOS Bridge API processor module. 2273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 2373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Public Functions: 2473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSPProcessor_Ctrl - OEM 2573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSPProcessor_GetTrace - OEM 2673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSPProcessor_Load - OEM 2773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSPProcessor_Start - OEM 2873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 2973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! Revision History 3073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! ================ 3173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 29-Nov-2000 rr: Seperated from DSPProcessor.c 3273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 3373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 3473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 3573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* ----------------------------------- Host OS */ 3673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <host_os.h> 3773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 3873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* ----------------------------------- DSP/BIOS Bridge */ 3973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <dbdefs.h> 4073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <errbase.h> 4173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 4273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* ----------------------------------- Others */ 4373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <dsptrap.h> 4473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 4573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* ----------------------------------- This */ 4673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include "_dbdebug.h" 4773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include "_dbpriv.h" 4873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <DSPProcessor_OEM.h> 4973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef DEBUG_BRIDGE_PERF 5073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <perfutils.h> 5173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif 5273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 5373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 5473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 5573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 5673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== DSPProcessor_Ctrl ======== 5773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 5873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Pass control information to the GPP device driver managing the 5973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP processor. 6073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * This will be an OEM-only function, and not part of the 'Bridge 6173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * application developer's API. 6273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 6373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPProcessor_Ctrl(DSP_HPROCESSOR hProcessor, ULONG dwCmd, 6473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin IN OPTIONAL struct DSP_CBDATA *pArgs) 6573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{ 6673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin DSP_STATUS status = DSP_SOK; 6773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin Trapped_Args tempStruct; 6873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 6973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("PROC: DSPProcessor_Ctrl\r\n"))); 7073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 7173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin /* Check the handle */ 7273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin if (hProcessor) { 7373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin tempStruct.ARGS_PROC_CTRL.hProcessor = hProcessor; 7473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin tempStruct.ARGS_PROC_CTRL.dwCmd = dwCmd; 7573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin tempStruct.ARGS_PROC_CTRL.pArgs = pArgs; 7673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin status = DSPTRAP_Trap(&tempStruct, CMD_PROC_CTRL_OFFSET); 7773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } else { 7873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin /* Invalid handle */ 7973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin status = DSP_EHANDLE; 8073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin DEBUGMSG(DSPAPI_ZONE_ERROR, 8173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin (TEXT("PROC: Invalid Handle \r\n"))); 8273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } 8373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 8473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin return status; 8573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin} 8673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 8773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 8873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== DSPProcessor_Load ======== 8973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 9073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Reset a processor and load a new base program image. 9173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * This will be an OEM-only function, and not part of the 'Bridge 9273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * application developer's API. 9373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 9473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPProcessor_Load(DSP_HPROCESSOR hProcessor, IN CONST INT iArgc, 9573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin IN CONST CHAR **aArgv, IN CONST CHAR **aEnvp) 9673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{ 9773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin DSP_STATUS status = DSP_SOK; 9873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin Trapped_Args tempStruct; 9973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef DEBUG_BRIDGE_PERF 10073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin struct timeval tv_beg; 10173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin struct timeval tv_end; 10273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin struct timezone tz; 10373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin int timeRetVal = 0; 10473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 10573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin timeRetVal = getTimeStamp(&tv_beg); 10673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif 10773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 10873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 10973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("PROC: DSPProcessor_Load\r\n"))); 11073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 11173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin /* Check the handle */ 11273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin if (hProcessor) { 11373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin if (iArgc > 0) { 11473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin if (!DSP_ValidReadPtr(aArgv, iArgc)) { 11573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin tempStruct.ARGS_PROC_LOAD.hProcessor = 11673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin hProcessor; 11773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin tempStruct.ARGS_PROC_LOAD.iArgc = iArgc; 11873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin tempStruct.ARGS_PROC_LOAD.aArgv = 11973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin (CHAR **)aArgv; 12073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin tempStruct.ARGS_PROC_LOAD.aEnvp = 12173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin (CHAR **)aEnvp; 12273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin status = DSPTRAP_Trap(&tempStruct, 12373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin CMD_PROC_LOAD_OFFSET); 12473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } else { 12573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin status = DSP_EPOINTER; 12673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin DEBUGMSG(DSPAPI_ZONE_ERROR, 12773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin (TEXT("PROC: Null pointer in input \r\n"))); 12873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } 12973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } else { 13073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin status = DSP_EINVALIDARG; 13173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin DEBUGMSG(DSPAPI_ZONE_ERROR, 13273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin (TEXT("PROC: iArgc is invalid. \r\n"))); 13373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } 13473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } else { 13573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin /* Invalid handle */ 13673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin status = DSP_EHANDLE; 13773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin DEBUGMSG(DSPAPI_ZONE_ERROR, 13873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin (TEXT("PROC: Invalid Handle \r\n"))); 13973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } 14073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 14173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef DEBUG_BRIDGE_PERF 14273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin timeRetVal = getTimeStamp(&tv_end); 14373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin PrintStatistics(&tv_beg, &tv_end, "DSPProcessor_Load", 0); 14473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 14573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif 14673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 14773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin return status; 14873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin} 14973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 15073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 15173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== DSPProcessor_Start ======== 15273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 15373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Start a processor running. 15473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 15573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPProcessor_Start(DSP_HPROCESSOR hProcessor) 15673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{ 15773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin DSP_STATUS status = DSP_SOK; 15873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin Trapped_Args tempStruct; 15973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 16073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("PROC: DSPProcessor_Start\r\n"))); 16173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 16273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin /* Check the handle */ 16373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin if (hProcessor) { 16473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin tempStruct.ARGS_PROC_START.hProcessor = hProcessor; 16573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin status = DSPTRAP_Trap(&tempStruct, CMD_PROC_START_OFFSET); 16673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } else { 16773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin /* Invalid handle */ 16873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin status = DSP_EHANDLE; 16973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin DEBUGMSG(DSPAPI_ZONE_ERROR, 17073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin (TEXT("PROC: Invalid Handle \r\n"))); 17173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } 17273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 17373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin return status; 17473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin} 17573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 17673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 17773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== DSPProcessor_Stop ======== 17873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 17973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Stop a running processor . 18073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 18173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz ZavinDBAPI DSPProcessor_Stop(DSP_HPROCESSOR hProcessor) 18273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin{ 18373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin DSP_STATUS status = DSP_SOK; 18473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin Trapped_Args tempStruct; 18573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 18673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("PROC: DSPProcessor_Stop\r\n"))); 18773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 18873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin /* Check the handle */ 18973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin if (hProcessor) { 19073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin tempStruct.ARGS_PROC_START.hProcessor = hProcessor; 19173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin status = DSPTRAP_Trap(&tempStruct, CMD_PROC_STOP_OFFSET); 19273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } else { 19373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin /* Invalid handle */ 19473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin status = DSP_EHANDLE; 19573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin DEBUGMSG(DSPAPI_ZONE_ERROR, 19673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin (TEXT("PROC: Invalid Handle \r\n"))); 19773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } 19873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 19973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin return status; 20073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin} 201