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

VxWorks

开发平台:

C/C++

  1. /* vmLib.h - header for architecture independent mmu interface */
  2. /* Copyright 1984-1998 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01s,26jul01,scm  add extended small page table support for XScale...
  7. 01r,13nov98,jpd  added vmMpuLib routine definitions and new error numbers.
  8. 01q,09apr98,hdn  added support for Pentium and PentiumPro.
  9. 01p,09mar98,jpd  added extra ARM VM_STATEs.
  10. 01n,28nov96,jpd  added comment about VM_STATE_CACHEABLE_WRITETHROUGH for
  11.                  ARM710A as well as MC68040.
  12. 01m,01jan96,tpr  changed value of the PPC specific macro.
  13. 01l,18sep95,tpr  added VM_STATE_MASK_MEM_COHERENCY, VM_STATE_MASK_GUARDED,
  14.  VM_STATE_MASK_GUARDED and VM_STATE_MASK_EXECUTE for powerPc.
  15. 01k,26jul94,tpr  added VM_STATE_CACHEABLE_NOT_IMPRECISE for MC68060.
  16. 01j,09feb93,rdc  added prototypes for vmBaseStateSet and vmBasePageSizeGet;
  17. 01i,19oct92,pme  replaced _STDC__ by __STDC__.
  18. 01h,19oct92,jcf  cleanup. added vmContextDelete() prototype.
  19. 01g,22sep92,rrr  added support for c++
  20. 01f,22sep92,rdc  changed prototype for vmGlobalInfoGet.
  21.  Added prototype for vmPageBlockSizeGet.
  22.  Added support for sun1e.
  23. 01e,30jul92,rdc  added prototype for vmContextShow.
  24. 01d,28jul92,rdc  added non-ansi function prototypes and prototypes for 
  25.  vmBaseLib.c and vmShow.c.
  26. 01c,13jul92,rdc  moved private data structures to vmLibP.h.
  27. 01b,09jul92,rdc  added VM_LIB_INFO and PHYS_MEM_DESC.
  28. 01a,08jul92,rdc  written.
  29. */
  30. #ifndef __INCvmLibh
  31. #define __INCvmLibh
  32. #ifdef __cplusplus
  33. extern "C" {
  34. #endif
  35. #include "vxWorks.h"
  36. #include "memLib.h"
  37. #include "lstLib.h"
  38. #include "private/objLibP.h"
  39. #include "private/classLibP.h"
  40. #include "private/semLibP.h"
  41. #include "mmuLib.h"
  42. /* status codes */
  43. #define S_vmLib_NOT_PAGE_ALIGNED (M_vmLib | 1)
  44. #define S_vmLib_BAD_STATE_PARAM (M_vmLib | 2)
  45. #define S_vmLib_BAD_MASK_PARAM (M_vmLib | 3)
  46. #define S_vmLib_ADDR_IN_GLOBAL_SPACE (M_vmLib | 4)
  47. #define S_vmLib_TEXT_PROTECTION_UNAVAILABLE (M_vmLib | 5)
  48. #if (CPU_FAMILY == ARM)
  49. #define S_vmLib_NO_FREE_REGIONS (M_vmLib | 6)
  50. #define S_vmLib_ADDRS_NOT_EQUAL (M_vmLib | 7)
  51. #endif
  52. /* physical memory descriptor is used to map virtual memory in sysLib 
  53.  * and usrConfig.
  54.  */
  55. typedef struct phys_mem_desc
  56.     {
  57.     void *virtualAddr;
  58.     void *physicalAddr;
  59.     UINT len;
  60.     UINT initialStateMask;      /* mask parameter to vmStateSet */
  61.     UINT initialState;          /* state parameter to vmStateSet */
  62.     } PHYS_MEM_DESC;
  63. IMPORT PHYS_MEM_DESC sysPhysMemDesc[];
  64. IMPORT int sysPhysMemDescNumEnt;
  65. typedef struct vm_context
  66.     {
  67.     OBJ_CORE objCore;
  68.     MMU_TRANS_TBL_ID mmuTransTbl;   
  69.     SEMAPHORE sem;
  70.     NODE links;
  71.     } VM_CONTEXT;
  72. typedef VM_CONTEXT *VM_CONTEXT_ID;
  73. /* state mask constants for vmStateSet vmStateGet. These
  74.  * constants define the bit fields in the page state. 
  75.  */
  76. #define VM_STATE_MASK_VALID                     0x03
  77. #define VM_STATE_MASK_WRITABLE                  0x0c
  78. #define VM_STATE_MASK_CACHEABLE                 0x30
  79. #define VM_STATE_MASK_MEM_COHERENCY 0x40
  80. #define VM_STATE_MASK_GUARDED 0x80
  81. /* state mask constant for ARM: bufferable, not cacheable */
  82. #define VM_STATE_MASK_BUFFERABLE 0x80
  83. /* additional state mask constants for XScale: extended page table support */
  84. #define VM_STATE_MASK_EX_CACHEABLE              0x40
  85. #define VM_STATE_MASK_EX_BUFFERABLE 0xC0
  86. /* state constants for vmStateSet and vmStateGet.  These
  87.  * values are or'ed together to form the page state.  Additional
  88.  * values may be defined by specific architectures below. 
  89.  */
  90. #define VM_STATE_VALID                          0x01
  91. #define VM_STATE_VALID_NOT                      0x00
  92. #define VM_STATE_WRITABLE                       0x04
  93. #define VM_STATE_WRITABLE_NOT                   0x00
  94. #define VM_STATE_CACHEABLE               0x10
  95. #define VM_STATE_CACHEABLE_NOT           0x00
  96. /* additional cache states for MC68040 and ARM710A */
  97. #define VM_STATE_CACHEABLE_WRITETHROUGH 0x20
  98. /* additional cache states for MC68040 */
  99. #define VM_STATE_CACHEABLE_NOT_NON_SERIAL 0x30
  100. /* additional cache states for MC68060 */
  101. #define VM_STATE_CACHEABLE_NOT_IMPRECISE 0x30
  102. /* additional cache states for the powerPc */
  103. #define VM_STATE_MEM_COHERENCY 0x40
  104. #define VM_STATE_MEM_COHERENCY_NOT 0x00
  105. #define VM_STATE_GUARDED 0x80
  106. #define VM_STATE_GUARDED_NOT 0x00
  107. #define VM_STATE_ACCESS_NOT 0x08
  108. /* since MEM_COHERENCY and GUARDED state bits are already added,
  109.  * we use them for Pentium by renaming it as follows:
  110.  *   VM_STATE_WBACK         = VM_STATE_MEM_COHERENCY
  111.  *   VM_STATE_WBACK_NOT     = VM_STATE_MEM_COHERENCY_NOT
  112.  *   VM_STATE_GLOBAL        = VM_STATE_GUARDED
  113.  *   VM_STATE_GLOBAL_NOT    = VM_STATE_GUARDED_NOT
  114.  * their meanings are:
  115.  *   VM_STATE_WBACK         = set page cache-write-back bit
  116.  *   VM_STATE_WBACK_NOT     = not set page cache-write-back bit
  117.  *   VM_STATE_GLOBAL        = set page global bit
  118.  *   VM_STATE_GLOBAL_NOT    = not set page global bit
  119.  */
  120. #define VM_STATE_MASK_WBACK VM_STATE_MASK_MEM_COHERENCY
  121. #define VM_STATE_MASK_GLOBAL VM_STATE_MASK_GUARDED
  122. #define VM_STATE_WBACK VM_STATE_MEM_COHERENCY
  123. #define VM_STATE_WBACK_NOT VM_STATE_MEM_COHERENCY_NOT
  124. #define VM_STATE_GLOBAL VM_STATE_GUARDED
  125. #define VM_STATE_GLOBAL_NOT VM_STATE_GUARDED_NOT
  126. /* additional cache state for ARM: bufferable, not cacheable */
  127. #define VM_STATE_BUFFERABLE 0x80
  128. #define VM_STATE_BUFFERABLE_NOT 0x00
  129. /* additional cache states for XScale: extended page table support */
  130. #define VM_STATE_EX_CACHEABLE               0x40
  131. #define VM_STATE_EX_CACHEABLE_NOT           0x00
  132. #define VM_STATE_EX_BUFFERABLE 0xC0
  133. #define VM_STATE_EX_BUFFERABLE_NOT 0x00
  134. /* additional cache states for ARM SA-1100 */
  135. #define VM_STATE_CACHEABLE_MINICACHE 0x30
  136. /* additional device type states for sun1e */
  137. #define VM_STATE_MASK_DEVICE_SPACE 0xc0
  138. #define VM_STATE_DS_MEM 0x00
  139. #define VM_STATE_DS_IO 0x40
  140. #define VM_STATE_DS_VME_D16 0x80
  141. #define VM_STATE_DS_VME_D32 0xc0
  142. /* function declarations */
  143. #if defined(__STDC__) || defined(__cplusplus)
  144. extern STATUS vmLibInit (int pageSize);
  145. extern VM_CONTEXT_ID  vmGlobalMapInit (PHYS_MEM_DESC *pMemDescArray, 
  146.     int numDescArrayElements, BOOL enable);
  147. extern VM_CONTEXT * vmContextCreate ();
  148. extern STATUS  vmContextDelete (VM_CONTEXT_ID context);
  149. extern STATUS  vmContextInit (VM_CONTEXT *context);
  150. extern STATUS  vmStateSet (VM_CONTEXT *context, void *pVirtual,
  151.     int len, UINT stateMask, UINT state);
  152. extern STATUS  vmStateGet (VM_CONTEXT *context, void *pageAddr,
  153.     UINT *state);
  154. extern STATUS  vmMap (VM_CONTEXT *context, void *virtualAddr,
  155.        void *physicalAddr, UINT len);
  156. extern STATUS  vmGlobalMap (void *virtualAddr, void *physicalAddr,
  157.      UINT len);
  158. extern UINT8 * vmGlobalInfoGet ();
  159. extern int  vmPageBlockSizeGet ();
  160. extern STATUS  vmTranslate (VM_CONTEXT *context, void *virtualAddr, 
  161.           void **physicalAddr);
  162. extern int  vmPageSizeGet ();
  163. extern VM_CONTEXT * vmCurrentGet ();
  164. extern STATUS  vmCurrentSet (VM_CONTEXT *context);
  165. extern STATUS  vmEnable (BOOL enable);
  166. extern STATUS  vmTextProtect ();
  167. extern STATUS  vmBaseLibInit (int pageSize);
  168. extern VM_CONTEXT_ID  vmBaseGlobalMapInit (PHYS_MEM_DESC *pMemDescArray, 
  169.             int numDescArrayElements,
  170.      BOOL enable);
  171. extern STATUS     vmBaseStateSet (VM_CONTEXT *context, void *pVirtual, 
  172.         int len, UINT stateMask, UINT state);
  173. extern int        vmBasePageSizeGet (void);
  174. extern STATUS  vmMpuLibInit (int pageSize);
  175. extern VM_CONTEXT_ID  vmMpuGlobalMapInit (PHYS_MEM_DESC *pMemDescArray, 
  176.             int numDescArrayElements,
  177.      BOOL enable);
  178. extern STATUS     vmMpuStateSet (VM_CONTEXT *context, void *pVirtual, 
  179.        int len, UINT stateMask, UINT state);
  180. extern int        vmMpuPageSizeGet (void);
  181. extern void  vmShowInit (void);
  182. extern STATUS  vmContextShow (VM_CONTEXT_ID context);
  183. #else /* __STDC__ */
  184. extern STATUS  vmLibInit ();
  185. extern VM_CONTEXT_ID  vmGlobalMapInit ();
  186. extern VM_CONTEXT * vmContextCreate ();
  187. extern STATUS  vmContextInit ();
  188. extern STATUS  vmStateSet ();
  189. extern STATUS  vmStateGet ();
  190. extern STATUS  vmMap ();
  191. extern STATUS  vmGlobalMap ();
  192. extern UINT8 * vmGlobalInfoGet ();
  193. extern int  vmPageBlockSizeGet ();
  194. extern STATUS  vmTranslate ();
  195. extern int  vmPageSizeGet ();
  196. extern VM_CONTEXT * vmCurrentGet ();
  197. extern STATUS  vmCurrentSet ();
  198. extern STATUS  vmEnable ();
  199. extern STATUS  vmTextProtect ();
  200. extern STATUS  vmBaseLibInit ();
  201. extern VM_CONTEXT_ID vmBaseGlobalMapInit ();
  202. extern STATUS     vmBaseStateSet ();
  203. extern int        vmBasePageSizeGet ();
  204. extern STATUS  vmMpuLibInit ();
  205. extern VM_CONTEXT_ID vmMpuGlobalMapInit ();
  206. extern STATUS     vmMpuStateSet ();
  207. extern int        vmMpuPageSizeGet ();
  208. extern void  vmShowInit ();
  209. extern STATUS  vmContextShow ();
  210. #endif /* __STDC__ */
  211. #ifdef __cplusplus
  212. }
  213. #endif
  214. #endif /* __INCvmLibh */