blob: dea85ff2118a40d4d6c051a226ed6cca351173bf [file] [log] [blame]
#include <Copyright.h>
/********************************************************************************
* gtOs.c
*
* DESCRIPTION:
* Semaphore related routines
*
* DEPENDENCIES:
* OS Dependent.
*
* FILE REVISION NUMBER:
* $Revision: 3 $
*******************************************************************************/
#include <msApi.h>
#include <gtSem.h>
/*******************************************************************************
* gtSemCreate
*
* DESCRIPTION:
* Create semaphore.
*
* INPUTS:
* state - beginning state of the semaphore, either GT_SEM_EMPTY or GT_SEM_FULL
*
* OUTPUTS:
* None
*
* RETURNS:
* GT_SEM if success. Otherwise, NULL
*
* COMMENTS:
* None
*
*******************************************************************************/
GT_SEM gtSemCreate
(
IN GT_QD_DEV *dev,
IN GT_SEM_BEGIN_STATE state
)
{
if(dev->semCreate)
return dev->semCreate(state);
return 1; /* should return any value other than 0 to let it keep going */
}
/*******************************************************************************
* gtSemDelete
*
* DESCRIPTION:
* Delete semaphore.
*
* INPUTS:
* smid - semaphore Id
*
* OUTPUTS:
* None
*
* RETURNS:
* GT_OK - on success
* GT_FAIL - on error
*
* COMMENTS:
* None
*
*******************************************************************************/
GT_STATUS gtSemDelete
(
IN GT_QD_DEV *dev,
IN GT_SEM smid
)
{
if((dev->semDelete) && (smid))
return dev->semDelete(smid);
return GT_OK;
}
/*******************************************************************************
* gtSemTake
*
* DESCRIPTION:
* Wait for semaphore.
*
* INPUTS:
* smid - semaphore Id
* timeOut - time out in miliseconds or 0 to wait forever
*
* OUTPUTS:
* None
* RETURNS:
* GT_OK - on success
* GT_FAIL - on error
* OS_TIMEOUT - on time out
*
* COMMENTS:
* None
*
*******************************************************************************/
GT_STATUS gtSemTake
(
IN GT_QD_DEV *dev,
IN GT_SEM smid,
IN GT_U32 timeOut
)
{
if(dev->semTake)
return dev->semTake(smid, timeOut);
return GT_OK;
}
/*******************************************************************************
* gtSemGive
*
* DESCRIPTION:
* release the semaphore which was taken previously.
*
* INPUTS:
* smid - semaphore Id
*
* OUTPUTS:
* None
*
* RETURNS:
* GT_OK - on success
* GT_FAIL - on error
*
* COMMENTS:
* None
*
*******************************************************************************/
GT_STATUS gtSemGive
(
IN GT_QD_DEV *dev,
IN GT_SEM smid
)
{
if(dev->semGive)
return dev->semGive(smid);
return GT_OK;
}