mirror of https://github.com/acidanthera/audk.git
Add support for PI1.2.1 TempRam Done PPI.
Signed-off-by: Liming Gao <liming.gao@intel.com> Reviewed-by: Jeff Fan <jeff.fan@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14846 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
d59fc24497
commit
fcfd5fb01b
|
@ -0,0 +1,52 @@
|
||||||
|
/** @file
|
||||||
|
This file declares Temporary RAM Done PPI.
|
||||||
|
The PPI that provides a service to disable the use of Temporary RAM.
|
||||||
|
|
||||||
|
Copyright (c) 2013, Intel Corporation. All rights reserved.<BR>
|
||||||
|
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.
|
||||||
|
|
||||||
|
@par Revision Reference:
|
||||||
|
This PPI is introduced in PI Version 1.2.
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#ifndef __TEMPORARY_RAM_DONE_H__
|
||||||
|
#define __TEMPORARY_RAM_DONE_H__
|
||||||
|
|
||||||
|
#define EFI_PEI_TEMPORARY_RAM_DONE_PPI_GUID \
|
||||||
|
{ 0xceab683c, 0xec56, 0x4a2d, { 0xa9, 0x6, 0x40, 0x53, 0xfa, 0x4e, 0x9c, 0x16 } }
|
||||||
|
|
||||||
|
/**
|
||||||
|
TemporaryRamDone() disables the use of Temporary RAM. If present, this service is invoked
|
||||||
|
by the PEI Foundation after the EFI_PEI_PERMANANT_MEMORY_INSTALLED_PPI is installed.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS Use of Temporary RAM was disabled.
|
||||||
|
@retval EFI_INVALID_PARAMETER Temporary RAM could not be disabled.
|
||||||
|
|
||||||
|
**/
|
||||||
|
typedef
|
||||||
|
EFI_STATUS
|
||||||
|
(EFIAPI * EFI_PEI_TEMPORARY_RAM_DONE) (
|
||||||
|
VOID
|
||||||
|
);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// This is an optional PPI that may be produced by SEC or a PEIM. If present, it provide a service to
|
||||||
|
/// disable the use of Temporary RAM. This service may only be called by the PEI Foundation after the
|
||||||
|
/// transition from Temporary RAM to Permanent RAM is complete. This PPI provides an alternative
|
||||||
|
/// to the Temporary RAM Migration PPI for system architectures that allow Temporary RAM and
|
||||||
|
/// Permanent RAM to be enabled and accessed at the same time with no side effects.
|
||||||
|
///
|
||||||
|
typedef struct _EFI_PEI_TEMPORARY_RAM_DONE_PPI {
|
||||||
|
EFI_PEI_TEMPORARY_RAM_DONE TemporaryRamDone;
|
||||||
|
} EFI_PEI_TEMPORARY_RAM_DONE_PPI;
|
||||||
|
|
||||||
|
extern EFI_GUID gEfiTemporaryRamDonePpiGuid;
|
||||||
|
|
||||||
|
#endif
|
|
@ -4,7 +4,7 @@
|
||||||
According to PI specification, the peiservice pointer is stored prior at IDT
|
According to PI specification, the peiservice pointer is stored prior at IDT
|
||||||
table in IA32 and x64 architecture.
|
table in IA32 and x64 architecture.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -20,6 +20,8 @@
|
||||||
#include <Library/BaseLib.h>
|
#include <Library/BaseLib.h>
|
||||||
#include <Library/PeiServicesTablePointerLib.h>
|
#include <Library/PeiServicesTablePointerLib.h>
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
|
#include <Library/BaseMemoryLib.h>
|
||||||
|
#include <Ppi/TemporaryRamSupport.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Retrieves the cached value of the PEI Services Table pointer.
|
Retrieves the cached value of the PEI Services Table pointer.
|
||||||
|
@ -67,11 +69,43 @@ SetPeiServicesTablePointer (
|
||||||
IN CONST EFI_PEI_SERVICES ** PeiServicesTablePointer
|
IN CONST EFI_PEI_SERVICES ** PeiServicesTablePointer
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
IA32_DESCRIPTOR Idtr;
|
IA32_DESCRIPTOR Idtr;
|
||||||
|
EFI_PHYSICAL_ADDRESS IdtBase;
|
||||||
|
EFI_STATUS Status;
|
||||||
|
EFI_PEI_TEMPORARY_RAM_SUPPORT_PPI *TemporaryRamSupportPpi;
|
||||||
|
|
||||||
ASSERT (PeiServicesTablePointer != NULL);
|
ASSERT (PeiServicesTablePointer != NULL);
|
||||||
AsmReadIdtr (&Idtr);
|
AsmReadIdtr (&Idtr);
|
||||||
(*(UINTN*)(Idtr.Base - sizeof (UINTN))) = (UINTN)PeiServicesTablePointer;
|
if ((*(UINTN*)(Idtr.Base - sizeof (UINTN))) != (UINTN)PeiServicesTablePointer) {
|
||||||
|
(*(UINTN*)(Idtr.Base - sizeof (UINTN))) = (UINTN)PeiServicesTablePointer;
|
||||||
|
Status = (*PeiServicesTablePointer)->LocatePpi (
|
||||||
|
PeiServicesTablePointer,
|
||||||
|
&gEfiTemporaryRamSupportPpiGuid,
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
(VOID**)&TemporaryRamSupportPpi
|
||||||
|
);
|
||||||
|
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
//
|
||||||
|
// If TemporaryRamSupportPpi is not found, Idt table needs to be migrated into memory.
|
||||||
|
//
|
||||||
|
Status = (*PeiServicesTablePointer)->AllocatePages (
|
||||||
|
PeiServicesTablePointer,
|
||||||
|
EfiBootServicesCode,
|
||||||
|
EFI_SIZE_TO_PAGES(Idtr.Limit + 1 + sizeof (UINTN)),
|
||||||
|
&IdtBase
|
||||||
|
);
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
|
//
|
||||||
|
// Migrate Idt table
|
||||||
|
//
|
||||||
|
CopyMem ((VOID *) (UINTN) IdtBase, (VOID *) (Idtr.Base - sizeof (UINTN)), Idtr.Limit + 1 + sizeof (UINTN));
|
||||||
|
Idtr.Base = (UINTN) IdtBase + sizeof (UINTN);
|
||||||
|
AsmWriteIdtr (&Idtr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
# PEI Services Table Pointer Library implementation that retrieves a pointer to the PEI
|
# PEI Services Table Pointer Library implementation that retrieves a pointer to the PEI
|
||||||
# Services Table from the IDT on IA-32 and x64.
|
# Services Table from the IDT on IA-32 and x64.
|
||||||
#
|
#
|
||||||
# Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
|
||||||
#
|
#
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
|
@ -39,6 +39,7 @@
|
||||||
[LibraryClasses]
|
[LibraryClasses]
|
||||||
DebugLib
|
DebugLib
|
||||||
BaseLib
|
BaseLib
|
||||||
|
BaseMemoryLib
|
||||||
|
|
||||||
|
[Ppis]
|
||||||
|
gEfiTemporaryRamSupportPpiGuid ## SOMETIMES_CONSUMES
|
||||||
|
|
|
@ -695,6 +695,9 @@
|
||||||
## Include/Ppi/PiPcd.h
|
## Include/Ppi/PiPcd.h
|
||||||
gEfiPeiPcdPpiGuid = { 0x1f34d25, 0x4de2, 0x23ad, { 0x3f, 0xf3, 0x36, 0x35, 0x3f, 0xf3, 0x23, 0xf1 } }
|
gEfiPeiPcdPpiGuid = { 0x1f34d25, 0x4de2, 0x23ad, { 0x3f, 0xf3, 0x36, 0x35, 0x3f, 0xf3, 0x23, 0xf1 } }
|
||||||
|
|
||||||
|
## Include/Ppi/TemporaryRamDone.h
|
||||||
|
gEfiTemporaryRamDonePpiGuid = { 0xceab683c, 0xec56, 0x4a2d, { 0xa9, 0x6, 0x40, 0x53, 0xfa, 0x4e, 0x9c, 0x16 } }
|
||||||
|
|
||||||
#
|
#
|
||||||
# PPIs defined in PI 1.3.
|
# PPIs defined in PI 1.3.
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in New Issue