X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=MdePkg%2FLibrary%2FPeiServicesTablePointerLib%2FPeiServicesTablePointer.c;h=04c283f4a652b89b938b983e89622465cf2f336b;hb=2f88bd3a1296c522317f1c21377876de63de5be7;hp=fd5bbe7192e2f9c81cb57cc627e5b25e7aa90974;hpb=5240b97c9c9e76994e86db11ff7cf140a74f2bd0;p=mirror_edk2.git
diff --git a/MdePkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointer.c b/MdePkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointer.c
index fd5bbe7192..04c283f4a6 100644
--- a/MdePkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointer.c
+++ b/MdePkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointer.c
@@ -1,17 +1,11 @@
/** @file
PEI Services Table Pointer Library.
-
+
This library is used for PEIM which does executed from flash device directly but
executed in memory.
- Copyright (c) 2006 - 2008, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+ Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -19,62 +13,97 @@
#include
#include
-STATIC EFI_PEI_SERVICES **gPeiServices;
+CONST EFI_PEI_SERVICES **gPeiServices;
/**
- The function cache the pointer of PEI services to global variable.
-
- @param PeiServices The address of PeiServices pointer.
+ Caches a pointer PEI Services Table.
+
+ Caches the pointer to the PEI Services Table specified by PeiServicesTablePointer
+ in a CPU specific manner as specified in the CPU binding section of the Platform Initialization
+ Pre-EFI Initialization Core Interface Specification.
+
+ If PeiServicesTablePointer is NULL, then ASSERT().
+
+ @param PeiServicesTablePointer The address of PeiServices pointer.
**/
VOID
EFIAPI
SetPeiServicesTablePointer (
- IN EFI_PEI_SERVICES **PeiServices
+ IN CONST EFI_PEI_SERVICES **PeiServicesTablePointer
)
{
- gPeiServices = PeiServices;
+ ASSERT (PeiServicesTablePointer != NULL);
+ gPeiServices = PeiServicesTablePointer;
}
/**
- The function returns the pointer to PEI services.
+ Retrieves the cached value of the PEI Services Table pointer.
+
+ Returns the cached value of the PEI Services Table pointer in a CPU specific manner
+ as specified in the CPU binding section of the Platform Initialization Pre-EFI
+ Initialization Core Interface Specification.
- The function returns the pointer to PEI services.
- It will ASSERT() if the pointer to PEI services is NULL.
+ If the cached PEI Services Table pointer is NULL, then ASSERT().
- @retval The pointer to PeiServices.
+ @return The pointer to PeiServices.
**/
CONST EFI_PEI_SERVICES **
+EFIAPI
GetPeiServicesTablePointer (
VOID
)
{
ASSERT (gPeiServices != NULL);
- return (CONST EFI_PEI_SERVICES **) gPeiServices;
+ return gPeiServices;
}
-
/**
The constructor function caches the pointer to PEI services.
-
+
The constructor function caches the pointer to PEI services.
It will always return EFI_SUCCESS.
- @param FileHandle Handle of FFS header the loaded driver.
- @param PeiServices Pointer to the PEI services.
+ @param FileHandle The handle of FFS header the loaded driver.
+ @param PeiServices The pointer to the PEI services.
- @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
+ @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
**/
EFI_STATUS
EFIAPI
PeiServicesTablePointerLibConstructor (
- IN EFI_PEI_FILE_HANDLE FileHandle,
- IN EFI_PEI_SERVICES **PeiServices
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ IN CONST EFI_PEI_SERVICES **PeiServices
)
{
gPeiServices = PeiServices;
return EFI_SUCCESS;
}
+/**
+ Perform CPU specific actions required to migrate the PEI Services Table
+ pointer from temporary RAM to permanent RAM.
+
+ For IA32 CPUs, the PEI Services Table pointer is stored in the 4 bytes
+ immediately preceding the Interrupt Descriptor Table (IDT) in memory.
+ For X64 CPUs, the PEI Services Table pointer is stored in the 8 bytes
+ immediately preceding the Interrupt Descriptor Table (IDT) in memory.
+ For Itanium and ARM CPUs, a the PEI Services Table Pointer is stored in
+ a dedicated CPU register. This means that there is no memory storage
+ associated with storing the PEI Services Table pointer, so no additional
+ migration actions are required for Itanium or ARM CPUs.
+**/
+VOID
+EFIAPI
+MigratePeiServicesTablePointer (
+ VOID
+ )
+{
+ //
+ // PEI Services Table pointer is cached in the global variable. No additional
+ // migration actions are required.
+ //
+ return;
+}