46#define X86_64_PAGING_PRESENT 0x1
47#define X86_64_PAGING_WRITABLE 0x2
48#define X86_64_PAGING_USER 0x4
49#define X86_64_PAGING_NO_EXECUTE 0x80000
50#define X86_64_PAGING_NO_CACHING 0x200000
51#define X86_64_PAGING_WRITE_THROUGH 0x400000
53#define PTE_VALID (1ULL << 0)
54#define PTE_TABLE (1ULL << 1)
55#define PTE_BLOCK (0ULL << 1)
56#define PTE_AF (1ULL << 10)
57#define PTE_SH_INNER (3ULL << 8)
58#define PTE_AP_RW (0ULL << 6)
59#define PTE_AP_RW_USER (1ULL << 6)
60#define PTE_ATTR_IDX_0 (0ULL << 2)
61#define PTE_ATTR_IDX_1 (1ULL << 2)
62#define PTE_USER_EXECUTABLE (0ULL << 54)
63#define PTE_KERNEL_EXECUTABLE (0ULL << 53)
64#define PTE_USER_NOT_EXECUTABLE (1ULL << 54)
65#define PTE_KERNEL_NOT_EXECUTABLE (1ULL << 53)
67#define PTE_NORMAL_MEM PTE_ATTR_IDX_1
68#define PTE_DEVICE_MEM PTE_ATTR_IDX_0
69#define PTE_NORMAL_NON_CACHEABLE (2ULL << 2)
72#define PHYSICAL_MEM_BASE 0xFFFF800000000000
73#define MMIO_BASE 0xFFFFFF1000000000
77#define VIRT_GETPAGE_CREATE (1<<0)
78#define VIRT_GETPAGE_ONLY_RET (1<<1)
80#define KERNEL_BASE_ADDRESS 0xFFFFE00000000000
81#define USER_BASE_ADDRESS 0x0000000060000000
82#define USER_END_ADDRESS 0x0000000080000000
87#define PAGE_SIZE (1ULL << PAGE_SHIFT)
88#define PAGE_MASK (PAGE_SIZE - 1)
92#define VIRT_ADDR_ALIGN(vaddr) (vaddr & ~(PAGE_SIZE - 1))
94#define PAGE_ALIGN(value) (((PAGE_SIZE-1)&value) ? ((value + PAGE_SIZE) & ~(PAGE_SIZE-1)) : value)
101typedef union _AuVPage_ {
124typedef union _AuVPage_ {
AU_EXTERN AU_EXPORT AuVPage * AuVmmngrGetPage(uint64_t virt_addr, uint8_t flags, uint8_t mode)
Definition vmmngr.cpp:125
AU_EXTERN AU_EXPORT void * AuGetPhysicalAddress(uint64_t virt_addr)
AuGetPhysicalAddress – returns the physical address from a virtual address.
Definition vmmngr.cpp:418
AU_EXTERN AU_EXPORT void AuFreePages(uint64_t virt_addr, bool free_physical, size_t s)
AuFreePages – frees up contiguous pages.
Definition vmmngr.cpp:389
AU_EXTERN AU_EXPORT bool AuMapPage(uint64_t phys_addr, uint64_t virt_addr, uint8_t attrib)
AuMapPage – Maps a virtual page to physical frame.
Definition vmmngr.cpp:198
void AuVmmngrInitialize()
AuVmmngrInitialize – initialize the virtual memory manager.
Definition vmmngr.cpp:494
AU_EXTERN AU_EXPORT bool AuMapPageEx(uint64_t *pml4i, uint64_t phys_addr, uint64_t virt_addr, uint8_t attrib)
AuMapPageEx – Maps a virtual page to physical frame in given page level.
Definition vmmngr.cpp:263
void AuVmmngrBootFree()
Definition vmmngr.cpp:504
AU_EXTERN AU_EXPORT uint64_t * AuGetRootPageTable()
Definition vmmngr.cpp:484
AU_EXTERN AU_EXPORT void AuUpdatePageFlags(uint64_t virt_addr, uint64_t flags)
AuFreePages – frees up contiguous pages.
Definition vmmngr.c:497
AU_EXTERN AU_EXPORT void * AuMapMMIO(uint64_t phys_addr, size_t page_count)
AuMapMMIO – Maps Memory Mapped I/O addresses.
Definition vmmngr.cpp:323
AU_EXTERN AU_EXPORT uint64_t * AuGetFreePage(bool user, void *ptr)
AuGetFreePage – Checks for free page.
Definition vmmngr.cpp:341
AU_EXTERN AU_EXPORT void * AuGetPhysicalAddressEx(uint64_t *cr3, uint64_t virt_addr)
Definition vmmngr.cpp:441
AU_EXTERN AU_EXPORT uint64_t * AuCreateVirtualAddressSpace()
AuCreateVirtualAddressSpace – create a new virtual address space.
Definition vmmngr.cpp:463
void AuVmmngrCloneAddressSpace(uint64_t *destcr3, uint64_t *srccr3)
AuVmmngrCloneAddressSpace – clones a given address space.
Definition vmmngr.cpp:518
#define AU_EXTERN
Definition aurora.h:50
#define AU_EXPORT
Definition aurora.h:38
unsigned char uint8_t
Definition acefiex.h:161
COMPILER_DEPENDENT_UINT64 uint64_t
Definition acefiex.h:165
bool dirty
Definition term.cpp:58