mirror of
https://github.com/reactos/reactos.git
synced 2024-10-28 00:58:20 +00:00
29fa274d6d
- TSVN choked repeatedly when attempting to merge ~9000 revs into the branch (tried 3 times on 2 different computers) - If someone wants to delete aicom-network-fixes, they are welcome to - Lesson learned: Letting a branch get thousands of revs out of date is a horrible idea svn path=/branches/aicom-network-branch/; revision=44353
63 lines
2.1 KiB
C
63 lines
2.1 KiB
C
/*
|
|
* Lowlevel memory managment definitions
|
|
*/
|
|
|
|
#ifndef __NTOSKRNL_INCLUDE_INTERNAL_I386_MM_H
|
|
#define __NTOSKRNL_INCLUDE_INTERNAL_I386_MM_H
|
|
|
|
struct _EPROCESS;
|
|
PULONG MmGetPageDirectory(VOID);
|
|
|
|
#define PAGE_MASK(x) ((x)&(~0xfff))
|
|
#define PAE_PAGE_MASK(x) ((x)&(~0xfffLL))
|
|
|
|
/* Base addresses of PTE and PDE */
|
|
#define PAGETABLE_MAP (0xc0000000)
|
|
#define PAGEDIRECTORY_MAP (0xc0000000 + (PAGETABLE_MAP / (1024)))
|
|
|
|
#define PTE_BASE 0xC0000000
|
|
#define PDE_BASE 0xC0300000
|
|
#define PTE_TOP 0xC03FFFFF
|
|
#define HYPER_SPACE 0xC0400000
|
|
|
|
/* Converting address to a corresponding PDE or PTE entry */
|
|
#define MiAddressToPde(x) \
|
|
((PMMPTE)(((((ULONG)(x)) >> 22) << 2) + PAGEDIRECTORY_MAP))
|
|
#define MiAddressToPte(x) \
|
|
((PMMPTE)(((((ULONG)(x)) >> 12) << 2) + PAGETABLE_MAP))
|
|
#define MiAddressToPteOffset(x) \
|
|
((((ULONG)(x)) << 10) >> 22)
|
|
|
|
//
|
|
// Convert a PTE into a corresponding address
|
|
//
|
|
#define MiPteToAddress(PTE) ((PVOID)((ULONG)(PTE) << 10))
|
|
|
|
#define ADDR_TO_PAGE_TABLE(v) (((ULONG)(v)) / (1024 * PAGE_SIZE))
|
|
#define ADDR_TO_PDE_OFFSET(v) ((((ULONG)(v)) / (1024 * PAGE_SIZE)))
|
|
#define ADDR_TO_PTE_OFFSET(v) ((((ULONG)(v)) % (1024 * PAGE_SIZE)) / PAGE_SIZE)
|
|
|
|
/* Easy accessing PFN in PTE */
|
|
#define PFN_FROM_PTE(v) ((v)->u.Hard.PageFrameNumber)
|
|
|
|
#define MI_MAKE_LOCAL_PAGE(x) ((x)->u.Hard.Global = 0)
|
|
#define MI_MAKE_DIRTY_PAGE(x) ((x)->u.Hard.Dirty = 1)
|
|
#define MI_PAGE_DISABLE_CACHE(x) ((x)->u.Hard.CacheDisable = 1)
|
|
#define MI_PAGE_WRITE_THROUGH(x) ((x)->u.Hard.WriteThrough = 1)
|
|
#define MI_PAGE_WRITE_COMBINED(x) ((x)->u.Hard.WriteThrough = 0)
|
|
#if !defined(CONFIG_SMP)
|
|
#define MI_IS_PAGE_WRITEABLE(x) ((x)->u.Hard.Write == 1)
|
|
#else
|
|
#define MI_IS_PAGE_WRITEABLE(x) ((x)->u.Hard.Writable == 1)
|
|
#endif
|
|
#define MI_IS_PAGE_COPY_ON_WRITE(x)((x)->u.Hard.CopyOnWrite == 1)
|
|
#define MI_IS_PAGE_DIRTY(x) ((x)->u.Hard.Dirty == 1)
|
|
#define MI_MAKE_OWNER_PAGE(x) ((x)->u.Hard.Owner = 1)
|
|
#if !defined(CONFIG_SMP)
|
|
#define MI_MAKE_WRITE_PAGE(x) ((x)->u.Hard.Write = 1)
|
|
#else
|
|
#define MI_MAKE_WRITE_PAGE(x) ((x)->u.Hard.Writable = 1)
|
|
#endif
|
|
|
|
#endif /* __NTOSKRNL_INCLUDE_INTERNAL_I386_MM_H */
|