OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
VirtualMemory.h
Go to the documentation of this file.
1
21#ifndef _VIRTUAL_MEMORY_H_
22#define _VIRTUAL_MEMORY_H_
23
24#include <stdint.h>
25
26#pragma pack(1)
27
28//
29// Page-Map Level-4 Offset (PML4) and
30// Page-Directory-Pointer Offset (PDPE) entries 4K & 2MB
31//
32
33typedef union {
34 struct {
35 uint64_t Present:1; // 0 = Not present in memory, 1 = Present in memory
36 uint64_t ReadWrite:1; // 0 = Read-Only, 1= Read/Write
37 uint64_t UserSupervisor:1; // 0 = Supervisor, 1=User
38 uint64_t WriteThrough:1; // 0 = Write-Back caching, 1=Write-Through caching
39 uint64_t CacheDisabled:1; // 0 = Cached, 1=Non-Cached
40 uint64_t Accessed:1; // 0 = Not accessed, 1 = Accessed (set by CPU)
41 uint64_t Reserved:1; // Reserved
42 uint64_t MustBeZero:2; // Must Be Zero
43 uint64_t Available:3; // Available for use by system software
44 uint64_t PageTableBaseAddress:40; // Page Table Base Address
45 uint64_t AvabilableHigh:11; // Available for use by system software
46 uint64_t Nx:1; // No Execute bit
47 } Bits;
50
51//
52// Page-Directory Offset 4K
53//
54typedef union {
55 struct {
56 uint64_t Present:1; // 0 = Not present in memory, 1 = Present in memory
57 uint64_t ReadWrite:1; // 0 = Read-Only, 1= Read/Write
58 uint64_t UserSupervisor:1; // 0 = Supervisor, 1=User
59 uint64_t WriteThrough:1; // 0 = Write-Back caching, 1=Write-Through caching
60 uint64_t CacheDisabled:1; // 0 = Cached, 1=Non-Cached
61 uint64_t Accessed:1; // 0 = Not accessed, 1 = Accessed (set by CPU)
62 uint64_t Reserved:1; // Reserved
63 uint64_t MustBeZero:1; // Must Be Zero
64 uint64_t Reserved2:1; // Reserved
65 uint64_t Available:3; // Available for use by system software
66 uint64_t PageTableBaseAddress:40; // Page Table Base Address
67 uint64_t AvabilableHigh:11; // Available for use by system software
68 uint64_t Nx:1; // No Execute bit
69 } Bits;
72
73//
74// Page Table Entry 4K
75//
76typedef union {
77 struct {
78 uint64_t Present:1; // 0 = Not present in memory, 1 = Present in memory
79 uint64_t ReadWrite:1; // 0 = Read-Only, 1= Read/Write
80 uint64_t UserSupervisor:1; // 0 = Supervisor, 1=User
81 uint64_t WriteThrough:1; // 0 = Write-Back caching, 1=Write-Through caching
82 uint64_t CacheDisabled:1; // 0 = Cached, 1=Non-Cached
83 uint64_t Accessed:1; // 0 = Not accessed, 1 = Accessed (set by CPU)
84 uint64_t Dirty:1; // 0 = Not Dirty, 1 = written by processor on access to page
85 uint64_t PAT:1; // 0 = Ignore Page Attribute Table
86 uint64_t Global:1; // 0 = Not global page, 1 = global page TLB not cleared on CR3 write
87 uint64_t Available:3; // Available for use by system software
88 uint64_t PageTableBaseAddress:40; // Page Table Base Address
89 uint64_t AvabilableHigh:11; // Available for use by system software
90 uint64_t Nx:1; // 0 = Execute Code, 1 = No Code Execution
91 } Bits;
94
95
96//
97// Page Table Entry 2MB
98//
99typedef union {
100 struct {
101 uint64_t Present:1; // 0 = Not present in memory, 1 = Present in memory
102 uint64_t ReadWrite:1; // 0 = Read-Only, 1= Read/Write
103 uint64_t UserSupervisor:1; // 0 = Supervisor, 1=User
104 uint64_t WriteThrough:1; // 0 = Write-Back caching, 1=Write-Through caching
105 uint64_t CacheDisabled:1; // 0 = Cached, 1=Non-Cached
106 uint64_t Accessed:1; // 0 = Not accessed, 1 = Accessed (set by CPU)
107 uint64_t Dirty:1; // 0 = Not Dirty, 1 = written by processor on access to page
108 uint64_t MustBe1:1; // Must be 1
109 uint64_t Global:1; // 0 = Not global page, 1 = global page TLB not cleared on CR3 write
110 uint64_t Available:3; // Available for use by system software
112 uint64_t MustBeZero:8; // Must be zero;
113 uint64_t PageTableBaseAddress:31; // Page Table Base Address
114 uint64_t AvabilableHigh:11; // Available for use by system software
115 uint64_t Nx:1; // 0 = Execute Code, 1 = No Code Execution
116 } Bits;
119
120#pragma pack()
121
122#endif
UINT64 uint64_t