Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenmm.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
1.7.6.1
|