original files of m241
This commit is contained in:
@@ -0,0 +1,261 @@
|
||||
/* smObjLib.h - shared memory object library header */
|
||||
|
||||
/*
|
||||
* Copyright 1992-1994, 2002-2003, 2008-2010 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
|
||||
--------------------
|
||||
01p,29apr10,pad Moved extern C statement after include statements.
|
||||
01o,25aug09,jpb Updated for LP64 support.
|
||||
01n,25jun08,cwu add macro "S_smObjLib_NOT_SM_MASTER" to enable more exceptional
|
||||
information with errno
|
||||
01m,21nov03,dat adding objLib.h
|
||||
01l,03may02,mas made global pointers volatile (SPR 68334)
|
||||
01k,01aug94,dvs backed out pme's changes for reserved fields in main data structures.
|
||||
01j,20mar94,pme added reserved fields in main data structures to allow
|
||||
compatibility between future versions.
|
||||
01i,29jan93,pme added little endian support
|
||||
made smObjLibInit() return STATUS.
|
||||
01h,15oct92,rrr silenced warnings
|
||||
01g,29sep92,pme added version number
|
||||
01f,22sep92,rrr added support for c++
|
||||
01e,11sep92,ajm moved redundant define of DEFAULT_BEATS_TO_WAIT to smLib.h
|
||||
01d,30jul92,pme made SM_LOCK_GIVE() call smLockGive().
|
||||
added pre-declaration of smObjTasClearRoutine.
|
||||
01c,24jul92,elh added heartbeat to header.
|
||||
01b,22jul92,pme added S_smObjLib_NO_OBJECT_DESTROY status
|
||||
01a,19jul92,pme added DEFAULT_BEATS_TO_WAIT.
|
||||
written.
|
||||
*/
|
||||
|
||||
#ifndef __INCsmObjLibh
|
||||
#define __INCsmObjLibh
|
||||
|
||||
#include <vwModNum.h>
|
||||
#include <smDllLib.h>
|
||||
#include <smLib.h>
|
||||
#include <objLib.h>
|
||||
#include <netinet/in.h>
|
||||
#include <private/smFixBlkLibP.h>
|
||||
#include <private/smMemLibP.h>
|
||||
#include <private/smNameLibP.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* generic status codes */
|
||||
|
||||
#define S_smObjLib_NOT_INITIALIZED (M_smObjLib | 1)
|
||||
#define S_smObjLib_NOT_A_GLOBAL_ADRS (M_smObjLib | 2)
|
||||
#define S_smObjLib_NOT_A_LOCAL_ADRS (M_smObjLib | 3)
|
||||
#define S_smObjLib_SHARED_MEM_TOO_SMALL (M_smObjLib | 4)
|
||||
#define S_smObjLib_TOO_MANY_CPU (M_smObjLib | 5)
|
||||
#define S_smObjLib_LOCK_TIMEOUT (M_smObjLib | 6)
|
||||
#define S_smObjLib_NO_OBJECT_DESTROY (M_smObjLib | 7)
|
||||
#define S_smObjLib_NOT_SM_MASTER (M_smObjLib | 8)
|
||||
|
||||
#define SM_OBJ_MAX_CPU 20 /* absolute maximum number of CPU */
|
||||
|
||||
/* useful shared memory object ids handling macros */
|
||||
|
||||
#define ID_IS_LOCAL(id) ((((ULONG) id) & 1) == 0)
|
||||
#define ID_IS_SHARED(id) ((((ULONG) id) & 1) != 0)
|
||||
#define SM_OBJ_ID_TO_ADRS(id) (((long)(id)) + smObjPoolMinusOne)
|
||||
#define SM_OBJ_ADRS_TO_ID(adrs) (((long)(adrs)) - smObjPoolMinusOne)
|
||||
|
||||
/* local to global and global to local address conversion; local NULL pointer */
|
||||
|
||||
#define GLOB_TO_LOC_ADRS(adrs) (((long)(adrs)) + localToGlobalOffset)
|
||||
#define LOC_TO_GLOB_ADRS(adrs) (((long)(adrs)) - localToGlobalOffset)
|
||||
#define LOC_NULL ((void *)localToGlobalOffset)
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* SM_OBJ_VERIFY - check the validity of a shared memory object
|
||||
*
|
||||
* This macro verifies the validity of the specified shared memory object by
|
||||
* comparing the id and its verify field.
|
||||
*
|
||||
* RETURNS: OK or ERROR if invalid shared memory object
|
||||
*
|
||||
* ERRNO:
|
||||
*
|
||||
* S_objLib_OBJ_ID_ERROR
|
||||
*
|
||||
* NOMANUAL
|
||||
*/
|
||||
|
||||
#define SM_OBJ_VERIFY(smObjId) \
|
||||
( \
|
||||
((LOC_TO_GLOB_ADRS ((smObjId))) == ntohl ((smObjId->verify))) ? OK \
|
||||
: \
|
||||
(errno = S_objLib_OBJ_ID_ERROR, ERROR) \
|
||||
)
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* SM_OBJ_LOCK_TAKE - acquire lock access on a shared ressource
|
||||
*
|
||||
* This macro tries to acquire exclusive access to a shared ressource
|
||||
* via a test-and-set on a long word memory location. It uses shMemLockTake
|
||||
* with smObjSpinTries tries to get lock using smObjTasRoutine test and
|
||||
* set routine (usually sysBusTas).
|
||||
*
|
||||
* NOMANUAL
|
||||
*/
|
||||
|
||||
#define SM_OBJ_LOCK_TAKE(lockLocalAdrs, pOldLvl) \
|
||||
(smLockTake ((int *) lockLocalAdrs, smObjTasRoutine, \
|
||||
smObjSpinTries, (int *) pOldLvl))
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* SM_OBJ_LOCK_GIVE - release lock access on a shared ressource
|
||||
*
|
||||
* This macro release exclusive access to a shared ressource by clearing
|
||||
* a long word memory location.
|
||||
*
|
||||
* NOMANUAL
|
||||
*/
|
||||
|
||||
#define SM_OBJ_LOCK_GIVE(lockLocalAdrs,oldLvl) \
|
||||
(smLockGive ((int *) lockLocalAdrs, smObjTasClearRoutine, \
|
||||
oldLvl))
|
||||
|
||||
/* typedefs */
|
||||
|
||||
#if ((CPU_FAMILY==I960) && (defined __GNUC__))
|
||||
#pragma align 1 /* tell gcc960 not to optimize alignments */
|
||||
#endif /* CPU_FAMILY==I960 */
|
||||
|
||||
/* shared memory object header located on top of shared memory pool */
|
||||
|
||||
typedef struct sm_obj_mem_hdr /* SM_OBJ_MEM_HDR - shared memory header */
|
||||
{
|
||||
UINT heartBeat; /* incremented via smObjBeat() */
|
||||
BOOL initDone; /* TRUE if initialization done */
|
||||
UINT version; /* version number */
|
||||
SM_FIX_BLK_PART smTcbPart; /* partition for shared TCB's */
|
||||
SM_PARTITION smSemPart; /* partition for shared semaphores */
|
||||
SM_PARTITION smNamePart;/* partition for shared names */
|
||||
SM_PARTITION smMsgQPart;/* partition for shared msgQ */
|
||||
SM_PARTITION smPartPart;/* partition for shared user partitions */
|
||||
SM_PARTITION smSysPart; /* default shared system partition */
|
||||
SM_OBJ_NAME_DB nameDtb; /* name database header */
|
||||
int objCpuTbl; /* smObj descriptor table (offset) */
|
||||
|
||||
int maxSems; /* max number of semaphores */
|
||||
int maxMsgQueues; /* max number of messages queues */
|
||||
int maxTasks; /* max number of tasks */
|
||||
int maxMemParts; /* max number of shared memory partitions */
|
||||
int maxNames; /* max number of name of shared objects */
|
||||
|
||||
int curNumSemB; /* current number of binary semaphores */
|
||||
int curNumSemC; /* current number of counting semaphores */
|
||||
int curNumMsgQ; /* current number of messages queues */
|
||||
int curNumTask; /* current number of tasks */
|
||||
int curNumPart; /* current number of shared partitions */
|
||||
int curNumName; /* current number of names */
|
||||
|
||||
} SM_OBJ_MEM_HDR;
|
||||
|
||||
#define smSemPartId (&pSmObjHdr->smSemPart)
|
||||
#define smNamePartId (&pSmObjHdr->smNamePart)
|
||||
#define smMsgQPartId (&pSmObjHdr->smMsgQPart)
|
||||
#define smPartPartId (&pSmObjHdr->smPartPart)
|
||||
#define smSystemPartId (&pSmObjHdr->smSysPart)
|
||||
|
||||
typedef struct sm_obj_event_q /* SM_OBJ_EVENT_Q - events input queue */
|
||||
{
|
||||
UINT32 lock; /* multi processor lock */
|
||||
SM_DL_LIST eventList; /* list of smObj events */
|
||||
} SM_OBJ_EVENT_Q;
|
||||
|
||||
/* per CPU shared memory object Descriptor */
|
||||
|
||||
typedef struct sm_obj_cpu_desc /* SM_OBJ_CPU_DESC */
|
||||
{
|
||||
int status; /* CPU status - attached/unattached */
|
||||
SM_OBJ_EVENT_Q smObjEventQ; /* smObj CPU event queue */
|
||||
} SM_OBJ_CPU_DESC;
|
||||
|
||||
typedef struct sm_obj_desc /* SM_OBJ_DESC - shared memory object descriptor */
|
||||
{
|
||||
int status;
|
||||
SM_DESC smDesc; /* shared memory descriptor */
|
||||
SM_OBJ_MEM_HDR * hdrLocalAdrs; /* smObj memory header local adrs */
|
||||
SM_OBJ_CPU_DESC * cpuLocalAdrs; /* smObj cpu descriptor local adrs */
|
||||
} SM_OBJ_DESC;
|
||||
|
||||
typedef struct sm_obj_params /* setup parameters */
|
||||
{
|
||||
BOOL allocatedPool; /* TRUE if shared memory pool is malloced */
|
||||
SM_ANCHOR * pAnchor; /* shared memory anchor */
|
||||
char * smObjFreeAdrs; /* start address of shared memory pool */
|
||||
int smObjMemSize; /* memory size reserved for shared memory */
|
||||
int maxCpus; /* max number of CPU in the system */
|
||||
int maxTasks; /* max number of tasks using smObj */
|
||||
int maxSems; /* max number of shared semaphores */
|
||||
int maxMsgQueues; /* max number of shared message queues */
|
||||
int maxMemParts; /* max number of shared memory partitions */
|
||||
int maxNames; /* max number of name of shared objects */
|
||||
} SM_OBJ_PARAMS;
|
||||
|
||||
#if ((CPU_FAMILY==I960) && (defined __GNUC__))
|
||||
#pragma align 0 /* turn off alignment requirement */
|
||||
#endif /* CPU_FAMILY==I960 */
|
||||
|
||||
/* variable declarations */
|
||||
|
||||
extern int smObjProcNum; /* processor number */
|
||||
extern int smObjPoolMinusOne; /* smObj pool local address - 1 */
|
||||
extern int localToGlobalOffset; /* localAdrs - globalAdrs */
|
||||
extern FUNCPTR smObjTasRoutine; /* test and set routine */
|
||||
extern FUNCPTR smObjTasClearRoutine; /* clear routine */
|
||||
extern int smObjSpinTries; /* maximum retries for lock access */
|
||||
extern SM_HDR volatile * pSmHdr; /* pointer to shared memory header */
|
||||
extern SM_OBJ_MEM_HDR volatile * pSmObjHdr; /* pointer to sm objects header */
|
||||
extern SM_OBJ_DESC smObjDesc; /* shared memory object descriptor */
|
||||
|
||||
/* function declarations */
|
||||
|
||||
#if defined(__STDC__) || defined(__cplusplus)
|
||||
|
||||
extern STATUS smObjLibInit (void);
|
||||
extern STATUS smObjSetup (SM_OBJ_PARAMS * smObjParams);
|
||||
extern void smObjInit (SM_OBJ_DESC * pSmObjDesc, SM_ANCHOR * pAnchor,
|
||||
int ticksPerBeat, int smObjMaxTries, int intType,
|
||||
int intArg1, int intArg2, int intArg3);
|
||||
extern STATUS smObjAttach (SM_OBJ_DESC * pSmObjDesc);
|
||||
extern void * smObjLocalToGlobal (void * localAdrs);
|
||||
extern void * smObjGlobalToLocal (void * globalAdrs);
|
||||
extern void smObjTimeoutLogEnable (BOOL timeoutLogEnable);
|
||||
extern void smObjShowInit (void);
|
||||
extern STATUS smObjShow (void);
|
||||
|
||||
#else /* __STDC__ */
|
||||
|
||||
extern STATUS smObjLibInit ();
|
||||
extern STATUS smObjSetup ();
|
||||
extern void smObjInit ();
|
||||
extern STATUS smObjAttach ();
|
||||
extern void * smObjLocalToGlobal ();
|
||||
extern void * smObjGlobalToLocal ();
|
||||
extern void smObjTimeoutLogEnable ();
|
||||
extern void smObjShowInit ();
|
||||
extern STATUS smObjShow ();
|
||||
|
||||
#endif /* __STDC__ */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __INCsmObjLibh */
|
||||
Reference in New Issue
Block a user