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.


5d41452577ef34b02cfb0c188e02297869fd3a1a
[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 #include <geekos/vmm.h>
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
15 #define PAGE_DIRECTORY_INDEX(x)  ((((uint_t)x) >> 22) & 0x3ff)
16 #define PAGE_TABLE_INDEX(x)      ((((uint_t)x) >> 12) & 0x3ff)
17 #define PAGE_OFFSET(x)           ((((uint_t)x) & 0xfff))
18
19 #define PAGE_ALLIGNED_ADDR(x)   (((uint_t) (x)) >> 12)
20 #define PAGE_ADDR(x)   (PAGE_ALLIGNED_ADDR(x) << 12)
21
22 #define PAGE_POWER 12
23
24 #define VM_WRITE     1
25 #define VM_USER      2
26 #define VM_NOCACHE   8
27 #define VM_READ      0
28 #define VM_EXEC      0
29
30
31 typedef struct pde {
32   uint_t present         : 1;
33   uint_t flags           : 4;
34   uint_t accessed        : 1;
35   uint_t reserved        : 1;
36   uint_t large_pages     : 1;
37   uint_t global_page     : 1;
38   uint_t vmm_info        : 3;
39   uint_t pt_base_addr    : 20;
40 } pde_t;
41
42 typedef struct pte {
43   uint_t present         : 1;
44   uint_t flags           : 4;
45   uint_t accessed        : 1;
46   uint_t dirty           : 1;
47   uint_t pte_attr        : 1;
48   uint_t global_page     : 1;
49   uint_t vmm_info        : 3;
50   uint_t page_base_addr  : 20;
51 } pte_t;
52
53
54 pde_t * generate_guest_page_tables(vmm_mem_layout_t * layout, vmm_mem_list_t * list);
55
56
57 void PrintDebugPageTables(pde_t * pde);
58
59
60
61
62 #endif