blob: f6d400a3e8d6e44ff3601044264bc7a8ddccd7bb (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#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();
void mark_pram_region_free(uint64_t start_addr, uint64_t end_addr);
void mark_vram_region_used(uint64_t start_addr, uint64_t end_addr);
uint64_t find_unmapped_vram_region(uint64_t page_count);
uint64_t encode_pte(
uint64_t addr, bool user, bool write, bool execute, bool ps);
void init_kernel_page_tables(uint64_t kernel_offset);
void map_kernel_stacks();
void map_kernel_page(
uint64_t paddr, uint64_t vaddr, bool write, bool execute);
void unmap_kernel_page(uint64_t vaddr);
//maps writable and not executable
void *map_new_kernel_pages(uint64_t count);
//maps writable and not executable
void map_new_kernel_page(uint64_t &vaddr_out, uint64_t &paddr_out);
uint64_t get_used_vram_page_count();
uint64_t get_free_pram_page_count();
extern uint64_t kernel_p4e;
uint64_t take_2mib_pram_page();
}
#endif
|