ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

mm.h
Go to the documentation of this file.
00001 #pragma once
00002 
00003 #define _MI_PAGING_LEVELS 2
00004 
00005 #define PDE_SHIFT 20
00006 
00007 //
00008 // Number of bits corresponding to the area that a coarse page table entry represents (4KB)
00009 //
00010 #define PTE_SHIFT 12
00011 #define PTE_SIZE (1 << PTE_SHIFT)
00012 
00013 //
00014 // Number of bits corresponding to the area that a coarse page table occupies (1KB)
00015 //
00016 #define CPT_SHIFT 10
00017 #define CPT_SIZE  (1 << CPT_SHIFT)
00018 
00019 //
00020 // Base Addresses
00021 //
00022 #define PTE_BASE    0xC0000000
00023 #define PTE_TOP     0xC03FFFFF
00024 #define PDE_BASE    0xC0400000
00025 #define PDE_TOP     0xC04FFFFF
00026 #define HYPER_SPACE 0xC0500000
00027 
00028 #if 0
00029 typedef struct _HARDWARE_PDE_ARMV6
00030 {
00031     ULONG Valid:1;     // Only for small pages
00032     ULONG LargePage:1; // Note, if large then Valid = 0
00033     ULONG Buffered:1;
00034     ULONG Cached:1;
00035     ULONG NoExecute:1;
00036     ULONG Domain:4;
00037     ULONG Ecc:1;
00038     ULONG PageFrameNumber:22;
00039 } HARDWARE_PDE_ARMV6, *PHARDWARE_PDE_ARMV6;
00040 
00041 typedef struct _HARDWARE_LARGE_PTE_ARMV6
00042 {
00043     ULONG Valid:1;     // Only for small pages
00044     ULONG LargePage:1; // Note, if large then Valid = 0
00045     ULONG Buffered:1;
00046     ULONG Cached:1;
00047     ULONG NoExecute:1;
00048     ULONG Domain:4;
00049     ULONG Ecc:1;
00050     ULONG Accessed:1;
00051     ULONG Owner:1;
00052     ULONG CacheAttributes:3;
00053     ULONG ReadOnly:1;
00054     ULONG Shared:1;
00055     ULONG NonGlobal:1;
00056     ULONG SuperLagePage:1;
00057     ULONG Reserved:1;
00058     ULONG PageFrameNumber:12;
00059 } HARDWARE_LARGE_PTE_ARMV6, *PHARDWARE_LARGE_PTE_ARMV6;
00060 
00061 typedef struct _HARDWARE_PTE_ARMV6
00062 {
00063     ULONG NoExecute:1;
00064     ULONG Valid:1;
00065     ULONG Buffered:1;
00066     ULONG Cached:1;
00067     ULONG Accessed:1;
00068     ULONG Owner:1;
00069     ULONG CacheAttributes:3;
00070     ULONG ReadOnly:1;
00071     ULONG Shared:1;
00072     ULONG NonGlobal:1;
00073     ULONG PageFrameNumber:20;
00074 } HARDWARE_PTE_ARMV6, *PHARDWARE_PTE_ARMV6;
00075 
00076 C_ASSERT(sizeof(HARDWARE_PDE_ARMV6) == sizeof(ULONG));
00077 C_ASSERT(sizeof(HARDWARE_LARGE_PTE_ARMV6) == sizeof(ULONG));
00078 C_ASSERT(sizeof(HARDWARE_PTE_ARMV6) == sizeof(ULONG));
00079 #endif
00080 
00081 /* For FreeLDR */
00082 typedef struct _PAGE_TABLE_ARM
00083 {
00084     HARDWARE_PTE_ARMV6 Pte[1024];
00085 } PAGE_TABLE_ARM, *PPAGE_TABLE_ARM;
00086 
00087 typedef struct _PAGE_DIRECTORY_ARM
00088 {
00089     union 
00090     {
00091         HARDWARE_PDE_ARMV6 Pde[4096];
00092         HARDWARE_LARGE_PTE_ARMV6 Pte[4096];
00093     };
00094 } PAGE_DIRECTORY_ARM, *PPAGE_DIRECTORY_ARM;
00095 
00096 C_ASSERT(sizeof(PAGE_TABLE_ARM) == PAGE_SIZE);
00097 C_ASSERT(sizeof(PAGE_DIRECTORY_ARM) == (4 * PAGE_SIZE));
00098 
00099 typedef enum _ARM_DOMAIN
00100 {
00101     FaultDomain,
00102     ClientDomain,
00103     InvalidDomain,
00104     ManagerDomain
00105 } ARM_DOMAIN;
00106 
00107 struct _EPROCESS;
00108 PULONG MmGetPageDirectory(VOID);
00109 
00110 #define MI_MAKE_LOCAL_PAGE(x)      ((x)->u.Hard.NonGlobal = 1)
00111 #define MI_MAKE_DIRTY_PAGE(x)      
00112 #define MI_MAKE_ACCESSED_PAGE(x)      
00113 #define MI_MAKE_OWNER_PAGE(x)      ((x)->u.Hard.Owner = 1)
00114 #define MI_MAKE_WRITE_PAGE(x)      ((x)->u.Hard.ReadOnly = 0)
00115 #define MI_PAGE_DISABLE_CACHE(x)   ((x)->u.Hard.Cached = 0)
00116 #define MI_PAGE_WRITE_THROUGH(x)   ((x)->u.Hard.Buffered = 0)
00117 #define MI_PAGE_WRITE_COMBINED(x)  ((x)->u.Hard.Buffered = 1)
00118 #define MI_IS_PAGE_WRITEABLE(x)    ((x)->u.Hard.ReadOnly == 0)
00119 #define MI_IS_PAGE_COPY_ON_WRITE(x)FALSE
00120 #define MI_IS_PAGE_DIRTY(x)        TRUE
00121 #define MI_IS_PAGE_LARGE(x)        FALSE
00122 
00123 /* Easy accessing PFN in PTE */
00124 #define PFN_FROM_PTE(v) ((v)->u.Hard.PageFrameNumber)
00125 
00126 #define NR_SECTION_PAGE_TABLES              1024
00127 #define NR_SECTION_PAGE_ENTRIES             256
00128 
00129 /* See PDR definition */
00130 #define MI_HYPERSPACE_PTES                  (256 - 1)
00131 #define MI_ZERO_PTES                        (32)
00132 #define MI_MAPPING_RANGE_START              ((ULONG)HYPER_SPACE)
00133 #define MI_MAPPING_RANGE_END                (MI_MAPPING_RANGE_START + \
00134                                              MI_HYPERSPACE_PTES * PAGE_SIZE)
00135 #define MI_ZERO_PTE                         (PMMPTE)(MI_MAPPING_RANGE_END + \
00136                                              PAGE_SIZE)
00137 #define MI_DUMMY_PTE                        (PMMPTE)(MI_MAPPING_RANGE_END + \
00138                                              PAGE_SIZE)
00139 #define MI_VAD_BITMAP                       (PMMPTE)(MI_DUMMY_PTE + \
00140                                              PAGE_SIZE)
00141 #define MI_WORKING_SET_LIST                 (PMMPTE)(MI_VAD_BITMAP + \
00142                                              PAGE_SIZE)
00143 
00144 /* Retrives the PDE entry for the given VA */
00145 #define MiGetPdeAddress(x) ((PMMPDE)(PDE_BASE + (((ULONG)(x) >> 20) << 2)))
00146 #define MiAddressToPde(x)  MiGetPdeAddress(x)
00147     
00148 /* Retrieves the PTE entry for the given VA */
00149 #define MiGetPteAddress(x) ((PMMPTE)(PTE_BASE + (((ULONG)(x) >> 12) << 2)))
00150 #define MiAddressToPte(x)  MiGetPteAddress(x)
00151 
00152 /* Retrives the PDE offset for the given VA */
00153 #define MiGetPdeOffset(x)       (((ULONG)(x)) >> 20)
00154 #define MiGetPteOffset(x)       ((((ULONG)(x)) << 12) >> 24)
00155 #define MiAddressToPteOffset(x) MiGetPteOffset(x)
00156     
00157 /* Convert a PTE into a corresponding address */
00158 #define MiPteToAddress(x) ((PVOID)((ULONG)(x) << 10))
00159 #define MiPdeToAddress(x) ((PVOID)((ULONG)(x) << 18))
00160 
00161 #define PAGE_TO_SECTION_PAGE_DIRECTORY_OFFSET(x) \
00162     ((x) / (4*1024*1024))
00163 
00164 #define PAGE_TO_SECTION_PAGE_TABLE_OFFSET(x) \
00165     ((((x)) % (4*1024*1024)) / (4*1024))
00166     
00167 #define MM_CACHE_LINE_SIZE 64

Generated on Fri May 25 2012 04:17:19 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.