Home | History | Annotate | Download | only in X64
      1 /** @file
      2 
      3 Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
      4 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
      8 
      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.
     11 
     12 Module Name:
     13   VirtualMemory.h
     14 
     15 Abstract:
     16 
     17 Revision History:
     18 
     19 **/
     20 
     21 #ifndef _VIRTUAL_MEMORY_H_
     22 #define _VIRTUAL_MEMORY_H_
     23 
     24 #pragma pack(1)
     25 
     26 //
     27 // Page Map Level 4 Offset (PML4) and
     28 // Page Directory Pointer Table (PDPE) entries 4K & 2M
     29 //
     30 
     31 typedef union {
     32   struct {
     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
     45   } Bits;
     46   UINT64    Uint64;
     47 } X64_PAGE_MAP_AND_DIRECTORY_POINTER_2MB_4K;
     48 
     49 //
     50 // Page Directory Entry 4K
     51 //
     52 typedef union {
     53   struct {
     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
     65   } Bits;
     66   UINT64    Uint64;
     67 } X64_PAGE_DIRECTORY_ENTRY_4K;
     68 
     69 //
     70 // Page Table Entry 4K
     71 //
     72 typedef union {
     73   struct {
     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
     87   } Bits;
     88   UINT64    Uint64;
     89 } X64_PAGE_TABLE_ENTRY_4K;
     90 
     91 //
     92 // Page Table Entry 2M
     93 //
     94 typedef union {
     95   struct {
     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
    106     UINT64  PAT:1;                    //
    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
    111   } Bits;
    112   UINT64    Uint64;
    113 } X64_PAGE_TABLE_ENTRY_2M;
    114 
    115 #pragma pack()
    116 
    117 #endif
    118