nckernel  0.1
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
paging.h
Go to the documentation of this file.
1 
12 struct pgde {
13  unsigned long p:1;
14  unsigned long rw:1;
15  unsigned long us:1;
16  unsigned long pwt:1;
17  unsigned long pcd:1;
18  unsigned long a:1;
19  unsigned long zero:1;
20  unsigned long ps:1;
21  unsigned long g:1;
22  unsigned long avail:3;
23  unsigned long pt_base:20;
24 } __PACKED;
25 
27 struct pgte {
28  unsigned long p:1;
29  unsigned long rw:1;
30  unsigned long us:1;
31  unsigned long pwt:1;
32  unsigned long pcd:1;
33  unsigned long a:1;
34  unsigned long d:1;
35  unsigned long pat:1;
36  unsigned long g:1;
37  unsigned long avail:3;
38  unsigned long page_base:20;
39 } __PACKED;
40 
42 struct cr3 {
43  unsigned long unused_0:3;
44  unsigned long pwt:1;
45  unsigned long pcd:1;
46  unsigned long unused_1:7;
47  unsigned long pdb:20;
48 } __PACKED;
49 
50 #define NR_PAGES 1024
51 #define NR_TABLES 1024
52 
53 #define TO_IDX(vma, pgd, pgt) do { \
54  uint32_t pagesize = sysconf(_SC_PAGESIZE); \
55  pgd = ((uint32_t)(vma)) / (pagesize * NR_PAGES); \
56  pgt = ((uint32_t)(vma)) % (pagesize * NR_PAGES); \
57  pgt /= pagesize; \
58 } while (0)
59