3 Copyright (c) 2006, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
21 #ifndef _VIRTUAL_MEMORY_H_
22 #define _VIRTUAL_MEMORY_H_
27 // Page Map Level 4 Offset (PML4) and
28 // Page Directory Pointer Table (PDPE) entries 4K & 2M
33 UINT64 Present
:1; // 0 = Not present in memory, 1 = Present in memory
34 UINT64 ReadWrite
:1; // 0 = Read-Only, 1= Read/Write
35 UINT64 UserSupervisor
:1; // 0 = Supervisor, 1=User
36 UINT64 WriteThrough
:1; // 0 = Write-Back caching, 1=Write-Through caching
37 UINT64 CacheDisabled
:1; // 0 = Cached, 1=Non-Cached
38 UINT64 Accessed
:1; // 0 = Not accessed, 1 = Accessed (set by CPU)
39 UINT64 Reserved
:1; // Reserved
40 UINT64 MustBeZero
:2; // Must Be Zero
41 UINT64 Available
:3; // Available for use by system software
42 UINT64 PageTableBaseAddress
:40; // Page Table Base Address
43 UINT64 AvabilableHigh
:11; // Available for use by system software
44 UINT64 Nx
:1; // No Execute bit
47 } X64_PAGE_MAP_AND_DIRECTORY_POINTER_2MB_4K
;
50 // Page Directory Entry 4K
54 UINT64 Present
:1; // 0 = Not present in memory, 1 = Present in memory
55 UINT64 ReadWrite
:1; // 0 = Read-Only, 1= Read/Write
56 UINT64 UserSupervisor
:1; // 0 = Supervisor, 1=User
57 UINT64 WriteThrough
:1; // 0 = Write-Back caching, 1=Write-Through caching
58 UINT64 CacheDisabled
:1; // 0 = Cached, 1=Non-Cached
59 UINT64 Accessed
:1; // 0 = Not accessed, 1 = Accessed (set by CPU)
60 UINT64 MustBeZero
:3; // Must Be Zero
61 UINT64 Available
:3; // Available for use by system software
62 UINT64 PageTableBaseAddress
:40; // Page Table Base Address
63 UINT64 AvabilableHigh
:11; // Available for use by system software
64 UINT64 Nx
:1; // No Execute bit
67 } X64_PAGE_DIRECTORY_ENTRY_4K
;
70 // Page Table Entry 4K
74 UINT64 Present
:1; // 0 = Not present in memory, 1 = Present in memory
75 UINT64 ReadWrite
:1; // 0 = Read-Only, 1= Read/Write
76 UINT64 UserSupervisor
:1; // 0 = Supervisor, 1=User
77 UINT64 WriteThrough
:1; // 0 = Write-Back caching, 1=Write-Through caching
78 UINT64 CacheDisabled
:1; // 0 = Cached, 1=Non-Cached
79 UINT64 Accessed
:1; // 0 = Not accessed, 1 = Accessed (set by CPU)
80 UINT64 Dirty
:1; // 0 = Not Dirty, 1 = written by processor on access to page
81 UINT64 PAT
:1; // 0 = Ignore Page Attribute Table
82 UINT64 Global
:1; // 0 = Not global page, 1 = global page TLB not cleared on CR3 write
83 UINT64 Available
:3; // Available for use by system software
84 UINT64 PageTableBaseAddress
:40; // Page Table Base Address
85 UINT64 AvabilableHigh
:11; // Available for use by system software
86 UINT64 Nx
:1; // 0 = Execute Code, 1 = No Code Execution
89 } X64_PAGE_TABLE_ENTRY_4K
;
92 // Page Table Entry 2M
96 UINT64 Present
:1; // 0 = Not present in memory, 1 = Present in memory
97 UINT64 ReadWrite
:1; // 0 = Read-Only, 1= Read/Write
98 UINT64 UserSupervisor
:1; // 0 = Supervisor, 1=User
99 UINT64 WriteThrough
:1; // 0 = Write-Back caching, 1=Write-Through caching
100 UINT64 CacheDisabled
:1; // 0 = Cached, 1=Non-Cached
101 UINT64 Accessed
:1; // 0 = Not accessed, 1 = Accessed (set by CPU)
102 UINT64 Dirty
:1; // 0 = Not Dirty, 1 = written by processor on access to page
103 UINT64 MustBe1
:1; // Must be 1
104 UINT64 Global
:1; // 0 = Not global page, 1 = global page TLB not cleared on CR3 write
105 UINT64 Available
:3; // Available for use by system software
107 UINT64 MustBeZero
:8; // Must be zero;
108 UINT64 PageTableBaseAddress
:31; // Page Table Base Address
109 UINT64 AvabilableHigh
:11; // Available for use by system software
110 UINT64 Nx
:1; // 0 = Execute Code, 1 = No Code Execution
113 } X64_PAGE_TABLE_ENTRY_2M
;