mirror of
https://gitlab.com/sortix/sortix.git
synced 2023-02-13 20:55:38 -05:00
Added the MapRange virtual memory functions.
This commit is contained in:
parent
b80195dc19
commit
e5eaf3eeb5
1 changed files with 60 additions and 0 deletions
|
@ -563,6 +563,66 @@ namespace Sortix
|
|||
return result;
|
||||
}
|
||||
|
||||
bool MapRangeKernel(addr_t where, size_t bytes)
|
||||
{
|
||||
for ( addr_t page = where; page < where + bytes; page += 4096UL )
|
||||
{
|
||||
addr_t physicalpage = Page::Get();
|
||||
if ( physicalpage == 0 )
|
||||
{
|
||||
while ( where < page )
|
||||
{
|
||||
page -= 4096UL;
|
||||
physicalpage = UnmapKernel(page);
|
||||
Page::Put(physicalpage);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
MapKernel(where, physicalpage);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void UnmapRangeKernel(addr_t where, size_t bytes)
|
||||
{
|
||||
for ( addr_t page = where; page < where + bytes; page += 4096UL )
|
||||
{
|
||||
addr_t physicalpage = UnmapKernel(page);
|
||||
Page::Put(physicalpage);
|
||||
}
|
||||
}
|
||||
|
||||
bool MapRangeUser(addr_t where, size_t bytes)
|
||||
{
|
||||
for ( addr_t page = where; page < where + bytes; page += 4096UL )
|
||||
{
|
||||
addr_t physicalpage = Page::Get();
|
||||
if ( physicalpage == 0 || !MapUser(where, physicalpage) )
|
||||
{
|
||||
while ( where < page )
|
||||
{
|
||||
page -= 4096UL;
|
||||
physicalpage = UnmapUser(page);
|
||||
Page::Put(physicalpage);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void UnmapRangeUser(addr_t where, size_t bytes)
|
||||
{
|
||||
for ( addr_t page = where; page < where + bytes; page += 4096UL )
|
||||
{
|
||||
addr_t physicalpage = UnmapUser(page);
|
||||
Page::Put(physicalpage);
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#warning "Virtual Memory is not available on this arch"
|
||||
|
|
Loading…
Reference in a new issue