add asm headers and linker scripts for aarch64
[lunaix-os.git] / lunaix-os / arch / generic / includes / asm-generic / tlb-shared.h
1 #ifndef __LUNAIX_TLB_SHARED_H
2 #define __LUNAIX_TLB_SHARED_H
3
4 #include <lunaix/types.h>
5 #include <lunaix/mm/procvm.h>
6
7 /**
8  * @brief Invalidate an entry of kernel address spaces
9  * 
10  * @param asid 
11  * @param addr 
12  * @param npages 
13  */
14 static inline void 
15 tlb_flush_kernel(ptr_t addr)
16 {
17     __tlb_flush_global(addr);
18 }
19
20 /**
21  * @brief Invalidate entries of kernel address spaces
22  * 
23  * @param asid 
24  * @param addr 
25  * @param npages 
26  */
27 static inline void 
28 tlb_flush_kernel_ranged(ptr_t addr, unsigned int npages)
29 {
30     for (unsigned int i = 0; i < npages; i++)
31     {
32         tlb_flush_kernel(addr + i * PAGE_SIZE);
33     }
34 }
35
36 /**
37  * @brief Invalidate an entry within a process memory space
38  * 
39  * @param asid 
40  * @param addr 
41  * @param npages 
42  */
43 void
44 tlb_flush_mm(struct proc_mm* mm, ptr_t addr);
45
46 /**
47  * @brief Invalidate entries within a process memory space
48  * 
49  * @param asid 
50  * @param addr 
51  * @param npages 
52  */
53 void
54 tlb_flush_mm_range(struct proc_mm* mm, ptr_t addr, unsigned int npages);
55
56 /**
57  * @brief Invalidate an entry within a vm region
58  * 
59  * @param asid 
60  * @param addr 
61  * @param npages 
62  */
63 void
64 tlb_flush_vmr(struct mm_region* vmr, ptr_t va);
65
66 /**
67  * @brief Invalidate all entries within a vm region
68  * 
69  * @param asid 
70  * @param addr 
71  * @param npages 
72  */
73 void
74 tlb_flush_vmr_all(struct mm_region* vmr);
75
76 /**
77  * @brief Invalidate entries within a vm region
78  * 
79  * @param asid 
80  * @param addr 
81  * @param npages 
82  */
83 void
84 tlb_flush_vmr_range(struct mm_region* vmr, ptr_t addr, unsigned int npages);
85
86 #endif /* __LUNAIX_TLB_SHARED_H */