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