258 lines
9.2 KiB
C
258 lines
9.2 KiB
C
/* semLib.h - semaphore library header file */
|
|
|
|
/*
|
|
* Copyright (c) 1990-2005, 2007-2010, 2014 Wind River Systems, Inc.
|
|
*
|
|
* The right to copy, distribute, modify or otherwise make use
|
|
* of this software may be licensed only pursuant to the terms
|
|
* of an applicable Wind River license agreement.
|
|
*/
|
|
|
|
/*
|
|
modification history
|
|
--------------------
|
|
04w,22oct14,pcs made semTerminate() public (VXW6-34630).
|
|
04v,16jun10,pcs change the data type of timeout from an int to _Vx_ticks_t
|
|
04u,29apr10,pad Moved extern C statement after include statements.
|
|
04t,09mar09,pcs Updated to add support for the LP64 data model.
|
|
04s,02sep08,kk added semXXXScalable() APIs
|
|
04r,06feb07,gls added VX_READ_WRITE_SEMAPHORE
|
|
added semRWInitialize()
|
|
04q,27dec05,yvp Removed unnecessary semicolon in VX_SEMAPHORE macro.
|
|
04p,07oct05,yvp Used VX_OBJ_ALIGN_SIZE to align statically instantiated
|
|
objects (SPR 113405).
|
|
04o,30aug05,yvp Reworked VX_SEMAPHORE macro to undo struct workaround.
|
|
04n,08aug05,yvp Added VX_SEMAPHORE macro for static semaphore instantiation.
|
|
Added prototypes for semXInitialize(). Copyright update.
|
|
#include now with angle brackets.
|
|
04m,26oct04,fr added semOpenInit() routine (SPR 101491)
|
|
04l,08mar04,aeg removed Diab _WRS_DEPRECATED C++ workaround.
|
|
04k,02mar04,aeg deprecated semOLib APIs.
|
|
04j,25nov03,aeg added semInfo() function prototype from semLibCommon.h.
|
|
04i,21aug03,dcc moved common definitions with user side to semLibCommon.h.
|
|
04h,20jun03,ymz updated year of copyright.
|
|
04g,14mar03,dcc moved SEM_ID definition to types/vxWind.h.
|
|
04f,19oct01,bwa Added SEM_EVENTSEND_ERR_NOTIFY option.
|
|
04e,16feb98,cdp added #ifndef _ASMLANGUAGE.
|
|
04d,10jul96,dbt added declaration of semMGiveForce (SPR #4352).
|
|
Updated copyright.
|
|
03c,14jul94,dvs added non-ANSI prototype for semCreate/semOLibInit (SPR# 2648).
|
|
03b,22sep92,rrr added support for c++.
|
|
03a,04jul92,jcf cleaned up.
|
|
02k,26may92,rrr the tree shuffle.
|
|
02j,18apr92,jmm added prototype for semTerminate.
|
|
02i,19nov91,rrr shut up some ansi warnings.
|
|
02h,04oct91,rrr passed through the ansification filter
|
|
-fixed #else and #endif
|
|
-changed ASMLANGUAGE to _ASMLANGUAGE
|
|
-changed copyright notice
|
|
02g,10jun91.del added pragma for gnu960 alignment.
|
|
02f,16oct90,shl made #else ANSI style.
|
|
02e,05oct90,dnw deleted private functions; doc tweaks
|
|
02d,05oct90,shl added ANSI function prototypes.
|
|
made #endif ANSI style.
|
|
added copyright notice.
|
|
02c,27jun90,jcf added defines for optimized version.
|
|
02a,26jun90,jcf rewritten to provide binary/counting/mutex w/ one structure.
|
|
introduced semaphore options.
|
|
removed generic status codes.
|
|
01a,02jan90,jcf written.
|
|
*/
|
|
|
|
#ifndef __INCsemLibh
|
|
#define __INCsemLibh
|
|
|
|
#include <vxWorks.h>
|
|
#include <vwModNum.h>
|
|
#include <semLibCommon.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
/* semaphore options */
|
|
|
|
#define SEM_Q_MASK 0x03 /* q-type mask */
|
|
|
|
#ifndef _ASMLANGUAGE
|
|
|
|
/* macro used to statically declare semaphores */
|
|
|
|
#define VX_SEMAPHORE(name) \
|
|
_WRS_DATA_ALIGN_BYTES(VX_OBJ_ALIGN_SIZE) char name [VX_SEMAPHORE_SIZE]
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* VX_BINARY_SEMAPHORE - declare storage for a binary semaphore
|
|
*
|
|
* This macro declares storage for a binary semaphore having name <name>.
|
|
* This macro only generates data declarations for the binary semaphore.
|
|
* To fully instantiate the semaphore and make it ready for use, the function
|
|
* semBInitialize() must be called after using this macro. This macro is
|
|
* useful for declaring semaphores statically (i.e. at compile time, without
|
|
* using any dynamic memory allocation at runtime).
|
|
*
|
|
* Sample usage of this macro is as follows:
|
|
* \cs
|
|
* #include <vxWorks.h>
|
|
* #include <semLib.h>
|
|
*
|
|
* VX_BINARY_SEMAPHORE(mySemB); /@ declare the semaphore @/
|
|
* SEM_ID mySemBId; /@ semaphore ID for further operations @/
|
|
*
|
|
* STATUS initializeFunction (void)
|
|
* {
|
|
* if ((mySemBId = semBInitialize (mysemB, options, 0)) == NULL)
|
|
* return (ERROR); /@ initialization failed @/
|
|
* else
|
|
* return (OK);
|
|
* }
|
|
* \ce
|
|
*
|
|
* SEE ALSO: semCInitialize(), semMInitialize()
|
|
* \NOMANUAL
|
|
*/
|
|
|
|
#define VX_BINARY_SEMAPHORE VX_SEMAPHORE
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* VX_COUNTING_SEMAPHORE - declare storage for a counting semaphore
|
|
*
|
|
* This macro declares storage for a counting semaphore having name <name>.
|
|
* This macro only generates data declarations for the counting semaphore.
|
|
* To fully instantiate the semaphore and make it ready for use, the function
|
|
* semCInitialize() must be called after using this macro. This macro is
|
|
* useful for declaring semaphores statically (i.e. at compile time, without
|
|
* using any dynamic memory allocation at runtime).
|
|
*
|
|
* Sample usage of this macro is as follows:
|
|
* \cs
|
|
* #include <vxWorks.h>
|
|
* #include <semLib.h>
|
|
*
|
|
* VX_COUNTING_SEMAPHORE(mySemC); /@ declare the semaphore @/
|
|
* SEM_ID mySemCId; /@ semaphore ID for further operations @/
|
|
*
|
|
* STATUS initializeFunction (void)
|
|
* {
|
|
* if ((mySemCId = semCInitialize (mysemC, options, 0)) == NULL)
|
|
* return (ERROR); /@ initialization failed @/
|
|
* else
|
|
* return (OK);
|
|
* }
|
|
* \ce
|
|
*
|
|
* SEE ALSO: semBInitialize(), semMInitialize()
|
|
* \NOMANUAL
|
|
*/
|
|
|
|
#define VX_COUNTING_SEMAPHORE VX_SEMAPHORE
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* VX_MUTEX_SEMAPHORE - declare storage for a mutual exclusion semaphore
|
|
*
|
|
* This macro declares storage for a mutex semaphore having name <name>.
|
|
* This macro only generates data declarations for the mutex semaphore.
|
|
* To fully instantiate the semaphore and make it ready for use, the function
|
|
* semMInitialize() must be called after using this macro. This macro is
|
|
* useful for declaring semaphores statically (i.e. at compile time, without
|
|
* using any dynamic memory allocation at runtime).
|
|
*
|
|
* Sample usage of this macro is as follows:
|
|
* \cs
|
|
* #include <vxWorks.h>
|
|
* #include <semLib.h>
|
|
*
|
|
* VX_MUTEX_SEMAPHORE(mySemM); /@ declare the semaphore @/
|
|
* SEM_ID mySemMId; /@ semaphore ID for further operations @/
|
|
*
|
|
* STATUS initializeFunction (void)
|
|
* {
|
|
* if ((mySemMId = semMInitialize (mySemM, options, 0)) == NULL)
|
|
* return (ERROR); /@ initialization failed @/
|
|
* else
|
|
* return (OK);
|
|
* }
|
|
* \ce
|
|
*
|
|
* SEE ALSO: semBInitialize(), semCInitialize()
|
|
* \NOMANUAL
|
|
*/
|
|
|
|
#define VX_MUTEX_SEMAPHORE VX_SEMAPHORE
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* VX_READ_WRITE_SEMAPHORE - declare storage for a reader/writer semaphore
|
|
*
|
|
* This macro declares storage for a reader/writer semaphore having name <name>.
|
|
* This macro only generates data declarations for the reader/writer semaphore.
|
|
* To fully instantiate the semaphore and make it ready for use, the function
|
|
* semRWInitialize() must be called after using this macro. This macro is
|
|
* useful for declaring semaphores statically (i.e. at compile time, without
|
|
* using any dynamic memory allocation at runtime).
|
|
*
|
|
* Sample usage of this macro is as follows:
|
|
* \cs
|
|
* #include <vxWorks.h>
|
|
* #include <semLib.h>
|
|
*
|
|
* #define NUM_READERS 0x20
|
|
*
|
|
* VX_READ_WRITE_SEMAPHORE(mySemRW, NUM_READERS); /@ declare the semaphore @/
|
|
* SEM_ID mySemRWId; /@ semaphore ID for further operations @/
|
|
*
|
|
* STATUS initializeFunction (void)
|
|
* {
|
|
* if ((mySemRWId = semRWInitialize (mySemRW, options, NUM_READERS)) ==
|
|
* NULL)
|
|
* return (ERROR); /@ initialization failed @/
|
|
* else
|
|
* return (OK);
|
|
* }
|
|
* \ce
|
|
*
|
|
* SEE ALSO: semMInitialize, semBInitialize(), semCInitialize()
|
|
* \NOMANUAL
|
|
*/
|
|
|
|
#define VX_READ_WRITE_SEMAPHORE(name, numReaders) \
|
|
_WRS_DATA_ALIGN_BYTES(VX_OBJ_ALIGN_SIZE) \
|
|
char name [VX_SEMAPHORE_SIZE + SEM_RW_EXT_SIZE + \
|
|
(SEM_RW_LIST_ENTRY_SIZE * numReaders)]
|
|
|
|
/* function declarations */
|
|
|
|
extern void semOpenInit (void);
|
|
extern STATUS semMGiveForce (SEM_ID semId);
|
|
extern STATUS semRWGiveForce (SEM_ID semId);
|
|
extern SEM_ID semBInitialize (char * pSemMem, int options,
|
|
SEM_B_STATE initialState);
|
|
extern SEM_ID semCInitialize (char * pSemMem, int options,
|
|
int initialCount);
|
|
extern SEM_ID semMInitialize (char * pSemMem, int options);
|
|
extern SEM_ID semRWInitialize (char * pSemMem, int options, int maxReaders);
|
|
extern STATUS semTerminate (SEM_ID semId);
|
|
|
|
extern void semShowInit (void);
|
|
extern STATUS semShow (SEM_ID semId, int level);
|
|
extern int semInfo (SEM_ID semId, TASK_ID idList[], int maxTasks);
|
|
|
|
extern STATUS semMTakeScalable (SEM_ID semId, _Vx_ticks_t timeout,
|
|
int options);
|
|
extern STATUS semMGiveScalable (SEM_ID semId, int options);
|
|
extern STATUS semBTakeScalable (SEM_ID semId, _Vx_ticks_t timeout,
|
|
int options);
|
|
extern STATUS semBGiveScalable (SEM_ID semId, int options);
|
|
|
|
#endif /* _ASMLANGUAGE */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __INCsemLibh */
|