4 (C) 2014-2015 VOSystems.
7 #ifndef Paging_Diverge_H__
8 #define Paging_Diverge_H__
10 #include<Diverge/types.h>
13 #define MM_PAGE_SIZE 4096
15 #define MM_KERNEL_START 0x00010000
17 #define MM_PTE_INDEX_MASK 0x000003FF
18 #define MM_PTE_INDEX_SHIFT 12
20 #define MM_PDE_INDEX_MASK 0x000003FF
21 #define MM_PDE_INDEX_SHIFT 22
23 #define MM_NUM_PTE 1024
24 #define MM_PAGE_TABLE_SIZE ( sizeof( PTE ) * MM_NUM_PTE )
25 #define MM_NUM_PDE 1024
26 #define MM_PAGE_DIRECTORY_SIZE ( sizeof( PDE ) * MM_NUM_PDE )
32 typedef unsigned long PTE;
33 typedef PTE PAGE_TABLE;
35 #define PTE_P 0x00000001
36 #define PTE_RW 0x00000002
37 #define PTE_US 0x00000004
38 #define PTE_PWT 0x00000008
39 #define PTE_PCD 0x00000010
40 #define PTE_A 0x00000020
41 #define PTE_D 0x00000040
42 #define PTE_PAT 0x00000080
43 #define PTE_G 0x00000100
44 #define PTE_AVAILABLE 0x00000e00
45 #define PTE_ADDR 0xfffff000
47 /*Page Dirctry Entry*/
48 typedef unsigned long PDE;
49 typedef PDE PAGE_DIRECTORY;
51 #define PDE_P 0x00000001
52 #define PDE_RW 0x00000002
53 #define PDE_US 0x00000004
54 #define PDE_PWT 0x00000008
55 #define PDE_PCD 0x00000010
56 #define PDE_A 0x00000020
57 #define PDE_D 0x00000040
58 #define PDE_PAT 0x00000080
59 #define PDE_G 0x00000100
60 #define PDE_AVAILABLE 0x00000e00
61 #define PDE_ADDR 0xfffff000
63 inline void set_PDE_flag(PDE* entry, unsigned long flags);
64 inline void clear_PDE_flag(PDE* entry, unsigned long flags);
65 void set_PDE_page_frame_addr(PDE* entry, unsigned long page_frame_addr);
66 unsigned long get_PDE_frame_addr(PDE* entry);
67 bool PDE_Present(PDE* entry);
68 bool PDE_Write_Table(PDE* entry);
70 inline void set_PTE_flag(PTE* entry, unsigned long flags);
71 inline void clear_PTE_flag(PTE* entry, unsigned long flags);
72 void set_PTE_page_frame_addr(PTE* entry, unsigned long page_frame_addr);
73 unsigned long get_PTE_frame_addr(PTE* entry);
74 bool PTE_Present(PTE* entry);
75 bool PTE_Write_Table(PTE* entry);