Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenmm.h
Go to the documentation of this file.
00001 /* 00002 * Lowlevel memory managment definitions 00003 */ 00004 00005 #pragma once 00006 00007 struct _EPROCESS; 00008 PULONG MmGetPageDirectory(VOID); 00009 00010 #ifdef _PAE_ 00011 #define _MI_PAGING_LEVELS 3 00012 #else 00013 #define _MI_PAGING_LEVELS 2 00014 #endif 00015 00016 #define PAGE_MASK(x) ((x)&(~0xfff)) 00017 #define PAE_PAGE_MASK(x) ((x)&(~0xfffLL)) 00018 00019 /* MMPTE related defines */ 00020 #define MM_EMPTY_PTE_LIST ((ULONG)0xFFFFF) 00021 #define MM_EMPTY_LIST ((ULONG_PTR)-1) 00022 00023 /* Base addresses of PTE and PDE */ 00024 #define PAGETABLE_MAP (0xc0000000) 00025 #define PAGEDIRECTORY_MAP (0xc0000000 + (PAGETABLE_MAP / (1024))) 00026 00027 /* FIXME: These are different for PAE */ 00028 #define PTE_BASE 0xC0000000 00029 #define PDE_BASE 0xC0300000 00030 #define PDE_TOP 0xC0300FFF 00031 #define PTE_TOP 0xC03FFFFF 00032 #define HYPER_SPACE 0xC0400000 00033 #define HYPER_SPACE_END 0xC07FFFFF 00034 00035 #define PTE_PER_PAGE 0x400 00036 00037 /* Converting address to a corresponding PDE or PTE entry */ 00038 #define MiAddressToPde(x) \ 00039 ((PMMPDE)(((((ULONG)(x)) >> 22) << 2) + PAGEDIRECTORY_MAP)) 00040 #define MiAddressToPte(x) \ 00041 ((PMMPTE)(((((ULONG)(x)) >> 12) << 2) + PAGETABLE_MAP)) 00042 #define MiAddressToPteOffset(x) \ 00043 ((((ULONG)(x)) << 10) >> 22) 00044 00045 // 00046 // Convert a PTE into a corresponding address 00047 // 00048 #define MiPteToAddress(PTE) ((PVOID)((ULONG)(PTE) << 10)) 00049 #define MiPdeToAddress(PDE) ((PVOID)((ULONG)(PDE) << 20)) 00050 #define MiPdeToPte(PDE) ((PMMPTE)MiPteToAddress(PDE)) 00051 #define MiPteToPde(PTE) ((PMMPDE)MiAddressToPte(PTE)) 00052 00053 #define ADDR_TO_PAGE_TABLE(v) (((ULONG)(v)) / (1024 * PAGE_SIZE)) 00054 #define ADDR_TO_PDE_OFFSET(v) (((ULONG)(v)) / (1024 * PAGE_SIZE)) 00055 #define ADDR_TO_PTE_OFFSET(v) ((((ULONG)(v)) % (1024 * PAGE_SIZE)) / PAGE_SIZE) 00056 00057 #define MiGetPdeOffset ADDR_TO_PDE_OFFSET 00058 00059 /* Easy accessing PFN in PTE */ 00060 #define PFN_FROM_PTE(v) ((v)->u.Hard.PageFrameNumber) 00061 00062 #define MI_MAKE_LOCAL_PAGE(x) ((x)->u.Hard.Global = 0) 00063 #define MI_MAKE_DIRTY_PAGE(x) ((x)->u.Hard.Dirty = 1) 00064 #define MI_MAKE_ACCESSED_PAGE(x) ((x)->u.Hard.Accessed = 1) 00065 #define MI_PAGE_DISABLE_CACHE(x) ((x)->u.Hard.CacheDisable = 1) 00066 #define MI_PAGE_WRITE_THROUGH(x) ((x)->u.Hard.WriteThrough = 1) 00067 #define MI_PAGE_WRITE_COMBINED(x) ((x)->u.Hard.WriteThrough = 0) 00068 #define MI_IS_PAGE_LARGE(x) ((x)->u.Hard.LargePage == 1) 00069 #if !defined(CONFIG_SMP) 00070 #define MI_IS_PAGE_WRITEABLE(x) ((x)->u.Hard.Write == 1) 00071 #else 00072 #define MI_IS_PAGE_WRITEABLE(x) ((x)->u.Hard.Writable == 1) 00073 #endif 00074 #define MI_IS_PAGE_COPY_ON_WRITE(x)((x)->u.Hard.CopyOnWrite == 1) 00075 #define MI_IS_PAGE_DIRTY(x) ((x)->u.Hard.Dirty == 1) 00076 #define MI_MAKE_OWNER_PAGE(x) ((x)->u.Hard.Owner = 1) 00077 #if !defined(CONFIG_SMP) 00078 #define MI_MAKE_WRITE_PAGE(x) ((x)->u.Hard.Write = 1) 00079 #else 00080 #define MI_MAKE_WRITE_PAGE(x) ((x)->u.Hard.Writable = 1) 00081 #endif 00082 00083 #define PAGE_TO_SECTION_PAGE_DIRECTORY_OFFSET(x) \ 00084 ((x) / (4*1024*1024)) 00085 00086 #define PAGE_TO_SECTION_PAGE_TABLE_OFFSET(x) \ 00087 ((((x)) % (4*1024*1024)) / (4*1024)) 00088 00089 #define NR_SECTION_PAGE_TABLES 1024 00090 #define NR_SECTION_PAGE_ENTRIES 1024 00091 00092 #define TEB_BASE 0x7FFDE000 00093 00094 #define MI_HYPERSPACE_PTES (256 - 1) 00095 #define MI_ZERO_PTES (32) 00096 #define MI_MAPPING_RANGE_START (ULONG)HYPER_SPACE 00097 #define MI_MAPPING_RANGE_END (MI_MAPPING_RANGE_START + \ 00098 MI_HYPERSPACE_PTES * PAGE_SIZE) 00099 #define MI_DUMMY_PTE (PMMPTE)(MI_MAPPING_RANGE_END + \ 00100 PAGE_SIZE) 00101 #define MI_VAD_BITMAP (PMMPTE)(MI_DUMMY_PTE + \ 00102 PAGE_SIZE) 00103 #define MI_WORKING_SET_LIST (PMMPTE)(MI_VAD_BITMAP + \ 00104 PAGE_SIZE) 00105 00106 /* On x86, these two are the same */ 00107 #define MMPDE MMPTE 00108 #define PMMPDE PMMPTE 00109 00110 /* 00111 * FIXME - different architectures have different cache line sizes... 00112 */ 00113 #define MM_CACHE_LINE_SIZE 32 Generated on Sun May 27 2012 04:19:15 for ReactOS by
1.7.6.1
|