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

VxWorks

开发平台:

C/C++

  1. /* cacheArmLib.h - ARM cache library header file */
  2. /* Copyright 1996-2001 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01j,02oct01,jpd  added definitions to support simplifications in source.
  7. 01i,12nov01,to   added cacheArchIntMask (merged from AE)
  8. 01h,23jul01,scm  change XScale name to conform to coding standards...
  9. 01g,11dec00,scm  replace references to ARMSA2 with XScale
  10. 01f,01sep00,scm  add sa2 support...
  11. 01e,07sep99,jpd  added ARM920T support.
  12. 01d,24nov98,jpd  added ARM940T, ARMSA1100, ARMSA1500 support;
  13.     cdp  restructured for multiple cache/MMU libraries.
  14. 01c,09mar98,jpd  tidied.
  15. 01b,16sep97,jpd  added cacheIMBRange(), 810 definitions for cacheDClear() and
  16.  cacheArchIntLock().
  17. 01a,09may96,cdp  created
  18. */
  19. /*
  20.  * N.B. although this library contains code written for the ARM810
  21.  * CPU, at the time of writing, this code has not been fully tested on
  22.  * that CPU. YOU HAVE BEEN WARNED.
  23.  */
  24. #ifndef __INCcacheArmLibh
  25. #define __INCcacheArmLibh
  26. #ifdef __cplusplus
  27. extern "C" {
  28. #endif
  29. #ifndef _ASMLANGUAGE
  30. /*
  31.  * The way in which _CACHE_ALIGN_SIZE is defined has been changed
  32.  * somewhat and is no longer strictly related to the CPU type defined,
  33.  * but is instead related to the cache type selected.  Therefore, it would
  34.  * be better if drivers that need to know the cache line size, use this
  35.  * variable, rather than the constant.  The variable will be initialised
  36.  * to the appropriate cache-type-dependent value by the variant of the
  37.  * cache library initialisation code.
  38.  */
  39. IMPORT UINT32 cacheArchAlignSize;
  40. /*
  41.  * Variable used to hold the interrupt mask used when disabling
  42.  * interrupts for lengthy cache operations such as cache flushing.  This
  43.  * is preinitialised to a mask that disables IRQs and FIQs.  The BSP may
  44.  * change this.  Do not do so unless you are sure that you understand the
  45.  * consequences.  In particular, if interrupts are allowed to occur
  46.  * during these operations, the state of the cache afterwards may be
  47.  * indeterminate.
  48.  */
  49. IMPORT UINT32 cacheArchIntMask;
  50. /* routine that locks interrupts according to the mask above */
  51. IMPORT UINT32 cacheArchIntLock (void);
  52. #endif /* _ASMLANGUAGE */
  53. /*
  54.  * Some cache designs (e.g. Harvard) have D-cache either fully or
  55.  * partially not coherent with I-cache
  56.  */
  57. #if ((ARMCACHE == ARMCACHE_810)    || (ARMCACHE == ARMCACHE_SA110)  || 
  58.      (ARMCACHE == ARMCACHE_SA1100) || (ARMCACHE == ARMCACHE_SA1500) || 
  59.      (ARMCACHE == ARMCACHE_920T)   || (ARMCACHE == ARMCACHE_940T)   || 
  60.      (ARMCACHE == ARMCACHE_946E)   || (ARMCACHE == ARMCACHE_XSCALE))
  61. #define ARMCACHE_NOT_COHERENT TRUE
  62. #elif ((ARMCACHE == ARMCACHE_NONE) || (ARMCACHE == ARMCACHE_710A) || 
  63.        (ARMCACHE == ARMCACHE_720T) || (ARMCACHE == ARMCACHE_740T))
  64. #define ARMCACHE_NOT_COHERENT FALSE
  65. #else
  66. #error ARMCACHE value not supported in definition of ARMCACHE_NOT_COHERENT
  67. #endif
  68. /*
  69.  * We used only to allow writethrough on 710A, 720T, 740T and XScale. In fact,
  70.  * 810, 920T, 940T and 946E allow pages to be marked as writethough, even
  71.  * though the mode of the cache cannot be set globally.
  72.  *
  73.  * For time being, do not change behaviour on 920T, 940T.
  74.  */
  75. #if ((ARMCACHE == ARMCACHE_710A) || (ARMCACHE == ARMCACHE_720T) || 
  76.      (ARMCACHE == ARMCACHE_740T) || (ARMCACHE == ARMCACHE_946E) || 
  77.      (ARMCACHE == ARMCACHE_XSCALE))
  78. #define ARMCACHE_HAS_WRITETHROUGH TRUE
  79. #elif ((ARMCACHE == ARMCACHE_NONE)   || (ARMCACHE == ARMCACHE_810)    || 
  80.        (ARMCACHE == ARMCACHE_SA110)  || (ARMCACHE == ARMCACHE_SA1100) || 
  81.        (ARMCACHE == ARMCACHE_SA1500) || (ARMCACHE == ARMCACHE_920T)   || 
  82.        (ARMCACHE == ARMCACHE_940T))
  83. #define ARMCACHE_HAS_WRITETHROUGH FALSE
  84. #else
  85. #error ARMCACHE value not supported in definition of ARMCACHE_HAS_WRITETHROUGH
  86. #endif
  87. #if ((ARMCACHE == ARMCACHE_SA1100) || (ARMCACHE == ARMCACHE_SA1500) || 
  88.      (ARMCACHE == ARMCACHE_XSCALE))
  89. #define ARMCACHE_HAS_MINICACHE TRUE
  90. #else
  91. #define ARMCACHE_HAS_MINICACHE FALSE
  92. #endif
  93. #if (ARMCACHE == ARMCACHE_810)
  94. #define ARMCACHE_NEEDS_IMB TRUE
  95. #elif ((ARMCACHE == ARMCACHE_NONE)   || (ARMCACHE == ARMCACHE_710A)   || 
  96.        (ARMCACHE == ARMCACHE_720T)   || (ARMCACHE == ARMCACHE_740T)   || 
  97.        (ARMCACHE == ARMCACHE_SA110)  || (ARMCACHE == ARMCACHE_SA1100) || 
  98.        (ARMCACHE == ARMCACHE_SA1500) || (ARMCACHE == ARMCACHE_920T)   || 
  99.        (ARMCACHE == ARMCACHE_940T)   || (ARMCACHE == ARMCACHE_946E)   || 
  100.        (ARMCACHE == ARMCACHE_XSCALE))
  101. #define ARMCACHE_NEEDS_IMB FALSE
  102. #else
  103. #error ARMCACHE value not supported in definition of ARMCACHE_NEEDS_IMB
  104. #endif
  105. #if (ARMCACHE == ARMCACHE_710A)
  106. #include "cacheArm710aLib.h"
  107. #elif (ARMCACHE == ARMCACHE_720T)
  108. #include "cacheArm720tLib.h"
  109. #elif (ARMCACHE == ARMCACHE_740T)
  110. #include "cacheArm740tLib.h"
  111. #elif (ARMCACHE == ARMCACHE_810)
  112. #include "cacheArm810Lib.h"
  113. #elif (ARMCACHE == ARMCACHE_SA110)
  114. #include "cacheArmSA110Lib.h"
  115. #elif (ARMCACHE == ARMCACHE_SA1100)
  116. #include "cacheArmSA1100Lib.h"
  117. #elif (ARMCACHE == ARMCACHE_SA1500)
  118. #include "cacheArmSA1500Lib.h"
  119. #elif (ARMCACHE == ARMCACHE_920T)
  120. #include "cacheArm920tLib.h"
  121. #elif (ARMCACHE == ARMCACHE_940T)
  122. #include "cacheArm940tLib.h"
  123. #elif (ARMCACHE == ARMCACHE_946E)
  124. #include "cacheArm946eLib.h"
  125. #elif (ARMCACHE == ARMCACHE_XSCALE)
  126. #include "cacheArmXSCALELib.h"
  127. #endif /* ARMCACHE == ARMCACHE_710A */
  128. #ifdef __cplusplus
  129. }
  130. #endif
  131. #endif /* __INCcacheArmLibh */