7d467f102f0dd948fe26eaf61208950e4c5535e0
[akaros.git] / kern / arch / riscv / ros / mmu.h
1 #ifndef ROS_INC_MMU_H
2 #define ROS_INC_MMU_H
3
4 // All physical memory mapped at this address
5 #ifdef __riscv64
6 # define KERNBASE       0xFFFFFF0000000000
7 # define ULIM           0x0000010000000000
8 # define KERN_LOAD_ADDR 0xFFFFFFFF80000000
9 # define KERN_VMAP_TOP          KERN_LOAD_ADDR // upper 2GB reserved (see mmu_init)
10 # define NPTLEVELS                       4
11 # define L1PGSHIFT              (12+9+9+9)
12 # define L1PGSIZE        (1L << L1PGSHIFT)
13 # define L2PGSHIFT                (12+9+9)
14 # define L2PGSIZE        (1L << L2PGSHIFT)
15 # define L3PGSHIFT                  (12+9)
16 # define L3PGSIZE        (1L << L3PGSHIFT)
17 # define L4PGSHIFT                    (12)
18 # define L4PGSIZE        (1L << L4PGSHIFT)
19 # define PGSHIFT                 L4PGSHIFT
20 # define PTSIZE                   L2PGSIZE
21 #else
22 # define KERNBASE               0x80000000
23 # define ULIM                   0x7F000000
24 # define KERN_LOAD_ADDR           KERNBASE
25 # define KERN_VMAP_TOP                  0xfec00000 /* using sparc's upper limit */
26 # define NPTLEVELS                       2
27 # define L1PGSHIFT                 (12+10)
28 # define L1PGSIZE         (1 << L1PGSHIFT)
29 # define L2PGSHIFT                      12
30 # define L2PGSIZE         (1 << L2PGSHIFT)
31 # define PGSHIFT                 L2PGSHIFT
32 # define PTSIZE                   L1PGSIZE
33 #endif
34
35 /* All arches must define this, which is the lower limit of their static
36  * mappings, and where the dynamic mappings will start. */
37 #define KERN_DYN_TOP    KERNBASE
38
39 #define PGSIZE (1 << PGSHIFT)
40
41 #define NOVPT
42
43 #ifndef __ASSEMBLER__
44 typedef unsigned long pte_t;
45 typedef unsigned long pde_t;
46 #endif
47
48 #endif