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

VxWorks

开发平台:

C/C++

  1. /* usrMmuInit.c - memory management unit initialization */
  2. /* Copyright 1992-2002 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01x,05jun02,hdn  added 36bit MMU support for P6 and P7
  7. 01w,17apr02,jtp  support PPC440 MMU
  8. 01v,27aug01,hdn  renamed mmuLibInit to mmuI86LibInit for PENTIUM2/3/4
  9. 01u,14aug01,hdn  added PENTIUM2/3/4 support
  10. 01t,26apr01,scm  remove xscale debug LED code...
  11. 01q,20jan99,cdp  prevent MMU initialisation when ARM_HAS_NO_MMU defined;
  12.  removed support for old ARM libraries.
  13. 01p,16nov98,cdp  added BSP selection of MMU for ARM. Added INCLUDE_MMU_MPU.
  14. 01n,10nov00,s_m  PPC405 support
  15. 01n,02mar00,zl   merged SH support into T2
  16. 01m,24aug98,tpr  added PowerPC EC 603 support.
  17. 01n,09apr98,hdn  added support for PentiumPro.
  18. 01m,28nov96,cdp  added ARM support.
  19. 01l,17jun96,tpr  added PowerPC 860 support.
  20. 01k,19sep95,tpr  added PowerPC support.
  21. 01j,06nov94,tmk  added MC68LC040 support.
  22. 01i,16jun94,tpr  added MC68060 cpu support.
  23. 01i,13nov93,hdn  added support for I80X86.
  24. 01i,02dec93,pme  added Am29K family support.
  25. 01h,30jul93,jwt  changed CPU to CPU_FAMILY for SPARC; include sun4.h to BSP.
  26. 01g,27feb93,rdc  removed check for both BASIC and FULL (done in usrDepend.c).
  27. 01f,13feb93,jcf  changed SPARC mmu initialization to utilize sysMmuLibInit.
  28. 01e,16oct92,jwt  included sun4.h to pull in prototype for mmuSun4LibInit().
  29. 01d,08oct92,rdc  ensured that both BASIC and FULL aren't set simultaneously.
  30. 01c,29sep92,ccc  renamed mmu1eLibInit() to mmuSun4LibInit().
  31. 01b,22sep92,rdc  cleanup, added support for sun1e.
  32. 01a,18sep92,jcf  written.
  33. */
  34. /*
  35. DESCRIPTION
  36. This file is used to initialize the memory management unit.  This file is
  37. included by usrConfig.c.
  38. SEE ALSO: usrExtra.c
  39. NOMANUAL
  40. */
  41. #ifndef  __INCusrMmuInitc
  42. #define  __INCusrMmuInitc 
  43. #if defined(INCLUDE_MMU_BASIC) || defined(INCLUDE_MMU_FULL) || 
  44.     defined(INCLUDE_MMU_MPU)
  45. #if ((CPU == PPC601) || (CPU == PPC603) || (CPU == PPCEC603) || (CPU == PPC604))
  46. #include "arch/ppc/mmuPpcLib.h"
  47. #elif (CPU == PPC860)
  48. #include "arch/ppc/mmu800Lib.h"
  49. #elif  ((CPU == PPC405) || (CPU == PPC405F))
  50. #include "arch/ppc/mmu405Lib.h"
  51. #elif  ((CPU == PPC440))
  52. #include "arch/ppc/mmu440Lib.h"
  53. #endif /* (CPU == PPC*) */
  54. /* externals */
  55. IMPORT FUNCPTR sysMmuLibInit; /* board-specific MMU library */
  56. IMPORT PHYS_MEM_DESC sysPhysMemDesc [];
  57. IMPORT int sysPhysMemDescNumEnt;
  58. IMPORT UINT32 sysBatDesc [];
  59. #if (CPU == PPC440)
  60. IMPORT TLB_ENTRY_DESC sysStaticTlbDesc [];
  61. IMPORT int sysStaticTlbDescNumEnt;
  62. #endif
  63. /*******************************************************************************
  64. *
  65. * usrMmuInit - initialize the memory management unit
  66. *
  67. * NOMANUAL
  68. */
  69. void usrMmuInit (void)
  70.     {
  71. #if ((CPU == PPC601) || (CPU == PPC603) || (CPU == PPCEC603) || 
  72.  (CPU == PPC604) || (CPU == PPC860) || (CPU == PPC405) || 
  73.  (CPU == PPC405F) || (CPU == PPC440))
  74.     int mmuType = 0;
  75. #endif /* (CPU == PPC*) */
  76. #if (CPU_FAMILY == SPARC)
  77.     /* BSP selection of cache library */
  78.     if ((sysMmuLibInit == NULL) || (((* sysMmuLibInit) (VM_PAGE_SIZE)) != OK))
  79. goto usrMmuPanic;
  80. #endif /* CPU_FAMILY == SPARC */
  81. #if (CPU==MC68020) /* actually 68030 support */
  82.     if (mmu30LibInit (VM_PAGE_SIZE) != OK)
  83. goto usrMmuPanic;
  84. #endif /* CPU==MC68020 */
  85. #if ((CPU==MC68040) || CPU==MC68060 || CPU==MC68LC040)
  86.     if (mmu40LibInit (VM_PAGE_SIZE) != OK)
  87. goto usrMmuPanic;
  88. #endif /* CPU==MC68040 || CPU==MC68060  || CPU==MC68LC040 */
  89. #if (CPU_FAMILY==I80X86)
  90. #   if (((CPU == PENTIUM2) && defined(INCLUDE_MMU_P6_32BIT)) || 
  91. ((CPU == PENTIUM3) && defined(INCLUDE_MMU_P6_32BIT)) || 
  92. ((CPU == PENTIUM4) && defined(INCLUDE_MMU_P6_32BIT)))
  93.     if (mmuPro32LibInit (VM_PAGE_SIZE) != OK)
  94.         goto usrMmuPanic;
  95. #   ifdef INCLUDE_MMU_BASIC
  96.     vmBaseArch32LibInit ();
  97. #   else
  98.     vmArch32LibInit ();
  99. #   endif /* INCLUDE_MMU_BASIC */
  100. #   elif (((CPU == PENTIUM2) && defined(INCLUDE_MMU_P6_36BIT)) || 
  101.   ((CPU == PENTIUM3) && defined(INCLUDE_MMU_P6_36BIT)) || 
  102.   ((CPU == PENTIUM4) && defined(INCLUDE_MMU_P6_36BIT)))
  103.     if (mmuPro36LibInit (VM_PAGE_SIZE) != OK)
  104.         goto usrMmuPanic;
  105. #   ifdef INCLUDE_MMU_BASIC
  106.     vmBaseArch36LibInit ();
  107. #   else
  108.     vmArch36LibInit ();
  109. #   endif /* INCLUDE_MMU_BASIC */
  110. #   else
  111.     if (mmuI86LibInit (VM_PAGE_SIZE) != OK)
  112.         goto usrMmuPanic;
  113. #   endif /* (CPU == PENTIUMX) && defined (INCLUDE_MMU_P6_32BIT) */
  114. #endif /* CPU==I80X86 */
  115. #if (CPU==AM29030)
  116.     if (mmuAm29kLibInit (VM_PAGE_SIZE) != OK)
  117. goto usrMmuPanic;
  118. #endif /* CPU==AM29030 */
  119. #if (CPU==SH7750)
  120.     if (mmuSh7750LibInit (VM_PAGE_SIZE) != OK)
  121. goto usrMmuPanic;
  122. #endif /* CPU==SH7750 */
  123. #if (CPU==SH7729 || CPU==SH7700)
  124.     if (mmuSh7700LibInit (VM_PAGE_SIZE) != OK)
  125. goto usrMmuPanic;
  126. #endif /* CPU==SH7729 || CPU==SH7700 */
  127. #if ((CPU == PPC601) || (CPU == PPC603) || (CPU == PPCEC603) || 
  128.  (CPU == PPC604) || (CPU == PPC860) || (CPU == PPC405) || 
  129.  (CPU == PPC405F) || (CPU == PPC440))
  130. #ifdef USER_I_MMU_ENABLE
  131.     mmuType |= MMU_INST; /* select the instruction MMU */
  132. #endif
  133.     
  134. #ifdef USER_D_MMU_ENABLE
  135.     mmuType |= MMU_DATA; /* select the DATA MMU */
  136. #endif
  137.     
  138. #if ((CPU == PPC601) || (CPU == PPC603) || (CPU == PPCEC603) || (CPU == PPC604))
  139.     if (mmuPpcLibInit (mmuType, (int *) &sysPhysMemDesc[0],
  140. sysPhysMemDescNumEnt, (int *) &sysBatDesc [0]) != OK)
  141. goto usrMmuPanic;
  142. #elif (CPU == PPC860)
  143.     if (mmu800LibInit (mmuType) != OK)
  144. goto usrMmuPanic;
  145. #elif ((CPU == PPC405) || (CPU == PPC405F))
  146.     if (mmu405LibInit (mmuType) != OK)
  147. goto usrMmuPanic;
  148. #elif (CPU == PPC440)
  149.     if (mmu440LibInit (mmuType, sysStaticTlbDescNumEnt, &sysStaticTlbDesc[0])
  150.     != OK)
  151. goto usrMmuPanic;
  152. #endif
  153. #endif /* (CPU == PPC*) */
  154. #if (CPU_FAMILY == ARM)
  155. #if !ARM_HAS_NO_MMU
  156.     /* BSP selection of MMU library */
  157.     if ((sysMmuLibInit == NULL) || (((* sysMmuLibInit) (VM_PAGE_SIZE)) != OK))
  158. goto usrMmuPanic;
  159. #endif /* !ARM_HAS_NO_MMU */
  160. #ifdef INCLUDE_MMU_MPU
  161.     if ((vmMpuLibInit (VM_PAGE_SIZE) != OK) ||
  162. (vmMpuGlobalMapInit (&sysPhysMemDesc[0],
  163.      sysPhysMemDescNumEnt, TRUE) == NULL))
  164. goto usrMmuPanic;
  165. #endif /* INCLUDE_MMU_MPU */
  166. #endif /* (CPU_FAMILY == ARM) */
  167. #if (CPU_FAMILY != ARM) || !(ARM_HAS_NO_MMU)
  168. #ifdef INCLUDE_MMU_BASIC /* XXX TPR */
  169.     if (vmBaseLibInit (VM_PAGE_SIZE) != OK)
  170. goto usrMmuPanic;
  171.     if (vmBaseGlobalMapInit (&sysPhysMemDesc[0],
  172.       sysPhysMemDescNumEnt, TRUE) == NULL)
  173. goto usrMmuPanic;
  174. #endif /* INCLUDE_MMU_BASIC */
  175. #ifdef INCLUDE_MMU_FULL /* unbundled mmu product */
  176.     if ((vmLibInit (VM_PAGE_SIZE) != OK) ||
  177.         (vmGlobalMapInit (&sysPhysMemDesc[0],
  178.   sysPhysMemDescNumEnt, TRUE) == NULL))
  179. goto usrMmuPanic;
  180. #ifdef INCLUDE_SHOW_ROUTINES 
  181.     vmShowInit ();
  182. #endif /* INCLUDE_SHOW_ROUTINES */
  183. #endif /* INCLUDE_MMU_FULL */
  184. #endif /* CPU_FAMILY != ARM || !(ARM_HAS_NO_MMU) */
  185.     return;
  186. #if (CPU_FAMILY != ARM) || !(ARM_HAS_NO_MMU) 
  187. usrMmuPanic:
  188.     printExc ("usrRoot: MMU configuration failed, errno = %#x", errno, 0,0,0,0);
  189.     reboot (BOOT_WARM_NO_AUTOBOOT);
  190. #endif /* CPU_FAMILY != ARM || !(ARM_HAS_NO_MMU) */
  191.     }
  192. #endif /* defined(INCLUDE_MMU_BASIC, INCLUDE_MMU_FULL, INCLUDE_MMU_MPU) */
  193. #endif /* __INCusrMmuInitc */