sync to trunk head (37853) (except rbuild changes)
[reactos.git] / reactos / ntoskrnl / include / internal / i386 / mm.h
1 /*
2 * Lowlevel memory managment definitions
3 */
4
5 #ifndef __NTOSKRNL_INCLUDE_INTERNAL_I386_MM_H
6 #define __NTOSKRNL_INCLUDE_INTERNAL_I386_MM_H
7
8 struct _EPROCESS;
9 PULONG MmGetPageDirectory(VOID);
10
11 #define PAGE_MASK(x) ((x)&(~0xfff))
12 #define PAE_PAGE_MASK(x) ((x)&(~0xfffLL))
13
14 /* Base addresses of PTE and PDE */
15 #define PAGETABLE_MAP (0xc0000000)
16 #define PAGEDIRECTORY_MAP (0xc0000000 + (PAGETABLE_MAP / (1024)))
17
18 /* Converting address to a corresponding PDE or PTE entry */
19 #define MiAddressToPde(x) \
20 ((PMMPTE)(((((ULONG)(x)) >> 22) << 2) + PAGEDIRECTORY_MAP))
21 #define MiAddressToPte(x) \
22 ((PMMPTE)(((((ULONG)(x)) >> 12) << 2) + PAGETABLE_MAP))
23
24 #define ADDR_TO_PAGE_TABLE(v) (((ULONG)(v)) / (1024 * PAGE_SIZE))
25 #define ADDR_TO_PDE_OFFSET(v) ((((ULONG)(v)) / (1024 * PAGE_SIZE)))
26 #define ADDR_TO_PTE_OFFSET(v) ((((ULONG)(v)) % (1024 * PAGE_SIZE)) / PAGE_SIZE)
27
28 /* Easy accessing PFN in PTE */
29 #define PFN_FROM_PTE(v) ((v)->u.Hard.PageFrameNumber)
30
31 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_I386_MM_H */