Files
vxWorks/h/vxWorksCommon.h
2025-08-20 18:25:46 +08:00

290 lines
9.5 KiB
C

/* vxWorksCommon.h - VxWorks standard definitions header */
/*
* Copyright (c) 1984-2005 Wind River Systems, Inc.
*
* The right to copy, distribute or otherwise make use of this software
* may be licensed only pursuant to the terms of an applicable Wind River
* license agreement. No license to Wind River intellectual property rights
* is granted herein. All rights not licensed by Wind River are reserved
* by Wind River.
*/
/*
modification history
--------------------
04c,21jul05,yvp Deleted inclusion of vxLayerConfig.h and prjComps.h
Updated copyright. Includes now with angle brackets.
04b,07jul05,pee Added conditinal inclusion of prjComps for building projects from source
04a,17may05,yvp Moved #include vxLayerConfig.h outside the _ASMLANGUAGE block.
03z,26apr05,yvp Added include for vxLayerConfig.h
03y,23mar05,yvp Added include for vxGlobal.h.
03x,22oct04,mcm Fix for SPR#102899 - min/max namespace pollution.
03w,05may04,dat move version number macros from vxWorks.c to version.h,
added parens around TRUE and FALSE
03v,18mar04,job Removed isascii and toascii macros as these have been
moved to ctypes.h. Refactored into common file.
Moved BUS definitions to kernel only version
Moved *_INSN_* macros to kernel only version.
Moved STACK, ALLOC & CACHE_ALIGN_SIZE macros to types/vxArch.h
03u,09feb04,dat New release id macros
03t,02dec03,dat removing NULL
03s,14may03,pes PAL conditional compilation cleanup. Phase 2.
03r,25jun03,dcc removed non-ANSI prototypes.
03q,14mar03,dcc added include of types/vxWind.h
03p,27nov01,mrs Fix to conform to ANSI standard for token pasting.
03o,31oct01,tdl Check for preexsiting __P def before defining it
03n,18oct01,dat Chg TOOLCHAIN to TOOL_FAMILY
03m,24sep01,gls Added definition of __P() macro (SPR #28330)
03l,28sep01,rae added #define _WRS_VXWORKS_5_X
03k,19sep01,dat Rework of gnu-diab changes
03j,08sep01,dat Gnu-Diab infrastructure
03i,20aug01,dat Gnu-Diab, added #include toolMacros.h
03h,17feb99,mrs Add C++ support for NULL, (SPR #25079).
03g,25nov97,dat added BUS_TYPE macros
03f,26nov96,vin modified BSD to 44.
03e,23aug94,ism added the MSW() and LSW() macros (SPR#3541)
03d,22sep92,rrr added support for c++
03c,07sep92,smb added #undef BSD to remove previous definition
03b,11jul92,smb moved CPU definitions to types/vxCpu.h
03a,04jul92,jcf cleaned up.
02q,28jun92,smb reworked for ANSI lib.
02p,22jun92,rrr added MIPS CPU_FAMILY
02o,16jun92,jwt added (CPU_FAMILY = SPARC) for (CPU == SPARClite).
02n,26may92,rrr the tree shuffle
02m,17mar92,yao added _STACK_GROWS_DOWN/UP. added macros ROUND_UP/DOWN,
ALIGNED, MEM_ROUND_UP/DOWN, STACK_ROUND_UP/DOWN, MEM_ALIGNED.
changed copyright notice. included arch.h. moved ffsMSB
definitions for 960 to changed BYTE_ORDER to _BYTE_ORDER,
BIG/LITTLE_ENDIAN to _BIG/LITTLE_ENDIAN. arch960.h. removed
conditional include of r3k/arch.h.
02l,09jan91,wmd conditionalized out ffsMSB inline definition to shut up
ansi warnings.
02k,11nov91,jpb added definition for R3K CPU_FAMILY.
02j,28oct91,wmd for lack of better place - added Intel's 960 ffsMSB
inline definition here.
02i,04oct91,rrr passed through the ansification filter
-fixed #else and #endif
-changed READ, WRITE and UPDATE to O_RDONLY O_WRONLY and ...
-changed copyright notice
02h,25sep91,yao added CPU32.
02g,10sep91,wmd added MIPS to conditional for BIG_ENDIAN byte order.
02f,20aug91,ajm added MIPS_R3k support.
02e,14aug91,del (intel) added I960KA/KB defines.
02d,29apr91,hdn added defines and macros for TRON architecture
02c,31mar91,del added #define of BYTE_ORDER for network etc.
02b,25oct90,dnw changed to allow NULL to be redefined.
02a,25oct90,shl combined CPU test for I960KB and I960CA into one.
...deleted pre v2a history - see RCS
*/
#ifndef __INCvxWorksCommonh
#define __INCvxWorksCommonh
#if !defined(EOF) || (EOF!=(-1))
#define EOF (-1)
#endif
#if !defined(FALSE) || (FALSE!=(0))
#define FALSE (0)
#endif
#if !defined(TRUE) || (TRUE!=(1))
#define TRUE (1)
#endif
#define NONE (-1) /* for times when NULL won't do */
#define EOS '\0' /* C string terminator */
/* return status values */
#define OK 0
#define ERROR (-1)
/* timeout defines */
#define NO_WAIT 0
#define WAIT_FOREVER (-1)
/* low-level I/O input, output, error fd's */
#define STD_IN 0
#define STD_OUT 1
#define STD_ERR 2
/* modes - must match O_RDONLY/O_WRONLY/O_RDWR in ioLib.h! */
#define VX_READ 0
#define VX_WRITE 1
/* SYSTEM types */
#define V7 1 /* ATT version 7 */
#define SYS_V 2 /* ATT System 5 */
#define BSD_4_2 3 /* Berkeley BSD 4.2 */
/* network configuration parameters */
#define INET /* include internet protocols */
#undef BSD /* remove any previous definition */
#define BSD 44 /* BSD 4.4 like OS */
#define BSDDEBUG /* turn on debug */
#define GATEWAY /* tables to be initialized for gateway routing */
/* common macros */
#define MSB(x) (((x) >> 8) & 0xff) /* most signif byte of 2-byte integer */
#define LSB(x) ((x) & 0xff) /* least signif byte of 2-byte integer*/
#define MSW(x) (((x) >> 16) & 0xffff) /* most signif word of 2-word integer */
#define LSW(x) ((x) & 0xffff) /* least signif byte of 2-word integer*/
/* swap the MSW with the LSW of a 32 bit integer */
#define WORDSWAP(x) (MSW(x) | (LSW(x) << 16))
#define LLSB(x) ((x) & 0xff) /* 32bit word byte/word swap macros */
#define LNLSB(x) (((x) >> 8) & 0xff)
#define LNMSB(x) (((x) >> 16) & 0xff)
#define LMSB(x) (((x) >> 24) & 0xff)
#define LONGSWAP(x) ((LLSB(x) << 24) | \
(LNLSB(x) << 16)| \
(LNMSB(x) << 8) | \
(LMSB(x)))
#define OFFSET(structure, member) /* byte offset of member in structure*/\
((int) &(((structure *) 0) -> member))
#define MEMBER_SIZE(structure, member) /* size of a member of a structure */\
(sizeof (((structure *) 0) -> member))
#define NELEMENTS(array) /* number of elements in an array */ \
(sizeof (array) / sizeof ((array) [0]))
#define FOREVER for (;;)
/*
* min & max are C++ standard functions which are provided by the user
* side C++ libraries
*/
#if defined(_WRS_KERNEL) || !defined(__cplusplus)
#define max(x, y) (((x) < (y)) ? (y) : (x))
#define min(x, y) (((x) < (y)) ? (x) : (y))
#endif /* _WRS_KERNEL || !__cplusplus */
/* storage class specifier definitions */
#define FAST register
#define IMPORT extern
#define LOCAL static
#include <types/vxCpu.h> /* must come before vxArch.h include */
#include <types/vxArch.h> /* must come before include of types */
#ifndef _ASMLANGUAGE
#include <types/vxParams.h> /* must come before include of types */
#include <types/vxTypesBase.h> /* must come between vxArch/vxTypes */
#include <types/vxTypes.h>
#include <types/vxTypesOld.h>
#include <types/vxWind.h>
#endif /* _ASMLANGUAGE */
#define ROUND_UP(x, align) (((int) (x) + (align - 1)) & ~(align - 1))
#define ROUND_DOWN(x, align) ((int)(x) & ~(align - 1))
#define ALIGNED(x, align) (((int)(x) & (align - 1)) == 0)
/* In the kernel, the alignment sizes are a property of the specific
* architecture varient we build for. In user mode, the alignment sizes
* are passed from the kernel to the RTP via the aux_v mechanism, so we
* need to override the definitions here. This needs to be done now,
* rather than in types/vxArch.h because we're referencing variables of
* type size_t, which aren't defined until vxTypes.h
*/
#ifndef _WRS_KERNEL
#ifndef _ASMLANGUAGE
/* XXX Note - there is probably an issue with Assembly builds with this
* model. This needs to be fixed.
*/
extern size_t allocAlignSize;
extern size_t stackAlignSize;
extern size_t cacheAlignSize;
extern size_t vmPageSize;
#ifdef _ALLOC_ALIGN_SIZE
#undef _ALLOC_ALIGN_SIZE
#endif /* _ALLOC_ALIGN_SIZE */
#define _ALLOC_ALIGN_SIZE allocAlignSize
#ifdef _STACK_ALIGN_SIZE
#undef _STACK_ALIGN_SIZE
#endif /* _STACK_ALIGN_SIZE */
#define _STACK_ALIGN_SIZE stackAlignSize
#ifdef _CACHE_ALIGN_SIZE
#undef _CACHE_ALIGN_SIZE
#endif /* _CACHE_ALIGN_SIZE */
#define _CACHE_ALIGN_SIZE cacheAlignSize
#define VM_PAGE_SIZE_GET() vmPageSize
#endif /* _ASMLANGUAGE */
#endif /* _WRS_KERNEL */
#if defined(_ASMLANGUAGE) && !defined(_WRS_KERNEL)
/* XXX only exclude these macros if user mode & assembly build */
#else
#define MEM_ROUND_UP(x) ROUND_UP(x, _ALLOC_ALIGN_SIZE)
#define MEM_ROUND_DOWN(x) ROUND_DOWN(x, _ALLOC_ALIGN_SIZE)
#define STACK_ROUND_UP(x) ROUND_UP(x, _STACK_ALIGN_SIZE)
#define STACK_ROUND_DOWN(x) ROUND_DOWN(x, _STACK_ALIGN_SIZE)
#define MEM_ALIGNED(x) ALIGNED(x, _ALLOC_ALIGN_SIZE)
#endif /* defined(_ASMLANGUAGE) && !defined(_WRS_KERNEL) */
/*
* In case TOOL_FAMILY isn't defined, we shal assume gnu for
* backward compatibility. All this is so we can include
* the toolMacros.h file from the h/tool/$(TOOL_FAMILY) directory
* path. This is needed because for host tool building we can't
* always specify additional include paths for compiler tool
* builds.
*/
#ifndef TOOL_FAMILY
# define TOOL_FAMILY gnu
#endif
/* All this to generate a string we can #include */
#define TOOL_HDR_STRINGIFY(x) #x
#define TOOL_HDR(tc, file) TOOL_HDR_STRINGIFY(tool/tc/file)
#define TOOL_HEADER(file) TOOL_HDR(TOOL_FAMILY,file)
/* Now include the correct header file */
#include TOOL_HEADER(toolMacros.h)
#define _WRS_VXWORKS_5_X
#ifdef _WRS_KERNEL
#include <version.h> /* kernel version numbers */
#endif
/*
* Before we insist on defining __P here make sure there
* aren't any previous occurrences! __P may clash with
* the compiler's definition of it.
*/
#ifndef __P
#define __P(protos) protos /* Use ANSI C proto */
#endif
#endif /* __INCvxWorksCommonh */