OpenCore
1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
VirtualMemory.h
Go to the documentation of this file.
1
18
#ifndef VIRTUAL_MEMORY_H
19
#define VIRTUAL_MEMORY_H
20
21
#pragma pack(push, 1)
22
23
//
24
// Page-Map Level-4 Offset (PML4) and
25
// Page-Directory-Pointer Offset (PDPE) entries 4K & 2MB
26
//
27
28
typedef
union
{
29
struct
{
30
UINT64
Present
: 1;
// 0 = Not present in memory, 1 = Present in memory
31
UINT64
ReadWrite
: 1;
// 0 = Read-Only, 1= Read/Write
32
UINT64
UserSupervisor
: 1;
// 0 = Supervisor, 1=User
33
UINT64
WriteThrough
: 1;
// 0 = Write-Back caching, 1=Write-Through caching
34
UINT64
CacheDisabled
: 1;
// 0 = Cached, 1=Non-Cached
35
UINT64
Accessed
: 1;
// 0 = Not accessed, 1 = Accessed (set by CPU)
36
UINT64
Reserved
: 1;
// Reserved
37
UINT64
MustBeZero
: 2;
// Must Be Zero
38
UINT64
Available
: 3;
// Available for use by system software
39
UINT64
PageTableBaseAddress
: 40;
// Page Table Base Address
40
UINT64
AvabilableHigh
: 11;
// Available for use by system software
41
UINT64
Nx
: 1;
// No Execute bit
42
} Bits;
43
UINT64
Uint64
;
44
}
PAGE_MAP_AND_DIRECTORY_POINTER
;
45
46
//
47
// Page Table Entry 4KB
48
//
49
typedef
union
{
50
struct
{
51
UINT64
Present
: 1;
// 0 = Not present in memory, 1 = Present in memory
52
UINT64
ReadWrite
: 1;
// 0 = Read-Only, 1= Read/Write
53
UINT64
UserSupervisor
: 1;
// 0 = Supervisor, 1=User
54
UINT64
WriteThrough
: 1;
// 0 = Write-Back caching, 1=Write-Through caching
55
UINT64
CacheDisabled
: 1;
// 0 = Cached, 1=Non-Cached
56
UINT64
Accessed
: 1;
// 0 = Not accessed, 1 = Accessed (set by CPU)
57
UINT64
Dirty
: 1;
// 0 = Not Dirty, 1 = written by processor on access to page
58
UINT64
PAT
: 1;
// Combines with CD, WT and MTRR to define true caching type
59
UINT64
Global
: 1;
// 0 = Not global page, 1 = global page TLB not cleared on CR3 write
60
UINT64
Available
: 3;
// Available for use by system software
61
UINT64
PageTableBaseAddress
: 40;
// Page Table Base Address
62
UINT64
AvabilableHigh
: 11;
// Available for use by system software
63
UINT64
Nx
: 1;
// 0 = Execute Code, 1 = No Code Execution
64
} Bits;
65
UINT64
Uint64
;
66
}
PAGE_TABLE_4K_ENTRY
;
67
68
//
69
// Page Table Entry 2MB
70
//
71
typedef
union
{
72
struct
{
73
UINT64
Present
: 1;
// 0 = Not present in memory, 1 = Present in memory
74
UINT64
ReadWrite
: 1;
// 0 = Read-Only, 1= Read/Write
75
UINT64
UserSupervisor
: 1;
// 0 = Supervisor, 1=User
76
UINT64
WriteThrough
: 1;
// 0 = Write-Back caching, 1=Write-Through caching
77
UINT64
CacheDisabled
: 1;
// 0 = Cached, 1=Non-Cached
78
UINT64
Accessed
: 1;
// 0 = Not accessed, 1 = Accessed (set by CPU)
79
UINT64
Dirty
: 1;
// 0 = Not Dirty, 1 = written by processor on access to page
80
UINT64
MustBe1
: 1;
// Must be 1
81
UINT64
Global
: 1;
// 0 = Not global page, 1 = global page TLB not cleared on CR3 write
82
UINT64
Available
: 3;
// Available for use by system software
83
UINT64
PAT
: 1;
// Combines with CD, WT and MTRR to define true caching type
84
UINT64
MustBeZero
: 8;
// Must be zero;
85
UINT64
PageTableBaseAddress
: 31;
// Page Table Base Address
86
UINT64
AvabilableHigh
: 11;
// Available for use by system software
87
UINT64
Nx
: 1;
// 0 = Execute Code, 1 = No Code Execution
88
} Bits;
89
UINT64
Uint64
;
90
}
PAGE_TABLE_2M_ENTRY
;
91
92
//
93
// Page Table Entry 1GB
94
//
95
typedef
union
{
96
struct
{
97
UINT64
Present
: 1;
// 0 = Not present in memory, 1 = Present in memory
98
UINT64
ReadWrite
: 1;
// 0 = Read-Only, 1= Read/Write
99
UINT64
UserSupervisor
: 1;
// 0 = Supervisor, 1=User
100
UINT64
WriteThrough
: 1;
// 0 = Write-Back caching, 1=Write-Through caching
101
UINT64
CacheDisabled
: 1;
// 0 = Cached, 1=Non-Cached
102
UINT64
Accessed
: 1;
// 0 = Not accessed, 1 = Accessed (set by CPU)
103
UINT64
Dirty
: 1;
// 0 = Not Dirty, 1 = written by processor on access to page
104
UINT64
MustBe1
: 1;
// Must be 1
105
UINT64
Global
: 1;
// 0 = Not global page, 1 = global page TLB not cleared on CR3 write
106
UINT64
Available
: 3;
// Available for use by system software
107
UINT64
PAT
: 1;
// Combines with CD, WT and MTRR to define true caching type
108
UINT64
MustBeZero
: 17;
// Must be zero;
109
UINT64
PageTableBaseAddress
: 22;
// Page Table Base Address
110
UINT64
AvabilableHigh
: 11;
// Available for use by system software
111
UINT64
Nx
: 1;
// 0 = Execute Code, 1 = No Code Execution
112
} Bits;
113
UINT64
Uint64
;
114
}
PAGE_TABLE_1G_ENTRY
;
115
116
//
117
// PAT index bits.
118
//
119
typedef
union
{
120
struct
{
121
UINT8
WriteThrough
: 1;
// 0 = Write-Back caching, 1=Write-Through caching
122
UINT8
CacheDisabled
: 1;
// 0 = Cached, 1=Non-Cached
123
UINT8
PAT
: 1;
// Combines with CD, WT and MTRR to define true caching type
124
UINT8
Reserved
: 5;
// Reserved
125
} Bits;
126
UINT8
Index
;
127
}
PAT_INDEX
;
128
129
typedef
union
{
130
struct
{
131
UINT64
PhysPgOffset
: 12;
// 0 = Physical Page Offset
132
UINT64
PTOffset
: 9;
// 0 = Page Table Offset
133
UINT64
PDOffset
: 9;
// 0 = Page Directory Offset
134
UINT64
PDPOffset
: 9;
// 0 = Page Directory Pointer Offset
135
UINT64
PML4Offset
: 9;
// 0 = Page Map Level 4 Offset
136
UINT64
SignExtend
: 16;
// 0 = Sign Extend
137
} Pg4K;
138
struct
{
139
UINT64 PhysPgOffset : 21;
// 0 = Physical Page Offset
140
UINT64 PDOffset : 9;
// 0 = Page Directory Offset
141
UINT64 PDPOffset : 9;
// 0 = Page Directory Pointer Offset
142
UINT64 PML4Offset : 9;
// 0 = Page Map Level 4 Offset
143
UINT64 SignExtend : 16;
// 0 = Sign Extend
144
} Pg2M;
145
struct
{
146
UINT64 PhysPgOffset : 30;
// 0 = Physical Page Offset
147
UINT64 PDPOffset : 9;
// 0 = Page Directory Pointer Offset
148
UINT64 PML4Offset : 9;
// 0 = Page Map Level 4 Offset
149
UINT64 SignExtend : 16;
// 0 = Sign Extend
150
} Pg1G;
151
UINT64
Uint64
;
152
}
VIRTUAL_ADDR
;
153
154
#define VA_FIX_SIGN_EXTEND(VA) ((VA).Pg4K.SignExtend = ((VA).Pg4K.PML4Offset & 0x100U) ? 0xFFFFU : 0U);
155
156
#pragma pack(pop)
157
158
#define CR0_WP BIT16
159
160
#define CR3_ADDR_MASK 0x000FFFFFFFFFF000ull
161
#define CR3_FLAG_PWT 0x0000000000000008ull
162
#define CR3_FLAG_PCD 0x0000000000000010ull
163
164
#define PAGING_4K_ADDRESS_MASK_64 0x000FFFFFFFFFF000ull
165
#define PAGING_2M_ADDRESS_MASK_64 0x000FFFFFFFE00000ull
166
#define PAGING_1G_ADDRESS_MASK_64 0x000FFFFFC0000000ull
167
168
#endif
// VIRTUAL_MEMORY_H
PAGE_MAP_AND_DIRECTORY_POINTER
Definition
VirtualMemory.h:28
PAGE_MAP_AND_DIRECTORY_POINTER::Available
UINT64 Available
Definition
VirtualMemory.h:38
PAGE_MAP_AND_DIRECTORY_POINTER::Reserved
UINT64 Reserved
Definition
VirtualMemory.h:36
PAGE_MAP_AND_DIRECTORY_POINTER::UserSupervisor
UINT64 UserSupervisor
Definition
VirtualMemory.h:32
PAGE_MAP_AND_DIRECTORY_POINTER::Uint64
UINT64 Uint64
Definition
VirtualMemory.h:43
PAGE_MAP_AND_DIRECTORY_POINTER::AvabilableHigh
UINT64 AvabilableHigh
Definition
VirtualMemory.h:40
PAGE_MAP_AND_DIRECTORY_POINTER::Accessed
UINT64 Accessed
Definition
VirtualMemory.h:35
PAGE_MAP_AND_DIRECTORY_POINTER::ReadWrite
UINT64 ReadWrite
Definition
VirtualMemory.h:31
PAGE_MAP_AND_DIRECTORY_POINTER::Present
UINT64 Present
Definition
VirtualMemory.h:30
PAGE_MAP_AND_DIRECTORY_POINTER::Nx
UINT64 Nx
Definition
VirtualMemory.h:41
PAGE_MAP_AND_DIRECTORY_POINTER::CacheDisabled
UINT64 CacheDisabled
Definition
VirtualMemory.h:34
PAGE_MAP_AND_DIRECTORY_POINTER::PageTableBaseAddress
UINT64 PageTableBaseAddress
Definition
VirtualMemory.h:39
PAGE_MAP_AND_DIRECTORY_POINTER::WriteThrough
UINT64 WriteThrough
Definition
VirtualMemory.h:33
PAGE_MAP_AND_DIRECTORY_POINTER::MustBeZero
UINT64 MustBeZero
Definition
VirtualMemory.h:37
PAGE_TABLE_1G_ENTRY
Definition
VirtualMemory.h:95
PAGE_TABLE_1G_ENTRY::MustBe1
UINT64 MustBe1
Definition
VirtualMemory.h:104
PAGE_TABLE_1G_ENTRY::Present
UINT64 Present
Definition
VirtualMemory.h:97
PAGE_TABLE_1G_ENTRY::UserSupervisor
UINT64 UserSupervisor
Definition
VirtualMemory.h:99
PAGE_TABLE_1G_ENTRY::Nx
UINT64 Nx
Definition
VirtualMemory.h:111
PAGE_TABLE_1G_ENTRY::Available
UINT64 Available
Definition
VirtualMemory.h:106
PAGE_TABLE_1G_ENTRY::MustBeZero
UINT64 MustBeZero
Definition
VirtualMemory.h:108
PAGE_TABLE_1G_ENTRY::Uint64
UINT64 Uint64
Definition
VirtualMemory.h:113
PAGE_TABLE_1G_ENTRY::Global
UINT64 Global
Definition
VirtualMemory.h:105
PAGE_TABLE_1G_ENTRY::Dirty
UINT64 Dirty
Definition
VirtualMemory.h:103
PAGE_TABLE_1G_ENTRY::AvabilableHigh
UINT64 AvabilableHigh
Definition
VirtualMemory.h:110
PAGE_TABLE_1G_ENTRY::PageTableBaseAddress
UINT64 PageTableBaseAddress
Definition
VirtualMemory.h:109
PAGE_TABLE_1G_ENTRY::WriteThrough
UINT64 WriteThrough
Definition
VirtualMemory.h:100
PAGE_TABLE_1G_ENTRY::PAT
UINT64 PAT
Definition
VirtualMemory.h:107
PAGE_TABLE_1G_ENTRY::ReadWrite
UINT64 ReadWrite
Definition
VirtualMemory.h:98
PAGE_TABLE_1G_ENTRY::CacheDisabled
UINT64 CacheDisabled
Definition
VirtualMemory.h:101
PAGE_TABLE_1G_ENTRY::Accessed
UINT64 Accessed
Definition
VirtualMemory.h:102
PAGE_TABLE_2M_ENTRY
Definition
VirtualMemory.h:71
PAGE_TABLE_2M_ENTRY::AvabilableHigh
UINT64 AvabilableHigh
Definition
VirtualMemory.h:86
PAGE_TABLE_2M_ENTRY::PAT
UINT64 PAT
Definition
VirtualMemory.h:83
PAGE_TABLE_2M_ENTRY::Accessed
UINT64 Accessed
Definition
VirtualMemory.h:78
PAGE_TABLE_2M_ENTRY::CacheDisabled
UINT64 CacheDisabled
Definition
VirtualMemory.h:77
PAGE_TABLE_2M_ENTRY::Dirty
UINT64 Dirty
Definition
VirtualMemory.h:79
PAGE_TABLE_2M_ENTRY::WriteThrough
UINT64 WriteThrough
Definition
VirtualMemory.h:76
PAGE_TABLE_2M_ENTRY::Nx
UINT64 Nx
Definition
VirtualMemory.h:87
PAGE_TABLE_2M_ENTRY::PageTableBaseAddress
UINT64 PageTableBaseAddress
Definition
VirtualMemory.h:85
PAGE_TABLE_2M_ENTRY::Global
UINT64 Global
Definition
VirtualMemory.h:81
PAGE_TABLE_2M_ENTRY::UserSupervisor
UINT64 UserSupervisor
Definition
VirtualMemory.h:75
PAGE_TABLE_2M_ENTRY::ReadWrite
UINT64 ReadWrite
Definition
VirtualMemory.h:74
PAGE_TABLE_2M_ENTRY::Uint64
UINT64 Uint64
Definition
VirtualMemory.h:89
PAGE_TABLE_2M_ENTRY::Present
UINT64 Present
Definition
VirtualMemory.h:73
PAGE_TABLE_2M_ENTRY::MustBe1
UINT64 MustBe1
Definition
VirtualMemory.h:80
PAGE_TABLE_2M_ENTRY::MustBeZero
UINT64 MustBeZero
Definition
VirtualMemory.h:84
PAGE_TABLE_2M_ENTRY::Available
UINT64 Available
Definition
VirtualMemory.h:82
PAGE_TABLE_4K_ENTRY
Definition
VirtualMemory.h:49
PAGE_TABLE_4K_ENTRY::AvabilableHigh
UINT64 AvabilableHigh
Definition
VirtualMemory.h:62
PAGE_TABLE_4K_ENTRY::Global
UINT64 Global
Definition
VirtualMemory.h:59
PAGE_TABLE_4K_ENTRY::UserSupervisor
UINT64 UserSupervisor
Definition
VirtualMemory.h:53
PAGE_TABLE_4K_ENTRY::Uint64
UINT64 Uint64
Definition
VirtualMemory.h:65
PAGE_TABLE_4K_ENTRY::Accessed
UINT64 Accessed
Definition
VirtualMemory.h:56
PAGE_TABLE_4K_ENTRY::Nx
UINT64 Nx
Definition
VirtualMemory.h:63
PAGE_TABLE_4K_ENTRY::WriteThrough
UINT64 WriteThrough
Definition
VirtualMemory.h:54
PAGE_TABLE_4K_ENTRY::ReadWrite
UINT64 ReadWrite
Definition
VirtualMemory.h:52
PAGE_TABLE_4K_ENTRY::Available
UINT64 Available
Definition
VirtualMemory.h:60
PAGE_TABLE_4K_ENTRY::PAT
UINT64 PAT
Definition
VirtualMemory.h:58
PAGE_TABLE_4K_ENTRY::PageTableBaseAddress
UINT64 PageTableBaseAddress
Definition
VirtualMemory.h:61
PAGE_TABLE_4K_ENTRY::Present
UINT64 Present
Definition
VirtualMemory.h:51
PAGE_TABLE_4K_ENTRY::CacheDisabled
UINT64 CacheDisabled
Definition
VirtualMemory.h:55
PAGE_TABLE_4K_ENTRY::Dirty
UINT64 Dirty
Definition
VirtualMemory.h:57
PAT_INDEX
Definition
VirtualMemory.h:119
PAT_INDEX::Index
UINT8 Index
Definition
VirtualMemory.h:126
PAT_INDEX::WriteThrough
UINT8 WriteThrough
Definition
VirtualMemory.h:121
PAT_INDEX::PAT
UINT8 PAT
Definition
VirtualMemory.h:123
PAT_INDEX::CacheDisabled
UINT8 CacheDisabled
Definition
VirtualMemory.h:122
PAT_INDEX::Reserved
UINT8 Reserved
Definition
VirtualMemory.h:124
VIRTUAL_ADDR
Definition
VirtualMemory.h:129
VIRTUAL_ADDR::PML4Offset
UINT64 PML4Offset
Definition
VirtualMemory.h:135
VIRTUAL_ADDR::PDOffset
UINT64 PDOffset
Definition
VirtualMemory.h:133
VIRTUAL_ADDR::PhysPgOffset
UINT64 PhysPgOffset
Definition
VirtualMemory.h:131
VIRTUAL_ADDR::PDPOffset
UINT64 PDPOffset
Definition
VirtualMemory.h:134
VIRTUAL_ADDR::PTOffset
UINT64 PTOffset
Definition
VirtualMemory.h:132
VIRTUAL_ADDR::Uint64
UINT64 Uint64
Definition
VirtualMemory.h:151
VIRTUAL_ADDR::SignExtend
UINT64 SignExtend
Definition
VirtualMemory.h:136
Include
Intel
IndustryStandard
VirtualMemory.h
Generated by
1.12.0