Files
2026-07-30 11:19:44 +05:30

150 lines
4.1 KiB
C

/* intLibP.h - private interrupt header file */
/*
* Copyright (c) 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
--------------------
01h,01apr14,h_k added intCpuEnable().
01g,29apr10,pad Moved extern C statement after include statements.
01f,16oct09,cww Added intStartupUnlock
01e,26aug09,cww Added prototype for intRestrict
01f,14jul09,s_s moved intCpuMicroLock/Unlock declaration to intMicroLibP.h
01e,06jun09,kk added prototype of intCpuMicroLock/Unlock
01d,27aug08,jpb Renamed VSB header file
01c,08jul08,gls added warning about inclusion in semLibInline.h
01b,24jun08,jpb Added include path for kernel configurations options set in
vsb. Renamed _WRS_VX_SMP to _WRS_CONFIG_SMP.
01a,03feb07,jmg Written, moved IS_INT_CONTEXT and VX_INT_RESTRICT to here and
added the prefix _WRS_ to both macros.
*/
#ifndef __INCintLibPh
#define __INCintLibPh
#include <vxWorks.h>
#include <vsbConfig.h>
#include <private/windLibP.h> /* _WRS_KERNEL_GLOBLAL_ACCESS () */
#ifdef __cplusplus
extern "C" {
#endif
/*
* ***** WARNING *****
*
* This private header file is included by the public header file(s):
* - h/inline/semLibInline.h
*
* Ensure that no usage of a VSB source configuration macro is made
* by any structure or macro in this file that is also used(directly or
* indirectly) by the above list of public header files.
*/
/* variable declarations */
#ifndef _ASMLANGUAGE
#ifndef _WRS_CONFIG_SMP
IMPORT int intCnt; /* count of nested interrupt service routines */
STATUS intRestrict (void);
#endif /* _WRS_CONFIG_SMP */
extern void intCpuEnable (void);
#ifdef _WRS_CONFIG_DELAYED_HW_INIT
extern void intStartupUnlock (void);
#endif
#endif /* _ASMLANGUAGE */
/*******************************************************************************
*
* _WRS_INT_RESTRICT - restrict interrupt context from using a routine
*
* This routine returns OK if and only if we are executing in a
* task's context and ERROR if called within an interrupt context.
*
* This routine is used only in the vxWorks kernel libraries for perfromace. In
* general APIs should use the routines or macros defined in intLib.h instead.
*
* SEE ALSO: INT_RESTRICT(), intRestrict()
*
* RETURNS: OK or ERROR
*
* \NOMANUAL
*/
#ifdef _WRS_CONFIG_SMP
#define _WRS_INT_RESTRICT() INT_RESTRICT()
#else
#define _WRS_INT_RESTRICT() (_WRS_INT_CONTEXT() ? errno = \
S_intLib_NOT_ISR_CALLABLE, ERROR : OK)
#endif /* _WRS_CONFIG_SMP */
/*******************************************************************************
*
* _WRS_INT_CONTEXT - determine if executing in interrupt context
*
* This routine returns TRUE only if the caller is executing in an
* interrupt context. If executing in a task context FALSE is
* returned.
*
* This routine is used only in the vxWorks kernel libraries for perfromace. In
* general APIs should use the routines or macros defined in intLib.h instead
*
* RETURNS: TRUE or FALSE.
*
* ERRNO: N/A
*
* \NOMANUAL
*
*/
#ifdef _WRS_CONFIG_SMP
#define _WRS_INT_CONTEXT() INT_CONTEXT ()
#else
#define _WRS_INT_CONTEXT() (intCnt > 0)
#endif /* _WRS_CONFIG_SMP */
/*******************************************************************************
*
* _WRS_SAFE_INT_CONTEXT - determine if executing in interrupt context
*
* This routine returns TRUE only if the caller is executing in an
* interrupt context. If executing in a task context FALSE is
* returned.
*
* This routine is used only in the vxWorks kernel libraries for perfromace. In
* general APIs should use the routines or macros defined in intLib.h instead
*
* SMP CONSIDERATIONS
*
* This macro uses a non-locked access and may only be used where it is
* protected from task migration.
*
* RETURNS: TRUE or FALSE.
*
* ERRNO: N/A
*
* \NOMANUAL
*
*/
#define _WRS_SAFE_INT_CONTEXT() (_WRS_KERNEL_GLOBAL_ACCESS (intCnt) > 0)
#ifdef __cplusplus
}
#endif
#endif /* __INCintLibPh */