19#pragma clang optimize off
23#pragma GCC push_options
24#pragma GCC optimize ("O0")
27#include <FreeNOS/System.h>
36 , m_mapRangeSparseCallback(this, &
MemoryContext::mapRangeSparseCallback)
38 , m_numSparsePages(
ZERO)
125 Size currentSize = 0;
128 while (addr < r.
virt+r.
size && currentSize < size)
142 if (currentSize >= size)
Virtual memory abstract interface.
virtual Result unmap(Address virt)=0
Unmap a virtual address.
virtual Result mapRangeSparse(Memory::Range *range)
Map and allocate a range of sparse (non-contiguous) physical pages to virtual addresses.
MemoryMap * m_map
Virtual memory layout.
virtual void mapRangeSparseCallback(Address *phys)
Callback to provide intermediate Range object during mapRangeSparse()
Size m_numSparsePages
Number of pages allocated via mapRangeSparse Callback.
MemoryContext(MemoryMap *map, SplitAllocator *alloc)
Constructor.
SplitAllocator * m_alloc
Physical memory allocator.
virtual Result findFree(Size size, MemoryMap::Region region, Address *virt) const
Find unused memory.
virtual Result map(Address virt, Address phys, Memory::Access access)=0
Map a physical page to a virtual address.
virtual Result unmapRange(Memory::Range *range)
Unmaps a range of virtual memory.
virtual ~MemoryContext()
Destructor.
virtual Result release(Address virt)
Release a memory page mapping.
static MemoryContext * getCurrent()
Get currently active MemoryContext.
Callback< MemoryContext, Address > m_mapRangeSparseCallback
Callback object for mapRangeSparseCallback function.
static MemoryContext * m_current
The currently active MemoryContext.
Memory::Range * m_savedRange
Saved range input for use in the mapRangeSparse Callback.
virtual Result mapRangeContiguous(Memory::Range *range)
Map a range of contiguous physical pages to virtual addresses.
virtual Result lookup(Address virt, Address *phys) const =0
Translate virtual address to physical address.
Describes virtual memory map layout.
Memory::Range range(Region region) const
Get memory range for the given region.
Allocator which separates kernel mapped memory at virtual and physical addresses.
virtual Result allocate(Range &args)
Allocate physical memory.
Result allocateSparse(const Range &range, CallbackFunction *function)
Allocate sparse (non-contiguous) physical memory.
virtual Result release(const Address addr)
Release memory page.
#define PAGESIZE
ARM uses 4K pages.
#define assert(exp)
Insert program diagnostics.
unsigned long Address
A memory address.
unsigned int Size
Any sane size indicator cannot go negative.
Describes a range of memory.
Size alignment
Alignment in bytes or ZERO for default alignment.
Address address
Starting address of the memory range.
Size size
Amount of memory in bytes.
Size size
Size in number of bytes.
Address phys
Physical address.
Address virt
Virtual address.
Access access
Page access flags.