summaryrefslogtreecommitdiff
path: root/include/kernel/mm.h
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2025-12-27 21:56:42 +0800
committerRichard Qin <richard.qin.x@gmail.com>2025-12-27 21:56:42 +0800
commit7ececbe2818510a8acaa2a2e513085c768b14d15 (patch)
treed884b6ad1b7e28bc22528b8433a80456fa1f7895 /include/kernel/mm.h
parentbe71d44b9dfcf65fba3394fbd3dc2b3e06962897 (diff)
downloadlume-7ececbe2818510a8acaa2a2e513085c768b14d15.tar.gz
lume-7ececbe2818510a8acaa2a2e513085c768b14d15.tar.xz
feat: Implement the first user program of the lume OS
Diffstat (limited to 'include/kernel/mm.h')
-rw-r--r--include/kernel/mm.h23
1 files changed, 12 insertions, 11 deletions
diff --git a/include/kernel/mm.h b/include/kernel/mm.h
index 0f7c73d..07d675b 100644
--- a/include/kernel/mm.h
+++ b/include/kernel/mm.h
@@ -3,19 +3,20 @@
namespace VM
{
- typedef uint64_t* pagetable_t;
+ typedef uint64_t *pagetable_t;
typedef uint64_t pte_t;
- typedef uint64_t uint64;
-
- #define PTE_V (1L << 0)
- #define PTE_R (1L << 1)
- #define PTE_W (1L << 2)
- #define PTE_X (1L << 3)
- #define PTE_U (1L << 4)
-
- #define SATP_SV39 (8L << 60)
- #define MAKE_SATP(pagetable) (SATP_SV39 | (((uint64)pagetable) >> 12))
+ pte_t *walk(pagetable_t pagetable, uint64 va, int alloc);
+ int mappages(pagetable_t pagetable, uint64 va, uint64 size, uint64 pa, int perm);
+ void kvmmap(uint64 va, uint64 pa, uint64 sz, int perm);
void kvminit();
void kvminithart();
+ pagetable_t uvmcreate();
+ void uvminit(pagetable_t pagetable, uchar *src, uint sz);
+ void uvmunmap(pagetable_t pagetable, uint64 va, uint64 npages, int do_free);
+ void uvmfree(pagetable_t pagetable, uint64 sz);
+ int uvmcopy(pagetable_t oldpt, pagetable_t newpt, uint64 sz);
+ uint64 uvmalloc(pagetable_t pagetable, uint64 oldsz, uint64 newsz);
+ uint64 uvmdealloc(pagetable_t pagetable, uint64 oldsz, uint64 newsz);
+ int copyin(pagetable_t pagetable, char *dst, uint64 srcva, uint64 len);
} \ No newline at end of file