34 lines
824 B
C++
34 lines
824 B
C++
#ifndef MERCURY_KERNEL_PAGING_HPP
|
|
#define MERCURY_KERNEL_PAGING_HPP
|
|
|
|
#include <cstdint>
|
|
|
|
//in paging.asm
|
|
extern "C" [[noreturn]] void switch_to_kernel_p4(void (*and_then_jump_to)());
|
|
|
|
namespace mercury::kernel::paging {
|
|
|
|
void mark_all_pram_used();
|
|
void mark_all_vram_free();
|
|
|
|
//assumes page-alignment
|
|
void mark_pram_region_free(uint64_t start_addr, uint64_t end_addr);
|
|
//assumes page-alignment
|
|
void mark_vram_region_used(uint64_t start_addr, uint64_t end_addr);
|
|
|
|
uint64_t find_unmapped_vram_region(uint64_t page_count);
|
|
|
|
void init_kernel_page_tables(uint64_t kernel_offset);
|
|
|
|
void map_kernel_stack();
|
|
|
|
//assumes page-alignment
|
|
void map_kernel_page(
|
|
uint64_t paddr, uint64_t vaddr, bool write, bool execute);
|
|
|
|
uint64_t get_used_vram_page_count();
|
|
uint64_t get_free_pram_page_count();
|
|
|
|
}
|
|
|
|
#endif
|