diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2025-12-27 21:56:42 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2025-12-27 21:56:42 +0800 |
| commit | 7ececbe2818510a8acaa2a2e513085c768b14d15 (patch) | |
| tree | d884b6ad1b7e28bc22528b8433a80456fa1f7895 /include/kernel/mm.h | |
| parent | be71d44b9dfcf65fba3394fbd3dc2b3e06962897 (diff) | |
| download | lume-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.h | 23 |
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 |
