Mercurial > hg > Members > innparusu > xv6_rpi_port
comparison include/mmu.h @ 0:c450faca55f4
Init
author | Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 22 Oct 2017 18:25:39 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c450faca55f4 |
---|---|
1 /***************************************************************** | |
2 * mmu.h | |
3 * by Zhiyi Huang, hzy@cs.otago.ac.nz | |
4 * University of Otago | |
5 * | |
6 ********************************************************************/ | |
7 | |
8 | |
9 #define MBYTE 0x100000 | |
10 #define K_PDX_BASE 0x4000 | |
11 #define K_PTX_BASE 0x3000 | |
12 | |
13 #define CACHELINESIZE 32 | |
14 | |
15 /* | |
16 * page table entries. | |
17 */ | |
18 | |
19 #define UNMAPPED 0x00000000 | |
20 | |
21 #define COARSE (0<<4|1) | |
22 #define SECTION (0<<4|2) | |
23 | |
24 #define LARGE 0x00000001 | |
25 #define SMALL 0x00000002 | |
26 #define BUFFERED 0x00000004 | |
27 #define CACHED 0x00000008 | |
28 #define DOMAIN0 0 | |
29 | |
30 #define NOACCESS 0 | |
31 #define K_RW 1 | |
32 #define U_AP 2 | |
33 #define U_RW 3 | |
34 | |
35 #define ACCESS_PERM(n, v) (((v) & 3) << (((n) * 2) + 4)) | |
36 #define PDX_AP(ap) (ACCESS_PERM(3, (ap))) | |
37 #define PTX_AP(ap) (ACCESS_PERM(3, (ap)) | ACCESS_PERM(2, (ap)) \ | |
38 | ACCESS_PERM(1, (ap)) | ACCESS_PERM(0, (ap))) | |
39 | |
40 #define HVECTORS 0xffff0000 | |
41 | |
42 // A virtual address 'la' has a three-part structure as follows: | |
43 // | |
44 // +--------12------+-------8--------+---------12----------+ | |
45 // | Page Directory | Page Table | Offset within Page | | |
46 // | Index | Index | | | |
47 // +----------------+----------------+---------------------+ | |
48 // \--- PDX(va) --/ \--- PTX(va) --/ | |
49 | |
50 // page directory index | |
51 #define PDX(va) (((uint)(va) >> PDXSHIFT) & 0xFFF) | |
52 | |
53 // page table index | |
54 #define PTX(va) (((uint)(va) >> PTXSHIFT) & 0xFF) | |
55 | |
56 // construct virtual address from indexes and offset | |
57 #define PGADDR(d, t, o) ((uint)((d) << PDXSHIFT | (t) << PTXSHIFT | (o))) | |
58 | |
59 // Address in page table or page directory entry | |
60 #define PTE_ADDR(pte) ((uint)(pte) & ~0xFFF) | |
61 #define PTE_FLAGS(pte) ((uint)(pte) & 0xFFF) | |
62 | |
63 // Page directory and page table constants. | |
64 #define NPDENTRIES 1024 // # directory entries per page directory | |
65 #define NPTENTRIES 1024 // # PTEs per page table | |
66 #define PGSIZE 4096 // bytes mapped by a page | |
67 | |
68 #define PGSHIFT 12 // log2(PGSIZE) | |
69 #define PTXSHIFT 12 // offset of PTX in a linear address | |
70 #define PDXSHIFT 20 // offset of PDX in a linear address | |
71 | |
72 | |
73 #define PGROUNDUP(sz) (((sz)+PGSIZE-1) & ~(PGSIZE-1)) | |
74 #define PGROUNDDOWN(a) (((a)) & ~(PGSIZE-1)) | |
75 | |
76 #define PGDIR_BASE P2V(K_PDX_BASE) | |
77 | |
78 #define KVMPDXATTR DOMAIN0|PDX_AP(U_RW)|SECTION|CACHED|BUFFERED | |
79 | |
80 #define UVMPDXATTR DOMAIN0|COARSE | |
81 #define UVMPTXATTR PTX_AP(U_RW)|CACHED|BUFFERED|SMALL | |
82 |