OSDN Git Service

DMAドライバ. DrFSマイナーチェンジ
[vaneos/DivergeMirror.git] / include / Diverge / paging.h
1 /*
2         paging.h
3         Paging
4         (C) 2014-2015 VOSystems.
5 */
6
7 #ifndef Paging_Diverge_H__
8 #define Paging_Diverge_H__
9
10 #include<Diverge/types.h>
11
12 /*Paging Common*/
13 #define MM_PAGE_SIZE            4096
14
15 #define MM_KERNEL_START         0x00010000
16
17 #define MM_PTE_INDEX_MASK       0x000003FF
18 #define MM_PTE_INDEX_SHIFT      12
19
20 #define MM_PDE_INDEX_MASK       0x000003FF
21 #define MM_PDE_INDEX_SHIFT      22
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 )
27
28 #define MM_OK                   0
29 #define MM_ERROR                (-1)
30
31 /*Page Table Entry*/
32 typedef unsigned long PTE;
33 typedef PTE     PAGE_TABLE;
34
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
46
47 /*Page Dirctry Entry*/
48 typedef unsigned long PDE;
49 typedef PDE     PAGE_DIRECTORY;
50
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
62
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);
69
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);
76
77 #endif