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

mmtypes.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 doxygen 1.7.6.1

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