forked from Bananymous/banan-os
Kernel: Rename MMU::{un,}allocate... to MMU::{un,}map
This is more appropriate name for the behaviour :D
This commit is contained in:
parent
a159c980ee
commit
d38470c8e2
|
@ -69,7 +69,7 @@ MMU::MMU()
|
|||
asm volatile("movl %0, %%cr3" :: "r"(m_highest_paging_struct));
|
||||
}
|
||||
|
||||
void MMU::allocate_page(uintptr_t address, uint8_t flags)
|
||||
void MMU::map_page(uintptr_t address, uint8_t flags)
|
||||
{
|
||||
#if MMU_DEBUG_PRINT
|
||||
dprintln("AllocatePage(0x{8H})", address);
|
||||
|
@ -96,15 +96,15 @@ void MMU::allocate_page(uintptr_t address, uint8_t flags)
|
|||
asm volatile("invlpg (%0)" :: "r"(address) : "memory");
|
||||
}
|
||||
|
||||
void MMU::allocate_range(uintptr_t address, ptrdiff_t size, uint8_t flags)
|
||||
void MMU::map_range(uintptr_t address, ptrdiff_t size, uint8_t flags)
|
||||
{
|
||||
uintptr_t s_page = address & PAGE_MASK;
|
||||
uintptr_t e_page = (address + size - 1) & PAGE_MASK;
|
||||
for (uintptr_t page = s_page; page <= e_page; page += PAGE_SIZE)
|
||||
allocate_page(page, flags);
|
||||
map_page(page, flags);
|
||||
}
|
||||
|
||||
void MMU::unallocate_page(uintptr_t address)
|
||||
void MMU::unmap_page(uintptr_t address)
|
||||
{
|
||||
#if MMU_DEBUG_PRINT
|
||||
dprintln("UnAllocatePage(0x{8H})", address & PAGE_MASK);
|
||||
|
@ -129,10 +129,10 @@ void MMU::unallocate_page(uintptr_t address)
|
|||
asm volatile("invlpg (%0)" :: "r"(address & PAGE_MASK) : "memory");
|
||||
}
|
||||
|
||||
void MMU::unallocate_range(uintptr_t address, ptrdiff_t size)
|
||||
void MMU::unmap_range(uintptr_t address, ptrdiff_t size)
|
||||
{
|
||||
uintptr_t s_page = address & PAGE_MASK;
|
||||
uintptr_t e_page = (address + size - 1) & PAGE_MASK;
|
||||
for (uintptr_t page = s_page; page <= e_page; page += PAGE_SIZE)
|
||||
unallocate_page(page);
|
||||
unmap_page(page);
|
||||
}
|
||||
|
|
|
@ -88,7 +88,7 @@ MMU::~MMU()
|
|||
kfree(pml4);
|
||||
}
|
||||
|
||||
void MMU::allocate_page(uintptr_t address, uint8_t flags)
|
||||
void MMU::map_page(uintptr_t address, uint8_t flags)
|
||||
{
|
||||
ASSERT((address >> 48) == 0);
|
||||
|
||||
|
@ -140,15 +140,15 @@ void MMU::allocate_page(uintptr_t address, uint8_t flags)
|
|||
asm volatile("invlpg (%0)" :: "r"(address) : "memory");
|
||||
}
|
||||
|
||||
void MMU::allocate_range(uintptr_t address, ptrdiff_t size, uint8_t flags)
|
||||
void MMU::map_range(uintptr_t address, ptrdiff_t size, uint8_t flags)
|
||||
{
|
||||
uintptr_t s_page = address & PAGE_MASK;
|
||||
uintptr_t e_page = (address + size - 1) & PAGE_MASK;
|
||||
for (uintptr_t page = s_page; page <= e_page; page += PAGE_SIZE)
|
||||
allocate_page(page, flags);
|
||||
map_page(page, flags);
|
||||
}
|
||||
|
||||
void MMU::unallocate_page(uintptr_t address)
|
||||
void MMU::unmap_page(uintptr_t address)
|
||||
{
|
||||
ASSERT((address >> 48) == 0);
|
||||
|
||||
|
@ -188,10 +188,10 @@ cleanup_done:
|
|||
asm volatile("invlpg (%0)" :: "r"(address) : "memory");
|
||||
}
|
||||
|
||||
void MMU::unallocate_range(uintptr_t address, ptrdiff_t size)
|
||||
void MMU::unmap_range(uintptr_t address, ptrdiff_t size)
|
||||
{
|
||||
uintptr_t s_page = address & PAGE_MASK;
|
||||
uintptr_t e_page = (address + size - 1) & PAGE_MASK;
|
||||
for (uintptr_t page = s_page; page <= e_page; page += PAGE_SIZE)
|
||||
unallocate_page(page);
|
||||
unmap_page(page);
|
||||
}
|
||||
|
|
|
@ -20,11 +20,11 @@ public:
|
|||
MMU();
|
||||
~MMU();
|
||||
|
||||
void allocate_page(uintptr_t, uint8_t);
|
||||
void allocate_range(uintptr_t, ptrdiff_t, uint8_t);
|
||||
void map_page(uintptr_t, uint8_t);
|
||||
void map_range(uintptr_t, ptrdiff_t, uint8_t);
|
||||
|
||||
void unallocate_page(uintptr_t);
|
||||
void unallocate_range(uintptr_t, ptrdiff_t);
|
||||
void unmap_page(uintptr_t);
|
||||
void unmap_range(uintptr_t, ptrdiff_t);
|
||||
|
||||
private:
|
||||
uint64_t* m_highest_paging_struct;
|
||||
|
|
|
@ -105,8 +105,8 @@ namespace Kernel
|
|||
if (rsdp->revision >= 2)
|
||||
{
|
||||
const XSDT* xsdt = (const XSDT*)rsdp->xsdt_address;
|
||||
MMU::get().allocate_page((uintptr_t)xsdt, MMU::Flags::Present);
|
||||
BAN::ScopeGuard _([xsdt] { MMU::get().unallocate_page((uintptr_t)xsdt); });
|
||||
MMU::get().map_page((uintptr_t)xsdt, MMU::Flags::Present);
|
||||
BAN::ScopeGuard _([xsdt] { MMU::get().unmap_page((uintptr_t)xsdt); });
|
||||
|
||||
if (memcmp(xsdt->signature, "XSDT", 4) != 0)
|
||||
return BAN::Error::from_error_code(ErrorCode::ACPI_RootInvalid);
|
||||
|
@ -120,8 +120,8 @@ namespace Kernel
|
|||
else
|
||||
{
|
||||
const RSDT* rsdt = (const RSDT*)(uintptr_t)rsdp->rsdt_address;
|
||||
MMU::get().allocate_page((uintptr_t)rsdt, MMU::Flags::Present);
|
||||
BAN::ScopeGuard _([rsdt] { MMU::get().unallocate_page((uintptr_t)rsdt); });
|
||||
MMU::get().map_page((uintptr_t)rsdt, MMU::Flags::Present);
|
||||
BAN::ScopeGuard _([rsdt] { MMU::get().unmap_page((uintptr_t)rsdt); });
|
||||
|
||||
if (memcmp(rsdt->signature, "RSDT", 4) != 0)
|
||||
return BAN::Error::from_error_code(ErrorCode::ACPI_RootInvalid);
|
||||
|
@ -133,13 +133,13 @@ namespace Kernel
|
|||
m_entry_count = (rsdt->length - sizeof(SDTHeader)) / 4;
|
||||
}
|
||||
|
||||
MMU::get().allocate_range(m_header_table, m_entry_count * m_entry_size, MMU::Flags::Present);
|
||||
MMU::get().map_range(m_header_table, m_entry_count * m_entry_size, MMU::Flags::Present);
|
||||
|
||||
for (uint32_t i = 0; i < m_entry_count; i++)
|
||||
{
|
||||
auto* header = get_header_from_index(i);
|
||||
MMU::get().allocate_page((uintptr_t)header, MMU::Flags::Present);
|
||||
MMU::get().allocate_range((uintptr_t)header, header->length, MMU::Flags::Present);
|
||||
MMU::get().map_page((uintptr_t)header, MMU::Flags::Present);
|
||||
MMU::get().map_range((uintptr_t)header, header->length, MMU::Flags::Present);
|
||||
}
|
||||
|
||||
return {};
|
||||
|
|
|
@ -144,10 +144,10 @@ APIC* APIC::create()
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
MMU::get().allocate_page(apic->m_local_apic, MMU::Flags::ReadWrite | MMU::Flags::Present);
|
||||
MMU::get().map_page(apic->m_local_apic, MMU::Flags::ReadWrite | MMU::Flags::Present);
|
||||
for (auto& io_apic : apic->m_io_apics)
|
||||
{
|
||||
MMU::get().allocate_page(io_apic.address, MMU::Flags::ReadWrite | MMU::Flags::Present);
|
||||
MMU::get().map_page(io_apic.address, MMU::Flags::ReadWrite | MMU::Flags::Present);
|
||||
io_apic.max_redirs = io_apic.read(IOAPIC_MAX_REDIRS);
|
||||
}
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ namespace Kernel::Memory
|
|||
m_list_pages = BAN::Math::div_round_up<uint64_t>(m_total_pages * sizeof(node), PAGE_SIZE);
|
||||
m_reservable_pages = m_total_pages - m_list_pages;
|
||||
|
||||
MMU::get().allocate_range(m_start, m_list_pages * PAGE_SIZE, MMU::Flags::ReadWrite | MMU::Flags::Present);
|
||||
MMU::get().map_range(m_start, m_list_pages * PAGE_SIZE, MMU::Flags::ReadWrite | MMU::Flags::Present);
|
||||
|
||||
// Initialize page list so that every page points to the next one
|
||||
node* page_list = (node*)m_start;
|
||||
|
@ -164,7 +164,7 @@ namespace Kernel::Memory
|
|||
{
|
||||
if (paddr_t page = range.reserve_page(); page != PhysicalRange::invalid)
|
||||
{
|
||||
MMU::get().allocate_page(page, flags);
|
||||
MMU::get().map_page(page, flags);
|
||||
return page;
|
||||
}
|
||||
}
|
||||
|
@ -177,7 +177,7 @@ namespace Kernel::Memory
|
|||
{
|
||||
if (range.contains(addr))
|
||||
{
|
||||
MMU::get().unallocate_page(addr);
|
||||
MMU::get().unmap_page(addr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,7 +44,7 @@ namespace Kernel
|
|||
[](void* entry_func)
|
||||
{
|
||||
Thread& current = Thread::current();
|
||||
MMU::get().allocate_range(current.stack_base(), current.stack_size(), MMU::Flags::UserSupervisor | MMU::Flags::ReadWrite | MMU::Flags::Present);
|
||||
MMU::get().map_range(current.stack_base(), current.stack_size(), MMU::Flags::UserSupervisor | MMU::Flags::ReadWrite | MMU::Flags::Present);
|
||||
current.jump_userspace((uintptr_t)entry_func);
|
||||
ASSERT_NOT_REACHED();
|
||||
}, (void*)entry
|
||||
|
|
|
@ -34,7 +34,7 @@ VesaTerminalDriver* VesaTerminalDriver::create()
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
MMU::get().allocate_range(framebuffer.addr, framebuffer.pitch * framebuffer.height, MMU::Flags::UserSupervisor | MMU::Flags::ReadWrite | MMU::Flags::Present);
|
||||
MMU::get().map_range(framebuffer.addr, framebuffer.pitch * framebuffer.height, MMU::Flags::UserSupervisor | MMU::Flags::ReadWrite | MMU::Flags::Present);
|
||||
|
||||
auto* driver = new VesaTerminalDriver(
|
||||
framebuffer.width,
|
||||
|
@ -51,7 +51,7 @@ VesaTerminalDriver* VesaTerminalDriver::create()
|
|||
|
||||
VesaTerminalDriver::~VesaTerminalDriver()
|
||||
{
|
||||
MMU::get().unallocate_range(m_address, m_pitch * m_height);
|
||||
MMU::get().unmap_range(m_address, m_pitch * m_height);
|
||||
}
|
||||
|
||||
void VesaTerminalDriver::set_pixel(uint32_t offset, Color color)
|
||||
|
|
|
@ -212,8 +212,8 @@ static void jump_userspace()
|
|||
{
|
||||
using namespace Kernel;
|
||||
|
||||
MMU::get().allocate_range((uintptr_t)&g_userspace_start, (uintptr_t)&g_userspace_end - (uintptr_t)&g_userspace_start, MMU::Flags::UserSupervisor | MMU::Flags::Present);
|
||||
MMU::get().allocate_range((uintptr_t)&g_rodata_start, (uintptr_t)&g_rodata_end - (uintptr_t)&g_rodata_start, MMU::Flags::UserSupervisor | MMU::Flags::Present);
|
||||
MMU::get().map_range((uintptr_t)&g_userspace_start, (uintptr_t)&g_userspace_end - (uintptr_t)&g_userspace_start, MMU::Flags::UserSupervisor | MMU::Flags::Present);
|
||||
MMU::get().map_range((uintptr_t)&g_rodata_start, (uintptr_t)&g_rodata_end - (uintptr_t)&g_rodata_start, MMU::Flags::UserSupervisor | MMU::Flags::Present);
|
||||
|
||||
MUST(Process::create_userspace(userspace_entry));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue