Files
jsix_import/src/include/kernel_memory.h
Justin C. Miller 83b330bf2b [kernel] Use constants for known pml4e indices
There were a few lingering bugs due to places where 510/511 were
hard-coded as the kernel-space PML4 entries. These are now constants
defined in kernel_memory.h instead.

Tags: boot memory paging
2020-05-24 22:06:24 -07:00

45 lines
1.2 KiB
C++

#pragma once
/// \file kernel_memory.h
/// Constants related to the kernel's memory layout
#include <stddef.h>
#include <stdint.h>
namespace memory {
/// Size of a single page frame.
constexpr size_t frame_size = 0x1000;
/// Start of kernel memory.
constexpr uintptr_t kernel_offset = 0xffff800000000000;
/// Offset from physical where page tables are mapped.
constexpr uintptr_t page_offset = 0xffffc00000000000;
/// Initial process thread's stack address
constexpr uintptr_t initial_stack = 0x0000800000000000;
/// Initial process thread's stack size, in pages
constexpr unsigned initial_stack_pages = 1;
/// Max size of the kernel heap
constexpr size_t kernel_max_heap = 0x8000000000; // 512GiB
/// Start of the kernel heap
constexpr uintptr_t heap_start = page_offset - kernel_max_heap;
/// First kernel space PML4 entry
constexpr unsigned pml4e_kernel = 256;
/// First offset-mapped space PML4 entry
constexpr unsigned pml4e_offset = 384;
/// Number of page_table entries
constexpr unsigned table_entries = 512;
/// Helper to determine if a physical address can be accessed
/// through the page_offset area.
inline bool page_mappable(uintptr_t a) { return (a & page_offset) == 0; }
} // namespace memory