4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncof the BSD License which accompanies this distribution. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfull text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef _CAPSULE_PEIM_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _CAPSULE_PEIM_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <PiPei.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Uefi/UefiSpec.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Ppi/Capsule.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Ppi/LoadFile.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Ppi/ReadOnlyVariable2.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Guid/CapsuleVendor.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DebugLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/PeimEntryPoint.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/PeiServicesLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/BaseMemoryLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/HobLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/PeiServicesTablePointerLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/PrintLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/PeCoffLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/PeCoffGetEntryPointLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/PcdLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/ReportStatusCodeLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <IndustryStandard/PeImage.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "Common/CommonHeader.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef MDE_CPU_IA32
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#pragma pack(1)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Page-Map Level-4 Offset (PML4) and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Page-Directory-Pointer Offset (PDPE) entries 4K & 2MB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef union {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Present:1; // 0 = Not present in memory, 1 = Present in memory
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 ReadWrite:1; // 0 = Read-Only, 1= Read/Write
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 UserSupervisor:1; // 0 = Supervisor, 1=User
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 WriteThrough:1; // 0 = Write-Back caching, 1=Write-Through caching
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 CacheDisabled:1; // 0 = Cached, 1=Non-Cached
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Accessed:1; // 0 = Not accessed, 1 = Accessed (set by CPU)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Reserved:1; // Reserved
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 MustBeZero:2; // Must Be Zero
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Available:3; // Available for use by system software
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 PageTableBaseAddress:40; // Page Table Base Address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 AvabilableHigh:11; // Available for use by system software
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Nx:1; // No Execute bit
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } Bits;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Uint64;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PAGE_MAP_AND_DIRECTORY_POINTER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Page Table Entry 2MB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef union {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Present:1; // 0 = Not present in memory, 1 = Present in memory
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 ReadWrite:1; // 0 = Read-Only, 1= Read/Write
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 UserSupervisor:1; // 0 = Supervisor, 1=User
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 WriteThrough:1; // 0 = Write-Back caching, 1=Write-Through caching
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 CacheDisabled:1; // 0 = Cached, 1=Non-Cached
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Accessed:1; // 0 = Not accessed, 1 = Accessed (set by CPU)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Dirty:1; // 0 = Not Dirty, 1 = written by processor on access to page
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 MustBe1:1; // Must be 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Global:1; // 0 = Not global page, 1 = global page TLB not cleared on CR3 write
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Available:3; // Available for use by system software
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 PAT:1; //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 MustBeZero:8; // Must be zero;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 PageTableBaseAddress:31; // Page Table Base Address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 AvabilableHigh:11; // Available for use by system software
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Nx:1; // 0 = Execute Code, 1 = No Code Execution
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } Bits;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Uint64;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PAGE_TABLE_ENTRY;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Page Table Entry 1GB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef union {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Present:1; // 0 = Not present in memory, 1 = Present in memory
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 ReadWrite:1; // 0 = Read-Only, 1= Read/Write
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 UserSupervisor:1; // 0 = Supervisor, 1=User
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 WriteThrough:1; // 0 = Write-Back caching, 1=Write-Through caching
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 CacheDisabled:1; // 0 = Cached, 1=Non-Cached
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Accessed:1; // 0 = Not accessed, 1 = Accessed (set by CPU)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Dirty:1; // 0 = Not Dirty, 1 = written by processor on access to page
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 MustBe1:1; // Must be 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Global:1; // 0 = Not global page, 1 = global page TLB not cleared on CR3 write
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Available:3; // Available for use by system software
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 PAT:1; //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 MustBeZero:17; // Must be zero;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 PageTableBaseAddress:22; // Page Table Base Address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 AvabilableHigh:11; // Available for use by system software
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Nx:1; // 0 = Execute Code, 1 = No Code Execution
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } Bits;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Uint64;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PAGE_TABLE_1G_ENTRY;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#pragma pack()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(*COALESCE_ENTRY) (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PEI_SERVICES **PeiServices,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_CAPSULE_BLOCK_DESCRIPTOR *BlockList,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT VOID **MemoryBase,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT UINTN *MemorySize
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif