mmu_h.h
上传用户:qiulin1960
上传日期:2013-10-16
资源大小:2844k
文件大小:8k
源码类别:

Windows CE

开发平台:

Windows_Unix

  1. /*++
  2. THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  3. ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  4. THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  5. PARTICULAR PURPOSE.
  6. Copyright (c) 2001. Samsung Electronics, co. ltd  All rights reserved.
  7. Module Name:  
  8. Abstract:
  9.  ARM Processor MMU/MPU specifics    - constants, registers etc.
  10. rev:
  11. 2002.4.3 : first S3C2410 version (SOC)
  12. 2002.1.28 : CE.NET initial port (kwangyoon LEE, kwangyoon@samsung.com)
  13.   * $Revision: 1.3 $
  14.   *   $Author: kwelton $
  15.   *     $Date: 2000/08/08 21:45:52 $
  16. Notes:
  17. Use of this source code is subject to the terms of the Microsoft end-user
  18. license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
  19. If you did not accept the terms of the EULA, you are not authorized to use
  20. this source code. For a copy of the EULA, please see the LICENSE.RTF on your
  21. install media. 
  22. --*/
  23. #ifndef __mmu_h
  24. #define __mmu_h                         1
  25. /* Sizes, used for Page Tables if Processor supports them */
  26. #define L1_TABLE_ENTRIES                0x1000   /*  4GB/1MB -> 4096 word entries  */
  27. #define L2_ENTRY_SIZE                   256
  28. /*  Allow different cache sizes */
  29. #ifndef DCACHE_SIZE
  30. #define DCACHE_SIZE                     0x4000   /*  16kB Dcache */
  31. #endif
  32. #define DCACHE_LINE                     0x20     /*  32B cache line entry */
  33. #define L2_CONTROL                      0x1      /*  domain0, page table pointer */
  34. /*  Access Permissions
  35.  *  Depending on the setup, 0 represents one of these two access permissions
  36.  */
  37. #define AP_NO_ACCESS                    0
  38. #define AP_SVC_R                        0
  39. #define AP_SVC_RW                       1
  40. #define AP_NO_USR_W                     2
  41. #define AP_ALL_ACCESS                   3
  42. #define L1_NO_ACCESS                    (AP_NO_ACCESS  << 10)
  43. #define L1_SVC_R                        (AP_SVC_R      << 10)
  44. #define L1_SVC_RW                       (AP_SVC_RW     << 10)
  45. #define L1_NO_USR_W                     (AP_NO_USR_W   << 10)
  46. #define L1_ALL_ACCESS                   (AP_ALL_ACCESS << 10)
  47. /*  Level 2 Tiny descriptors only have 1 set of Access Permissions
  48.  */
  49. #define L2T_NO_ACCESS                   (AP_NO_ACCESS  << 4)
  50. #define L2T_SVC_R                       (AP_SVC_R      << 4)
  51. #define L2T_SVC_RW                      (AP_SVC_RW     << 4)
  52. #define L2T_NO_USR_W                    (AP_NO_USR_W   << 4)
  53. #define L2T_ALL_ACCESS                  (AP_ALL_ACCESS << 4)
  54. #define L2_NO_ACCESS                    L1_NO_ACCESS  + (AP_NO_ACCESS  << 8) + (AP_NO_ACCESS  << 6) + L2T_NO_ACCESS
  55. #define L2_SVC_R                        L1_SVC_R      + (AP_SVC_R      << 8) + (AP_SVC_R      << 6) + L2T_SVC_R
  56. #define L2_SVC_RW                       L1_SVC_RW     + (AP_SVC_RW     << 8) + (AP_SVC_RW     << 6) + L2T_SVC_RW
  57. #define L2_NO_USR_W                     L1_NO_USR_W   + (AP_NO_USR_W   << 8) + (AP_NO_USR_W   << 6) + L2T_NO_USR_W
  58. #define L2_ALL_ACCESS                   L1_ALL_ACCESS + (AP_ALL_ACCESS << 8) + (AP_ALL_ACCESS << 6) + L2T_ALL_ACCESS
  59. #define PT_C_BIT                        (1 << 3)
  60. #define PT_B_BIT                        (1 << 2)
  61. #define PT_CB_BITS                      (PT_C_BIT + PT_B_BIT)
  62. /*  Level1 Entry types
  63.  */
  64. #define PT_INVALID                      0        /*  Fault */
  65. #define PT_PAGE                         1        /*  Level2 pointer */
  66. #define PT_SECTION                      2        /*  Simple 1MB section */
  67. #define PT_FINE                         3        /*  Level2 pointer to fine table */
  68. /*  Level2 Entry types
  69.  *  PT_PAGE tables have 256 entries (256 x 4KB = 1MB).
  70.  *      To use a PT_LARGE, each large descriptor must be repeated in 16
  71.  *      consecutive entries. NOTE: NO tiny entries!
  72.  *  PT_FINE tables have 1024 entries (1024 x 1KB = 1MB). 
  73.  *      PT_LARGE thus require 64 consecutive entries and
  74.  *      PT_SMALL require 4 consecutive entries
  75.  */
  76. #define PT_LARGE                        1        /*  64KB */
  77. #define PT_SMALL                        2        /*  4KB each */
  78. #define PT_TINY                         3        /*  1KB each */
  79. /*  uHAL uses domain 0.
  80.  */
  81. #define uHAL_DOMAIN                     0
  82. #define PT_DOMAIN                       (uHAL_DOMAIN << 5)
  83. /* DRAM_ACCESS          EQU     0xC0E   ; AP=11, domain0, C=1, B=1
  84.  */
  85. #define DRAM_ACCESS                     (L1_ALL_ACCESS + PT_DOMAIN + PT_CB_BITS + PT_SECTION)
  86. /*  Non-cached, buffered access
  87.  */
  88. #define NCDRAM_ACCESS                   (L1_ALL_ACCESS + PT_DOMAIN + PT_B_BIT + PT_SECTION)
  89. /* FLASH_ACCESS         EQU     0x80A   ; AP=10, domain0, C=1, B=0
  90.  */
  91. #define FLASH_ACCESS                    (L1_NO_USR_W + PT_DOMAIN + PT_C_BIT + PT_SECTION)
  92. /* IO_ACCESS            EQU     0xC02   ; AP=11, domain0, C=0, B=0
  93.  */
  94. #define IO_ACCESS                       (L1_ALL_ACCESS + PT_DOMAIN + PT_SECTION)
  95. #define SSRAM_ACCESS                    0x0FFD   /*  AP=11, domain0, C=1, B=1 */
  96. /* EPROM_ACCESS         EQU     0x0AA9  ; AP=10, domain0, C=1, B=0
  97.  */
  98. #define EPROM_PAGE                      (PT_DOMAIN + PT_PAGE)
  99. #define EPROM_ACCESS                    (L2_NO_USR_W + PT_C_BIT + PT_LARGE)
  100. /*  Definitions used in conditional assembly of Icache, Dcache and Write Buffer
  101.  *  options
  102.  */
  103. #define IC_ON                           0x1000
  104. #define IC_OFF                          0x0
  105. #define DC_ON                           0x4
  106. #define DC_OFF                          0x0
  107. #define WB_ON                           0x8
  108. #define WB_OFF                          0x0
  109. /*  Bit definitions for the control register: 
  110.  */
  111. /*  enables are logically OR'd with the control register
  112.  *  use bit clears (BIC's) to disable functions 
  113.  *      *** all bits cleared on RESET ***
  114.  */
  115. #define EnableMMU                       0x1
  116. #define EnableAlignFault                0x2
  117. #define EnableDcache                    0x4
  118. #define EnableWB                        0x8
  119. #define EnableBigEndian                 0x80
  120. #define EnableMMU_S                     0x100            /*  selects MMU access checks  */
  121. #define EnableMMU_R                     0x200            /*  selects MMU access checks  */
  122. #define EnableIcache                    0x1000
  123. #define EnableUcache                    0x4              /*  Unified Cache */
  124. /* ------------------------------------------------------------------
  125.  *  MPU Mapping table definitions
  126.  * 
  127.  */
  128. #define MPU_REGIONS                     8        /*  Number of MPU regions */
  129. #define MPU_CACHE_OFFSET                (MPU_REGIONS * 4)
  130. #define MPU_BUFFER_OFFSET               ((MPU_REGIONS + 1) * 4)
  131. #define MPU_ACCESS_OFFSET               ((MPU_REGIONS + 2) * 4)
  132. #define MPU_TABLE_ENTRIES               (MPU_REGIONS + 3)  /*  regions + 3 bit flags */
  133. /*  MPU memory region sizes
  134.  * 
  135.  */
  136. #define MPU_SZ_4K                       0x0B
  137. #define MPU_SZ_8K                       0x0C
  138. #define MPU_SZ_16K                      0x0D
  139. #define MPU_SZ_32K                      0x0E
  140. #define MPU_SZ_64K                      0x0F
  141. #define MPU_SZ_128K                     0x10
  142. #define MPU_SZ_256K                     0x11
  143. #define MPU_SZ_512K                     0x12
  144. #define MPU_SZ_1M                       0x13
  145. #define MPU_SZ_2M                       0x14
  146. #define MPU_SZ_4M                       0x15
  147. #define MPU_SZ_8M                       0x16
  148. #define MPU_SZ_16M                      0x17
  149. #define MPU_SZ_32M                      0x18
  150. #define MPU_SZ_64M                      0x19
  151. #define MPU_SZ_128M                     0x1A
  152. #define MPU_SZ_256M                     0x1B
  153. #define MPU_SZ_512M                     0x1C
  154. #define MPU_SZ_1G                       0x1D
  155. #define MPU_SZ_2G                       0x1E
  156. #define MPU_SZ_4G                       0x1F
  157. #endif
  158. /*      END */
  159. /* EOF mmu_h.h */