123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- /** @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 - 2010, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #include <PiPei.h>
- #include <Library/PeiServicesTablePointerLib.h>
- #include <Library/DebugLib.h>
- CONST EFI_PEI_SERVICES **gPeiServices;
- /**
- 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 CONST EFI_PEI_SERVICES **PeiServicesTablePointer
- )
- {
- ASSERT (PeiServicesTablePointer != NULL);
- gPeiServices = PeiServicesTablePointer;
- }
- /**
- 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.
- If the cached PEI Services Table pointer is NULL, then ASSERT().
- @return The pointer to PeiServices.
- **/
- CONST EFI_PEI_SERVICES **
- EFIAPI
- GetPeiServicesTablePointer (
- VOID
- )
- {
- ASSERT (gPeiServices != NULL);
- 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 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.
- **/
- EFI_STATUS
- EFIAPI
- PeiServicesTablePointerLibConstructor (
- 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;
- }
|