Paging: mapped kernel, fb, early-mem, HHDM
This commit is contained in:
@@ -5,8 +5,9 @@
|
||||
#define BITS_PER_ROW 64
|
||||
|
||||
#include <stdint.h>
|
||||
#include <limine.h>
|
||||
|
||||
void paging_init();
|
||||
void paging_init(struct limine_kernel_address_response* kaddr, struct limine_framebuffer* fb);
|
||||
|
||||
extern uint64_t hhdm_off;
|
||||
|
||||
@@ -16,14 +17,27 @@ extern uint64_t hhdm_off;
|
||||
// Stole it
|
||||
#define ALIGN_UP(x, align) (((x) + ((align) - 1)) & ~((align) - 1))
|
||||
#define ALIGN_DOWN(x, align) ((x) & ~((align) - 1))
|
||||
#define PAGE_ALIGN_DOWN(x) ((x) & ~0xFFFULL)
|
||||
|
||||
#define PML4_INDEX(x) (((x) >> 39) & 0x1FF)
|
||||
#define PDPT_INDEX(x) (((x) >> 30) & 0x1FF)
|
||||
#define PD_INDEX(x) (((x) >> 21) & 0x1FF)
|
||||
#define PT_INDEX(x) (((x) >> 12) & 0x1FF)
|
||||
|
||||
// Page entry special bits
|
||||
// Bits set on a parent (directory, table) fall back to their children
|
||||
#define PTE_PRESENT (1ULL << 0)
|
||||
#define PTE_WRITE (1ULL << 1)
|
||||
#define PTE_USER (1ULL << 2)
|
||||
#define PTE_HUGE (1ULL << 7)
|
||||
#define PTE_NOEXEC (1ULL << 63)
|
||||
#define PTE_PRESENT (1ULL << 0)
|
||||
#define PTE_WRITABLE (1ULL << 1)
|
||||
#define PTE_USER (1ULL << 2)
|
||||
#define PTE_PWT (1ULL << 3)
|
||||
#define PTE_PCD (1ULL << 4)
|
||||
#define PTE_HUGE (1ULL << 7)
|
||||
#define PTE_NOEXEC (1ULL << 63)
|
||||
|
||||
// Specified in linker.ld
|
||||
#define KERNEL_BASE 0xFFFFFFFF80000000ULL
|
||||
|
||||
// 2 MB should be enough (as of now, the whole kernel ELF is around 75kb)
|
||||
#define KERNEL_SIZE 0x200000
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user