Files
m241Neelima/vxworks-6.9/target/h/private/ftl/ftlOsIf.h
T
2026-07-30 11:19:44 +05:30

222 lines
8.0 KiB
C

/* ftlOsIf.h - FTl OS-dependent definitions */
/*
* Copyright (c) 2012, 2013 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
--------------------
01b,11oct13,ghs Correct compile error (WIND00438400)
01a,29feb12,jxu written.
*/
#ifndef __INCftlOsIfh
#define __INCftlOsIfh
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* includes */
#include <vxWorks.h>
#include <stdio.h>
#include <stdarg.h>
#include <vsbConfig.h>
#include <sys/types.h>
#include <types/vxTypes.h>
#include <memLib.h>
#include <ioLib.h>
#include <string.h>
#include <errnoLib.h>
#include <unistd.h>
#include <taskLib.h>
#include <taskLibCommon.h>
#include <semLib.h>
#include <semLibCommon.h>
#include <avlLib.h>
#include <private/memPartLibP.h>
#include <dllLib.h>
#include <edrLib.h>
#include <edrLibCommon.h>
#include <private/sigLibP.h> /* _sigCtxSave */
#include <cacheLib.h> /* cacheDmaMalloc/Free */
#include <vxAtomicLib.h>
#include <private/vxAtomicLibP.h> /* _WRS_ATOMIC_XXX() */
#include <private/vxPortableP.h> /* vxAtomic64Xxx */
#include <tickLib.h> /* tickGet() */
/* defines */
#define _ftl_inline extern __inline__
#define FTL_LOCK_NULL SEM_ID_NULL
#define FTL_LOCK_RW_NULL SEM_ID_NULL
#define FTL_SEM_NULL SEM_ID_NULL
#define FTL_TASK_NULL TASK_ID_NULL
/* additional flag for semaphore taking */
#define FTL_SEM_TAKE_FAIL_PANIC 0x1
/* memory allocation and free */
#define FTL_MEM_ALLOC(nBytes) ftlMemAlloc(nBytes)
#define FTL_MEM_FREE(pChar) ftlMemFree((char *)pChar)
#define FTL_CACHE_DMA_ALLOC(nBytes) ftlCacheDmaMalloc(nBytes)
#define FTL_CACHE_DMA_FREE(pChar) ftlCacheDmaFree((char *)pChar)
/* atomic variable operations */
#define FTL_ATOMIC32_INC(atomicVar) ftlAtomic32Inc(atomicVar)
#define FTL_ATOMIC32_DEC(atomicVar) ftlAtomic32Dec(atomicVar)
#define FTL_ATOMIC32_GET(atomicVar) ftlAtomic32Get(atomicVar)
#define FTL_ATOMIC32_CLEAR(atomicVar) ftlAtomic32Clear(atomicVar)
#define FTL_ATOMIC32_SET(atomicVar, value) ftlAtomic32Set(atomicVar, value)
#define FTL_ATOMIC32_ADD(atomicVar, value) ftlAtomic32Add(atomicVar, value)
#define FTL_ATOMIC32_SUB(atomicVar, value) ftlAtomic32Sub(atomicVar, value)
#define FTL_ATOMIC64_GET(atomicVar) ftlAtomic64Get(atomicVar)
#define FTL_ATOMIC64_SET(atomicVar, value) ftlAtomic64Set(atomicVar, value)
#define FTL_ATOMIC64_ADD(atomicVar, value) ftlAtomic64Add(atomicVar, value)
#define FTL_ATOMIC64_SUB(atomicVar, value) ftlAtomic64Sub(atomicVar, value)
/* task creation and deletion */
#define FTL_TASK_CREATE(name, prio, option, stackSize, func, pArg) \
ftlTaskCreate (name, prio, option, stackSize, func, pArg)
#define FTL_TASK_DELETE(taskId) ftlTaskDelete(taskId)
/* maximum readers for reader/writer lock */
#define FTL_RW_SEM_MAX_READERS 8
/* semaphore operations */
#define FTL_SEM_C_CREATE(initCnt) ftlSemCCreate( \
SEM_Q_PRIORITY, initCnt)
#define FTL_SEM_B_CREATE(option, initStat) ftlSemBCreate( \
option, initStat)
#define FTL_SEM_TAKE_TRY(semId) ftlSemTakeTry (semId)
#define FTL_SEM_TAKE_TIMEOUT (semId, ticks) \
ftlSemTake(semId, ticks, 0)
#define FTL_SEM_TAKE(semId) \
ftlSemTake(semId, WAIT_FOREVER, FTL_SEM_TAKE_FAIL_PANIC)
#define FTL_SEM_TAKE_NO_PANIC(semId, ticks) \
ftlSemTake(semId, ticks, 0)
#define FTL_SEM_GIVE(semId) ftlSemGive(semId)
#ifdef notyet
#define FTL_LOCK_RW_CREATE() ftlSemRWCreate( \
SEM_Q_PRIORITY | SEM_DELETE_SAFE | SEM_INVERSION_SAFE, \
FTL_RW_SEM_MAX_READERS)
#define FTL_LOCK_R(rwLock) ftlSemRTake(rwLock, WAIT_FOREVER)
#define FTL_LOCK_W(rwLock) ftlSemWTake(rwLock, WAIT_FOREVER)
#define FTL_TRY_LOCK_R(rwLock) ftlSemRTake(rwLock, NO_WAIT)
#define FTL_TRY_LOCK_W(rwLock) ftlSemWTake(rwLock, NO_WAIT)
#define FTL_UNLOCK_RW(rwLock) ftlSemRWGive(rwLock)
#define FTL_LOCK_RW_DELETE(rwLock) ftlSemDelete(rwLock)
#else /* !notyet */
#define FTL_LOCK_RW_CREATE() FTL_LOCK_CREATE()
#define FTL_LOCK_R(rwLock) FTL_LOCK(rwLock)
#define FTL_LOCK_W(rwLock) FTL_LOCK(rwLock)
#define FTL_TRY_LOCK_R(rwLock) FTL_TRY_LOCK(rwLock)
#define FTL_TRY_LOCK_W(rwLock) FTL_TRY_LOCK(rwLock)
#define FTL_UNLOCK_RW(rwLock) FTL_UNLOCK(rwLock)
#define FTL_LOCK_RW_DELETE(rwLock) FTL_LOCK_DELETE(rwLock)
#endif /* notyet */
/* mutual exclusive lock */
#define FTL_LOCK_CREATE() ftlSemMCreate( \
SEM_Q_PRIORITY | SEM_DELETE_SAFE | SEM_INVERSION_SAFE)
#define FTL_LOCK(lock) ftlSemTake(lock, WAIT_FOREVER,\
FTL_SEM_TAKE_FAIL_PANIC)
#define FTL_TRY_LOCK(lock) ftlSemTake(lock, NO_WAIT, 0)
#define FTL_UNLOCK(lock) ftlSemGive(lock)
#define FTL_LOCK_DELETE(lock) ftlSemDelete(lock)
#define FTL_SEM_DELETE(semId) ftlSemDelete(semId)
#define FTL_DIAGNOSTIC
#ifdef FTL_DIAGNOSTIC
#define FTL_PANIC(...) ftlPanic(__FILE__, __LINE__, __VA_ARGS__)
#else
#define FTL_PANIC(...) /* nothing */
#endif /* FTL_DIAGNOSTIC */
#define FTL_TICK_GET() ftlTickGet()
#define FTL_SYS_CLK_RATE_GET() ftlSysClkRateGet()
#define FTL_SET_ERRNO(errNo) ftlSetErrno(errNo)
/* typedefs */
typedef SEM_ID FTL_LOCK_RW_T; /* reader/writer lock type */
typedef SEM_ID FTL_LOCK_T; /* mutual exclusive lock */
typedef SEM_ID FTL_SEM_T; /* mutual exclusive lock */
typedef TASK_ID FTL_TASK_T; /* task type */
typedef atomic32_t FTL_ATOMIC32_T; /* atomic variable */
#ifdef _WRS_PORTABLE_vxAtomicLib
typedef atomic64_t FTL_ATOMIC64_T; /* atomic variable */
#else
typedef atomic32_t FTL_ATOMIC64_T; /* atomic variable */
#endif
typedef _Vx_ticks_t FTL_TICK_T;
typedef _Vx_usr_arg_t FTL_USR_ARG_T;
/* function declarations */
IMPORT __inline__ void * ftlMemAlloc (size_t nBytes);
IMPORT __inline__ int ftlMemFree (char * pMem);
IMPORT __inline__ void * ftlCacheDmaMalloc (size_t nBytes);
IMPORT __inline__ int ftlCacheDmaFree (char * pMem);
IMPORT __inline__ FTL_ATOMIC32_T ftlAtomic32Inc (FTL_ATOMIC32_T * pVar);
IMPORT __inline__ FTL_ATOMIC32_T ftlAtomic32Dec (FTL_ATOMIC32_T * pVar);
IMPORT __inline__ FTL_ATOMIC32_T ftlAtomic32Clear (FTL_ATOMIC32_T * pVar);
IMPORT __inline__ FTL_ATOMIC32_T ftlAtomic32Get (FTL_ATOMIC32_T * pVar);
IMPORT __inline__ FTL_ATOMIC32_T ftlAtomic32Set (FTL_ATOMIC32_T * pVar,
FTL_ATOMIC32_T value);
IMPORT __inline__ FTL_ATOMIC32_T ftlAtomic32Add (FTL_ATOMIC32_T * pVar,
FTL_ATOMIC32_T value);
IMPORT __inline__ FTL_ATOMIC32_T ftlAtomic32Sub (FTL_ATOMIC32_T * pVar,
FTL_ATOMIC32_T value);
IMPORT __inline__ FTL_ATOMIC64_T ftlAtomic64Get (FTL_ATOMIC64_T * pVar);
IMPORT __inline__ FTL_ATOMIC64_T ftlAtomic64Set (FTL_ATOMIC64_T * pVar,
FTL_ATOMIC64_T value);
IMPORT __inline__ FTL_ATOMIC64_T ftlAtomic64Add (FTL_ATOMIC64_T * pVar,
FTL_ATOMIC64_T value);
IMPORT __inline__ FTL_ATOMIC64_T ftlAtomic64Sub (FTL_ATOMIC64_T * pVar,
FTL_ATOMIC64_T value);
IMPORT __inline__ FTL_TASK_T ftlTaskCreate (char * name, int priority,
int options, size_t stackSize, FUNCPTR entryPt,
FTL_USR_ARG_T pArg);
IMPORT __inline__ int ftlTaskDelete (FTL_TASK_T taskId);
IMPORT __inline__ FTL_SEM_T ftlSemMCreate (int options);
IMPORT __inline__ FTL_SEM_T ftlSemCCreate (int options, int initCnt);
IMPORT __inline__ FTL_SEM_T ftlSemBCreate (int options, int initStat);
IMPORT __inline__ int ftlSemDelete (FTL_SEM_T semId);
IMPORT __inline__ int ftlSemTakeTry (FTL_SEM_T semId);
IMPORT __inline__ int ftlSemTake (FTL_SEM_T semId, FTL_TICK_T ticks, int flags);
IMPORT __inline__ int ftlSemGive (FTL_SEM_T semId);
IMPORT __inline__ int ftlSysClkRateGet (void);
IMPORT __inline__ FTL_TICK_T ftlTickGet (void);
IMPORT __inline__ int ftlSetErrno (int errNo);
void ftlPanic (const char * file, int line, const char * fmt, ...);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __INCftlOsIfh */