1 /* 2 * Copyright (c) 2023 Institute of Parallel And Distributed Systems (IPADS), Shanghai Jiao Tong University (SJTU) 3 * Licensed under the Mulan PSL v2. 4 * You can use this software according to the terms and conditions of the Mulan PSL v2. 5 * You may obtain a copy of Mulan PSL v2 at: 6 * http://license.coscl.org.cn/MulanPSL2 7 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 8 * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 9 * PURPOSE. 10 * See the Mulan PSL v2 for more details. 11 */ 12 #ifndef ARCH_AARCH64_ARCH_MMU_H 13 #define ARCH_AARCH64_ARCH_MMU_H 14 15 #include <common/vars.h> 16 17 #ifndef KBASE 18 #define KBASE 0xFFFFFF0000000000 19 #define PHYSICAL_ADDR_MASK (40) 20 #endif // KBASE 21 22 #ifndef KSTACK_BASE 23 #define KSTACK_BASE 0xFFFFFE8000000000 24 #define KSTACKx_ADDR(cpuid) ((cpuid)*2 * CPU_STACK_SIZE + KSTACK_BASE) 25 #endif // KSTACK 26 27 #ifndef __ASM__ 28 29 #include <arch/mm/page_table.h> 30 #include <common/types.h> 31 32 typedef u64 vmr_prop_t; 33 #define VMR_READ (1 << 0) 34 #define VMR_WRITE (1 << 1) 35 #define VMR_EXEC (1 << 2) 36 #define VMR_DEVICE (1 << 3) 37 #define VMR_NOCACHE (1 << 4) 38 #define VMR_COW (1 << 5) 39 #define VMR_TZ_NS (1 << 6) 40 41 /* functions */ 42 int map_range_in_pgtbl_kernel(void *pgtbl, vaddr_t va, paddr_t pa, size_t len, 43 vmr_prop_t flags); 44 int map_range_in_pgtbl(void *pgtbl, vaddr_t va, paddr_t pa, size_t len, 45 vmr_prop_t flags, long *rss); 46 int unmap_range_in_pgtbl(void *pgtbl, vaddr_t va, size_t len, long *rss); 47 int query_in_pgtbl(void *pgtbl, vaddr_t va, paddr_t *pa, pte_t **entry); 48 int mprotect_in_pgtbl(void *pgtbl, vaddr_t va, size_t len, vmr_prop_t prop); 49 void set_ttbr0_el1(paddr_t ttbr0); 50 51 struct vmspace; 52 void flush_tlb_opt(struct vmspace *vmspace, vaddr_t addr, size_t size); 53 void flush_tlb_all(void); 54 55 #ifdef CHCORE 56 57 #define phys_to_virt(x) ((vaddr_t)((paddr_t)(x) + KBASE)) 58 #define virt_to_phys(x) ((paddr_t)((vaddr_t)(x)-KBASE)) 59 60 #endif // CHCORE 61 62 #endif // __ASM__ 63 64 #endif /* ARCH_AARCH64_ARCH_MMU_H */