FreeCalypso > hg > fc-tourmaline
diff src/gpf/frame/vsi_sem.c @ 0:4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:23:26 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/gpf/frame/vsi_sem.c Fri Oct 16 06:23:26 2020 +0000 @@ -0,0 +1,179 @@ +/* ++------------------------------------------------------------------------------ +| File: vsi_sem.c ++------------------------------------------------------------------------------ +| Copyright 2002 Texas Instruments Berlin, AG +| All rights reserved. +| +| This file is confidential and a trade secret of Texas +| Instruments Berlin, AG +| The receipt of or possession of this file does not convey +| any rights to reproduce or disclose its contents or to +| manufacture, use, or sell anything it may describe, in +| whole, or in part, without the specific written consent of +| Texas Instruments Berlin, AG. ++----------------------------------------------------------------------------- +| Purpose : This Module defines the virtual system interface part +| for the semaphore handling. ++----------------------------------------------------------------------------- +*/ + +#ifndef __VSI_SEM_C__ +#define __VSI_SEM_C__ +#endif + +/*==== INCLUDES ===================================================*/ + +#include "typedefs.h" +#include "vsi.h" +#include "os.h" +#include "frm_defs.h" +#include "frm_types.h" +#include "frm_glob.h" + +/*==== TYPES ======================================================*/ + + +/*==== CONSTANTS ==================================================*/ + + +/*==== EXTERNALS ==================================================*/ +/* -------------- S H A R E D - BEGIN ---------------- */ +#ifdef _TOOLS_ +#pragma data_seg("FRAME_SHARED") +#endif + +/*==== VARIABLES ==================================================*/ + + +#ifdef _TOOLS_ +#pragma data_seg() +#endif +/* -------------- S H A R E D - END ---------------- */ + +/*==== FUNCTIONS ==================================================*/ + + +#ifndef RUN_INT_RAM +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-Frame (8415) MODULE : VSI_SEM | +| STATE : code ROUTINE : vsi_s_open | ++--------------------------------------------------------------------+ + + PURPOSE : opens a semaphore, creates if not exist + +*/ + +T_HANDLE vsi_s_open (T_HANDLE Caller, char *Name, USHORT Count) +{ +OS_HANDLE SemHandle; + + /* + * if semaphore already exists, return handle + */ + if ( os_OpenSemaphore ( Caller, Name, &SemHandle ) != OS_ERROR ) + return SemHandle; + + /* + * if semaphore not exists, create + */ + if ( os_CreateSemaphore ( Caller, Name, Count, &SemHandle, pf_TaskTable[Caller].MemPoolHandle ) != OS_ERROR ) + return SemHandle; + else + vsi_o_assert( Caller, OS_SYST_ERR_MAX_SEMA, __FILE__, __LINE__, + "Number of created semaphores > MAX_SEMAPHORES" ); + + /* + * if semaphore cannot be created, return VSI_ERROR + */ + return VSI_ERROR; +} +#endif + +#ifndef RUN_INT_RAM +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-Frame (8415) MODULE : VSI_SEM | +| STATE : code ROUTINE : vsi_s_close | ++--------------------------------------------------------------------+ + + PURPOSE : closes a semaphore + +*/ + +int vsi_s_close (T_HANDLE Caller, T_HANDLE SemHandle) +{ + + if ( os_CloseSemaphore ( Caller, SemHandle ) != OS_ERROR ) + return VSI_OK; + + return VSI_ERROR; +} +#endif + +#ifndef RUN_FLASH +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-Frame (8415) MODULE : VSI_SEM | +| STATE : code ROUTINE : vsi_s_get | ++--------------------------------------------------------------------+ + + PURPOSE : obtains a semaphore + +*/ + +int vsi_s_get (T_HANDLE Caller, T_HANDLE SemHandle) +{ +LONG Status; + + Status = os_ObtainSemaphore ( Caller, SemHandle, OS_SUSPEND ); + if ( Status == OS_OK || Status == OS_WAITED ) + return VSI_OK; + + return VSI_ERROR; +} +#endif + +#ifndef RUN_FLASH +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-Frame (8415) MODULE : VSI_SEM | +| STATE : code ROUTINE : vsi_s_release | ++--------------------------------------------------------------------+ + + PURPOSE : releases a semaphore + +*/ + +int vsi_s_release (T_HANDLE Caller, T_HANDLE SemHandle) +{ + + if ( os_ReleaseSemaphore ( Caller, SemHandle ) != OS_ERROR ) + return VSI_OK; + + return VSI_ERROR; +} +#endif + +#ifndef RUN_INT_RAM +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-Frame (8415) MODULE : VSI_SEM | +| STATE : code ROUTINE : vsi_s_status | ++--------------------------------------------------------------------+ + + PURPOSE : request the current count of a semaphore + +*/ + +int vsi_s_status (T_HANDLE Caller, T_HANDLE SemHandle, USHORT *Count ) +{ + + if ( os_QuerySemaphore ( Caller, SemHandle, Count ) != OS_ERROR ) + return VSI_OK; + + return VSI_ERROR; +} +#endif +