Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenmmtypes.h
Go to the documentation of this file.
00001 /*++ NDK Version: 0095 00002 00003 Copyright (c) Alex Ionescu. All rights reserved. 00004 00005 Header Name: 00006 00007 mmtypes.h (ARM) 00008 00009 Abstract: 00010 00011 ARM Type definitions for the Memory Manager 00012 00013 Author: 00014 00015 Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004 00016 00017 --*/ 00018 00019 #ifndef _ARM_MMTYPES_H 00020 #define _ARM_MMTYPES_H 00021 00022 // 00023 // Dependencies 00024 // 00025 00026 // 00027 // Page-related Macros 00028 // 00029 #ifndef PAGE_SIZE 00030 #define PAGE_SIZE 0x1000 00031 #endif 00032 #define PAGE_SHIFT 12L 00033 #define MM_ALLOCATION_GRANULARITY 0x10000 00034 #define MM_ALLOCATION_GRANULARITY_SHIFT 16L 00035 00036 // 00037 // Sanity checks for Paging Macros 00038 // 00039 #ifdef C_ASSERT 00040 C_ASSERT(PAGE_SIZE == (1 << PAGE_SHIFT)); 00041 C_ASSERT(MM_ALLOCATION_GRANULARITY == (1 << MM_ALLOCATION_GRANULARITY_SHIFT)); 00042 C_ASSERT(MM_ALLOCATION_GRANULARITY && 00043 !(MM_ALLOCATION_GRANULARITY & (MM_ALLOCATION_GRANULARITY - 1))); 00044 C_ASSERT(MM_ALLOCATION_GRANULARITY >= PAGE_SIZE); 00045 #endif 00046 00047 // 00048 // Page Table Entry Definitions 00049 // 00050 typedef struct _HARDWARE_PDE_ARMV6 00051 { 00052 ULONG Valid:1; // Only for small pages 00053 ULONG LargePage:1; // Note, if large then Valid = 0 00054 ULONG Buffered:1; 00055 ULONG Cached:1; 00056 ULONG NoExecute:1; 00057 ULONG Domain:4; 00058 ULONG Ecc:1; 00059 ULONG PageFrameNumber:22; 00060 } HARDWARE_PDE_ARMV6, *PHARDWARE_PDE_ARMV6; 00061 00062 typedef struct _HARDWARE_LARGE_PTE_ARMV6 00063 { 00064 ULONG Valid:1; // Only for small pages 00065 ULONG LargePage:1; // Note, if large then Valid = 0 00066 ULONG Buffered:1; 00067 ULONG Cached:1; 00068 ULONG NoExecute:1; 00069 ULONG Domain:4; 00070 ULONG Ecc:1; 00071 ULONG Sbo:1; 00072 ULONG Owner:1; 00073 ULONG CacheAttributes:3; 00074 ULONG ReadOnly:1; 00075 ULONG Shared:1; 00076 ULONG NonGlobal:1; 00077 ULONG SuperLagePage:1; 00078 ULONG Reserved:1; 00079 ULONG PageFrameNumber:12; 00080 } HARDWARE_LARGE_PTE_ARMV6, *PHARDWARE_LARGE_PTE_ARMV6; 00081 00082 typedef struct _HARDWARE_PTE_ARMV6 00083 { 00084 ULONG NoExecute:1; 00085 ULONG Valid:1; 00086 ULONG Buffered:1; 00087 ULONG Cached:1; 00088 ULONG Sbo:1; 00089 ULONG Owner:1; 00090 ULONG CacheAttributes:3; 00091 ULONG ReadOnly:1; 00092 ULONG Shared:1; 00093 ULONG NonGlobal:1; 00094 ULONG PageFrameNumber:20; 00095 } HARDWARE_PTE_ARMV6, *PHARDWARE_PTE_ARMV6; 00096 00097 C_ASSERT(sizeof(HARDWARE_PDE_ARMV6) == sizeof(ULONG)); 00098 C_ASSERT(sizeof(HARDWARE_LARGE_PTE_ARMV6) == sizeof(ULONG)); 00099 C_ASSERT(sizeof(HARDWARE_PTE_ARMV6) == sizeof(ULONG)); 00100 00101 typedef struct _MMPTE_SOFTWARE 00102 { 00103 ULONG Valid:2; 00104 ULONG PageFileLow:4; 00105 ULONG Protection:4; 00106 ULONG Prototype:1; 00107 ULONG Transition:1; 00108 ULONG PageFileHigh:20; 00109 } MMPTE_SOFTWARE; 00110 00111 typedef struct _MMPTE_TRANSITION 00112 { 00113 ULONG Valid:2; 00114 ULONG Buffered:1; 00115 ULONG Cached:1; 00116 ULONG Owner:1; 00117 ULONG Protection:4; 00118 ULONG ReadOnly:1; 00119 ULONG Prototype:1; 00120 ULONG Transition:1; 00121 ULONG PageFrameNumber:20; 00122 } MMPTE_TRANSITION; 00123 00124 typedef struct _MMPTE_PROTOTYPE 00125 { 00126 ULONG Valid:2; 00127 ULONG ProtoAddressLow:7; 00128 ULONG ReadOnly:1; 00129 ULONG Prototype:1; 00130 ULONG ProtoAddressHigh:21; 00131 } MMPTE_PROTOTYPE; 00132 00133 typedef struct _MMPTE_SUBSECTION 00134 { 00135 ULONG Valid:2; 00136 ULONG SubsectionAddressLow:4; 00137 ULONG Protection:4; 00138 ULONG Prototype:1; 00139 ULONG SubsectionAddressHigh:20; 00140 ULONG WhichPool:1; 00141 } MMPTE_SUBSECTION; 00142 00143 typedef struct _MMPTE_LIST 00144 { 00145 ULONG Valid:2; 00146 ULONG OneEntry:1; 00147 ULONG filler0:8; 00148 ULONG NextEntry:20; 00149 ULONG Prototype:1; 00150 } MMPTE_LIST; 00151 00152 typedef union _MMPTE_HARDWARE 00153 { 00154 ULONG NoExecute:1; 00155 ULONG Valid:1; 00156 ULONG Buffered:1; 00157 ULONG Cached:1; 00158 ULONG Sbo:1; 00159 ULONG Owner:1; 00160 ULONG CacheAttributes:3; 00161 ULONG ReadOnly:1; 00162 ULONG Prototype:1; 00163 ULONG NonGlobal:1; 00164 ULONG PageFrameNumber:20; 00165 } MMPTE_HARDWARE, *PMMPTE_HARDWARE; 00166 00167 typedef union _MMPDE_HARDWARE 00168 { 00169 ULONG Valid:1; 00170 ULONG LargePage:1; 00171 ULONG Buffered:1; 00172 ULONG Cached:1; 00173 ULONG NoExecute:1; 00174 ULONG Domain:4; 00175 ULONG Ecc:1; 00176 ULONG PageFrameNumber:22; 00177 } MMPDE_HARDWARE, *PMMPDE_HARDWARE; 00178 00179 typedef struct _MMPDE 00180 { 00181 union 00182 { 00183 MMPDE_HARDWARE Hard; 00184 ULONG Long; 00185 } u; 00186 } MMPDE, *PMMPDE; 00187 00188 // 00189 // Use the right PTE structure 00190 // 00191 #define HARDWARE_PTE HARDWARE_PTE_ARMV6 00192 #define PHARDWARE_PTE PHARDWARE_PTE_ARMV6 00193 00194 #endif Generated on Thu May 24 2012 04:31:24 for ReactOS by
1.7.6.1
|