FreeNOS
Public Member Functions | Private Member Functions | Private Attributes
ARM64SecondTable Class Reference

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.
 

Detailed Description

ARM64 second level page table implementation.

Definition at line 40 of file ARM64SecondTable.h.

Member Function Documentation

◆ access()

MemoryContext::Result ARM64SecondTable::access ( Address  virt,
Memory::Access access 
) const

Get Access flags for a virtual address.

Parameters
virtVirtual address to get Access flags for.
accessMemoryAccess object pointer.
Returns
Result code.

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().

◆ flags()

u32 ARM64SecondTable::flags ( Memory::Access  access) const
private

Convert MemoryAccess to page table flags.

Parameters
accessMemory access flags
Returns
Page table 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.

◆ map()

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.

Parameters
virtVirtual address.
physPhysical address.
accessMemory access flags.
Returns
Result code
Parameters
vaddrVirtual Address.
Returns
Index of the corresponding page table entry.

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().

◆ translate()

MemoryContext::Result ARM64SecondTable::translate ( Address  virt,
Address phys 
) const

Translate virtual address to physical address.

Parameters
virtVirtual address to lookup as input
physPhysical address for output.
Returns
Result code

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().

◆ unmap()

MemoryContext::Result ARM64SecondTable::unmap ( Address  virt)

Remove virtual address mapping.

Parameters
virtVirtual address.
Returns
Result code

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().

Field Documentation

◆ m_pages

u64 ARM64SecondTable::m_pages[512]
private

Array of second level page table entries.

Definition at line 100 of file ARM64SecondTable.h.

Referenced by access(), map(), translate(), and unmap().


The documentation for this class was generated from the following files: