intLib.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:6k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* intLib.h - interrupt library header file */
  2. /* Copyright 1984-2001 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01z,29aug01,hdn  included arch/i86/intI86Lib.h for arch specific stuff
  7. 01w,14dec00,pai  added intEnable and intDisable for all T2 arches (SPR #63046).
  8.                  AM29XXX, SIMSPARCSUNOS, and TRON are explicitly excluded. 
  9. 01x,11sep00,hk   changed to include intShLib.h for Hitachi SH architecture.
  10. 01w,01sep00,hk   added intVBRSet() and _func_intConnectHook prototype for SH.
  11. 01v,03jun98,hdn  added intHandlerCreateX86() prototype.
  12. 01u,25nov97,cdp  moved ARM-specific things to arch/arm/intArmLib.h.
  13. 01t,28oct97,kkk  added INT_NON_PREEMPT_MODEL macro.
  14. 01s,19aug97,cdp  added intLibInit, INT_PREEMPT_MODEL and INT_HDWE_LOCK_LVL.
  15. 01r,27feb97,cdp  added intEnable and intDisable for ARM.
  16. 01p,29nov96,kkk  added prototypes for MIPS routines in the __STDC__ section.
  17.  took out intEnable & intDisable. (conflicts with PPC).
  18. 01p,25nov96,kkk  added prototypes for MIPS interrupt routines.
  19. 01q,13dec96,tpr  added #if/#endif arround intEnable() & intDisable() prototypes.
  20. 01p,09dec96,tpr  added intEnable() & intDisable() prototypes.
  21. 01o,15jun95,ms  added intRegsLock, intRegsUnlock prototypes
  22. 01n,02dec93,tpr  removed am29200Intr3Connect() and am29200Intr3Drv().
  23.     tpr  added am29200Intr3DeMuxConnect().
  24.     tpr  added am29200Intr3Connect() and am29200Intr3Drv() for am29200.
  25.     pad  added am29k family support.
  26. 01m,15oct92,jwt  added intVecTableWriteEnable() prototype for SPARC.
  27. 01l,22sep92,rrr  added support for c++
  28. 01k,27jul92,rdc  added S_intLib_VEC_TABLE_WP_UNAVAILABLE and
  29.  intVecTableWriteProtect ().
  30. 01j,04jul92,jcf  cleaned up.
  31. 01i,26may92,rrr  the tree shuffle
  32. 01h,10jan92,jwt  added intAckConfig(), intTBRSet() prototypes for SPARC.
  33. 01g,04oct91,rrr  passed through the ansification filter
  34.   -changed VOID to void
  35.   -changed copyright notice
  36. 01f,08apr91,jdi  added NOMANUAL to prevent mangen.
  37. 01e,23oct90,shl  fixed misspelling in intUnlock().
  38.  changed intConnect() to take a VOIDFUNCPTR.
  39. 01d,05oct90,shl  added ANSI function prototypes.
  40.                  made #endif ANSI style.
  41.                  added copyright notice.
  42. 01c,10aug90,dnw  added declaration of intVecSet().
  43. 01b,15jul90,dnw  added INT_CONTEXT()
  44. 01a,11apr90,jcf  written.
  45. */
  46. #ifndef __INCintLibh
  47. #define __INCintLibh
  48. #ifdef __cplusplus
  49. extern "C" {
  50. #endif
  51. #include "vxWorks.h"
  52. #include "vwModNum.h"
  53. #include "regs.h"
  54. /* status codes */
  55. #define S_intLib_NOT_ISR_CALLABLE (M_intLib | 1)
  56. #define S_intLib_VEC_TABLE_WP_UNAVAILABLE (M_intLib | 2)
  57. /* variable declarations */
  58. IMPORT int intCnt; /* count of nested interrupt service routines */
  59. /* macros */
  60. #define INT_CONTEXT() (intCnt > 0) /* same as intContext() in intLib.c */
  61. /*******************************************************************************
  62. *
  63. * INT_RESTRICT - restict access of a routine from interrupt use
  64. *
  65. * RETURNS: OK if called from task level, or ERROR if called from interrupt
  66. *          level.
  67. *
  68. * NOMANUAL
  69. */
  70. #define INT_RESTRICT()
  71.     (
  72.     ((intCnt > 0) ? errno = S_intLib_NOT_ISR_CALLABLE, ERROR : OK)
  73.     )
  74. /* function declarations */
  75. #if defined(__STDC__) || defined(__cplusplus)
  76. extern STATUS  intConnect (VOIDFUNCPTR *vector, VOIDFUNCPTR routine,
  77.                  int parameter);
  78. extern FUNCPTR  intHandlerCreate (FUNCPTR routine, int parameter);
  79. extern void  intLockLevelSet (int newLevel);
  80. extern int  intLockLevelGet (void);
  81. extern BOOL  intContext (void);
  82. extern int  intCount (void);
  83. extern void  intVecBaseSet (FUNCPTR *baseAddr);
  84. extern FUNCPTR *intVecBaseGet (void);
  85. extern void  intVecSet (FUNCPTR *vector, FUNCPTR function);
  86. extern FUNCPTR  intVecGet (FUNCPTR *vector);
  87. extern int  intLevelSet (int level);
  88. extern int  intLock (void);
  89. extern int  intUnlock (int oldSR);
  90. extern int  intRegsLock (REG_SET *pRegs);
  91. extern void  intRegsUnlock (REG_SET *pRegs, int lockKey);
  92. extern STATUS   intVecTableWriteProtect (void);
  93. #if (CPU_FAMILY == MIPS)
  94. extern int    intCRGet(void);
  95. extern void   intCRSet(int value);
  96. extern int    intSRGet(void);
  97. extern int    intSRSet(int value);
  98. #endif /* (CPU_FAMILY == MIPS) */
  99. #if (CPU_FAMILY == SPARC)
  100. extern void  intAckConfig ();
  101. extern void  intTBRSet (FUNCPTR *baseAddr);
  102. extern STATUS   intVecTableWriteEnable (void);
  103. #endif
  104. #if (CPU_FAMILY == AM29XXX)
  105. extern FUNCPTR intHandlerCreateAm29k (FUNCPTR *vector, FUNCPTR routine,
  106.        int parameter);
  107. #endif /* (CPU_FAMILY == AM29XXX) */
  108. #if (CPU == AM29200)
  109. extern STATUS am29200Intr3DeMuxConnect (VOIDFUNCPTR deMuxFct, int parameter);
  110. #endif /* (CPU == AM29200) */
  111. #if ((CPU_FAMILY != AM29XXX) || (CPU_FAMILY != SIMSPARCSUNOS) || 
  112.          (CPU_FAMILY != TRON))
  113. extern int intDisable (int);
  114. extern int intEnable (int);
  115. #endif /* ((CPU_FAMILY != AM29XXX)) || ((CPU_FAMILY != ...)) */
  116. #if (CPU_FAMILY == ARM)
  117. #include "arch/arm/intArmLib.h"
  118. #endif /* (CPU_FAMILY == ARM) */
  119. #if (CPU_FAMILY == I80X86)
  120. #include "arch/i86/intI86Lib.h"
  121. #endif /* (CPU_FAMILY == I80X86) */
  122. #if (CPU_FAMILY == SH)
  123. #include "arch/sh/intShLib.h"
  124. #endif /* (CPU_FAMILY == SH) */
  125. #else
  126. extern STATUS  intConnect ();
  127. extern FUNCPTR  intHandlerCreate ();
  128. extern void  intLockLevelSet ();
  129. extern int  intLockLevelGet ();
  130. extern BOOL  intContext ();
  131. extern int  intCount ();
  132. extern void  intVecBaseSet ();
  133. extern FUNCPTR *intVecBaseGet ();
  134. extern void  intVecSet ();
  135. extern FUNCPTR  intVecGet ();
  136. extern int  intLevelSet ();
  137. extern int  intLock ();
  138. extern int  intUnlock ();
  139. extern int  intRegsLock ();
  140. extern void  intRegsUnlock ();
  141. extern STATUS  intVecTableWriteProtect ();
  142. #if (CPU_FAMILY == MIPS)
  143. extern int    intCRGet();
  144. extern void   intCRSet();
  145. extern int    intSRGet();
  146. extern int    intSRSet();
  147. #endif /* (CPU_FAMILY == MIPS) */
  148. #if (CPU_FAMILY == AM29XXX)
  149. extern FUNCPTR intHandlerCreateAm29k ();
  150. #endif /* (CPU_FAMILY == AM29XXX) */
  151. #if (CPU == AM29200)
  152. extern STATUS am29200Intr3DeMuxConnect () ;
  153. #endif /* (CPU == AM29200) */
  154. #if     ((CPU_FAMILY != AM29XXX) || (CPU_FAMILY != SIMSPARCSUNOS) || 
  155.          (CPU_FAMILY != TRON))
  156. extern int intDisable();
  157. extern int intEnable();
  158. #endif  /* ((CPU_FAMILY != AM29XXX)) || ((CPU_FAMILY != ...)) */
  159. #if (CPU_FAMILY == ARM)
  160. #include "arch/arm/intArmLib.h"
  161. #endif /* (CPU_FAMILY == ARM) */
  162. #if (CPU_FAMILY == I80X86)
  163. #include "arch/i86/intI86Lib.h"
  164. #endif /* (CPU_FAMILY == I80X86) */
  165. #if (CPU_FAMILY == SH)
  166. #include "arch/sh/intShLib.h"
  167. #endif /* (CPU_FAMILY == SH) */
  168. #endif /* __STDC__ */
  169. #ifdef __cplusplus
  170. }
  171. #endif
  172. #endif /* __INCintLibh */