Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


WTF??????
[palacios.git] / palacios / include / geekos / vmm_paging.h
1 #ifndef __VMM_PAGING_H
2 #define __VMM_PAGING_H
3
4 #include <geekos/ktypes.h>
5
6
7
8 #include <geekos/vmm_mem.h>
9 #include <geekos/vmm_util.h>
10
11 #define MAX_PAGE_TABLE_ENTRIES      1024
12 #define MAX_PAGE_DIR_ENTRIES        1024
13
14 #define MAX_PAGE_TABLE_ENTRIES_64      512
15 #define MAX_PAGE_DIR_ENTRIES_64        512
16 #define MAX_PAGE_DIR_PTR_ENTRIES_64    512
17 #define MAX_PAGE_MAP_ENTRIES_64        512
18
19 #define PAGE_DIRECTORY_INDEX(x)  ((((uint_t)x) >> 22) & 0x3ff)
20 #define PAGE_TABLE_INDEX(x)      ((((uint_t)x) >> 12) & 0x3ff)
21 #define PAGE_OFFSET(x)           ((((uint_t)x) & 0xfff))
22
23 #define PAGE_ALLIGNED_ADDR(x)   (((uint_t) (x)) >> 12)
24 #define PAGE_ADDR(x)   (PAGE_ALLIGNED_ADDR(x) << 12)
25
26 #define PAGE_POWER 12
27
28 #define VM_WRITE     1
29 #define VM_USER      2
30 #define VM_NOCACHE   8
31 #define VM_READ      0
32 #define VM_EXEC      0
33
34
35 #define GUEST_PAGE   0x0
36 #define SHARED_PAGE  0x1
37
38 typedef struct pde {
39   uint_t present         : 1;
40   uint_t flags           : 4;
41   uint_t accessed        : 1;
42   uint_t reserved        : 1;
43   uint_t large_pages     : 1;
44   uint_t global_page     : 1;
45   uint_t vmm_info        : 3;
46   uint_t pt_base_addr    : 20;
47 } vmm_pde_t;
48
49 typedef struct pte {
50   uint_t present         : 1;
51   uint_t flags           : 4;
52   uint_t accessed        : 1;
53   uint_t dirty           : 1;
54   uint_t pte_attr        : 1;
55   uint_t global_page     : 1;
56   uint_t vmm_info        : 3;
57   uint_t page_base_addr  : 20;
58 } vmm_pte_t;
59
60
61
62 typedef struct pte64 {
63   uint_t present         : 1;
64   uint_t flags           : 4;
65   uint_t accessed        : 1;
66   uint_t dirty           : 1;
67   uint_t pte_attr        : 1;
68   uint_t global_page     : 1;
69   uint_t vmm_info        : 3;
70   uint_t page_base_addr_lo  : 20;
71   uint_t page_base_addr_hi : 20;
72   uint_t available       : 11;
73   uint_t no_execute      : 1;
74 } pte64_t;
75
76 typedef struct pde64 {
77   uint_t present         : 1;
78   uint_t flags           : 4;
79   uint_t accessed        : 1;
80   uint_t reserved        : 1;
81   uint_t large_pages     : 1;
82   uint_t reserved2       : 1;
83   uint_t vmm_info        : 3;
84   uint_t pt_base_addr_lo    : 20;
85   uint_t pt_base_addr_hi : 20;
86   uint_t available       : 11;
87   uint_t no_execute      : 1;
88 } pde64_t;
89
90 typedef struct pdpe64 {
91   uint_t present        : 1;
92   uint_t writable       : 1;
93   uint_t user           : 1;
94   uint_t pwt            : 1;
95   uint_t pcd            : 1;
96   uint_t accessed       : 1;
97   uint_t reserved       : 1;
98   uint_t large_pages    : 1;
99   uint_t zero           : 1;
100   uint_t vmm_info       : 3;
101   uint_t pd_base_addr_lo : 20;
102   uint_t pd_base_addr_hi : 20;
103   uint_t available      : 11;
104   uint_t no_execute     : 1;
105 } pdpe64_t;
106
107
108 typedef struct pml4e {
109   uint_t present        : 1;
110   uint_t writable       : 1;
111   uint_t user           : 1;
112   uint_t pwt            : 1;
113   uint_t pcd            : 1;
114   uint_t accessed       : 1;
115   uint_t reserved       : 1;
116   uint_t zero           : 2;
117   uint_t vmm_info       : 3;
118   uint_t pdp_base_addr_lo : 20;
119   uint_t pdp_base_addr_hi : 20;
120   uint_t available      : 11;
121   uint_t no_execute     : 1;
122 } pml4e64_t;
123
124
125 vmm_pde_t * generate_guest_page_tables(vmm_mem_layout_t * layout, vmm_mem_list_t * list);
126 pml4e64_t * generate_guest_page_tables_64(vmm_mem_layout_t * layout, vmm_mem_list_t * list);
127
128 void free_guest_page_tables(vmm_pde_t * pde);
129
130 void PrintDebugPageTables(vmm_pde_t * pde);
131
132
133
134
135 #endif