/* * dspbridge/src/api/linux/DSPProcessor_OEM.c * * DSP-BIOS Bridge driver support functions for TI OMAP processors. * * Copyright (C) 2007 Texas Instruments, Inc. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation version 2.1 of the License. * * This program is distributed .as is. WITHOUT ANY WARRANTY of any kind, * whether express or implied; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ /* * ======== DSPProcessor_OEM.c ======== * Description: * This is the source for the DSP/BIOS Bridge API processor module. * * Public Functions: * DSPProcessor_Ctrl - OEM * DSPProcessor_GetTrace - OEM * DSPProcessor_Load - OEM * DSPProcessor_Start - OEM * *! Revision History *! ================ *! 29-Nov-2000 rr: Seperated from DSPProcessor.c * */ /* ----------------------------------- Host OS */ #include <host_os.h> /* ----------------------------------- DSP/BIOS Bridge */ #include <dbdefs.h> #include <errbase.h> /* ----------------------------------- Others */ #include <dsptrap.h> /* ----------------------------------- This */ #include "_dbdebug.h" #include "_dbpriv.h" #include <DSPProcessor_OEM.h> #ifdef DEBUG_BRIDGE_PERF #include <perfutils.h> #endif /* * ======== DSPProcessor_Ctrl ======== * Purpose: * Pass control information to the GPP device driver managing the * DSP processor. * This will be an OEM-only function, and not part of the 'Bridge * application developer's API. */ DBAPI DSPProcessor_Ctrl(DSP_HPROCESSOR hProcessor, ULONG dwCmd, IN OPTIONAL struct DSP_CBDATA *pArgs) { DSP_STATUS status = DSP_SOK; Trapped_Args tempStruct; DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("PROC: DSPProcessor_Ctrl\r\n"))); /* Check the handle */ if (hProcessor) { tempStruct.ARGS_PROC_CTRL.hProcessor = hProcessor; tempStruct.ARGS_PROC_CTRL.dwCmd = dwCmd; tempStruct.ARGS_PROC_CTRL.pArgs = pArgs; status = DSPTRAP_Trap(&tempStruct, CMD_PROC_CTRL_OFFSET); } else { /* Invalid handle */ status = DSP_EHANDLE; DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT("PROC: Invalid Handle \r\n"))); } return status; } /* * ======== DSPProcessor_Load ======== * Purpose: * Reset a processor and load a new base program image. * This will be an OEM-only function, and not part of the 'Bridge * application developer's API. */ DBAPI DSPProcessor_Load(DSP_HPROCESSOR hProcessor, IN CONST INT iArgc, IN CONST CHAR **aArgv, IN CONST CHAR **aEnvp) { DSP_STATUS status = DSP_SOK; Trapped_Args tempStruct; #ifdef DEBUG_BRIDGE_PERF struct timeval tv_beg; struct timeval tv_end; struct timezone tz; int timeRetVal = 0; timeRetVal = getTimeStamp(&tv_beg); #endif DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("PROC: DSPProcessor_Load\r\n"))); /* Check the handle */ if (hProcessor) { if (iArgc > 0) { if (!DSP_ValidReadPtr(aArgv, iArgc)) { tempStruct.ARGS_PROC_LOAD.hProcessor = hProcessor; tempStruct.ARGS_PROC_LOAD.iArgc = iArgc; tempStruct.ARGS_PROC_LOAD.aArgv = (CHAR **)aArgv; tempStruct.ARGS_PROC_LOAD.aEnvp = (CHAR **)aEnvp; status = DSPTRAP_Trap(&tempStruct, CMD_PROC_LOAD_OFFSET); } else { status = DSP_EPOINTER; DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT("PROC: Null pointer in input \r\n"))); } } else { status = DSP_EINVALIDARG; DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT("PROC: iArgc is invalid. \r\n"))); } } else { /* Invalid handle */ status = DSP_EHANDLE; DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT("PROC: Invalid Handle \r\n"))); } #ifdef DEBUG_BRIDGE_PERF timeRetVal = getTimeStamp(&tv_end); PrintStatistics(&tv_beg, &tv_end, "DSPProcessor_Load", 0); #endif return status; } /* * ======== DSPProcessor_Start ======== * Purpose: * Start a processor running. */ DBAPI DSPProcessor_Start(DSP_HPROCESSOR hProcessor) { DSP_STATUS status = DSP_SOK; Trapped_Args tempStruct; DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("PROC: DSPProcessor_Start\r\n"))); /* Check the handle */ if (hProcessor) { tempStruct.ARGS_PROC_START.hProcessor = hProcessor; status = DSPTRAP_Trap(&tempStruct, CMD_PROC_START_OFFSET); } else { /* Invalid handle */ status = DSP_EHANDLE; DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT("PROC: Invalid Handle \r\n"))); } return status; } /* * ======== DSPProcessor_Stop ======== * Purpose: * Stop a running processor . */ DBAPI DSPProcessor_Stop(DSP_HPROCESSOR hProcessor) { DSP_STATUS status = DSP_SOK; Trapped_Args tempStruct; DEBUGMSG(DSPAPI_ZONE_FUNCTION, (TEXT("PROC: DSPProcessor_Stop\r\n"))); /* Check the handle */ if (hProcessor) { tempStruct.ARGS_PROC_START.hProcessor = hProcessor; status = DSPTRAP_Trap(&tempStruct, CMD_PROC_STOP_OFFSET); } else { /* Invalid handle */ status = DSP_EHANDLE; DEBUGMSG(DSPAPI_ZONE_ERROR, (TEXT("PROC: Invalid Handle \r\n"))); } return status; }