From d95c714c8cfdc5818b0e0f0c99cf2e5be66de202 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Sun, 12 Sep 2021 21:51:10 +0300 Subject: Initial physical page manager + Will probably still need a fair bit of tweakind and documentation improvements, but seems to work outside of the kernel. Also no valgrind errors, which is quite promising I guess. --- arch/riscv/config.h | 7 +++++++ arch/riscv/init/init.c | 15 ++++++++++++--- arch/riscv/kernel/main.c | 13 +++++++++++++ arch/riscv/main.c | 13 ------------- arch/riscv/source.mk | 2 +- 5 files changed, 33 insertions(+), 17 deletions(-) create mode 100644 arch/riscv/kernel/main.c delete mode 100644 arch/riscv/main.c (limited to 'arch/riscv') diff --git a/arch/riscv/config.h b/arch/riscv/config.h index 1818316..3eedb39 100644 --- a/arch/riscv/config.h +++ b/arch/riscv/config.h @@ -1,3 +1,10 @@ #include #define PM_KERN 0x83800000 #define VM_KERN ((-1) - SZ_1G) + +#define MAX_ORDER 3 +#define PAGE_SHIFT 12 +#define O0_WIDTH 9 +#define O1_WIDTH 9 +#define O2_WIDTH 9 +#define O3_WIDTH 0 diff --git a/arch/riscv/init/init.c b/arch/riscv/init/init.c index 6bb6bc3..e12c351 100644 --- a/arch/riscv/init/init.c +++ b/arch/riscv/init/init.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -118,11 +119,19 @@ void init_debug(void *fdt) #endif -void init(void *fdt) +void __noreturn init(void *fdt) { init_debug(fdt); - dbg("hello\n"); + /* basic memory layout info */ struct mem_layout pmem = get_memlayout(fdt); - /* struct mm_ptinfo ptbl = create_pagetable(pmem); */ + + /* TODO: find first contiguous region */ + + /* generate pagetable at contiguous region */ + populate_pmap(pmem.base, pmem.top - pmem.base, 0/* something */); + + /* TODO: mark all used pages */ + update_pmap(0/* TODO: figure out where in virtual memory the page map should be mapped */); + /* TODO: jump to kernel */ } diff --git a/arch/riscv/kernel/main.c b/arch/riscv/kernel/main.c new file mode 100644 index 0000000..9334fb3 --- /dev/null +++ b/arch/riscv/kernel/main.c @@ -0,0 +1,13 @@ +#include +#include + +void yeet() +{ + int a = 23; +} + +void __main main(struct mm_ptinfo *pageinfo) +{ + yeet(); + while(1){}; +} diff --git a/arch/riscv/main.c b/arch/riscv/main.c deleted file mode 100644 index 9334fb3..0000000 --- a/arch/riscv/main.c +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include - -void yeet() -{ - int a = 23; -} - -void __main main(struct mm_ptinfo *pageinfo) -{ - yeet(); - while(1){}; -} diff --git a/arch/riscv/source.mk b/arch/riscv/source.mk index 50e0f5f..2d79625 100644 --- a/arch/riscv/source.mk +++ b/arch/riscv/source.mk @@ -1,4 +1,4 @@ -KERNEL_LOCAL != echo arch/riscv/*.[cS] +KERNEL_LOCAL != echo arch/riscv/kernel/*.[cS] KERNEL_SOURCES += $(KERNEL_LOCAL) INIT_LOCAL != echo arch/riscv/init/*.[cS] -- cgit v1.3