|
FreeNOS
|
ARM64 second level page table implementation. More...
#include <ARM64SecondTable.h>
Public Member Functions | |
| MemoryContext::Result | map (Address virt, Address phys, Memory::Access) |
| Map a virtual address to a physical address. | |
| MemoryContext::Result | unmap (Address virt) |
| Remove virtual address mapping. | |
| MemoryContext::Result | translate (Address virt, Address *phys) const |
| Translate virtual address to physical address. | |
| MemoryContext::Result | access (Address virt, Memory::Access *access) const |
| Get Access flags for a virtual address. | |
Private Member Functions | |
| u32 | flags (Memory::Access access) const |
| Convert MemoryAccess to page table flags. | |
Private Attributes | |
| u64 | m_pages [512] |
| Array of second level page table entries. | |
ARM64 second level page table implementation.
Definition at line 40 of file ARM64SecondTable.h.
| MemoryContext::Result ARM64SecondTable::access | ( | Address | virt, |
| Memory::Access * | access | ||
| ) | const |
Get Access flags for a virtual address.
| virt | Virtual address to get Access flags for. |
| access | MemoryAccess object pointer. |
Definition at line 61 of file ARM64SecondTable.cpp.
References access(), contain_flags, Memory::Device, entry, Memory::InnerCached, MemoryContext::InvalidAddress, IS_PT_PAGE_TBL, L3_IDX, m_pages, PT_DEV, PT_NC, PT_OSH, PT_RO, PT_USER, Memory::Readable, MemoryContext::Success, Memory::Uncached, Memory::User, and Memory::Writable.
Referenced by access(), ARM64FirstTable::access(), flags(), and map().
|
private |
Convert MemoryAccess to page table flags.
| access | Memory access flags |
Definition at line 88 of file ARM64SecondTable.cpp.
References access(), Memory::Device, Memory::Executable, PT_AF, PT_DEV, PT_ISH, PT_KERNEL, PT_NC, PT_NX, PT_OSH, PT_RO, PT_USER, Memory::User, and Memory::Writable.
| MemoryContext::Result ARM64SecondTable::map | ( | Address | virt, |
| Address | phys, | ||
| Memory::Access | access | ||
| ) |
Map a virtual address to a physical address.
Entry inside the page table of a given virtual address.
| virt | Virtual address. |
| phys | Physical address. |
| access | Memory access flags. |
| vaddr | Virtual Address. |
Definition at line 30 of file ARM64SecondTable.cpp.
References access(), MemoryContext::AlreadyExists, flags, IS_PT_PAGE_TBL, L3_IDX, m_pages, PAGEMASK, PT_PAGE, and MemoryContext::Success.
Referenced by ARM64FirstTable::map().
| MemoryContext::Result ARM64SecondTable::translate | ( | Address | virt, |
| Address * | phys | ||
| ) | const |
Translate virtual address to physical address.
| virt | Virtual address to lookup as input |
| phys | Physical address for output. |
Definition at line 50 of file ARM64SecondTable.cpp.
References MemoryContext::InvalidAddress, IS_PT_PAGE_TBL, L3_IDX, m_pages, PAGEMASK, and MemoryContext::Success.
Referenced by ARM64FirstTable::releaseRange(), ARM64FirstTable::releaseSection(), and ARM64FirstTable::translate().
| MemoryContext::Result ARM64SecondTable::unmap | ( | Address | virt | ) |
Remove virtual address mapping.
| virt | Virtual address. |
Definition at line 44 of file ARM64SecondTable.cpp.
References L3_IDX, m_pages, PT_NONE, and MemoryContext::Success.
Referenced by ARM64FirstTable::releaseRange(), and ARM64FirstTable::unmap().
|
private |
Array of second level page table entries.
Definition at line 100 of file ARM64SecondTable.h.
Referenced by access(), map(), translate(), and unmap().