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 /*
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 doxygen 1.7.6.1

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